bitbake: event: Add event for deferred inherits

Now that deferred inherits are extension specific, we can pass this
list to an event, which our metadata can use to set class overrides
earlier (as an example).

There are limitations to this, the list of classes is unexpanded and
recursive classes are not visible. There isn't much that can be done
about this, the ones we are interested in would usually be visible
at the top level (such as class extensions).

(Bitbake rev: 205d461c05fc7b4a7c81039af3bc3fd71cbb982c)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2025-06-06 11:45:45 +01:00
parent f2a15854e2
commit e20af03c02
2 changed files with 13 additions and 0 deletions

View File

@ -431,6 +431,16 @@ class RecipeEvent(Event):
self.fn = fn
Event.__init__(self)
class RecipePreDeferredInherits(RecipeEvent):
"""
Called before deferred inherits are processed so code can snoop on class extensions for example
Limitations: It won't see inherits of inherited classes and the data is unexpanded
"""
def __init__(self, fn, inherits):
self.fn = fn
self.inherits = inherits
Event.__init__(self)
class RecipePreFinalise(RecipeEvent):
""" Recipe Parsing Complete but not yet finalised"""

View File

@ -471,6 +471,9 @@ def finalize(fn, d, variant = None):
if d.getVar("_FAILPARSINGERRORHANDLED", False) == True:
raise bb.BBHandledException()
inherits = [x[0] for x in (d.getVar('__BBDEFINHERITS', False) or [('',)])]
bb.event.fire(bb.event.RecipePreDeferredInherits(fn, inherits), d)
while True:
inherits = d.getVar('__BBDEFINHERITS', False) or []
if not inherits: