Patchwork base.bbclass: Fix PACKAGECONFIG issues with native and nativesdk BBCLASSEXTEND recipes (and multilib)

login
register
mail settings
Submitter Richard Purdie
Date April 12, 2012, 1:04 p.m.
Message ID <1334235858.7309.34.camel@ted>
Download mbox | patch
Permalink /patch/25661/
State Accepted
Commit 46db11c4a789034b7040faf127ab865148bedad8
Headers show

Comments

Richard Purdie - April 12, 2012, 1:04 p.m.
This patch fixes up the issues that were being seen where BBCLASSEXTEND and
PACKAGECONFIG were interacting badly. It also ensures PACKAGECONFIG interacts
properly with multilib builds.

Ideally some of this code will be abstracted into lib/oe/classextend.py but
at this point in release more invasive changes like this are inappropriate.

This patch also removed empty strings from expressions rather than
passing them around as this was complicating the additional code
unnecessarily.

The patch was verified against the OE-Core metadata where the return values of 
expandFilter() were sanity checked by hand for native/nativesdk and
multilib combinations.

[YOCTO #2225]

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
Martin Jansa - April 13, 2012, 12:43 p.m.
On Thu, Apr 12, 2012 at 02:04:18PM +0100, Richard Purdie wrote:
> This patch fixes up the issues that were being seen where BBCLASSEXTEND and
> PACKAGECONFIG were interacting badly. It also ensures PACKAGECONFIG interacts
> properly with multilib builds.
> 
> Ideally some of this code will be abstracted into lib/oe/classextend.py but
> at this point in release more invasive changes like this are inappropriate.
> 
> This patch also removed empty strings from expressions rather than
> passing them around as this was complicating the additional code
> unnecessarily.
> 
> The patch was verified against the OE-Core metadata where the return values of 
> expandFilter() were sanity checked by hand for native/nativesdk and
> multilib combinations.

I can confirm it also fixes gtk+-native depends, cannot do more tests
now.

meta-oe people could be interested in this patch
http://git.openembedded.org/meta-openembedded-contrib/commit/?h=jansa/xorg&id=1ab99af784f5f1564f28f6afc4718d630b42a606
when this change hits oe-core

> [YOCTO #2225]
> 
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
> diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
> index 2e8a0b0..3c9d76c 100644
> --- a/meta/classes/base.bbclass
> +++ b/meta/classes/base.bbclass
> @@ -305,9 +305,32 @@ python () {
>      pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
>      if pkgconfigflags:
>          pkgconfig = (d.getVar('PACKAGECONFIG', True) or "").split()
> +        pn = d.getVar("PN", True)
> +        mlprefix = d.getVar("MLPREFIX", True)
> +
> +        def expandFilter(appends, extension, prefix):
> +            appends = bb.utils.explode_deps(d.expand(" ".join(appends)))
> +            newappends = []
> +            for a in appends:
> +               if a.endswith("-native") or a.endswith("-cross"):
> +                   newappends.append(a)
> +               elif a.startswith("virtual/"):
> +                   subs = a.split("/", 1)[1]
> +                   newappends.append("virtual/" + prefix + subs + extension)
> +               else:
> +                   newappends.append(prefix + a + extension)
> +            return newappends
> +
>          def appendVar(varname, appends):
>              if not appends:
>                  return
> +            if varname.find("DEPENDS") != -1:
> +                if pn.endswith("-nativesdk"):
> +                    appends = expandFilter(appends, "-nativesdk", "")
> +                if pn.endswith("-native"):
> +                    appends = expandFilter(appends, "-native", "")
> +                if mlprefix:
> +                    appends = expandFilter(appends, "", mlprefix)
>              varname = d.expand(varname)
>              d.appendVar(varname, " " + " ".join(appends))
>  
> @@ -324,11 +347,14 @@ python () {
>              elif len(items) == 4:
>                  enable, disable, depend, rdepend = items
>              if flag in pkgconfig:
> -                extradeps.append(depend)
> -                extrardeps.append(rdepend)
> -                extraconf.append(enable)
> -            else:
> -                extraconf.append(disable)
> +                if depend:
> +                    extradeps.append(depend)
> +                if rdepend:
> +                    extrardeps.append(rdepend)
> +                if enable:
> +                    extraconf.append(enable)
> +            elif disable:
> +                    extraconf.append(disable)
>          appendVar('DEPENDS', extradeps)
>          appendVar('RDEPENDS_${PN}', extrardeps)
>          appendVar('EXTRA_OECONF', extraconf)
> 
> 
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Patch

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 2e8a0b0..3c9d76c 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -305,9 +305,32 @@  python () {
     pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
     if pkgconfigflags:
         pkgconfig = (d.getVar('PACKAGECONFIG', True) or "").split()
+        pn = d.getVar("PN", True)
+        mlprefix = d.getVar("MLPREFIX", True)
+
+        def expandFilter(appends, extension, prefix):
+            appends = bb.utils.explode_deps(d.expand(" ".join(appends)))
+            newappends = []
+            for a in appends:
+               if a.endswith("-native") or a.endswith("-cross"):
+                   newappends.append(a)
+               elif a.startswith("virtual/"):
+                   subs = a.split("/", 1)[1]
+                   newappends.append("virtual/" + prefix + subs + extension)
+               else:
+                   newappends.append(prefix + a + extension)
+            return newappends
+
         def appendVar(varname, appends):
             if not appends:
                 return
+            if varname.find("DEPENDS") != -1:
+                if pn.endswith("-nativesdk"):
+                    appends = expandFilter(appends, "-nativesdk", "")
+                if pn.endswith("-native"):
+                    appends = expandFilter(appends, "-native", "")
+                if mlprefix:
+                    appends = expandFilter(appends, "", mlprefix)
             varname = d.expand(varname)
             d.appendVar(varname, " " + " ".join(appends))
 
@@ -324,11 +347,14 @@  python () {
             elif len(items) == 4:
                 enable, disable, depend, rdepend = items
             if flag in pkgconfig:
-                extradeps.append(depend)
-                extrardeps.append(rdepend)
-                extraconf.append(enable)
-            else:
-                extraconf.append(disable)
+                if depend:
+                    extradeps.append(depend)
+                if rdepend:
+                    extrardeps.append(rdepend)
+                if enable:
+                    extraconf.append(enable)
+            elif disable:
+                    extraconf.append(disable)
         appendVar('DEPENDS', extradeps)
         appendVar('RDEPENDS_${PN}', extrardeps)
         appendVar('EXTRA_OECONF', extraconf)