aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Yang <liezhi.yang@windriver.com>2015-10-27 06:49:22 -0700
committerRobert Yang <liezhi.yang@windriver.com>2015-10-27 07:00:19 -0700
commit6aacdcc20175b509fa9adca8a7bfa861e443ee09 (patch)
treec6f0b54b8afe596c721cd2d0ec297a1c4f77ef91
parentf787b688f2884ce3fa888b4041030538c7d2bf55 (diff)
downloadopenembedded-core-contrib-rbt/smart.tar.gz
python-smartpm-native: prefer same arch when installrbt/smart
We had made smart install multilib RDEPENDS correctly from package_manager.py, but it couldn't handle RRECOMMANDS, this patch fix the issue from python-smartpm-native, and make it work well. The logic is: when pkg_A rdepends/rrecommands pkg_B, then let pkg_B use pkg_A's arch when possible. This patch fixed: require conf/multilib.conf MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "x86" RPM_PREFER_ELF_ARCH = "1" IMAGE_INSTALL_append = " lib32-connman-gnome" MACHINE = "qemux86-64" $ bitbake core-image-sato Only 64bit loaders like libgdk-pixbuf-2.0-loader-jpeg and libgdk-pixbuf-2.0-loader-png were installed before this patch since they are in RRECOMMANDS, now both 32bit and 64bit are installed. This patch is for native only to minimize the impact for this release, the main problem is the "if attempt:", otherwise, more packages like lib32-libc6-dev will be installed when populate_sdk, but only libc6-dev were installed before. We need reconstruct the way that we install the complentary packages in future release, the "if attempt:" make they work together atm. [YOCTO #8570] Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-rw-r--r--meta/recipes-devtools/python/python-smartpm/smart-prefer-same-arch.patch119
-rw-r--r--meta/recipes-devtools/python/python-smartpm_git.bb2
2 files changed, 121 insertions, 0 deletions
diff --git a/meta/recipes-devtools/python/python-smartpm/smart-prefer-same-arch.patch b/meta/recipes-devtools/python/python-smartpm/smart-prefer-same-arch.patch
new file mode 100644
index 0000000000..b1305b512d
--- /dev/null
+++ b/meta/recipes-devtools/python/python-smartpm/smart-prefer-same-arch.patch
@@ -0,0 +1,119 @@
+From 1749592a76425449c1f3119fb14db3f5e14226ed Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Tue, 27 Oct 2015 06:20:45 -0700
+Subject: [PATCH] smart/transaction.py: prefer same arch when install
+
+We had made smart install multilib RDEPENDS correctly from
+package_manager.py, but it couldn't handle RRECOMMANDS, this patch fix
+the issue from python-smartpm-native, and make it work well.
+
+The logic is: when pkg_A rdepends/rrecommands pkg_B, then let pkg_B use
+pkg_A's arch when possible.
+
+This patch fixed:
+require conf/multilib.conf
+MULTILIBS = "multilib:lib32"
+DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+RPM_PREFER_ELF_ARCH = "1"
+IMAGE_INSTALL_append = " lib32-connman-gnome"
+MACHINE = "qemux86-64"
+
+$ bitbake core-image-sato
+
+Only 64bit loaders like libgdk-pixbuf-2.0-loader-jpeg and
+libgdk-pixbuf-2.0-loader-png were installed before this patch since they
+are in RRECOMMANDS, now both 32bit and 64bit are installed.
+
+This patch is for native only to minimize the impact for this release,
+the main problem is the "if attempt:", otherwise, more packages like
+lib32-libc6-dev will be installed when populate_sdk, but only libc6-dev
+were installed before. We need reconstruct the way that we install the
+complentary packages in future release, the "if attempt:" make they work
+together atm.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ smart/transaction.py | 28 +++++++++++++++++++++++++---
+ 1 file changed, 25 insertions(+), 3 deletions(-)
+
+diff --git a/smart/transaction.py b/smart/transaction.py
+index f022aae..63a837c 100644
+--- a/smart/transaction.py
++++ b/smart/transaction.py
+@@ -22,6 +22,7 @@
+ from smart.const import INSTALL, REMOVE, UPGRADE, FIX, REINSTALL, KEEP, LOCKED_EXCLUDE, LOCKED_INSTALL, LOCKED_CONFLICT, LOCKED_CONFLICT_BY, LOCKED_NO_COEXIST, LOCKED_SYSCONF, LOCKED_REMOVE
+ from smart.cache import PreRequires, Package
+ from smart import *
++from smart.backends.rpm.rpmver import splitarch
+
+ def lock_reason(pkg, lockvalue):
+ try:
+@@ -618,6 +619,7 @@ class Transaction(object):
+ self._remove(namepkg, changeset, locked, pending, depth)
+
+ # Install packages required by this one.
++ pkgarch = splitarch(pkg.version)[1]
+ for req in pkg.requires + pkg.recommends:
+
+ reqrequired = req in pkg.requires
+@@ -626,6 +628,8 @@ class Transaction(object):
+ prvpkgs = {}
+ lockedpkgs = {}
+ found = False
++ found_same_arch = False
++ same_arch_in_provides = False
+ for prv in req.providedby:
+ for prvpkg in prv.packages:
+ if not reqrequired:
+@@ -633,9 +637,19 @@ class Transaction(object):
+ continue
+ elif pkgconf.testFlag("ignore-recommends", prvpkg):
+ continue
++ prvpkgarch = splitarch(prvpkg.version)[1]
++ if pkgarch == prvpkgarch:
++ # Found a same arch in provides
++ same_arch_in_provides = True
+ if isinst(prvpkg):
+ found = True
+- break
++ if attempt:
++ break
++ if pkgarch == prvpkgarch:
++ # Found the best match
++ found_same_arch = True
++ break
++ continue
+ if prvpkg not in locked:
+ prvpkgs[prvpkg] = True
+ else:
+@@ -643,7 +657,7 @@ class Transaction(object):
+ else:
+ continue
+ break
+- if found:
++ if found_same_arch or (found and attempt) or (found and not same_arch_in_provides):
+ # Someone is already providing it. Good.
+ continue
+
+@@ -672,7 +686,15 @@ class Transaction(object):
+
+ # It's only a recommend, skip
+ continue
+-
++ if len(prvpkgs) > 1 and not attempt:
++ prvarchs = set()
++ for prv in prvpkgs:
++ prvarchs.add(splitarch(prv.version)[1])
++ if pkgarch in prvarchs:
++ # Prefer the one which has the same arch
++ for prv in prvpkgs.copy():
++ if splitarch(prv.version)[1] != pkgarch:
++ del prvpkgs[prv]
+ if len(prvpkgs) == 1:
+ # Don't check locked here. prvpkgs was
+ # already filtered above.
+--
+1.7.9.5
+
diff --git a/meta/recipes-devtools/python/python-smartpm_git.bb b/meta/recipes-devtools/python/python-smartpm_git.bb
index d6c378bcfd..1ebf590712 100644
--- a/meta/recipes-devtools/python/python-smartpm_git.bb
+++ b/meta/recipes-devtools/python/python-smartpm_git.bb
@@ -26,6 +26,8 @@ SRC_URI = "\
file://smart-cache.py-getPackages-matches-name-version.patch \
"
+SRC_URI_append_class-native = "file://smart-prefer-same-arch.patch"
+
SRCREV = "407a7eca766431257dcd1da15175cc36a1bb22d0"
PV = "1.5+git${SRCPV}"