[bitbake-devel] [PATCH] build.py: support custom task [progress] handlers

Christopher Larson kergoth at gmail.com
Thu Feb 21 21:45:44 UTC 2019


This is a great idea, thanks a lot for contribution. As Richard says, I
think using and hardcoding __builtins__ as the injection point isn’t ideal.
Ideally I think we'd be able to provide a python module in a layer with the
progress handler, let OE_IMPORTS import it, and then let bitbake use it as
is.

I think we just need to tweak it to accept the full name with imports, i.e.
custom:oe.myprogressmodule.MyProgressHandler. Then if you want to inject it
you can (though I think bb.context is better than __builtins__), or use an
imported module, whichever is preferred, rather than hardcoding the context.

Something like `functools.reduce(lambda x, y: x[y], cls.split("."),
globals())` might do for resolving the dot-separated name to the class
object, assuming it’s already been imported.

On Thu, Feb 21, 2019 at 2:13 PM Richard Purdie <
richard.purdie at linuxfoundation.org> wrote:

> 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
> >
>
> --
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel
>


-- 
Christopher Larson
kergoth at gmail dot com
Founder - BitBake, OpenEmbedded, OpenZaurus
Senior Software Engineer, Mentor Graphics
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/bitbake-devel/attachments/20190221/8ec5b208/attachment.html>


More information about the bitbake-devel mailing list