mirror of
https://git.yoctoproject.org/poky
synced 2026-04-21 12:32:15 +02:00
bitbake: build: implement custom progress handlers injected via OE_EXTRA_IMPORTS
A separate patch to base.bbclass (in poky) will add the OE_EXTRA_IMPORTS
variable. The contents are appended into OE_IMPORTS. This provides a
mechanism by which layers (in their layer.conf) can make custom progress
handlers available.
As a backup, individual recipes can inject progress handlers into
__builtins__.
Custom handlers are expected to have this __init__ signature:
def __init__(self, d, outfile=None, otherargs=None):
Recipes can then use the handlers like this:
do_task[progress] = "custom:mylayer.util.ProgressHandler[:args]"
The last part (everything after and including the second colon) is
optional. If provided, it is passed to HandlerClass's __init__ as
otherargs="args". Otherwise, otherargs=None.
(Bitbake rev: 20289d62c84c393990dd3deb0cca1b17c09092e6)
Signed-off-by: Chris Laplante <chris.laplante@agilent.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
7687469590
commit
f77badd46a
@@ -356,6 +356,27 @@ def create_progress_handler(func, progress, logfile, d):
|
||||
elif progress.startswith('outof:'):
|
||||
# Use specified regex
|
||||
return bb.progress.OutOfProgressHandler(d, regex=progress.split(':', 1)[1], outfile=logfile)
|
||||
elif progress.startswith("custom:"):
|
||||
# Use a custom progress handler that was injected via OE_EXTRA_IMPORTS or __builtins__
|
||||
import functools
|
||||
from types import ModuleType
|
||||
|
||||
parts = progress.split(":", 2)
|
||||
_, cls, otherargs = parts[0], parts[1], (parts[2] or None) if parts[2:] else None
|
||||
if cls:
|
||||
def resolve(x, y):
|
||||
if not x:
|
||||
return None
|
||||
if isinstance(x, ModuleType):
|
||||
return getattr(x, y, None)
|
||||
return x.get(y)
|
||||
cls_obj = functools.reduce(resolve, cls.split("."), bb.utils._context)
|
||||
if not cls_obj:
|
||||
# Fall-back on __builtins__
|
||||
cls_obj = functools.reduce(lambda x, y: x.get(y), cls.split("."), __builtins__)
|
||||
if cls_obj:
|
||||
return cls_obj(d, outfile=logfile, otherargs=otherargs)
|
||||
bb.warn('%s: unknown custom progress handler in task progress varflag value "%s", ignoring' % (func, cls))
|
||||
else:
|
||||
bb.warn('%s: invalid task progress varflag value "%s", ignoring' % (func, progress))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user