summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Yang <liezhi.yang@windriver.com>2014-07-30 22:35:59 -0700
committerRobert Yang <liezhi.yang@windriver.com>2014-07-31 01:08:42 -0700
commit03c7d8231db167463fa1e24e0ff52be226aab492 (patch)
treed84645a73c548e2c953916a890bb285c2a489e8d
parent7986adeac16550b33f65fded39a55f668e0e543f (diff)
downloadopenembedded-core-contrib-03c7d8231db167463fa1e24e0ff52be226aab492.tar.gz
openembedded-core-contrib-03c7d8231db167463fa1e24e0ff52be226aab492.tar.bz2
openembedded-core-contrib-03c7d8231db167463fa1e24e0ff52be226aab492.zip
package_manager.py: set preferred ABI for rpm
When using the RPM packaging backend to generate a rootfs there needs to be a way to configure the preferred ABI to resolve ELF file conflicts. Currently RPM resolves ELF file conflicts with the last-installed wins. Using SMART it's difficult to know what the last installed will be. There are three specific policies that can be selected: 1: ELF32 wins 2: ELF64 wins 3: ELF64 N32 wins (mips64 or mips64el only) Another option "0" is uncontrollable, which means that if two are being installed at once Elf64 is preferred, but if they're being installed in two different transactions, last in wins, so we don't document it. Add RPM_PREFER_COLOR to let the user config the preferred ABI. [YOCTO #4073] Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-rw-r--r--meta/lib/oe/package_manager.py16
-rw-r--r--meta/lib/oe/rootfs.py3
2 files changed, 18 insertions, 1 deletions
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 5444422305..a0984c404b 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -821,6 +821,22 @@ class RpmPM(PackageManager):
self._invoke_smart('config --set rpm-extra-macros._var=%s' %
self.d.getVar('localstatedir', True))
cmd = 'config --set rpm-extra-macros._tmppath=/install/tmp'
+
+ prefer_color = self.d.getVar('RPM_PREFER_COLOR', True)
+ if prefer_color:
+ if prefer_color not in ['0', '1', '2', '3']:
+ bb.fatal("Invalid RPM_PREFER_COLOR: %s, it should be one of:\n"
+ "\t1: ELF32 wins\n"
+ "\t2: ELF64 wins\n"
+ "\t3: ELF64 N32 wins (mips64 or mips64el only)" %
+ prefer_color)
+ if prefer_color == "3" and self.d.getVar("TUNE_ARCH", True) not in \
+ ['mips64', 'mips64el']:
+ bb.fatal("RPM_PREFER_COLOR = \"3\" is for mips64 or mips64el "
+ "only.")
+ self._invoke_smart('config --set rpm-extra-macros._prefer_color=%s'
+ % prefer_color)
+
self._invoke_smart(cmd)
# Write common configuration for host and target usage
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index 90a98b456c..0424a01aa5 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -329,7 +329,8 @@ class RpmRootfs(Rootfs):
@staticmethod
def _depends_list():
- return ['DEPLOY_DIR_RPM', 'INC_RPM_IMAGE_GEN', 'RPM_PREPROCESS_COMMANDS', 'RPM_POSTPROCESS_COMMANDS']
+ return ['DEPLOY_DIR_RPM', 'INC_RPM_IMAGE_GEN', 'RPM_PREPROCESS_COMMANDS',
+ 'RPM_POSTPROCESS_COMMANDS', 'RPM_PREFER_COLOR']
def _get_delayed_postinsts(self):
postinst_dir = self.d.expand("${IMAGE_ROOTFS}${sysconfdir}/rpm-postinsts")