Patchwork [RFC,1/3] base.bbclass: Run oe_import before other INHERITs

login
register
mail settings
Submitter Richard Purdie
Date March 26, 2014, 9:30 a.m.
Message ID <1395826233.24890.81.camel@ted>
Download mbox | patch
Permalink /patch/69241/
State New
Headers show

Comments

Richard Purdie - March 26, 2014, 9:30 a.m.
Its possible for classes listed in INHERIT directives to use things like
the oe.utils functions. If that happens the user sees a traceback since
the modules don't become available until the ConfigParsed event.

Whilst rather ugly, this change means that the oe modules become available
much sooner and can be used in the core classes, including within base.bbclass.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
Chris Larson - March 26, 2014, 3:34 p.m.
On Wed, Mar 26, 2014 at 2:30 AM, Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> +# We need the oe module name space early (before INHERITs get added)
> +# and whilst ugly, abusing inherit like this is quite effective
> +BASEIMPORTS = "${@oe_import(d)}"
> +inherit ${BASEIMPORTS}
>

Wouldn't OE_IMPORTED := "${@oe_import(d)}" work as well, or am I missing
something?
Richard Purdie - March 26, 2014, 3:55 p.m.
On Wed, 2014-03-26 at 08:34 -0700, Chris Larson wrote:
> 
> On Wed, Mar 26, 2014 at 2:30 AM, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
>         +# We need the oe module name space early (before INHERITs get
>         added)
>         +# and whilst ugly, abusing inherit like this is quite
>         effective
>         +BASEIMPORTS = "${@oe_import(d)}"
>         +inherit ${BASEIMPORTS}
> 
> Wouldn't OE_IMPORTED := "${@oe_import(d)}" work as well, or am I
> missing something?

That would work as well. I just came to the other solution though a
different route... :)

Cheers,

Richard

Patch

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 76a4ef6..f085173 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -31,8 +31,14 @@  def oe_import(d):
         imported = __import__(toimport)
         inject(toimport.split(".", 1)[0], imported)
 
+    return ""
+
+# We need the oe module name space early (before INHERITs get added)
+# and whilst ugly, abusing inherit like this is quite effective
+BASEIMPORTS = "${@oe_import(d)}"
+inherit ${BASEIMPORTS}
+
 python oe_import_eh () {
-    oe_import(e.data)
     e.data.setVar("NATIVELSBSTRING", lsb_distro_identifier(e.data))
 }