[bitbake-devel] [PATCH] build.py: support custom task [progress] handlers
Richard Purdie
richard.purdie at linuxfoundation.org
Thu Feb 21 21:13:05 UTC 2019
On Wed, 2018-10-03 at 22:48 -0400, Chris Laplante via bitbake-devel
wrote:
> To use this mechanism, you need to inject your progress handler (i.e.
> something derived from bb.progress.ProgressHandler) into
> __builtins__.
> Here's one way to do it (from recipe-space):
>
> def install_my_progress_handler():
> from bb.progress import ProgressHandler
>
> class MyProgressHandler(ProgressHandler):
> pass
>
> if "MyProgressHandler" not in __builtins__:
> __builtins__["MyProgressHandler"] = MyProgressHandler
>
> return "OK"
>
> _INSTALL_MY_PROGRESS_HANDLERS := "${@install_my_progress_handler(
> )}"
Sorry about the lack of review.
My concern on this is the fact we have to poke around __builtins__. I
understand why, I just can't help wonder if there is a better way
somehow.
I'm not sure I have a better one, not sure if Chris or others might?
Cheers,
Richard
> To install on a task:
> do_task[progress] = "custom:MyProgressHandler"
>
> To install on a task and pass extra arguments:
> do_task[progress] = "custom:MyProgressHandler:my-arg"
>
> Signed-off-by: Chris Laplante <chris.laplante at agilent.com>
> ---
> lib/bb/build.py | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/lib/bb/build.py b/lib/bb/build.py
> index 3e2a94e..2e14572 100644
> --- a/lib/bb/build.py
> +++ b/lib/bb/build.py
> @@ -387,6 +387,14 @@ exit $ret
> elif progress.startswith('outof:'):
> # Use specified regex
> logfile = bb.progress.OutOfProgressHandler(d,
> regex=progress.split(':', 1)[1], outfile=logfile)
> + elif progress.startswith("custom:"):
> + # Use a custom progress handler
> + parts = progress.split(":", 2)
> + _, cls, otherargs = parts[0], parts[1], (parts[2] or
> None) if parts[2:] else None
> + if cls and cls in __builtins__:
> + logfile = __builtins__[cls](d, outfile=logfile,
> otherargs=otherargs)
> + else:
> + 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))
>
> --
> 2.7.4
>
More information about the bitbake-devel
mailing list