[OE-core] [RFC PATCH 1/2] make allarch packages don't dependent specific multilib package
kai.kang at windriver.com
kai.kang at windriver.com
Wed Jul 25 16:41:06 UTC 2018
From: Kai Kang <kai.kang at windriver.com>
The dependencies of allarch packages doesn't not extend when enable
multilib. So take ca-certificates as an example, it always requires
openssl no matter whether multilib is enabled. For multilib image such
as lib32-core-image-sato, it installs 64 bits openssl rather than
lib32-openssl which is expected.
So extend rdependencies of allarch package with prefix 'noarch-' and all
of multilib variants. For
ca-certificates -> openssl
exends to
ca-certificates -> openssl, lib32-openssl, noarch-openssl
Rdepends on openssl and lib32-openssl make both of them exist in
oe-core-repo when do rootfs. And then make both openssl and
lib32-openssl provide noarch-openssl. And only keep noarch-openssl in
RDEPENDS when write package for ca-certificates. So when do image rootfs
for lib32-core-image-sato, remove openssl if installed already and
install lib32-openssl for allarch pacakge ca-certificates.
And extend rprovides of allarch package with prefix 'noarch-' too that
it may be required by other allarch packages. Put all dependent packages
of all allarch recipes in oe-core to a new ariable 'ALLARCH_RDEP_PKGS'.
Signed-off-by: Kai Kang <kai.kang at windriver.com>
---
meta/classes/allarch.bbclass | 3 ---
meta/classes/multilib.bbclass | 3 ++-
meta/classes/multilib_global.bbclass | 31 +++++++++++++++++++++++++++-
meta/classes/nativesdk.bbclass | 8 +++++++
meta/classes/package_deb.bbclass | 7 ++++++-
meta/classes/package_ipk.bbclass | 7 ++++++-
meta/classes/package_rpm.bbclass | 8 ++++++-
meta/conf/multilib.conf | 16 ++++++++++++++
8 files changed, 75 insertions(+), 8 deletions(-)
diff --git a/meta/classes/allarch.bbclass b/meta/classes/allarch.bbclass
index 1eebe0bf2e..52efba405a 100644
--- a/meta/classes/allarch.bbclass
+++ b/meta/classes/allarch.bbclass
@@ -42,9 +42,6 @@ python () {
d.setVar("INHIBIT_PACKAGE_DEBUG_SPLIT", "1")
d.setVar("INHIBIT_PACKAGE_STRIP", "1")
- # These multilib values shouldn't change allarch packages so exclude them
- d.appendVarFlag("emit_pkgdata", "vardepsexclude", " MULTILIB_VARIANTS")
- d.appendVarFlag("write_specfile", "vardepsexclude", " MULTILIBS")
d.appendVarFlag("do_package", "vardepsexclude", " package_do_shlibs")
elif bb.data.inherits_class('packagegroup', d) and not bb.data.inherits_class('nativesdk', d):
bb.error("Please ensure recipe %s sets PACKAGE_ARCH before inherit packagegroup" % d.getVar("FILE"))
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index f2ac8bdfef..f9417ce69e 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -134,7 +134,8 @@ python do_package_qa_multilib() {
i = i[len('virtual/'):]
if (not i.startswith('kernel-module')) and (not i.startswith(mlprefix)) and \
(not 'cross-canadian' in i) and (not i.startswith("nativesdk-")) and \
- (not i.startswith("rtld")) and (not i.startswith('kernel-vmlinux')):
+ (not i.startswith("rtld")) and (not i.startswith('kernel-vmlinux')) and \
+ (not i.startswith("noarch")):
candidates.append(i)
if len(candidates) > 0:
msg = "%s package %s - suspicious values '%s' in %s" \
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index d2ec1adfea..a5e3046498 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -161,6 +161,16 @@ multilib_virtclass_handler_vendor[eventmask] = "bb.event.ConfigParsed"
python multilib_virtclass_handler_global () {
variant = e.data.getVar("BBEXTENDVARIANT")
+
+ # make packages from ALLARCH_RDEP_PKGS provide noarch-pkg
+ if not (bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data)):
+ for pkg in (e.data.getVar("PACKAGES") or "").split():
+ bpkg = pkg.lstrip(variant + "-" if variant else "")
+ if bpkg in (e.data.getVar("ALLARCH_RDEP_PKGS") or ""):
+ rprovs = d.getVar("RPROVIDES_%s" % pkg) or ""
+ rprovs = rprovs + " noarch-" + bpkg
+ d.setVar("RPROVIDES_%s" % pkg, rprovs.strip())
+
if variant:
return
@@ -194,9 +204,28 @@ python multilib_virtclass_handler_global () {
for clsextend in clsextends:
rprovs = rprovs + " " + clsextend.map_variable("RPROVIDES_%s" % pkg, setvar=False)
rprovs = rprovs + " " + clsextend.extname + "-" + pkg
+
+ if bb.data.inherits_class('allarch', e.data):
+ # make allarch pkg rprovides noarch-itself
+ if not pkg.endswith(("-dbg", "-dev", "-staticdev")):
+ rprovs = rprovs + " noarch-" + pkg
+
e.data.setVar("RPROVIDES_%s" % pkg, rprovs)
+
+ # Process RDEPENDS for noarch recipe
+ if bb.data.inherits_class('allarch', e.data) and \
+ not (bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data)):
+ noarch_clsext = oe.classextend.ClassExtender('noarch', e.data)
+ for pkg in (e.data.getVar("PACKAGES") or "").split():
+ if pkg.endswith(("-dbg", "-dev", "-staticdev")):
+ continue
+
+ rdeps = e.data.getVar("RDEPENDS_%s" % pkg) or ""
+ rdeps = rdeps + " " + noarch_clsext.map_variable("RDEPENDS_%s" % pkg, setvar=False)
+ for clsextend in clsextends:
+ rdeps = rdeps + " " + clsextend.map_variable("RDEPENDS_%s" % pkg, setvar=False)
+ e.data.setVar("RDEPENDS_%s" % pkg, rdeps)
}
addhandler multilib_virtclass_handler_global
multilib_virtclass_handler_global[eventmask] = "bb.event.RecipeParsed"
-
diff --git a/meta/classes/nativesdk.bbclass b/meta/classes/nativesdk.bbclass
index ab566e9803..8f8af8f188 100644
--- a/meta/classes/nativesdk.bbclass
+++ b/meta/classes/nativesdk.bbclass
@@ -95,6 +95,14 @@ python () {
clsextend.map_packagevars()
clsextend.map_variable("PROVIDES")
clsextend.map_regexp_variable("PACKAGES_DYNAMIC")
+
+ # make variant-pkg from ALLARCH_RDEP_PKGS provides noarch-pkg
+ for pkg in (d.getVar("PACKAGES") or "").split():
+ bpkg = pkg.replace("nativesdk-", "")
+ if bpkg in (d.getVar("ALLARCH_RDEP_PKGS") or "").split():
+ rprovs = d.getVar("RPROVIDES_%s" % pkg) or ""
+ rprovs = rprovs + " noarch-" + pkg
+ d.setVar("RPROVIDES_%s" % pkg, rprovs)
}
addhandler nativesdk_virtclass_handler
diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass
index 2e8d17d3c7..71f69b9ac3 100644
--- a/meta/classes/package_deb.bbclass
+++ b/meta/classes/package_deb.bbclass
@@ -245,7 +245,12 @@ def deb_write_pkg(pkg, d):
elif (v or "").startswith("> "):
var[dep][i] = var[dep][i].replace("> ", ">> ")
- rdepends = bb.utils.explode_dep_versions2(localdata.getVar("RDEPENDS") or "")
+ rdepends = localdata.getVar("RDEPENDS") or ""
+ if bb.data.inherits_class('allarch', localdata) \
+ and not bb.data.inherits_class('packagegroup', localdata) \
+ and not pkg.endswith(("-dbg", "-dev", "-staticdev")):
+ rdepends = " ".join(list(filter(lambda dep: dep.startswith('noarch-'), rdepends.split())))
+ rdepends = bb.utils.explode_dep_versions2(rdepends)
debian_cmp_remap(rdepends)
for dep in list(rdepends.keys()):
if dep == pkg:
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass
index a0b34fa7a5..783a2302bf 100644
--- a/meta/classes/package_ipk.bbclass
+++ b/meta/classes/package_ipk.bbclass
@@ -225,7 +225,12 @@ def ipk_write_pkg(pkg, d):
elif (v or "").startswith("> "):
var[dep][i] = var[dep][i].replace("> ", ">> ")
- rdepends = bb.utils.explode_dep_versions2(localdata.getVar("RDEPENDS") or "")
+ rdepends = localdata.getVar("RDEPENDS") or ""
+ if bb.data.inherits_class('allarch', localdata) \
+ and not bb.data.inherits_class('packagegroup', localdata) \
+ and not pkg.endswith(("-dbg", "-dev", "-staticdev")):
+ rdepends = " ".join(list(filter(lambda dep: dep.startswith('noarch-'), rdepends)))
+ rdepends = bb.utils.explode_dep_versions2(rdepends)
debian_cmp_remap(rdepends)
rrecommends = bb.utils.explode_dep_versions2(localdata.getVar("RRECOMMENDS") or "")
debian_cmp_remap(rrecommends)
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 21ada348aa..dbd7cc3701 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -333,6 +333,13 @@ python write_specfile () {
localdata.setVar('OVERRIDES', d.getVar("OVERRIDES", False) + ":" + pkg)
+ if bb.data.inherits_class('allarch', localdata) \
+ and not bb.data.inherits_class('packagegroup', localdata) \
+ and not pkg.endswith(("-dbg", "-dev", "-staticdev")):
+ rdeps = (localdata.getVar('RDEPENDS') or "").split()
+ rdeps = list(filter(lambda dep: dep.startswith('noarch-'), rdeps))
+ localdata.setVar('RDEPENDS', ' '.join(rdeps))
+
conffiles = get_conffiles(pkg, d)
dirfiles = localdata.getVar('DIRFILES')
if dirfiles is not None:
@@ -372,7 +379,6 @@ python write_specfile () {
splitrprerm = localdata.getVar('pkg_prerm')
splitrpostrm = localdata.getVar('pkg_postrm')
-
if not perfiledeps:
# Add in summary of per file dependencies
splitrdepends = splitrdepends + " " + get_perfile('RDEPENDS', pkg, d)
diff --git a/meta/conf/multilib.conf b/meta/conf/multilib.conf
index e74dec81a8..2466befbca 100644
--- a/meta/conf/multilib.conf
+++ b/meta/conf/multilib.conf
@@ -26,3 +26,19 @@ OPKG_ARGS_append = " --force-maintainer --force-overwrite"
PKG_CONFIG_PATH .= ":${WORKDIR}/recipe-sysroot/${datadir}/pkgconfig"
PKG_CONFIG_PATH[vardepsexclude] = "datadir WORKDIR"
PKG_CONFIG_PATH[vardepvalueexclude] = ":${WORKDIR}/recipe-sysroot/${datadir}/pkgconfig"
+
+# resolve runtime dependencies of allarch packages when enable multilib
+ALLARCH_RDEP_PKGS ?= "\
+ bash \
+ busybox-mdev \
+ font-util \
+ fontconfig-utils \
+ kbd \
+ openssl \
+ perl \
+ ppp \
+ udev \
+ udev-extraconf \
+ weston \
+ ${VIRTUAL-RUNTIME_base-utils} \
+"
--
2.17.1
More information about the Openembedded-core
mailing list