[OE-core] [PATCH 13/23] package_manager.py: reverse archs correctly

Robert Yang liezhi.yang at windriver.com
Mon Nov 13 08:40:35 UTC 2017



On 11/10/2017 10:21 PM, Alexander Kanavin wrote:
> On 11/10/2017 08:27 AM, Robert Yang wrote:
> 
>> -        if arch_var == None:
>> -            self.archs = 
>> self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS').replace("-","_")
>> +
>> +        if arch_var:
>> +            self.archs = self.d.getVar(arch_var).replace("-","_").split()
>> +        else:
>> +            self.archs = 
>> self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS').replace("-","_").split()
>> +        # Reverse archs to ensure the -best- match is listed firstly, but need
>> +        # make sure not mixed with multilib archs, and let multilib archs have
>> +        # higher a priority for multilib image:
>> +        # For non-multilib image: (e.g., core-image-minimal)
>> +        # machine_arch:package_archs:multilib_archs:allarch_archs
>> +        # For multilib image: (e.g., lib32-core-image-minimal)
>> +        # machine_arch:multilib_archs:package_archs:allarch_archs
>> +        package_archs_var = 
>> self.d.getVar('PACKAGE_ARCHS').replace("-","_").split()
>> +        machine_arch_var = [self.d.getVar('MACHINE_ARCH').replace("-","_")]
>> +        package_archs = []
>> +        allarch_archs = []
>> +        ml_archs = []
>> +        machine_arch = []
>> +        for arch in self.archs:
>> +            if arch in machine_arch_var:
>> +                bb.note("Found MACHINE_ARCH: %s" % arch)
>> +                machine_arch.append(arch)
>> +            elif arch in package_archs_var:
>> +                bb.note("Found PACKAGE_ARCH: %s" % arch)
>> +                package_archs.append(arch)
>> +            elif arch in 'all any noarch'.split():
>> +                bb.note("Found allarch: %s" % arch)
>> +                allarch_archs.append(arch)
>> +            else:
>> +                bb.note("Found multilib arch: %s" % arch)
>> +                ml_archs.append(arch)
>> +        package_archs.reverse()
>> +        if machine_arch:
>> +            self.archs = machine_arch
>> +        mlprefix = self.d.getVar('MLPREFIX')
>> +        if ml_archs:
>> +            ml_archs.reverse()
>> +            if mlprefix:
>> +                self.archs += ml_archs + package_archs
>> +            else:
>> +                self.archs += package_archs + ml_archs
>>           else:
>> -            self.archs = self.d.getVar(arch_var).replace("-","_")
>> +            self.archs = package_archs
>> +
>> +        self.archs += allarch_archs
>> +        self.archs = ' '.join(self.archs)
>> +        bb.note("The archs used by package manager: %s" % self.archs)
>> +
> 
> Can you place all of this in a helper function please?

Thanks, updated in the repo:

diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index e28f321..f3cb123 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -467,10 +467,14 @@ class RpmPM(PackageManager):
          self.target_rootfs = target_rootfs
          self.target_vendor = target_vendor
          self.task_name = task_name
-        if arch_var == None:
-            self.archs = 
self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS').replace("-","_")
+
+        if arch_var:
+            self.archs = self.d.getVar(arch_var).replace("-","_").split()
          else:
-            self.archs = self.d.getVar(arch_var).replace("-","_")
+            self.archs = 
self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS').replace("-","_").split()
+        self._arch_reverse_helper()
+        bb.note("The archs used by package manager: %s" % self.archs)
+
          if task_name == "host":
              self.primary_arch = self.d.getVar('SDK_ARCH')
          else:
@@ -489,9 +493,52 @@ class RpmPM(PackageManager):
          if not os.path.exists(self.d.expand('${T}/saved')):
              bb.utils.mkdirhier(self.d.expand('${T}/saved'))

+    def _arch_reverse_helper(self):
+        # Reverse archs to ensure the -best- match is listed firstly, but need
+        # make sure not mixed with multilib archs, and let multilib archs have
+        # higher a priority for multilib image:
+        # For non-multilib image: (e.g., core-image-minimal)
+        # machine_arch:package_archs:multilib_archs:allarch_archs
+        # For multilib image: (e.g., lib32-core-image-minimal)
+        # machine_arch:multilib_archs:package_archs:allarch_archs
+        package_archs_var = self.d.getVar('PACKAGE_ARCHS').replace("-","_").split()
+        machine_arch_var = [self.d.getVar('MACHINE_ARCH').replace("-","_")]
+        package_archs = []
+        allarch_archs = []
+        ml_archs = []
+        machine_arch = []
+        for arch in self.archs:
+            if arch in machine_arch_var:
+                bb.note("Found MACHINE_ARCH: %s" % arch)
+                machine_arch.append(arch)
+            elif arch in package_archs_var:
+                bb.note("Found PACKAGE_ARCH: %s" % arch)
+                package_archs.append(arch)
+            elif arch in 'all any noarch'.split():
+                bb.note("Found allarch: %s" % arch)
+                allarch_archs.append(arch)
+            else:
+                bb.note("Found multilib arch: %s" % arch)
+                ml_archs.append(arch)
+        package_archs.reverse()
+        if machine_arch:
+            self.archs = machine_arch
+        mlprefix = self.d.getVar('MLPREFIX')
+        if ml_archs:
+            ml_archs.reverse()
+            if mlprefix:
+                self.archs += ml_archs + package_archs
+            else:
+                self.archs += package_archs + ml_archs
+        else:
+            self.archs = package_archs
+
+        self.archs += allarch_archs
+        self.archs = ' '.join(self.archs)
+
      def _configure_dnf(self):
          # libsolv handles 'noarch' internally, we don't need to specify it 
explicitly
-        archs = [i for i in reversed(self.archs.split()) if i not in ["any", 
"all", "noarch"]]
+        archs = [i for i in self.archs.split() if i not in ["any", "all", 
"noarch"]]
          # This prevents accidental matching against libsolv's built-in policies
          if len(archs) <= 1:
              archs = archs + ["bogusarch"]

// Robert

> 
> Alex
> 



More information about the Openembedded-core mailing list