* [PATCH 0/7] Fix a number of package installation related items [v2]
@ 2011-09-21 1:24 Mark Hatle
2011-09-21 1:24 ` [PATCH 1/7] rpm: add multilib prefix for archs under deploy/rpm [v2] Mark Hatle
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
This set of patches fixes a number of items related to regular and multilib
package installs.
*** Updated the first two patches from Dongxiao. ***
The next 4 patches are required to fix the basic problems with rpm
installation. Due to a typo, the provides were not being set properly causing
various invalid rootfs's to be created. Fixing this typo showed a small
number of additional runtime dependencies were not being accounted for:
* "rpmdeps" checks for GNU_HASH, and adds a requirement. For compatibility
we now set rtld(GNU_HASH) as being provided by eglibc.
* the python specific requirements were versioned, however there is no easy
way to satisfy the versioning within the OE-Core environment today. This
was modified to instead simply require "python", which the python-core
package satisfies... a small change to packages.bbclass was required to
invalidate the sstate-cache as well.
* Enhance busybox to specific list a per-file runtime dependency for each
link that /bin/busybox is capable of satisfying. This per-file dep is
available for all packaging backends, but only affects RPM at this time.
Finally the last patch fixes a problem in the multilib_global.bbclass which
causes incorrect provide and rprovides to be placed into packages when
multilib builds are enabled.
*** Fourth patch was updated to remove debugging messages that were
accidently left in ****
---
All of the above has been tested with
MACHINE = "qemux86_64"
MULTILIB_IMAGE_INSTALL = "lib32-connman-gnome lib32-task-base-3g lib32-task-base-wifi lib32-task-base-bluetooth"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
I have build core-image-minimal, core-image-core and core-image-sato. Each
image was built with and without the MULTILIB_IMAGE_INSTALL being enabled.
The following changes since commit 81274f4488fbc4d68d150870735ec0181b60b451:
freetype: disable bzip2 compressed font support (2011-09-19 13:14:03 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib mhatle/rpm.deps
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=mhatle/rpm.deps
Dongxiao Xu (2):
rpm: add multilib prefix for archs under deploy/rpm
multilib: install MULTILIB_IMAGE_INSTALL
Mark Hatle (5):
Fix RPM dependencies
Add a run-time dependency that eglibc support GNU_HASH
Update python dependencies to be simply to "python"
busybox: Enhance to add dynamic per-file provides
multilib_global.bbclass: Fix non-multilib package provides
meta/classes/multilib.bbclass | 5 +++
meta/classes/multilib_global.bbclass | 27 +++++++++++++---
meta/classes/package.bbclass | 6 ++++
meta/classes/package_rpm.bbclass | 44 +++++++++++++++++---------
meta/classes/rootfs_rpm.bbclass | 8 ++++-
meta/recipes-core/busybox/busybox.inc | 32 +++++++++++++++++++
meta/recipes-core/busybox/busybox_1.18.5.bb | 2 +-
meta/recipes-core/eglibc/eglibc-package.inc | 3 +-
meta/recipes-core/eglibc/eglibc_2.12.bb | 2 +-
meta/recipes-core/eglibc/eglibc_2.13.bb | 2 +-
meta/recipes-devtools/rpm/rpm/pythondeps.sh | 16 ++++++++++
meta/recipes-devtools/rpm/rpm_5.4.0.bb | 4 ++-
12 files changed, 125 insertions(+), 26 deletions(-)
create mode 100755 meta/recipes-devtools/rpm/rpm/pythondeps.sh
--
1.7.3.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/7] rpm: add multilib prefix for archs under deploy/rpm [v2]
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
@ 2011-09-21 1:24 ` Mark Hatle
2011-09-21 1:24 ` [PATCH 2/7] multilib: install MULTILIB_IMAGE_INSTALL [v2] Mark Hatle
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
From: Dongxiao Xu <dongxiao.xu@intel.com>
Currently MACHINE_ARCH deploy folder is unique in multilib system, thus
a lib32 version of rpm package will override a normal rpm package if
its PACKAGE_ARCH is ${MACHINE_ARCH}.
Define different deploy folder for multilib architectures to avoid the
confliction.
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
meta/classes/multilib.bbclass | 5 +++++
meta/classes/rootfs_rpm.bbclass | 4 +++-
2 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index 583d76b..138dd27 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -76,4 +76,9 @@ python __anonymous () {
multilib_map_variable("PACKAGES_DYNAMIC", variant, d)
multilib_map_variable("PACKAGE_INSTALL", variant, d)
multilib_map_variable("INITSCRIPT_PACKAGES", variant, d)
+
+ package_arch = d.getVar("PACKAGE_ARCH", True)
+ machine_arch = d.getVar("MACHINE_ARCH", True)
+ if package_arch == machine_arch:
+ d.setVar("PACKAGE_ARCH", variant + "_" + package_arch)
}
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass
index 135ca75..7936d77 100644
--- a/meta/classes/rootfs_rpm.bbclass
+++ b/meta/classes/rootfs_rpm.bbclass
@@ -218,7 +218,9 @@ python () {
default_tune = localdata.getVar("DEFAULTTUNE_virtclass-multilib-" + eext[1], False)
if default_tune:
localdata.setVar("DEFAULTTUNE", default_tune)
- ml_package_archs += localdata.getVar("PACKAGE_ARCHS", True) or ""
+ localdata.setVar("MACHINE_ARCH", eext[1] + "_" + localdata.getVar("MACHINE_ARCH", False))
+ package_archs = localdata.getVar("PACKAGE_ARCHS", True) or ""
+ ml_package_archs += " " + package_archs
#bb.note("ML_PACKAGE_ARCHS %s %s %s" % (eext[1], localdata.getVar("PACKAGE_ARCHS", True) or "(none)", overrides))
bb.data.setVar('MULTILIB_PACKAGE_ARCHS', ml_package_archs, d)
}
--
1.7.3.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/7] multilib: install MULTILIB_IMAGE_INSTALL [v2]
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
2011-09-21 1:24 ` [PATCH 1/7] rpm: add multilib prefix for archs under deploy/rpm [v2] Mark Hatle
@ 2011-09-21 1:24 ` Mark Hatle
2011-09-21 1:24 ` [PATCH 3/7] Fix RPM dependencies Mark Hatle
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
From: Dongxiao Xu <dongxiao.xu@intel.com>
If user set MULTILIB_IMAGE_INSTALL, we need to install those multitlib
packages into the final image.
Also fix the logic in handling multilib prefix. For certain case like a
normal image contains several multilib libraries, the image recipe isn't
extended with MLPREFIX, therefore we need to enumerate the possible
multilib prefixes and compare them with package prefixes.
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
meta/classes/package_rpm.bbclass | 42 +++++++++++++++++++++++++------------
meta/classes/rootfs_rpm.bbclass | 4 +++
2 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 9ef1acd..4605ec8 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -166,7 +166,7 @@ package_install_internal_rpm () {
local platform="${INSTALL_PLATFORM_RPM}"
local platform_extra="${INSTALL_PLATFORM_EXTRA_RPM}"
local confbase="${INSTALL_CONFBASE_RPM}"
- local package_to_install="${INSTALL_PACKAGES_NORMAL_RPM}"
+ local package_to_install="${INSTALL_PACKAGES_NORMAL_RPM} ${INSTALL_PACKAGES_MULTILIB_RPM}"
local package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_RPM}"
local package_linguas="${INSTALL_PACKAGES_LINGUAS_RPM}"
local providename="${INSTALL_PROVIDENAME_RPM}"
@@ -210,10 +210,15 @@ package_install_internal_rpm () {
echo "Processing $pkg..."
archvar=base_archs
- ml_pkg=$(echo ${pkg} | sed "s,^${MLPREFIX}\(.*\),\1,")
- if [ "${ml_pkg}" != "${pkg}" ]; then
- archvar=ml_archs
- fi
+ ml_prefix=`echo ${pkg} | cut -d'-' -f1`
+ ml_pkg=$pkg
+ for i in ${MULTILIB_PREFIX_LIST} ; do
+ if [ ${ml_prefix} == ${i} ]; then
+ ml_pkg=$(echo ${pkg} | sed "s,^${ml_prefix}-\(.*\),\1,")
+ archvar=ml_archs
+ break
+ fi
+ done
pkg_name=$(resolve_package_rpm ${confbase}-${archvar}.conf ${ml_pkg})
if [ -z "$pkg_name" ]; then
@@ -224,16 +229,20 @@ package_install_internal_rpm () {
done
fi
fi
-
if [ ! -z "${package_to_install}" ]; then
for pkg in ${package_to_install} ; do
echo "Processing $pkg..."
archvar=base_archs
- ml_pkg=$(echo ${pkg} | sed "s,^${MLPREFIX}\(.*\),\1,")
- if [ "${ml_pkg}" != "${pkg}" ]; then
- archvar=ml_archs
- fi
+ ml_prefix=`echo ${pkg} | cut -d'-' -f1`
+ ml_pkg=$pkg
+ for i in ${MULTILIB_PREFIX_LIST} ; do
+ if [ ${ml_prefix} == ${i} ]; then
+ ml_pkg=$(echo ${pkg} | sed "s,^${ml_prefix}-\(.*\),\1,")
+ archvar=ml_archs
+ break
+ fi
+ done
pkg_name=$(resolve_package_rpm ${confbase}-${archvar}.conf ${ml_pkg})
if [ -z "$pkg_name" ]; then
@@ -258,10 +267,15 @@ package_install_internal_rpm () {
for pkg in ${package_attemptonly} ; do
echo "Processing $pkg..."
archvar=base_archs
- ml_pkg=$(echo ${pkg} | sed "s,^${MLPREFIX}\(.*\),\1,")
- if [ "${ml_pkg}" != "${pkg}" ]; then
- archvar=ml_archs
- fi
+ ml_prefix=`echo ${pkg} | cut -d'-' -f1`
+ ml_pkg=$pkg
+ for i in ${MULTILIB_PREFIX_LIST} ; do
+ if [ ${ml_prefix} == ${i} ]; then
+ ml_pkg=$(echo ${pkg} | sed "s,^${ml_prefix}-\(.*\),\1,")
+ archvar=ml_archs
+ break
+ fi
+ done
pkg_name=$(resolve_package_rpm ${confbase}-${archvar}.conf ${ml_pkg})
if [ -z "$pkg_name" ]; then
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass
index 7936d77..5ac6bca 100644
--- a/meta/classes/rootfs_rpm.bbclass
+++ b/meta/classes/rootfs_rpm.bbclass
@@ -58,6 +58,7 @@ fakeroot rootfs_rpm_do_rootfs () {
export INSTALL_PLATFORM_RPM="${TARGET_ARCH}"
export INSTALL_CONFBASE_RPM="${RPMCONF_TARGET_BASE}"
export INSTALL_PACKAGES_NORMAL_RPM="${PACKAGE_INSTALL}"
+ export INSTALL_PACKAGES_MULTILIB_RPM="${MULTILIB_PACKAGE_INSTALL}"
export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${PACKAGE_INSTALL_ATTEMPTONLY}"
export INSTALL_PACKAGES_LINGUAS_RPM="${LINGUAS_INSTALL}"
export INSTALL_PROVIDENAME_RPM=""
@@ -210,6 +211,7 @@ python () {
bb.data.setVar('RPM_POSTPROCESS_COMMANDS', '', d)
ml_package_archs = ""
+ ml_prefix_list = ""
multilibs = d.getVar('MULTILIBS', True) or ""
for ext in multilibs.split():
eext = ext.split(':')
@@ -221,6 +223,8 @@ python () {
localdata.setVar("MACHINE_ARCH", eext[1] + "_" + localdata.getVar("MACHINE_ARCH", False))
package_archs = localdata.getVar("PACKAGE_ARCHS", True) or ""
ml_package_archs += " " + package_archs
+ ml_prefix_list += " " + eext[1]
#bb.note("ML_PACKAGE_ARCHS %s %s %s" % (eext[1], localdata.getVar("PACKAGE_ARCHS", True) or "(none)", overrides))
bb.data.setVar('MULTILIB_PACKAGE_ARCHS', ml_package_archs, d)
+ bb.data.setVar('MULTILIB_PREFIX_LIST', ml_prefix_list, d)
}
--
1.7.3.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/7] Fix RPM dependencies
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
2011-09-21 1:24 ` [PATCH 1/7] rpm: add multilib prefix for archs under deploy/rpm [v2] Mark Hatle
2011-09-21 1:24 ` [PATCH 2/7] multilib: install MULTILIB_IMAGE_INSTALL [v2] Mark Hatle
@ 2011-09-21 1:24 ` Mark Hatle
2011-09-21 1:24 ` [PATCH 4/7] Add a run-time dependency that eglibc support GNU_HASH Mark Hatle
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
When packaging for RPM, dependencies were not being properly added
to the packages. Only the "providing" dependencies were added due
to a typo.
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
meta/classes/package_rpm.bbclass | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 4605ec8..d822b54 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -840,7 +840,7 @@ python do_package_rpm () {
os.chmod(outdepends, 0755)
# Poky / RPM Provides
- outprovides = workdir + "/" + srcname + ".requires"
+ outprovides = workdir + "/" + srcname + ".provides"
try:
from __builtin__ import file
--
1.7.3.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/7] Add a run-time dependency that eglibc support GNU_HASH
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
` (2 preceding siblings ...)
2011-09-21 1:24 ` [PATCH 3/7] Fix RPM dependencies Mark Hatle
@ 2011-09-21 1:24 ` Mark Hatle
2011-09-21 1:24 ` [PATCH 5/7] Update python dependencies to be simply to "python" Mark Hatle
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
RPM checks to see if binaries require GNU_HASH, if they do it adds
an automatic dependency of "rtld(GNU_HASH)". We need to satisfy
this dependency, and we do it by providing rtld(GNU_HASH) in the
package(s) that provide a runtime-linker.
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
meta/recipes-core/eglibc/eglibc-package.inc | 3 ++-
meta/recipes-core/eglibc/eglibc_2.12.bb | 2 +-
meta/recipes-core/eglibc/eglibc_2.13.bb | 2 +-
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/meta/recipes-core/eglibc/eglibc-package.inc b/meta/recipes-core/eglibc/eglibc-package.inc
index 469e02d..519a49c 100644
--- a/meta/recipes-core/eglibc/eglibc-package.inc
+++ b/meta/recipes-core/eglibc/eglibc-package.inc
@@ -22,7 +22,8 @@ PKGSUFFIX_virtclass-nativesdk = "-nativesdk"
PACKAGES = "${PN}-dbg ${PN} catchsegv${PKGSUFFIX} sln${PKGSUFFIX} nscd${PKGSUFFIX} ldd${PKGSUFFIX} ${PN}-utils eglibc-extra-nss${PKGSUFFIX} eglibc-thread-db${PKGSUFFIX} ${PN}-pic ${PN}-dev ${PN}-doc libcidn${PKGSUFFIX} libmemusage${PKGSUFFIX} libsegfault${PKGSUFFIX} ${PN}-pcprofile libsotruss${PKGSUFFIX}"
-RPROVIDES_${PN} = "glibc${PKGSUFFIX}"
+# The ld.so in this eglibc supports the GNU_HASH
+RPROVIDES_${PN} = "glibc${PKGSUFFIX} rtld(GNU_HASH)"
RPROVIDES_${PN}-utils = "glibc${PKGSUFFIX}-utils"
RPROVIDES_${PN}-pic = "glibc${PKGSUFFIX}-pic"
RPROVIDES_${PN}-dev = "glibc${PKGSUFFIX}-dev"
diff --git a/meta/recipes-core/eglibc/eglibc_2.12.bb b/meta/recipes-core/eglibc/eglibc_2.12.bb
index a71c4d4..a9d208b 100644
--- a/meta/recipes-core/eglibc/eglibc_2.12.bb
+++ b/meta/recipes-core/eglibc/eglibc_2.12.bb
@@ -1,7 +1,7 @@
require eglibc.inc
DEPENDS += "gperf-native"
-PR = "r23"
+PR = "r24"
SRCREV = "14158"
diff --git a/meta/recipes-core/eglibc/eglibc_2.13.bb b/meta/recipes-core/eglibc/eglibc_2.13.bb
index b2da697..b549496 100644
--- a/meta/recipes-core/eglibc/eglibc_2.13.bb
+++ b/meta/recipes-core/eglibc/eglibc_2.13.bb
@@ -3,7 +3,7 @@ require eglibc.inc
SRCREV = "14157"
DEPENDS += "gperf-native"
-PR = "r14"
+PR = "r15"
PR_append = "+svnr${SRCPV}"
EGLIBC_BRANCH="eglibc-2_13"
--
1.7.3.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/7] Update python dependencies to be simply to "python"
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
` (3 preceding siblings ...)
2011-09-21 1:24 ` [PATCH 4/7] Add a run-time dependency that eglibc support GNU_HASH Mark Hatle
@ 2011-09-21 1:24 ` Mark Hatle
2011-09-21 1:24 ` [PATCH 6/7] busybox: Enhance to add dynamic per-file provides Mark Hatle
2011-09-21 1:24 ` [PATCH 7/7] multilib_global.bbclass: Fix non-multilib package provides [v2] Mark Hatle
6 siblings, 0 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
Previously python dependencies were of the format "python(abi) = ..."
This format is not yet supportable within OE, so revert to a form
we know we can handle.
Introduce a change to package.bbclass that ensures it will causes the
sstate-cache's "package" to invalidate. Since pythondeps changed, the
output of rpmdeps changes, which causes the per-file dependency
information to change.... thus we need to invalidate the cache!
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
meta/classes/package.bbclass | 6 ++++++
meta/recipes-devtools/rpm/rpm/pythondeps.sh | 16 ++++++++++++++++
meta/recipes-devtools/rpm/rpm_5.4.0.bb | 4 +++-
3 files changed, 25 insertions(+), 1 deletions(-)
create mode 100755 meta/recipes-devtools/rpm/rpm/pythondeps.sh
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 3f5c904..e581ae2 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1,3 +1,9 @@
+# Change the following version to cause sstate to invalidate the package
+# cache. This is useful if an item this class depends on changes in a
+# way that the output of this class changes. rpmdeps is a good example
+# as any change to rpmdeps requires this to be rerun.
+PACKAGE_BBCLASS_VERSION = "r1"
+
#
# Packaging process
#
diff --git a/meta/recipes-devtools/rpm/rpm/pythondeps.sh b/meta/recipes-devtools/rpm/rpm/pythondeps.sh
new file mode 100755
index 0000000..083b174
--- /dev/null
+++ b/meta/recipes-devtools/rpm/rpm/pythondeps.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+[ $# -ge 1 ] || {
+ cat > /dev/null
+ exit 0
+}
+
+case $1 in
+-R|--requires)
+ shift
+ grep "/usr/\(lib[^/]*\|share\)/python[^/]*/" >/dev/null && echo "python"
+ exit 0
+ ;;
+esac
+
+exit 0
diff --git a/meta/recipes-devtools/rpm/rpm_5.4.0.bb b/meta/recipes-devtools/rpm/rpm_5.4.0.bb
index b805f7d..a7b360d 100644
--- a/meta/recipes-devtools/rpm/rpm_5.4.0.bb
+++ b/meta/recipes-devtools/rpm/rpm_5.4.0.bb
@@ -45,7 +45,7 @@ LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1"
DEPENDS = "bzip2 zlib db openssl elfutils expat libpcre attr acl popt ${extrarpmdeps}"
extrarpmdeps = "python perl"
extrarpmdeps_virtclass-native = ""
-PR = "r20"
+PR = "r21"
# rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed
# in order to extract the distribution SRPM into a format we can extract...
@@ -63,6 +63,7 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.0-0.20101229.src.rpm;ex
file://rpm-fileclass.patch \
file://rpm-canonarch.patch \
file://rpm-no-loopmsg.patch \
+ file://pythondeps.sh \
"
# file://rpm-autoconf.patch \
@@ -352,6 +353,7 @@ do_install_append() {
# Enable Debian style arbitrary tags...
sed -i -e 's,%_arbitrary_tags[^_].*,%_arbitrary_tags %{_arbitrary_tags_debian},' ${D}/${libdir}/rpm/macros
+ install -m 0755 ${WORKDIR}/pythondeps.sh ${D}/${libdir}/rpm/pythondeps.sh
install -m 0755 ${WORKDIR}/perfile_rpmdeps.sh ${D}/${libdir}/rpm/perfile_rpmdeps.sh
# Remove unpackaged files (based on list in rpm.spec)
--
1.7.3.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 6/7] busybox: Enhance to add dynamic per-file provides
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
` (4 preceding siblings ...)
2011-09-21 1:24 ` [PATCH 5/7] Update python dependencies to be simply to "python" Mark Hatle
@ 2011-09-21 1:24 ` Mark Hatle
2011-09-21 1:24 ` [PATCH 7/7] multilib_global.bbclass: Fix non-multilib package provides [v2] Mark Hatle
6 siblings, 0 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
When using the RPM package backend, we need a full list of per-file
provides (and requires). The busybox package provides a number of
command line utilities, such as /usr/bin/env. However, because
the utilities are created at post install time via scripting the
provide of each of the links was never made. So any programs,
such as python, that require /usr/bin/env were unable to resolve
the dependency and failed.
This change only affects packaging backends that use per-file
dependency data. Currently RPM is the only packaging backend
with this ability.
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
meta/recipes-core/busybox/busybox.inc | 32 +++++++++++++++++++++++++++
meta/recipes-core/busybox/busybox_1.18.5.bb | 2 +-
2 files changed, 33 insertions(+), 1 deletions(-)
diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
index 3f93358..acd635b 100644
--- a/meta/recipes-core/busybox/busybox.inc
+++ b/meta/recipes-core/busybox/busybox.inc
@@ -205,6 +205,38 @@ do_install () {
install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
}
+python package_do_filedeps_append () {
+ # We need to load the full set of busybox provides from the /etc/busybox.links
+ # The pkg_postinst_ is what creates the actual links
+
+ pkg = d.getVar('PN', True)
+ f_busybox = "/bin/busybox"
+ f_busybox_links = "/etc/busybox.links"
+
+ requires_files = []
+ provides_files = []
+
+ # Load/backup original set
+ filerprovides = d.getVar('FILERPROVIDES_%s_%s' % (f_busybox, pkg), True) or ""
+
+ dep_pipe = os.popen('sed -e "s,^,Provides: ," %s/%s%s' % (pkgdest, pkg, f_busybox_links))
+
+ process_deps(dep_pipe, pkg, "%s/%s%s" % (pkgdest, pkg, f_busybox), provides_files, requires_files)
+
+ # Add the new set
+ filerprovides += d.getVar('FILERPROVIDES_%s_%s' % (f_busybox, pkg), True) or ""
+
+ # Make sure there is an entry for this item in the FILERPROVIDESFLIST...
+ filerprovidesflist = (d.getVar('FILERPROVIDESFLIST_%s' % pkg, True) or "").split()
+ for file in provides_files:
+ if file not in filerprovidesflist:
+ filerprovidesflist.append(file)
+ d.setVar('FILERPROVIDESFLIST_%s' % pkg, " ".join(filerprovidesflist))
+
+ # Store the new provides
+ d.setVar('FILERPROVIDES_%s_%s' % (f_busybox, pkg), filerprovides)
+}
+
pkg_postinst_${PN} () {
# If we are not making an image we create links for the utilities that doesn't exist
# so the update-alternatives script will get the utilities it needs
diff --git a/meta/recipes-core/busybox/busybox_1.18.5.bb b/meta/recipes-core/busybox/busybox_1.18.5.bb
index c0dc1d4..bdafb31 100644
--- a/meta/recipes-core/busybox/busybox_1.18.5.bb
+++ b/meta/recipes-core/busybox/busybox_1.18.5.bb
@@ -1,5 +1,5 @@
require busybox.inc
-PR = "r0"
+PR = "r1"
SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
file://udhcpscript.patch \
--
1.7.3.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 7/7] multilib_global.bbclass: Fix non-multilib package provides [v2]
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
` (5 preceding siblings ...)
2011-09-21 1:24 ` [PATCH 6/7] busybox: Enhance to add dynamic per-file provides Mark Hatle
@ 2011-09-21 1:24 ` Mark Hatle
6 siblings, 0 replies; 8+ messages in thread
From: Mark Hatle @ 2011-09-21 1:24 UTC (permalink / raw)
To: openembedded-core
In non-multilib packages, configured in a multilib configuration we
need to adjust the system provides and rprovides to include the
virtual multilib variant.
This resolves a problem introduced in the
329d864f9bbf94ad3aae8df43d63fe10e4237e4f commit. Where "allarch"
packages were suddenly providing all variants of an object.
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
meta/classes/multilib_global.bbclass | 27 ++++++++++++++++++++++-----
1 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index ed14565..cd22163 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -6,16 +6,33 @@ python multilib_virtclass_handler_global () {
if isinstance(e, bb.event.RecipeParsed) and not variant:
if bb.data.inherits_class('kernel', e.data) or bb.data.inherits_class('module-base', e.data) or bb.data.inherits_class('allarch', e.data):
- origprovs = provs = e.data.getVar("PROVIDES", True)
- rprovs = e.data.getVar("RPROVIDES", True)
variants = (e.data.getVar("MULTILIB_VARIANTS", True) or "").split()
+
+ # Process PROVIDES
+ origprovs = provs = e.data.getVar("PROVIDES", True) or ""
for variant in variants:
provs = provs + " " + multilib_map_variable("PROVIDES", variant, e.data)
- for pkg in e.data.getVar("PACKAGES", True).split():
- rprovs = rprovs + " " + variant + "-" + pkg
+ # Reset to original value so next time around multilib_map_variable works properly
e.data.setVar("PROVIDES", origprovs)
e.data.setVar("PROVIDES", provs)
+
+ # Process RPROVIDES
+ origrprovs = rprovs = e.data.getVar("RPROVIDES", True) or ""
+ for variant in variants:
+ rprovs = rprovs + " " + multilib_map_variable("RPROVIDES", variant, e.data)
+ # Reset to original value so next time around multilib_map_variable works properly
+ e.data.setVar("RPROVIDES", origrprovs)
e.data.setVar("RPROVIDES", rprovs)
+
+ # Process RPROVIDES_${PN}...
+ for pkg in (e.data.getVar("PACKAGES", True) or "").split():
+ origrprovs = rprovs = e.data.getVar("RPROVIDES_%s" % pkg, True) or ""
+ for variant in variants:
+ rprovs = rprovs + " " + multilib_map_variable("RPROVIDES_%s" % pkg, variant, e.data)
+ rprovs = rprovs + " " + variant + "-" + pkg
+ # Reset to original value so next time around multilib_map_variable works properly
+ e.data.setVar("RPROVIDES_%s" % pkg, origrprovs)
+ e.data.setVar("RPROVIDES_%s" % pkg, rprovs)
}
addhandler multilib_virtclass_handler_global
@@ -35,7 +52,7 @@ def multilib_extend_name(variant, name):
def multilib_map_variable(varname, variant, d):
var = d.getVar(varname, True)
if not var:
- return
+ return ""
var = var.split()
newvar = []
for v in var:
--
1.7.3.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-09-21 1:28 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-21 1:24 [PATCH 0/7] Fix a number of package installation related items [v2] Mark Hatle
2011-09-21 1:24 ` [PATCH 1/7] rpm: add multilib prefix for archs under deploy/rpm [v2] Mark Hatle
2011-09-21 1:24 ` [PATCH 2/7] multilib: install MULTILIB_IMAGE_INSTALL [v2] Mark Hatle
2011-09-21 1:24 ` [PATCH 3/7] Fix RPM dependencies Mark Hatle
2011-09-21 1:24 ` [PATCH 4/7] Add a run-time dependency that eglibc support GNU_HASH Mark Hatle
2011-09-21 1:24 ` [PATCH 5/7] Update python dependencies to be simply to "python" Mark Hatle
2011-09-21 1:24 ` [PATCH 6/7] busybox: Enhance to add dynamic per-file provides Mark Hatle
2011-09-21 1:24 ` [PATCH 7/7] multilib_global.bbclass: Fix non-multilib package provides [v2] Mark Hatle
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox