package(_ipk).bbclass: opkg using ALL_MULTILIB_PACKAGE_ARCHS

[YOCTO #1345]
The new variable ALL_MULTILIB_PACKAGE_ARCHS contains all the values of
PACKAGE_ARCHS for each multilib variants. The opkg backend now uses this
new value insteald of the PACKAGE_ARCHS to update the opkg indexes and
to generate the opkg configuration files. This allows the normal
packages and multilib packages may be installed into the same rootfs.

(From OE-Core rev: b774bf44ef004276da12a83ebd69715c00b596ac)

Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Lianhao Lu 2011-08-16 16:26:49 +08:00 committed by Richard Purdie
parent f759bde4f7
commit 57bd62ad5c
3 changed files with 29 additions and 38 deletions

View File

@ -46,6 +46,8 @@ PKGDEST = "${WORKDIR}/packages-split"
LOCALE_SECTION ?= ''
ALL_MULTILIB_PACKAGE_ARCHS = "${@all_multilib_tune_values(d, 'PACKAGE_ARCHS')}"
# rpm is used for the per-file dependency identification
PACKAGE_DEPENDS += "rpm-native"
@ -184,17 +186,6 @@ python () {
bb.data.setVarFlag('do_package', 'deptask', " ".join(deps), d)
else:
d.setVar("PACKAGERDEPTASK", "")
multilib_archs = []
multilibs= d.getVar('MULTILIBS', True) or ""
if multilibs:
for ext in multilibs.split():
eext = ext.split(':')
if len(eext) > 1:
if eext[0] == 'multilib':
multilib_archs.append('ml' + eext[1])
d.setVar("MULTILIB_ARCHS", ' '.join(multilib_archs))
}
def splitfile(file, debugfile, debugsrcdir, d):

View File

@ -64,14 +64,13 @@ python package_ipk_install () {
package_tryout_install_multilib_ipk() {
#try install multilib
multilib_tryout_dirs=""
for arch in ${MULTILIB_ARCHS}; do
local target_rootfs="${MULTILIB_TEMP_ROOTFS}/${arch}"
for item in ${MULTILIB_VARIANTS}; do
local target_rootfs="${MULTILIB_TEMP_ROOTFS}/${item}"
local ipkg_args="-f ${INSTALL_CONF_IPK} -o ${target_rootfs} --force_overwrite"
local selected_pkg=""
#strip the "ml" from package_arch
local pkgarch_prefix="${arch:2}-"
for pkg in "${INSTALL_PACKAGES_MULTILIB_IPK}"; do
if [ ${pkg:0:${#pkgarch_prefix}} == ${pkgarch_prefix} ]; then
local pkgname_prefix="${item}-"
for pkg in ${INSTALL_PACKAGES_MULTILIB_IPK}; do
if [ ${pkg:0:${#pkgname_prefix}} == ${pkgname_prefix} ]; then
selected_pkg="${selected_pkg} ${pkg}"
fi
done
@ -163,7 +162,7 @@ ipk_log_check() {
package_update_index_ipk () {
set -x
ipkgarchs="${PACKAGE_ARCHS} ${SDK_PACKAGE_ARCHS}"
ipkgarchs="${ALL_MULTILIB_PACKAGE_ARCHS} ${SDK_PACKAGE_ARCHS}"
if [ ! -z "${DEPLOY_KEEP_PACKAGES}" ]; then
return
@ -203,19 +202,12 @@ package_generate_ipkg_conf () {
done
echo "src oe file:${DEPLOY_DIR_IPK}" >> ${IPKGCONF_TARGET}
ipkgarchs="${PACKAGE_ARCHS}"
ipkgarchs="${ALL_MULTILIB_PACKAGE_ARCHS}"
for arch in $ipkgarchs; do
if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${IPKGCONF_TARGET}
fi
done
multilib_archs="${MULTILIB_ARCHS}"
for arch in $multilib_archs; do
if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${IPKGCONF_TARGET}
fi
done
}
package_generate_archlist () {
@ -226,18 +218,12 @@ package_generate_archlist () {
priority=$(expr $priority + 5)
done
ipkgarchs="${PACKAGE_ARCHS}"
ipkgarchs="${ALL_MULTILIB_PACKAGE_ARCHS}"
priority=1
for arch in $ipkgarchs; do
echo "arch $arch $priority" >> ${IPKGCONF_TARGET}
priority=$(expr $priority + 5)
done
multilib_archs="${MULTILIB_ARCHS}"
for arch in $multilib_archs; do
echo "arch $arch $priority" >> ${IPKGCONF_TARGET}
priority=$(expr $priority + 5)
done
}
python do_package_ipk () {

View File

@ -352,12 +352,16 @@ def extend_variants(d, var, extend, delim=':'):
variants.append(eext[1])
return " ".join(variants)
def all_multilib_tune_values(d, var, unique=True):
def all_multilib_tune_values(d, var, unique = True, need_split = True, delim = ' '):
"""Return a string of all ${var} in all multilib tune configuration"""
values = []
value = d.getVar(var, True) or ""
if value != "":
values.append(value)
if need_split:
for item in value.split(delim):
values.append(item)
else:
values.append(value)
variants = d.getVar("MULTILIB_VARIANTS", True) or ""
for item in variants.split():
localdata = bb.data.createCopy(d)
@ -366,7 +370,17 @@ def all_multilib_tune_values(d, var, unique=True):
bb.data.update_data(localdata)
value = localdata.getVar(var, True) or ""
if value != "":
values.append(value)
if need_split:
for item in value.split(delim):
values.append(item)
else:
values.append(value)
if unique:
values = set(values)
return " ".join(values)
#we do this to keep order as much as possible
ret = []
for value in values:
if not value in ret:
ret.append(value)
else:
ret = values
return " ".join(ret)