[oe-commits] Richard Purdie : packagedata/multilib: Fix search patch for multilib builds

git at git.openembedded.org git at git.openembedded.org
Wed Sep 26 13:53:43 UTC 2012


Module: openembedded-core.git
Branch: master
Commit: f50c5d36b2da9b36d56d95a7d89404509a1a3e9b
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=f50c5d36b2da9b36d56d95a7d89404509a1a3e9b

Author: Richard Purdie <richard.purdie at linuxfoundation.org>
Date:   Wed Sep 26 12:56:58 2012 +0100

packagedata/multilib: Fix search patch for multilib builds

The current multilib search path code for packagedata is flawed since it
doesn't correctly handle changes in the TARGET_VENDOR/TARGET_OS that
multilib may make. This patch enhances the code to correctly build the
search paths so multilib packagedata is found correctly.

Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>

---

 meta/classes/multilib.bbclass        |    2 -
 meta/classes/multilib_global.bbclass |    5 ++++
 meta/lib/oe/packagedata.py           |   42 ++++++++++++++++++++++++---------
 3 files changed, 35 insertions(+), 14 deletions(-)

diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index 7d5fc41..76cbac6 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -36,8 +36,6 @@ python multilib_virtclass_handler () {
     e.data.setVar("MLPREFIX", variant + "-")
     e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False))
     e.data.setVar("SHLIBSDIR_virtclass-multilib-" + variant ,e.data.getVar("SHLIBSDIR", False) + "/" + variant)
-    if e.data.getVar("TARGET_VENDOR_virtclass-multilib-" + variant, False) is None:
-	    e.data.setVar("TARGET_VENDOR_virtclass-multilib-" + variant, e.data.getVar("TARGET_VENDOR", False) + "ml" + variant)
     e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override)
 }
 
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index b76fd94..f55e3a2 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -2,6 +2,11 @@ python multilib_virtclass_handler_global () {
     if not e.data:
         return
 
+    if isinstance(e, bb.event.RecipePreFinalise):
+        for v in e.data.getVar("MULTILIB_VARIANTS", True).split():
+            if e.data.getVar("TARGET_VENDOR_virtclass-multilib-" + v, False) is None:
+	       e.data.setVar("TARGET_VENDOR_virtclass-multilib-" + v, e.data.getVar("TARGET_VENDOR", False) + "ml" + v)
+
     variant = e.data.getVar("BBEXTENDVARIANT", True)
 
     if isinstance(e, bb.event.RecipeParsed) and not variant:
diff --git a/meta/lib/oe/packagedata.py b/meta/lib/oe/packagedata.py
index 5f897ff..ce92a7e 100644
--- a/meta/lib/oe/packagedata.py
+++ b/meta/lib/oe/packagedata.py
@@ -23,21 +23,39 @@ def read_pkgdatafile(fn):
 
     return pkgdata
 
+def all_pkgdatadirs(d):
+    archs = []
+    tos = []
+    tvs = []
+
+    archs.append(d.getVar("PACKAGE_ARCHS", True).split())
+    tos.append(d.getVar("TARGET_OS", True))
+    tvs.append(d.getVar("TARGET_VENDOR", True))
+
+    variants = d.getVar("MULTILIB_VARIANTS", True) or ""
+    for item in variants.split():
+        localdata = bb.data.createCopy(d)
+        overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + item
+        localdata.setVar("OVERRIDES", overrides)
+        bb.data.update_data(localdata)
+
+        archs.append(localdata.getVar("PACKAGE_ARCHS", True).split())
+        tos.append(localdata.getVar("TARGET_OS", True))
+        tvs.append(localdata.getVar("TARGET_VENDOR", True))
+
+    dirs = []
+    for i in range(len(archs)):
+        for arch in archs[i]:
+            dirs.append(arch + tvs[i] + "-" + tos[i] + "/runtime/")
+    dirs.reverse()
+    return dirs 
+ 
 def get_subpkgedata_fn(pkg, d):
-    archs = d.expand("${PACKAGE_ARCHS}").split(" ")
-    mlarchs = d.getVar("MULTILIB_PACKAGE_ARCHS", d) or None
+    dirs = all_pkgdatadirs(d)
 
-    if mlarchs:
-        for mlarch in mlarchs.split(" "):
-            if "_" in mlarch:
-                prefix, split, new_arch = mlarch.partition("_")
-                archs.append(new_arch)
-
-    archs.reverse()
     pkgdata = d.expand('${TMPDIR}/pkgdata/')
-    targetdir = d.expand('${TARGET_VENDOR}-${TARGET_OS}/runtime/')
-    for arch in archs:
-        fn = pkgdata + arch + targetdir + pkg
+    for dir in dirs:
+        fn = pkgdata + dir + pkg
         if os.path.exists(fn):
             return fn
     return d.expand('${PKGDATA_DIR}/runtime/%s' % pkg)





More information about the Openembedded-commits mailing list