public inbox for docs@lists.yoctoproject.org
 help / color / mirror / Atom feed
From: Quentin Schulz <quentin.schulz@cherry.de>
To: Antonin Godard <antonin.godard@bootlin.com>, docs@lists.yoctoproject.org
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [docs] [PATCH] overview-manual: concepts: add details on package splitting
Date: Fri, 18 Oct 2024 14:37:10 +0200	[thread overview]
Message-ID: <a12053eb-d666-4e9b-ab7b-003a3805c25c@cherry.de> (raw)
In-Reply-To: <D4XY661A30GQ.3E4DMVXPCZRZ@bootlin.com>

Hi Antonin,

On 10/17/24 10:44 AM, Antonin Godard wrote:
> Hi Quentin,
> 
> Thanks for the great comments :)
> 
> On Wed Oct 16, 2024 at 4:10 PM CEST, Quentin Schulz wrote:
>> Hi Antonin,
>>
>> On 10/16/24 3:19 PM, Antonin Godard via lists.yoctoproject.org wrote:
[...]
>> Additionally, I think PN-dev does not represent the development variant
>> of the main package, it represents the files that are useful for
>> developing an application depending on PN main package. Using "variant"
>> seems to indicate that PN-dev could be self-sufficient and potentially
>> have the same binaries/shlibs than in PN but compiled differently.
> 
> That's correct, 'variant' is misleading here. In the end, what about:
> 
> """
> For example, the package ``${PN}-dev`` represents files useful to the
> development of applications depending on ``${PN}``. The default list of files
> for ``${PN}-dev``, also defined in :oe_git:`meta/conf/bitbake.conf
> </openembedded-core/tree/meta/conf/bitbake.conf>`, is defined as follows::
> """
> 

Looks fine to me. A small nitpick here is that it's not necessarily ONLY 
for ${PN}, e.g. if we have more than one package containing 
binaries/shlibs. But at the same time, if a recipe has multiple of such 
packages, it could make sense to have their counterpart in -dev, -src, 
-dbg as well. Anyway, just a random thought but I think this is good 
enough and not really misleading :)

>>> +contains development-oriented files only::
>>> +
>>> +  FILES:${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \
>>> +                  ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \
>>> +                  ${datadir}/aclocal ${base_libdir}/*.o \
>>> +                  ${libdir}/${BPN}/*.la ${base_libdir}/*.la \
>>> +                  ${libdir}/cmake ${datadir}/cmake"
>>> +
>>> +The paths in this list must be *absolute*, and must use the path prefixes
>>
>> There is a very important piece of information that needs to be added
>> here and a source of many newcomers' mistake: these are absolute paths
>> from the PoV of the root of the filesystem on the target, NOT from bitbake.
>>
>> Indeed, in do_install (and do_package, etc.) we need to prefix our paths
>> with $D (and $PKGD/$PKGDEST) when installing/packaging files, however,
>> FILES doesn't not need those, even more it should NOT have those.
> 
> You're right, will change to:
> 
> """
> The paths must use the path prefixes defined by the
> :oe_git:`meta/conf/bitbake.conf </openembedded-core/tree/meta/conf/bitbake.conf>`
> configuration file, such as ``${sysconfdir}``, ``${bindir}``, etc.
> 
> The paths in this list must be *absolute* paths from the point of view of the
> root filesystem on the target. For example, assuming the following path is
> added to the :term:`FILES` variable::
> 
>    ${sysconfdir}/foo.conf
> 
> In a later phase of the build system, the created package will be used to
> install the file ``/etc/foo.conf`` on the target, since ``${sysconfdir}``
> equals to ``/etc`` (unless explicitely overwritten).
> """
> 

Note sure the last paragraph makes a lot of sense in that context, I 
would simply remove it. I realize that I may have mislead you in my 
suggestion, it was intended to be a justification as to why I think this 
mistakes happen often, because we often have an additional variable in 
front of the path as one would see it on the target.

I would add a note to make it extra clear that ${D} should NOT be added 
to it. It's implied here by "omission" but I've seen this happen too 
many times that I would really suggest adding a note for that common 
mistake :)

[...]

>>> +file matching a pattern specified in the corresponding :term:`FILES` definition
>>> +will be included in the package and *excluded* for the remaining packages listed
>>> +in :term:`PACKAGES`. As a consequence, custom packages should be added using the
>>
>> I could suggest:
>> """
>> A given file can only ever be in one package. Therefore, the first (from
>> leftmost to rightmost in :term:`PACKAGES`) package for which the given
>> file matches a path from its :term:`FILES` will contain the given file.
>> """
>>
>> Still a bit too complex of a sentence but couldn't come up with anything
>> better for now.
> 
> How about:
> 
> """
> A given file can only ever be in one package. By iterating from the
> leftmost to rightmost package in :term:`PACKAGES`, each file matching one of the
> pattern defined in the corresponding :term:`FILES` definition is included in the

s/pattern/patterns/

> package. At the end of package splitting, all the remaining files are stored in
> the base ``${PN}`` package.
> 

Is that true? I'm pretty sure you get a warning/build failure if a file 
is not in any package. It just happens that most common paths are in 
FILES:${PN} but I don't think there's anything making bitbake have PN a 
catch-all package?

This would also mean it'd make no sense to have a package listed on the 
right side of PN in PACKAGES, but that's a valid use-case for anything 
not matching any prior FILES:. But maybe I'm misremembering :)

> The result of package splitting is stored in the :term:`PKGDEST` directory, and
> contains one directory per package.

Not sure if that isn't too advanced already for something in the 
overview-manual.

I guess we could tell the user how to find out in which package a file is?

oe-pkgdata-util find-path '/etc/foo.conf'

should do that if I remember correctly.

> """
> 
>>> +prepend operator (``=+``) to be prioritized.
>>> +
>>
>> I am not sure it is wise to say "prepend" operator as we have three ways
>> of prepending:
>> - =+
>> - =.
>> - :prepend
>>
>> But since you explicit which one you're talking about, I guess it's
>> fine? The bitbake docs only says "=+" operator apparently:
>> https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-metadata.html#appending-and-prepending-with-spaces
> 
> I think using the "prepend operator" + showing it in parenthesis makes sense
> here, as newcomers may not be aware that it is used for prepending (there is no
> explanation on operators in this document).
> 

Fair enough.

Cheers,
Quentin


  reply	other threads:[~2024-10-18 12:37 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-16 13:19 [PATCH] overview-manual: concepts: add details on package splitting Antonin Godard
2024-10-16 14:10 ` [docs] " Quentin Schulz
2024-10-17  8:44   ` Antonin Godard
2024-10-18 12:37     ` Quentin Schulz [this message]
2024-10-22 11:54       ` Antonin Godard
2024-10-22 12:02         ` Quentin Schulz
2024-10-22 13:08           ` Antonin Godard

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=a12053eb-d666-4e9b-ab7b-003a3805c25c@cherry.de \
    --to=quentin.schulz@cherry.de \
    --cc=antonin.godard@bootlin.com \
    --cc=docs@lists.yoctoproject.org \
    --cc=thomas.petazzoni@bootlin.com \
    /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