]> code.ossystems Code Review - openembedded-core.git/commitdiff
multilib_global: handle REQUIRED_VERSION
authorCharlie Davies <charles.davies@whitetree.xyz>
Thu, 18 Feb 2021 20:52:21 +0000 (20:52 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 15 Mar 2021 14:37:42 +0000 (14:37 +0000)
Add logic to multilib_global.bbclass to handle new REQUIRED_VERSION
variable.

Fixes [YOCTO #10096]

Signed-off-by: Charlie Davies <charles.davies@whitetree.xyz>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/multilib_global.bbclass

index 98f65c8aae2ec4c30f9f1a6ccd37b9f570f4b779..96257de5ca0e2db3479088427ca22ed3b1946785 100644 (file)
@@ -1,6 +1,7 @@
 def preferred_ml_updates(d):
-    # If any PREFERRED_PROVIDER or PREFERRED_VERSION are set,
-    # we need to mirror these variables in the multilib case;
+    # If any of PREFERRED_PROVIDER, PREFERRED_RPROVIDER, REQUIRED_VERSION
+    # or PREFERRED_VERSION are set, we need to mirror these variables in
+    # the multilib case;
     multilibs = d.getVar('MULTILIBS') or ""
     if not multilibs:
         return
@@ -11,43 +12,51 @@ def preferred_ml_updates(d):
         if len(eext) > 1 and eext[0] == 'multilib':
             prefixes.append(eext[1])
 
-    versions = []
+    required_versions = []
+    preferred_versions = []
     providers = []
     rproviders = []
     for v in d.keys():
+        if v.startswith("REQUIRED_VERSION_"):
+            required_versions.append(v)
         if v.startswith("PREFERRED_VERSION_"):
-            versions.append(v)
+            preferred_versions.append(v)
         if v.startswith("PREFERRED_PROVIDER_"):
             providers.append(v)
         if v.startswith("PREFERRED_RPROVIDER_"):
             rproviders.append(v)
 
-    for v in versions:
-        val = d.getVar(v, False)
-        pkg = v.replace("PREFERRED_VERSION_", "")
-        if pkg.endswith("-native") or "-crosssdk-" in pkg or pkg.startswith(("nativesdk-", "virtual/nativesdk-")):
-            continue
-        if '-cross-' in pkg and '${' in pkg:
+    def sort_versions(versions, keyword):
+        version_str = "_".join([keyword, "VERSION", ""])
+        for v in versions:
+            val = d.getVar(v, False)
+            pkg = v.replace(version_str, "")
+            if pkg.endswith("-native") or "-crosssdk-" in pkg or pkg.startswith(("nativesdk-", "virtual/nativesdk-")):
+                continue
+            if '-cross-' in pkg and '${' in pkg:
+                for p in prefixes:
+                    localdata = bb.data.createCopy(d)
+                    override = ":virtclass-multilib-" + p
+                    localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override)
+                    if "-canadian-" in pkg:
+                        newname = localdata.expand(v)
+                    else:
+                        newname = localdata.expand(v).replace(version_str, version_str + p + '-')
+                    if newname != v:
+                        newval = localdata.expand(val)
+                        d.setVar(newname, newval)
+                # Avoid future variable key expansion
+                vexp = d.expand(v)
+                if v != vexp and d.getVar(v, False):
+                    d.renameVar(v, vexp)
+                continue
             for p in prefixes:
-                localdata = bb.data.createCopy(d)
-                override = ":virtclass-multilib-" + p
-                localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override)
-                if "-canadian-" in pkg:
-                    newname = localdata.expand(v)
-                else:
-                    newname = localdata.expand(v).replace("PREFERRED_VERSION_", "PREFERRED_VERSION_" + p + '-')
-                if newname != v:
-                    newval = localdata.expand(val)
-                    d.setVar(newname, newval)
-            # Avoid future variable key expansion
-            vexp = d.expand(v)
-            if v != vexp and d.getVar(v, False):
-                d.renameVar(v, vexp)
-            continue
-        for p in prefixes:
-            newname = "PREFERRED_VERSION_" + p + "-" + pkg
-            if not d.getVar(newname, False):
-                d.setVar(newname, val)
+                newname = version_str + p + "-" + pkg
+                if not d.getVar(newname, False):
+                    d.setVar(newname, val)
+
+    sort_versions(required_versions, "REQUIRED")
+    sort_versions(preferred_versions, "PREFERRED")
 
     for prov in providers:
         val = d.getVar(prov, False)