diff options
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oe/package_manager.py | 105 |
1 files changed, 53 insertions, 52 deletions
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py index af14d5ad7f..2faf4224b3 100644 --- a/meta/lib/oe/package_manager.py +++ b/meta/lib/oe/package_manager.py | |||
@@ -35,14 +35,64 @@ class Indexer(object): | |||
35 | 35 | ||
36 | 36 | ||
37 | class RpmIndexer(Indexer): | 37 | class RpmIndexer(Indexer): |
38 | def get_ml_prefix_and_os_list(self, arch_var=None, os_var=None): | ||
39 | package_archs = { | ||
40 | 'default': [], | ||
41 | } | ||
42 | |||
43 | target_os = { | ||
44 | 'default': "", | ||
45 | } | ||
46 | |||
47 | if arch_var is not None and os_var is not None: | ||
48 | package_archs['default'] = self.d.getVar(arch_var, True).split() | ||
49 | package_archs['default'].reverse() | ||
50 | target_os['default'] = self.d.getVar(os_var, True).strip() | ||
51 | else: | ||
52 | package_archs['default'] = self.d.getVar("PACKAGE_ARCHS", True).split() | ||
53 | # arch order is reversed. This ensures the -best- match is | ||
54 | # listed first! | ||
55 | package_archs['default'].reverse() | ||
56 | target_os['default'] = self.d.getVar("TARGET_OS", True).strip() | ||
57 | multilibs = self.d.getVar('MULTILIBS', True) or "" | ||
58 | for ext in multilibs.split(): | ||
59 | eext = ext.split(':') | ||
60 | if len(eext) > 1 and eext[0] == 'multilib': | ||
61 | localdata = bb.data.createCopy(self.d) | ||
62 | default_tune_key = "DEFAULTTUNE_virtclass-multilib-" + eext[1] | ||
63 | default_tune = localdata.getVar(default_tune_key, False) | ||
64 | if default_tune: | ||
65 | localdata.setVar("DEFAULTTUNE", default_tune) | ||
66 | bb.data.update_data(localdata) | ||
67 | package_archs[eext[1]] = localdata.getVar('PACKAGE_ARCHS', | ||
68 | True).split() | ||
69 | package_archs[eext[1]].reverse() | ||
70 | target_os[eext[1]] = localdata.getVar("TARGET_OS", | ||
71 | True).strip() | ||
72 | |||
73 | ml_prefix_list = dict() | ||
74 | for mlib in package_archs: | ||
75 | if mlib == 'default': | ||
76 | ml_prefix_list[mlib] = package_archs[mlib] | ||
77 | else: | ||
78 | ml_prefix_list[mlib] = list() | ||
79 | for arch in package_archs[mlib]: | ||
80 | if arch in ['all', 'noarch', 'any']: | ||
81 | ml_prefix_list[mlib].append(arch) | ||
82 | else: | ||
83 | ml_prefix_list[mlib].append(mlib + "_" + arch) | ||
84 | |||
85 | return (ml_prefix_list, target_os) | ||
86 | |||
38 | def write_index(self): | 87 | def write_index(self): |
39 | sdk_pkg_archs = (self.d.getVar('SDK_PACKAGE_ARCHS', True) or "").replace('-', '_').split() | 88 | sdk_pkg_archs = (self.d.getVar('SDK_PACKAGE_ARCHS', True) or "").replace('-', '_').split() |
40 | mlb_prefix_list = (self.d.getVar('MULTILIB_PREFIX_LIST', True) or "").replace('-', '_').split() | ||
41 | all_mlb_pkg_archs = (self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS', True) or "").replace('-', '_').split() | 89 | all_mlb_pkg_archs = (self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS', True) or "").replace('-', '_').split() |
42 | 90 | ||
91 | mlb_prefix_list = self.get_ml_prefix_and_os_list()[0] | ||
92 | |||
43 | archs = set() | 93 | archs = set() |
44 | for item in mlb_prefix_list: | 94 | for item in mlb_prefix_list: |
45 | archs = archs.union(set(item.split(':')[1:])) | 95 | archs = archs.union(set(i.replace('-', '_') for i in mlb_prefix_list[item])) |
46 | 96 | ||
47 | if len(archs) == 0: | 97 | if len(archs) == 0: |
48 | archs = archs.union(set(all_mlb_pkg_archs)) | 98 | archs = archs.union(set(all_mlb_pkg_archs)) |
@@ -303,56 +353,7 @@ class RpmPM(PackageManager): | |||
303 | 353 | ||
304 | self.indexer = RpmIndexer(self.d, self.deploy_dir) | 354 | self.indexer = RpmIndexer(self.d, self.deploy_dir) |
305 | 355 | ||
306 | self.ml_prefix_list, self.ml_os_list = self._get_prefix_and_os_list(arch_var, os_var) | 356 | self.ml_prefix_list, self.ml_os_list = self.indexer.get_ml_prefix_and_os_list(arch_var, os_var) |
307 | |||
308 | def _get_prefix_and_os_list(self, arch_var, os_var): | ||
309 | package_archs = { | ||
310 | 'default': [], | ||
311 | } | ||
312 | |||
313 | target_os = { | ||
314 | 'default': "", | ||
315 | } | ||
316 | |||
317 | if arch_var is not None and os_var is not None: | ||
318 | package_archs['default'] = self.d.getVar(arch_var, True).split() | ||
319 | package_archs['default'].reverse() | ||
320 | target_os['default'] = self.d.getVar(os_var, True).strip() | ||
321 | else: | ||
322 | package_archs['default'] = self.d.getVar("PACKAGE_ARCHS", True).split() | ||
323 | # arch order is reversed. This ensures the -best- match is | ||
324 | # listed first! | ||
325 | package_archs['default'].reverse() | ||
326 | target_os['default'] = self.d.getVar("TARGET_OS", True).strip() | ||
327 | multilibs = self.d.getVar('MULTILIBS', True) or "" | ||
328 | for ext in multilibs.split(): | ||
329 | eext = ext.split(':') | ||
330 | if len(eext) > 1 and eext[0] == 'multilib': | ||
331 | localdata = bb.data.createCopy(self.d) | ||
332 | default_tune_key = "DEFAULTTUNE_virtclass-multilib-" + eext[1] | ||
333 | default_tune = localdata.getVar(default_tune_key, False) | ||
334 | if default_tune: | ||
335 | localdata.setVar("DEFAULTTUNE", default_tune) | ||
336 | bb.data.update_data(localdata) | ||
337 | package_archs[eext[1]] = localdata.getVar('PACKAGE_ARCHS', | ||
338 | True).split() | ||
339 | package_archs[eext[1]].reverse() | ||
340 | target_os[eext[1]] = localdata.getVar("TARGET_OS", | ||
341 | True).strip() | ||
342 | |||
343 | ml_prefix_list = dict() | ||
344 | for mlib in package_archs: | ||
345 | if mlib == 'default': | ||
346 | ml_prefix_list[mlib] = package_archs[mlib] | ||
347 | else: | ||
348 | ml_prefix_list[mlib] = list() | ||
349 | for arch in package_archs[mlib]: | ||
350 | if arch in ['all', 'noarch', 'any']: | ||
351 | ml_prefix_list[mlib].append(arch) | ||
352 | else: | ||
353 | ml_prefix_list[mlib].append(mlib + "_" + arch) | ||
354 | |||
355 | return (ml_prefix_list, target_os) | ||
356 | 357 | ||
357 | ''' | 358 | ''' |
358 | Create configs for rpm and smart, and multilib is supported | 359 | Create configs for rpm and smart, and multilib is supported |