public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
From: "Peter Kjellerstedt" <peter.kjellerstedt@axis.com>
To: Mark Hatle <mark.hatle@kernel.crashing.org>,
	"openembedded-core@lists.openembedded.org"
	<openembedded-core@lists.openembedded.org>
Subject: Re: [OE-core] How to create a directory in multiple packages?
Date: Tue, 15 Dec 2020 14:24:38 +0000	[thread overview]
Message-ID: <503f4c44699844c588fe68cd6e45296b@XBOX03.axis.com> (raw)
In-Reply-To: <6df31263-e880-19a8-10ed-7ec6a8a2b5ba@kernel.crashing.org>

> -----Original Message-----
> From: openembedded-core@lists.openembedded.org <openembedded-
> core@lists.openembedded.org> On Behalf Of Mark Hatle
> Sent: den 15 december 2020 02:02
> To: openembedded-core@lists.openembedded.org
> Subject: Re: [OE-core] How to create a directory in multiple packages?
> 
> On 12/14/20 11:43 AM, Peter Kjellerstedt wrote:
> > Say we have a recipe that creates an empty /etc/foo directory. Now we
> > want to add a new file in that directory /etc/foo/bar and package it as
> > ${PN}-bar. This means the creation of the /etc/foo directory is moved
> > from the ${PN} package to the ${PN}-bar package. Is there any way to
> > make ${PN} continue to create an empty /etc/foo, or is the only
> > alternative to introduce an /etc/foo/.dummy and package it in ${PN}?
> 
> try adjust the order of the PACKAGES variant.  Something like:
> 
> PACKAGES = "${PN}-bar ... ${PN}"
> 
> FILES_${PN}-bar = "/etc/foo/bar"
> FILES_${PN} = "/etc/foo"
> 
> That SHOULD package the file 'bar' in -bar, and the directory in ${PN}.

Unfortunately that does not work (seems bitbake is too smart). What I have 
is basically:

PACKAGE_BEFORE_PN = "${PN}-bar"
FILES_${PN} += "${sysconfdir}/foo"
FILES_${PN}-bar = "${sysconfdir}/foo/bar"

which results in the following in the spec file:

%files -n foo-bar
%defattr(-,-,-,-)
%dir "/etc"
%dir "/etc/foo"
"/etc/foo/bar"

There is nothing else about /etc or /etc/foo in the spec file.

After delving into the code for at bit, I believe this is due to how 
populate_packages() works. When it handles the ${PN}-bar package and 
finds the /etc/foo/bar file, it will also mark /etc and /etc/foo as  
seen, which means they will not be added to any other package, unless 
that package has an entry for some other /etc/foo/something file, even 
if /etc/foo is explicitly listed in, e.g., FILES_${PN}.

So for now, it seems we will have to resort to using a pkg_postinst_${PN}.

> (Some of the people commenting this isn't less then optimal, actually
> it's not that unusual.. Typical case I see is creating a directory in 
> /var or /usr/share for datafiles and the main package owns the directory, 
> with sub-packages [or other packages] contributing data into that 
> directory.)

Yes, there are reason why the empty directory needs to be installed as 
part of the image. Otherwise I would just have used a file in 
"/usr/lib/tmpfiles.d".

> --Mark
> 
> > //Peter

//Peter


  reply	other threads:[~2020-12-15 14:24 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-14 17:43 How to create a directory in multiple packages? Peter Kjellerstedt
2020-12-14 17:46 ` [OE-core] " Robert P. J. Day
2020-12-14 18:20   ` Konrad Weihmann
2020-12-15  1:01 ` Mark Hatle
2020-12-15 14:24   ` Peter Kjellerstedt [this message]
2020-12-15 22:05     ` Mark Hatle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=503f4c44699844c588fe68cd6e45296b@XBOX03.axis.com \
    --to=peter.kjellerstedt@axis.com \
    --cc=mark.hatle@kernel.crashing.org \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox