From: Quentin Schulz <quentin.schulz@cherry.de>
To: bijak.dawid@gmail.com, bitbake-devel@lists.openembedded.org
Cc: docs@lists.yoctoproject.org
Subject: Re: [docs] [PATCH 1/1] doc: bitbake-user-manual-metadata: fix inherit_defer documentation
Date: Mon, 27 Apr 2026 14:47:36 +0200 [thread overview]
Message-ID: <9720d93e-15c4-4deb-9fa5-1182d83b2e83@cherry.de> (raw)
In-Reply-To: <c25e0e9a-8809-4ac6-90ee-3687972e03af@cherry.de>
On 4/27/26 2:35 PM, Quentin Schulz wrote:
> Hi Dawid,
>
> On 4/24/26 8:23 AM, Dawid Bijak via lists.yoctoproject.org wrote:
>> [You don't often get email from
>> bijak.dawid=gmail.com@lists.yoctoproject.org. Learn why this is
>> important at https://aka.ms/LearnAboutSenderIdentification ]
>>
>> The documentation for inherit_defer contained the claim
>>
>> "If VARNAME is going to be set, it needs to be set before the
>> inherit_defer statement is parsed"
>>
>> which is incorrect and contradicts the purpose of inherit_defer.
>> The wrong claim is replaced with an example which demonstrates
>> the contrast between a plain defer statement and the inherit_defer
>> statement by using an override assignment placed after inherit_defer
>>
>> Additionally the inline python expression examples have been
>> moved from the inherit_defer section up to the inherit section, since
>> they apply to both directives
>>
>
> I'm pretty sure the whole inherit_defer thing started because an inline
> Python expression didn't work. I vaguely remember a bbappend either
> adding this new inherit based on PACKAGECONFIG containing a value, or
> having the main recipe with this inherit <PACKAGECONFIG.contains> and a
> bbappend modify PACKAGECONFIG. See commit 5c2e840eafeb ("ast/BBHandler:
> Add inherit_defer support") in BitBake.
>
> So I'm very skeptical this is correct.
>
>> Also add an anti-example showing that the previously documented
>> pattern of setting the inherited class name from an anonymous
>> Python function does not work with inherit_defer.
>>
>> Signed-off-by: Dawid Bijak <bijak.dawid@gmail.com>
>> ---
>> .../bitbake-user-manual-metadata.rst | 61 ++++++++++---------
>> 1 file changed, 32 insertions(+), 29 deletions(-)
>>
>> diff --git a/doc/bitbake-user-manual/bitbake-user-manual-metadata.rst
>> b/doc/bitbake-user-manual/bitbake-user-manual-metadata.rst
>> index 40cae6b05..38efe6b11 100644
>> --- a/doc/bitbake-user-manual/bitbake-user-manual-metadata.rst
>> +++ b/doc/bitbake-user-manual/bitbake-user-manual-metadata.rst
>> @@ -803,7 +803,17 @@ An advantage with the inherit directive as
>> compared to both the
>> :ref:`include <bitbake-user-manual/bitbake-user-manual-metadata:
>> \`\`include\`\` directive>` and :ref:`require <bitbake-user-manual/
>> bitbake-user-manual-metadata:\`\`require\`\` directive>`
>> directives is that you can inherit class files conditionally. You can
>> accomplish this by using a variable expression after the ``inherit``
>> -statement.
>> +statement, as in::
>> +
>> + inherit ${@'classname' if condition else ''}
>> +
>> +Or::
>> +
>> + inherit ${@bb.utils.contains('VARIABLE', 'something', 'classname',
>> '', d)}
>> +
>> +In both cases, if the expression evaluates to an
>> +empty string, the statement does not trigger a syntax error because it
>> +becomes a no-op.
>>
>> For inheriting classes conditionally, using the :ref:`inherit_defer
>> <ref-bitbake-user-manual-metadata-inherit-defer>` directive is
>> advised as
>> @@ -827,39 +837,32 @@ the variable after the line is parsed will take
>> effect. With the :ref:`inherit
>>
>> Here is an example::
>>
>> - inherit_defer ${VARNAME}
>> -
>> -If ``VARNAME`` is
>> -going to be set, it needs to be set before the ``inherit_defer``
>> statement is
>> -parsed. One way to achieve a conditional inherit in this case is to use
>> -overrides::
>> -
>> VARIABLE = ""
>> - VARIABLE:someoverride = "myclass"
>> -
>> -Another method is by using :ref:`anonymous Python
>> -<bitbake-user-manual/bitbake-user-manual-metadata:Anonymous Python
>> Functions>`.
>> -Here is an example::
>> + inherit_defer ${VARIABLE}
>> + VARIABLE:someoverride = "someclass"
>> +
>> +:ref:`inherit_defer <ref-bitbake-user-manual-metadata-inherit-defer>`
>> +defers the evaluation of ``${VARIABLE}`` until the end of
>> +parsing. Assuming ``someoverride`` is in :term:`OVERRIDES`,
>> ``${VARIABLE}``
>> +expands to ``someclass``, which is then inherited. Contrast this with
>> a plain
>> +:ref:`inherit <ref-bitbake-user-manual-metadata-inherit>`, which
>> would evaluate
>> +``${VARIABLE}`` immediately, before the ``VARIABLE:someoverride``
>> assignment
>> +is parsed. ``${VARIABLE}`` would expand to an empty string and the
>> statement
>> +would become a no-op.
>> +
>> +Note that assigning the variable from an
>> +:ref:`anonymous Python function <bitbake-user-manual/bitbake-user-
>> manual-metadata:Anonymous Python Functions>`
>> +does *not* work, because deferred inherits are resolved before anonymous
>> +Python functions run::
>>
>
> I vaguely remember reading on IRC we're having some issues with
> anonymous Python functions and parsing lately, so that may be related to
> that. I haven't followed anything in that area so maybe I'm wrong or it
> has already been fixed. So I'm not sure if you just happen to try this
> when things were broken in BitBake or if it's really intended to work
> that way.
>
Reading my mail backlog, I just stumbled upon
https://lore.kernel.org/openembedded-core/CANPvuRk19e3PhcVXxLUJTjaPE9bMXO-04MLytqGNpA0=PEzeeA@mail.gmail.com/
where Jose links to
https://git.openembedded.org/openembedded-core/commit/?id=6b553a5042b9d5828a9da675ede16e10f06dae90
which does indeed mention this is a known limitation:
"""
Anonymous python is executed after all inherits including deferred
inherits are processed.
"""
So this part is fine :)
Cheers,
Quentin
next prev parent reply other threads:[~2026-04-27 12:47 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-24 6:23 [PATCH 0/1] doc: bitbake-user-manual-metadata: clarify inherit_defer documentation Dawid Bijak
2026-04-24 6:23 ` [PATCH 1/1] doc: bitbake-user-manual-metadata: fix " Dawid Bijak
2026-04-27 12:35 ` [docs] " Quentin Schulz
2026-04-27 12:47 ` Quentin Schulz [this message]
2026-04-27 18:14 ` Dawid Bijak
2026-04-28 20:42 ` [bitbake-devel] " Richard Purdie
2026-04-29 14:11 ` Dawid Bijak
2026-04-29 14:24 ` Quentin Schulz
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=9720d93e-15c4-4deb-9fa5-1182d83b2e83@cherry.de \
--to=quentin.schulz@cherry.de \
--cc=bijak.dawid@gmail.com \
--cc=bitbake-devel@lists.openembedded.org \
--cc=docs@lists.yoctoproject.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