summaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2016-06-21 12:57:25 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-06-21 12:58:40 +0100
commite6d26f5dbcc62388f7fba91d317387f37bd5cf3c (patch)
treed1f4fca8a2ccf9a50114809b986d919952b70bbc /meta/lib
parent95f6e7bd0f7188f59e66e1769799e44a123b638b (diff)
downloadopenembedded-core-contrib-e6d26f5dbcc62388f7fba91d317387f37bd5cf3c.tar.gz
openembedded-core-contrib-e6d26f5dbcc62388f7fba91d317387f37bd5cf3c.tar.bz2
openembedded-core-contrib-e6d26f5dbcc62388f7fba91d317387f37bd5cf3c.zip
package_manager: Fix multilib package arch ordering issues
Order is not preserved in dict() and this code depends on the order of these lists of package architectures used when multilibs are enabled. This caused 'random' breakage where sometimes the correct order was present and sometimes it wasn't. Use collections.OrderedDict() to avoid this problem. Kudos to Bill Randle and Alejandro Hernandez who did most of the work debugging this, I simply took the problem they identified and wrote a patch to fix it. This unblocks the M1 build but this code needs auditing as there are clearly other ordering issues (e.g. the set() usage). [YOCTO #9717] (From OE-Core rev: 61a33582dfc964d612d20d34734a787d873e312c) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r--meta/lib/oe/package_manager.py12
1 files changed, 4 insertions, 8 deletions
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 4aaff8ca43..bc22c5fc75 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -5,6 +5,7 @@ import subprocess
import shutil
import multiprocessing
import re
+import collections
import bb
import tempfile
import oe.utils
@@ -101,13 +102,8 @@ class Indexer(object, metaclass=ABCMeta):
class RpmIndexer(Indexer):
def get_ml_prefix_and_os_list(self, arch_var=None, os_var=None):
- package_archs = {
- 'default': [],
- }
-
- target_os = {
- 'default': "",
- }
+ package_archs = collections.OrderedDict()
+ target_os = collections.OrderedDict()
if arch_var is not None and os_var is not None:
package_archs['default'] = self.d.getVar(arch_var, True).split()
@@ -138,7 +134,7 @@ class RpmIndexer(Indexer):
target_os[eext[1]] = localdata.getVar("TARGET_OS",
True).strip()
- ml_prefix_list = dict()
+ ml_prefix_list = collections.OrderedDict()
for mlib in package_archs:
if mlib == 'default':
ml_prefix_list[mlib] = package_archs[mlib]