* [PATCH 0/3] Multilib image/package backend enablement
@ 2011-07-26 22:50 Richard Purdie
2011-07-26 22:50 ` [PATCH 1/3] package/rootfs_rpm: Implement RPM multilib package handling Richard Purdie
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Richard Purdie @ 2011-07-26 22:50 UTC (permalink / raw)
To: openembedded-core
The following three patches enable very basic multilib support for
the opkg and rpm backends.
They are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib rpurdie/ml5
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=rpurdie/ml5
Lianhao Lu (2):
package(rootfs)_ipk.bbclass: support multilib in opkg backend.
image.bbclass: Added variables for multilib support.
Mark Hatle (1):
package/rootfs_rpm: Implement RPM multilib package handling
meta/classes/image.bbclass | 54 +++++++++-
meta/classes/package_ipk.bbclass | 51 +++++++++
meta/classes/package_rpm.bbclass | 229 ++++++++++++++++++++++++--------------
meta/classes/rootfs_ipk.bbclass | 2 +
meta/classes/rootfs_rpm.bbclass | 17 +++-
5 files changed, 266 insertions(+), 87 deletions(-)
--
1.7.4.1
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/3] package/rootfs_rpm: Implement RPM multilib package handling 2011-07-26 22:50 [PATCH 0/3] Multilib image/package backend enablement Richard Purdie @ 2011-07-26 22:50 ` Richard Purdie 2011-07-27 3:18 ` Mark Hatle 2011-07-26 22:50 ` [PATCH 2/3] package(rootfs)_ipk.bbclass: support multilib in opkg backend Richard Purdie 2011-07-26 22:50 ` [PATCH 3/3] image.bbclass: Added variables for multilib support Richard Purdie 2 siblings, 1 reply; 7+ messages in thread From: Richard Purdie @ 2011-07-26 22:50 UTC (permalink / raw) To: openembedded-core From: Mark Hatle <mark.hatle@windriver.com> This is a first pass at adding multilib support to the RPM package and image handling code. Signed-off-by: Mark Hatle <mark.hatle@windriver.com> --- meta/classes/package_rpm.bbclass | 229 ++++++++++++++++++++++++-------------- meta/classes/rootfs_rpm.bbclass | 17 +++- 2 files changed, 160 insertions(+), 86 deletions(-) diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 2cc5742..05f3929 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass @@ -21,67 +21,71 @@ RPMCONF_HOST_BASE = "${DEPLOY_DIR_RPM}/solvedb-sdk" # Update the Packages depsolver db in ${DEPLOY_DIR_RPM} # package_update_index_rpm () { - rpmarchs="${PACKAGE_ARCHS}" - if [ ! -z "${DEPLOY_KEEP_PACKAGES}" ]; then return fi - packagedirs="" - packagedirs_sdk="" - for arch in $rpmarchs ; do - sdkarch=`echo $arch | sed -e 's/${HOST_ARCH}/${SDK_ARCH}/'` - extension="-nativesdk" - if [ "$sdkarch" = "all" -o "$sdkarch" = "any" -o "$sdkarch" = "noarch" ]; then - extension="" - fi - packagedirs="${DEPLOY_DIR_RPM}/$arch $packagedirs" - packagedirs_sdk="${DEPLOY_DIR_RPM}/$sdkarch$extension $packagedirs_sdk" + base_package_archs="${PACKAGE_ARCHS}" + ml_package_archs="${MULTILIB_PACKAGE_ARCHS}" + + for archvar in base_package_archs ml_package_archs; do + eval archs=\${${archvar}} + packagedirs="" + packagedirs_sdk="" + for arch in $archs; do + sdkarch=`echo $arch | sed -e 's/${HOST_ARCH}/${SDK_ARCH}/'` + extension="-nativesdk" + if [ "$sdkarch" = "all" -o "$sdkarch" = "any" -o "$sdkarch" = "noarch" ]; then + extension="" + fi + packagedirs="${DEPLOY_DIR_RPM}/$arch $packagedirs" + packagedirs_sdk="${DEPLOY_DIR_RPM}/$sdkarch$extension $packagedirs_sdk" - rm -rf ${DEPLOY_DIR_RPM}/$arch/solvedb - rm -rf ${DEPLOY_DIR_RPM}/$sdkarch$extension/solvedb - done + rm -rf ${DEPLOY_DIR_RPM}/$arch/solvedb + rm -rf ${DEPLOY_DIR_RPM}/$sdkarch$extension/solvedb + done - cat /dev/null > ${RPMCONF_TARGET_BASE}.conf - for pkgdir in $packagedirs; do - if [ -e $pkgdir/ ]; then - echo "Generating solve db for $pkgdir..." - echo $pkgdir/solvedb >> ${RPMCONF_TARGET_BASE}.conf - if [ -d $pkgdir/solvedb ]; then - # We've already processed this and it's a duplicate - continue + cat /dev/null > ${RPMCONF_TARGET_BASE}-${archvar}.conf + for pkgdir in $packagedirs; do + if [ -e $pkgdir/ ]; then + echo "Generating solve db for $pkgdir..." + echo $pkgdir/solvedb >> ${RPMCONF_TARGET_BASE}-${archvar}.conf + if [ -d $pkgdir/solvedb ]; then + # We've already processed this and it's a duplicate + continue + fi + mkdir -p $pkgdir/solvedb + echo "# Dynamically generated solve manifest" >> $pkgdir/solvedb/manifest + find $pkgdir -maxdepth 1 -type f >> $pkgdir/solvedb/manifest + ${RPM} -i --replacepkgs --replacefiles --oldpackage \ + -D "_dbpath $pkgdir/solvedb" --justdb \ + --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ + --ignoresize --nosignature --nodigest \ + -D "__dbi_txn create nofsync" \ + $pkgdir/solvedb/manifest fi - mkdir -p $pkgdir/solvedb - echo "# Dynamically generated solve manifest" >> $pkgdir/solvedb/manifest - find $pkgdir -maxdepth 1 -type f >> $pkgdir/solvedb/manifest - ${RPM} -i --replacepkgs --replacefiles --oldpackage \ - -D "_dbpath $pkgdir/solvedb" --justdb \ - --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ - --ignoresize --nosignature --nodigest \ - -D "__dbi_txn create nofsync" \ - $pkgdir/solvedb/manifest - fi - done + done - cat /dev/null > ${RPMCONF_HOST_BASE}.conf - for pkgdir in $packagedirs_sdk; do - if [ -e $pkgdir/ ]; then - echo "Generating solve db for $pkgdir..." - echo $pkgdir/solvedb >> ${RPMCONF_HOST_BASE}.conf - if [ -d $pkgdir/solvedb ]; then - # We've already processed this and it's a duplicate - continue - fi - mkdir -p $pkgdir/solvedb - echo "# Dynamically generated solve manifest" >> $pkgdir/solvedb/manifest - find $pkgdir -maxdepth 1 -type f >> $pkgdir/solvedb/manifest - ${RPM} -i --replacepkgs --replacefiles --oldpackage \ - -D "_dbpath $pkgdir/solvedb" --justdb \ - --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ - --ignoresize --nosignature --nodigest \ - -D "__dbi_txn create nofsync" \ - $pkgdir/solvedb/manifest - fi + cat /dev/null > ${RPMCONF_HOST_BASE}.conf + for pkgdir in $packagedirs_sdk; do + if [ -e $pkgdir/ ]; then + echo "Generating solve db for $pkgdir..." + echo $pkgdir/solvedb >> ${RPMCONF_HOST_BASE}-${archvar}.conf + if [ -d $pkgdir/solvedb ]; then + # We've already processed this and it's a duplicate + continue + fi + mkdir -p $pkgdir/solvedb + echo "# Dynamically generated solve manifest" >> $pkgdir/solvedb/manifest + find $pkgdir -maxdepth 1 -type f >> $pkgdir/solvedb/manifest + ${RPM} -i --replacepkgs --replacefiles --oldpackage \ + -D "_dbpath $pkgdir/solvedb" --justdb \ + --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ + --ignoresize --nosignature --nodigest \ + -D "__dbi_txn create nofsync" \ + $pkgdir/solvedb/manifest + fi + done done } @@ -91,25 +95,43 @@ package_update_index_rpm () { # package_generate_rpm_conf () { printf "_solve_dbpath " > ${RPMCONF_TARGET_BASE}.macro - colon=false - for each in `cat ${RPMCONF_TARGET_BASE}.conf` ; do - if [ "$colon" == true ]; then - printf ":" >> ${RPMCONF_TARGET_BASE}.macro - fi - printf "%s" $each >> ${RPMCONF_TARGET_BASE}.macro - colon=true - done - printf "\n" >> ${RPMCONF_TARGET_BASE}.macro + o_colon_t=false + o_colon_h=false + + for archvar in base_package_archs ml_package_archs; do + printf "_solve_dbpath " > ${RPMCONF_TARGET_BASE}-${archvar}.macro + colon=false + for each in `cat ${RPMCONF_TARGET_BASE}-${archvar}.conf` ; do + if [ "$o_colon_t" == true ]; then + printf ":" >> ${RPMCONF_TARGET_BASE}.macro + fi + if [ "$colon" == true ]; then + printf ":" >> ${RPMCONF_TARGET_BASE}-${archvar}.macro + fi + printf "%s" $each >> ${RPMCONF_TARGET_BASE}.macro + o_colon_t=true + printf "%s" $each >> ${RPMCONF_TARGET_BASE}-${archvar}.macro + colon=true + done + printf "\n" >> ${RPMCONF_TARGET_BASE}-${archvar}.macro - printf "_solve_dbpath " > ${RPMCONF_HOST_BASE}.macro - colon=false - for each in `cat ${RPMCONF_HOST_BASE}.conf` ; do - if [ "$colon" == true ]; then - printf ":" >> ${RPMCONF_HOST_BASE}.macro - fi - printf "%s" $each >> ${RPMCONF_HOST_BASE}.macro - colon=true + printf "_solve_dbpath " > ${RPMCONF_HOST_BASE}-${archvar}.macro + colon=false + for each in `cat ${RPMCONF_HOST_BASE}-${archvar}.conf` ; do + if [ "$o_colon_h" == true ]; then + printf ":" >> ${RPMCONF_HOST_BASE}.macro + fi + if [ "$colon" == true ]; then + printf ":" >> ${RPMCONF_HOST_BASE}-${archvar}.macro + fi + printf "%s" $each >> ${RPMCONF_HOST_BASE}.macro + o_colon_h=true + printf "%s" $each >> ${RPMCONF_HOST_BASE}-${archvar}.macro + colon=true + done + printf "\n" >> ${RPMCONF_HOST_BASE}-${archvar}.macro done + printf "\n" >> ${RPMCONF_TARGET_BASE}.macro printf "\n" >> ${RPMCONF_HOST_BASE}.macro } @@ -139,11 +161,11 @@ rpm_log_check() { # resolve_pacakge <pkgname> <solvdb conffile> # resolve_package_rpm () { - local pkg="$1" - local conffile="$2" + local conffile="$1" + shift local pkg_name="" for solve in `cat ${conffile}`; do - pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --yaml $pkg | grep -i 'Packageorigin' | cut -d : -f 2) + pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --yaml $@ | grep -i 'Packageorigin' | cut -d : -f 2) if [ -n "$pkg_name" ]; then break; fi @@ -178,10 +200,10 @@ package_install_internal_rpm () { # Setup base system configuration mkdir -p ${target_rootfs}/etc/rpm/ - echo "${platform}-poky-linux-gnu" > ${target_rootfs}/etc/rpm/platform + echo "${platform}${TARGET_VENDOR}-${TARGET_OS}" > ${target_rootfs}/etc/rpm/platform if [ ! -z "$platform_extra" ]; then for pt in $platform_extra ; do - echo "$pt-.*-linux.*" >> ${target_rootfs}/etc/rpm/platform + echo "$pt-.*-${TARGET_OS}" >> ${target_rootfs}/etc/rpm/platform done fi @@ -204,9 +226,16 @@ package_install_internal_rpm () { if [ ! -z "${package_lingusa}" ]; then for pkg in ${package_lingusa}; do echo "Processing $pkg..." - pkg_name=$(resolve_package_rpm $pkg ${confbase}.conf) + + archvar=base_package_archs + ml_pkg=$(echo ${pkg} | sed "s,^${MLPREFIX}\(.*\),\1,") + if [ "${ml_pkg}" != "${pkg}" ]; then + archvar=ml_package_archs + fi + + pkg_name=$(resolve_package_rpm ${confbase}-${archvar}.conf ${ml_pkg}) if [ -z "$pkg_name" ]; then - echo "Unable to find package $pkg!" + echo "Unable to find package $pkg ($ml_pkg)!" exit 1 fi echo $pkg_name >> ${IMAGE_ROOTFS}/install/install.manifest @@ -217,12 +246,19 @@ package_install_internal_rpm () { if [ ! -z "${package_to_install}" ]; then for pkg in ${package_to_install} ; do echo "Processing $pkg..." - pkg_name=$(resolve_package_rpm $pkg ${confbase}.conf) + + archvar=base_package_archs + ml_pkg=$(echo ${pkg} | sed "s,$^{MLPREFIX}\(.*\),\1,") + if [ "${ml_pkg}" != "${pkg}" ]; then + archvar=ml_package_archs + fi + + pkg_name=$(resolve_package_rpm ${confbase}-${archvar}.conf ${ml_pkg}) if [ -z "$pkg_name" ]; then - echo "Unable to find package $pkg!" + echo "Unable to find package $pkg ($ml_pkg)!" exit 1 fi - echo $pkg_name >> ${target_rootfs}/install/install.manifest + echo $pkg_name >> ${IMAGE_ROOTFS}/install/install.manifest done fi @@ -318,6 +354,21 @@ python write_specfile () { import textwrap import oe.packagedata + # We need a simple way to remove the MLPREFIX from the package name, + # and dependency information... + def strip_multilib(name, d): + multilibs = d.getVar('MULTILIBS', True) or "" + for ext in multilibs.split(): + eext = ext.split(':') + if len(eext) > 1 and eext[0] == 'multilib' and name and name.find(eext[1] + '-') == 0: + name = (eext[1] + '-').join(name.split(eext[1] + '-', 1)[1:]) + return name + +# ml = bb.data.getVar("MLPREFIX", d, True) +# if ml and name and len(ml) != 0 and name.find(ml) == 0: +# return ml.join(name.split(ml, 1)[1:]) +# return name + # In RPM, dependencies are of the format: pkg <>= Epoch:Version-Release # This format is similar to OE, however there are restrictions on the # characters that can be in a field. In the Version field, "-" @@ -346,7 +397,7 @@ python write_specfile () { pv = subd['PKGV'] reppv = pv.replace('-', '+') ver = ver.replace(pv, reppv) - newdeps_dict[dep] = ver + newdeps_dict[strip_multilib(dep, d)] = ver depends = bb.utils.join_deps(newdeps_dict) bb.data.setVar(varname, depends.strip(), d) @@ -394,7 +445,7 @@ python write_specfile () { return # Construct the SPEC file... - srcname = bb.data.getVar('PN', d, True) + srcname = strip_multilib(bb.data.getVar('PN', d, True), d) srcsummary = (bb.data.getVar('SUMMARY', d, True) or bb.data.getVar('DESCRIPTION', d, True) or ".") srcversion = bb.data.getVar('PKGV', d, True).replace('-', '+') srcrelease = bb.data.getVar('PKGR', d, True) @@ -405,7 +456,7 @@ python write_specfile () { srchomepage = bb.data.getVar('HOMEPAGE', d, True) srcdescription = bb.data.getVar('DESCRIPTION', d, True) or "." - srcdepends = bb.data.getVar('DEPENDS', d, True) + srcdepends = strip_multilib(bb.data.getVar('DEPENDS', d, True), d) srcrdepends = [] srcrrecommends = [] srcrsuggests = [] @@ -448,7 +499,7 @@ python write_specfile () { conffiles = (bb.data.getVar('CONFFILES', localdata, True) or "").split() - splitname = pkgname + splitname = strip_multilib(pkgname, d) splitsummary = (bb.data.getVar('SUMMARY', localdata, True) or bb.data.getVar('DESCRIPTION', localdata, True) or ".") splitversion = (bb.data.getVar('PKGV', localdata, True) or "").replace('-', '+') @@ -699,6 +750,14 @@ python write_specfile () { python do_package_rpm () { import os + # We need a simple way to remove the MLPREFIX from the package name, + # and dependency information... + def strip_multilib(name, d): + ml = bb.data.getVar("MLPREFIX", d, True) + if ml and name and len(ml) != 0 and name.find(ml) == 0: + return ml.join(name.split(ml, 1)[1:]) + return name + workdir = bb.data.getVar('WORKDIR', d, True) outdir = bb.data.getVar('DEPLOY_DIR_IPK', d, True) tmpdir = bb.data.getVar('TMPDIR', d, True) @@ -714,7 +773,7 @@ python do_package_rpm () { return # Construct the spec file... - srcname = bb.data.getVar('PN', d, True) + srcname = strip_multilib(bb.data.getVar('PN', d, True), d) outspecfile = workdir + "/" + srcname + ".spec" bb.data.setVar('OUTSPECFILE', outspecfile, d) bb.build.exec_func('write_specfile', d) diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index b554bae..04c0483 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass @@ -93,7 +93,7 @@ EOF # List must be prefered to least preferred order INSTALL_PLATFORM_EXTRA_RPM="" - for each_arch in ${PACKAGE_ARCHS} ; do + for each_arch in ${MULTILIB_PACKAGE_ARCHS} ${PACKAGE_ARCHS}; do INSTALL_PLATFORM_EXTRA_RPM="$each_arch $INSTALL_PLATFORM_EXTRA_RPM" done export INSTALL_PLATFORM_RPM @@ -207,4 +207,19 @@ python () { bb.data.setVarFlag('do_rootfs', 'recrdeptask', flags, d) bb.data.setVar('RPM_PREPROCESS_COMMANDS', '', d) bb.data.setVar('RPM_POSTPROCESS_COMMANDS', '', d) + + ml_package_archs = "" + multilibs = d.getVar('MULTILIBS', True) or "" + for ext in multilibs.split(): + eext = ext.split(':') + if len(eext) > 1 and eext[0] == 'multilib': + localdata = bb.data.createCopy(d) + overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + eext[1] + localdata.setVar("OVERRIDES", overrides) + # TEMP: OVERRIDES isn't working right + localdata.setVar("TUNENAME", localdata.getVar("TUNENAME_virtclass-multilib-" + eext[1], False) or "") + ml_package_archs += localdata.getVar("PACKAGE_ARCHS", True) or "" + 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.4.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] package/rootfs_rpm: Implement RPM multilib package handling 2011-07-26 22:50 ` [PATCH 1/3] package/rootfs_rpm: Implement RPM multilib package handling Richard Purdie @ 2011-07-27 3:18 ` Mark Hatle 0 siblings, 0 replies; 7+ messages in thread From: Mark Hatle @ 2011-07-27 3:18 UTC (permalink / raw) To: openembedded-core We found a minor bug in the patch since it was first sent out: On 7/26/11 5:50 PM, Richard Purdie wrote: > From: Mark Hatle <mark.hatle@windriver.com> > > This is a first pass at adding multilib support to the RPM package > and image handling code. > > Signed-off-by: Mark Hatle <mark.hatle@windriver.com> > --- > meta/classes/package_rpm.bbclass | 229 ++++++++++++++++++++++++-------------- > meta/classes/rootfs_rpm.bbclass | 17 +++- > 2 files changed, 160 insertions(+), 86 deletions(-) > > diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass > index 2cc5742..05f3929 100644 > --- a/meta/classes/package_rpm.bbclass > +++ b/meta/classes/package_rpm.bbclass > @@ -21,67 +21,71 @@ RPMCONF_HOST_BASE = "${DEPLOY_DIR_RPM}/solvedb-sdk" > # Update the Packages depsolver db in ${DEPLOY_DIR_RPM} > # > package_update_index_rpm () { > - rpmarchs="${PACKAGE_ARCHS}" > - > if [ ! -z "${DEPLOY_KEEP_PACKAGES}" ]; then > return > fi > > - packagedirs="" > - packagedirs_sdk="" > - for arch in $rpmarchs ; do > - sdkarch=`echo $arch | sed -e 's/${HOST_ARCH}/${SDK_ARCH}/'` > - extension="-nativesdk" > - if [ "$sdkarch" = "all" -o "$sdkarch" = "any" -o "$sdkarch" = "noarch" ]; then > - extension="" > - fi > - packagedirs="${DEPLOY_DIR_RPM}/$arch $packagedirs" > - packagedirs_sdk="${DEPLOY_DIR_RPM}/$sdkarch$extension $packagedirs_sdk" > + base_package_archs="${PACKAGE_ARCHS}" > + ml_package_archs="${MULTILIB_PACKAGE_ARCHS}" > + > + for archvar in base_package_archs ml_package_archs; do > + eval archs=\${${archvar}} > + packagedirs="" > + packagedirs_sdk="" > + for arch in $archs; do > + sdkarch=`echo $arch | sed -e 's/${HOST_ARCH}/${SDK_ARCH}/'` > + extension="-nativesdk" > + if [ "$sdkarch" = "all" -o "$sdkarch" = "any" -o "$sdkarch" = "noarch" ]; then > + extension="" > + fi > + packagedirs="${DEPLOY_DIR_RPM}/$arch $packagedirs" > + packagedirs_sdk="${DEPLOY_DIR_RPM}/$sdkarch$extension $packagedirs_sdk" > > - rm -rf ${DEPLOY_DIR_RPM}/$arch/solvedb > - rm -rf ${DEPLOY_DIR_RPM}/$sdkarch$extension/solvedb > - done > + rm -rf ${DEPLOY_DIR_RPM}/$arch/solvedb > + rm -rf ${DEPLOY_DIR_RPM}/$sdkarch$extension/solvedb > + done > > - cat /dev/null > ${RPMCONF_TARGET_BASE}.conf > - for pkgdir in $packagedirs; do > - if [ -e $pkgdir/ ]; then > - echo "Generating solve db for $pkgdir..." > - echo $pkgdir/solvedb >> ${RPMCONF_TARGET_BASE}.conf > - if [ -d $pkgdir/solvedb ]; then > - # We've already processed this and it's a duplicate > - continue > + cat /dev/null > ${RPMCONF_TARGET_BASE}-${archvar}.conf > + for pkgdir in $packagedirs; do > + if [ -e $pkgdir/ ]; then > + echo "Generating solve db for $pkgdir..." > + echo $pkgdir/solvedb >> ${RPMCONF_TARGET_BASE}-${archvar}.conf > + if [ -d $pkgdir/solvedb ]; then > + # We've already processed this and it's a duplicate > + continue > + fi > + mkdir -p $pkgdir/solvedb > + echo "# Dynamically generated solve manifest" >> $pkgdir/solvedb/manifest > + find $pkgdir -maxdepth 1 -type f >> $pkgdir/solvedb/manifest > + ${RPM} -i --replacepkgs --replacefiles --oldpackage \ > + -D "_dbpath $pkgdir/solvedb" --justdb \ > + --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ > + --ignoresize --nosignature --nodigest \ > + -D "__dbi_txn create nofsync" \ > + $pkgdir/solvedb/manifest > fi > - mkdir -p $pkgdir/solvedb > - echo "# Dynamically generated solve manifest" >> $pkgdir/solvedb/manifest > - find $pkgdir -maxdepth 1 -type f >> $pkgdir/solvedb/manifest > - ${RPM} -i --replacepkgs --replacefiles --oldpackage \ > - -D "_dbpath $pkgdir/solvedb" --justdb \ > - --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ > - --ignoresize --nosignature --nodigest \ > - -D "__dbi_txn create nofsync" \ > - $pkgdir/solvedb/manifest > - fi > - done > + done > > - cat /dev/null > ${RPMCONF_HOST_BASE}.conf > - for pkgdir in $packagedirs_sdk; do > - if [ -e $pkgdir/ ]; then > - echo "Generating solve db for $pkgdir..." > - echo $pkgdir/solvedb >> ${RPMCONF_HOST_BASE}.conf > - if [ -d $pkgdir/solvedb ]; then > - # We've already processed this and it's a duplicate > - continue > - fi > - mkdir -p $pkgdir/solvedb > - echo "# Dynamically generated solve manifest" >> $pkgdir/solvedb/manifest > - find $pkgdir -maxdepth 1 -type f >> $pkgdir/solvedb/manifest > - ${RPM} -i --replacepkgs --replacefiles --oldpackage \ > - -D "_dbpath $pkgdir/solvedb" --justdb \ > - --noaid --nodeps --noorder --noscripts --notriggers --noparentdirs --nolinktos --stats \ > - --ignoresize --nosignature --nodigest \ > - -D "__dbi_txn create nofsync" \ > - $pkgdir/solvedb/manifest > - fi > + cat /dev/null > ${RPMCONF_HOST_BASE}.conf The above line should be: cat /dev/null > ${RPMCONF_HOST_BASE}-${archvar}.conf .... ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] package(rootfs)_ipk.bbclass: support multilib in opkg backend. 2011-07-26 22:50 [PATCH 0/3] Multilib image/package backend enablement Richard Purdie 2011-07-26 22:50 ` [PATCH 1/3] package/rootfs_rpm: Implement RPM multilib package handling Richard Purdie @ 2011-07-26 22:50 ` Richard Purdie 2011-07-30 16:23 ` Khem Raj 2011-07-26 22:50 ` [PATCH 3/3] image.bbclass: Added variables for multilib support Richard Purdie 2 siblings, 1 reply; 7+ messages in thread From: Richard Purdie @ 2011-07-26 22:50 UTC (permalink / raw) To: openembedded-core From: Lianhao Lu <lianhao.lu@intel.com> Support install multiple multilib in opkg backend. The installation is done in 3 phases. Phase 1: install normal packages to IMAGE_ROOTFS. Phase 2: install multilib packages under MULTILIB_TEMP_ROOTFS. Packages belongs to the same multilib arch would be installed to a unique directory. Phase 3: check file confliction between IMAGE_ROOTFS and MULTILIB_TEMP_ROOTFS, install multilib packages to IMAGE_ROOTFS only if the sanity check passed. Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> --- meta/classes/package_ipk.bbclass | 51 ++++++++++++++++++++++++++++++++++++++ meta/classes/rootfs_ipk.bbclass | 2 + 2 files changed, 53 insertions(+), 0 deletions(-) diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index 0c0f00d..b7afa83 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass @@ -61,6 +61,28 @@ python package_ipk_install () { raise bb.build.FuncFailed } +package_tryout_install_multilib_ipk() { + #try install multilib + multilib_tryout_dirs="" + for arch in ${MULTILIB_ARCHS}; do + local target_rootfs="${MULTILIB_TEMP_ROOTFS}/${arch}" + 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 + selected_pkg="${selected_pkg} ${pkg}" + fi + done + if [ ! -z "${selected_pkg}" ]; then + mkdir -p ${target_rootfs}/${opkglibdir} + opkg-cl ${ipkg_args} update + opkg-cl ${ipkg_args} install ${selected_pkg} + multilib_tryout_dirs="${multilib_tryout_dirs} ${target_rootfs}" + fi + done +} # # install a bunch of packages using opkg # the following shell variables needs to be set before calling this func: @@ -78,6 +100,7 @@ package_install_internal_ipk() { local package_to_install="${INSTALL_PACKAGES_NORMAL_IPK}" local package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_IPK}" local package_lingusa="${INSTALL_PACKAGES_LINGUAS_IPK}" + local package_multilib="${INSTALL_PACKAGES_MULTILIB_IPK}" local task="${INSTALL_TASK_IPK}" mkdir -p ${target_rootfs}${localstatedir}/lib/opkg/ @@ -102,6 +125,14 @@ package_install_internal_ipk() { if [ ! -z "${package_attemptonly}" ]; then opkg-cl ${ipkg_args} install ${package_attemptonly} > "${WORKDIR}/temp/log.do_${task}_attemptonly.${PID}" || true fi + + package_tryout_install_multilib_ipk + #sanity check + multilib_sanity_check ${target_rootfs} ${multilib_tryout_dirs}|| exit 1 + + if [ ! -z "${package_multilib}" ]; then + opkg-cl ${ipkg_args} install ${package_multilib} + fi } ipk_log_check() { @@ -142,6 +173,11 @@ package_update_index_ipk () { packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch ${DEPLOY_DIR_IPK}/$sdkarch-nativesdk" done + multilib_archs="${MULTILIB_ARCHS}" + for arch in $multilib_archs; do + packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch" + done + for pkgdir in $packagedirs; do if [ -e $pkgdir/ ]; then touch $pkgdir/Packages @@ -173,6 +209,13 @@ package_generate_ipkg_conf () { echo "src oe-$sdkarch$extension file:${DEPLOY_DIR_IPK}/$sdkarch$extension" >> ${IPKGCONF_SDK} 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 () { @@ -188,6 +231,14 @@ package_generate_archlist () { echo "arch $sdkarch$extension $priority" >> ${IPKGCONF_SDK} 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 () { diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass index 4fcacc6..695bee0 100644 --- a/meta/classes/rootfs_ipk.bbclass +++ b/meta/classes/rootfs_ipk.bbclass @@ -22,6 +22,7 @@ opkglibdir = "${localstatedir}/lib/opkg" # Which packages to not install on the basis of a recommendation BAD_RECOMMENDATIONS ?= "" +MULTILIBRE_ALLOW_REP = "${opkglibdir}" fakeroot rootfs_ipk_do_rootfs () { set -x @@ -58,6 +59,7 @@ fakeroot rootfs_ipk_do_rootfs () { export INSTALL_ROOTFS_IPK="${IMAGE_ROOTFS}" export INSTALL_CONF_IPK="${IPKGCONF_TARGET}" export INSTALL_PACKAGES_NORMAL_IPK="${PACKAGE_INSTALL}" + export INSTALL_PACKAGES_MULTILIB_IPK="${MULTILIB_PACKAGE_INSTALL}" package_install_internal_ipk -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] package(rootfs)_ipk.bbclass: support multilib in opkg backend. 2011-07-26 22:50 ` [PATCH 2/3] package(rootfs)_ipk.bbclass: support multilib in opkg backend Richard Purdie @ 2011-07-30 16:23 ` Khem Raj 2011-08-01 1:12 ` Lu, Lianhao 0 siblings, 1 reply; 7+ messages in thread From: Khem Raj @ 2011-07-30 16:23 UTC (permalink / raw) To: openembedded-core On Tuesday, July 26, 2011 11:50:26 PM Richard Purdie wrote: > From: Lianhao Lu <lianhao.lu@intel.com> > > Support install multiple multilib in opkg backend. > > The installation is done in 3 phases. > > Phase 1: install normal packages to IMAGE_ROOTFS. > > Phase 2: install multilib packages under MULTILIB_TEMP_ROOTFS. Packages > belongs to the same multilib arch would be installed to a unique > directory. > > Phase 3: check file confliction between IMAGE_ROOTFS and > MULTILIB_TEMP_ROOTFS, install multilib packages to IMAGE_ROOTFS only if > the sanity check passed. > > Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> > --- > meta/classes/package_ipk.bbclass | 51 > ++++++++++++++++++++++++++++++++++++++ meta/classes/rootfs_ipk.bbclass | > 2 + > 2 files changed, 53 insertions(+), 0 deletions(-) > > diff --git a/meta/classes/package_ipk.bbclass > b/meta/classes/package_ipk.bbclass index 0c0f00d..b7afa83 100644 > --- a/meta/classes/package_ipk.bbclass > +++ b/meta/classes/package_ipk.bbclass > @@ -61,6 +61,28 @@ python package_ipk_install () { > raise bb.build.FuncFailed > } > > +package_tryout_install_multilib_ipk() { > + #try install multilib > + multilib_tryout_dirs="" > + for arch in ${MULTILIB_ARCHS}; do > + local target_rootfs="${MULTILIB_TEMP_ROOTFS}/${arch}" > + 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 > + selected_pkg="${selected_pkg} ${pkg}" > + fi > + done > + if [ ! -z "${selected_pkg}" ]; then > + mkdir -p ${target_rootfs}/${opkglibdir} > + opkg-cl ${ipkg_args} update > + opkg-cl ${ipkg_args} install ${selected_pkg} > + multilib_tryout_dirs="${multilib_tryout_dirs} ${target_rootfs}" > + fi > + done > +} we use --force-overwrite and if mistakenly if a multilib package installs into standard paths will opkg inform about it ? > # > # install a bunch of packages using opkg > # the following shell variables needs to be set before calling this func: > @@ -78,6 +100,7 @@ package_install_internal_ipk() { > local package_to_install="${INSTALL_PACKAGES_NORMAL_IPK}" > local package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_IPK}" > local package_lingusa="${INSTALL_PACKAGES_LINGUAS_IPK}" > + local package_multilib="${INSTALL_PACKAGES_MULTILIB_IPK}" > local task="${INSTALL_TASK_IPK}" > > mkdir -p ${target_rootfs}${localstatedir}/lib/opkg/ > @@ -102,6 +125,14 @@ package_install_internal_ipk() { > if [ ! -z "${package_attemptonly}" ]; then > opkg-cl ${ipkg_args} install ${package_attemptonly} > > "${WORKDIR}/temp/log.do_${task}_attemptonly.${PID}" || true fi > + > + package_tryout_install_multilib_ipk > + #sanity check > + multilib_sanity_check ${target_rootfs} ${multilib_tryout_dirs}|| exit 1 > + > + if [ ! -z "${package_multilib}" ]; then > + opkg-cl ${ipkg_args} install ${package_multilib} > + fi > } > > ipk_log_check() { > @@ -142,6 +173,11 @@ package_update_index_ipk () { > packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch > ${DEPLOY_DIR_IPK}/$sdkarch-nativesdk" done > > + multilib_archs="${MULTILIB_ARCHS}" > + for arch in $multilib_archs; do > + packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch" > + done > + > for pkgdir in $packagedirs; do > if [ -e $pkgdir/ ]; then > touch $pkgdir/Packages > @@ -173,6 +209,13 @@ package_generate_ipkg_conf () { > echo "src oe-$sdkarch$extension > file:${DEPLOY_DIR_IPK}/$sdkarch$extension" >> ${IPKGCONF_SDK} 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 () { > @@ -188,6 +231,14 @@ package_generate_archlist () { > echo "arch $sdkarch$extension $priority" >> ${IPKGCONF_SDK} > 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 () { > diff --git a/meta/classes/rootfs_ipk.bbclass > b/meta/classes/rootfs_ipk.bbclass index 4fcacc6..695bee0 100644 > --- a/meta/classes/rootfs_ipk.bbclass > +++ b/meta/classes/rootfs_ipk.bbclass > @@ -22,6 +22,7 @@ opkglibdir = "${localstatedir}/lib/opkg" > > # Which packages to not install on the basis of a recommendation > BAD_RECOMMENDATIONS ?= "" > +MULTILIBRE_ALLOW_REP = "${opkglibdir}" > > fakeroot rootfs_ipk_do_rootfs () { > set -x > @@ -58,6 +59,7 @@ fakeroot rootfs_ipk_do_rootfs () { > export INSTALL_ROOTFS_IPK="${IMAGE_ROOTFS}" > export INSTALL_CONF_IPK="${IPKGCONF_TARGET}" > export INSTALL_PACKAGES_NORMAL_IPK="${PACKAGE_INSTALL}" > + export INSTALL_PACKAGES_MULTILIB_IPK="${MULTILIB_PACKAGE_INSTALL}" > > package_install_internal_ipk -- Khem Raj ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] package(rootfs)_ipk.bbclass: support multilib in opkg backend. 2011-07-30 16:23 ` Khem Raj @ 2011-08-01 1:12 ` Lu, Lianhao 0 siblings, 0 replies; 7+ messages in thread From: Lu, Lianhao @ 2011-08-01 1:12 UTC (permalink / raw) To: Patches and discussions about the oe-core layer Khem Raj wrote on 2011-07-31: > On Tuesday, July 26, 2011 11:50:26 PM Richard Purdie wrote: >> From: Lianhao Lu <lianhao.lu@intel.com> >> >> Support install multiple multilib in opkg backend. >> >> The installation is done in 3 phases. >> >> Phase 1: install normal packages to IMAGE_ROOTFS. >> >> Phase 2: install multilib packages under MULTILIB_TEMP_ROOTFS. >> Packages belongs to the same multilib arch would be installed to a >> unique directory. >> >> Phase 3: check file confliction between IMAGE_ROOTFS and >> MULTILIB_TEMP_ROOTFS, install multilib packages to IMAGE_ROOTFS only >> if the sanity check passed. >> >> Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> >> --- >> meta/classes/package_ipk.bbclass | 51 >> ++++++++++++++++++++++++++++++++++++++ meta/classes/rootfs_ipk.bbclass >> ++++++++++++++++++++++++++++++++++++++ | >> 2 + >> 2 files changed, 53 insertions(+), 0 deletions(-) >> diff --git a/meta/classes/package_ipk.bbclass >> b/meta/classes/package_ipk.bbclass index 0c0f00d..b7afa83 100644 >> --- a/meta/classes/package_ipk.bbclass >> +++ b/meta/classes/package_ipk.bbclass >> @@ -61,6 +61,28 @@ python package_ipk_install () { >> raise bb.build.FuncFailed >> } >> +package_tryout_install_multilib_ipk() { >> + #try install multilib >> + multilib_tryout_dirs="" >> + for arch in ${MULTILIB_ARCHS}; do >> + local target_rootfs="${MULTILIB_TEMP_ROOTFS}/${arch}" >> + 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 >> + selected_pkg="${selected_pkg} ${pkg}" >> + fi >> + done >> + if [ ! -z "${selected_pkg}" ]; then >> + mkdir -p ${target_rootfs}/${opkglibdir} >> + opkg-cl ${ipkg_args} update >> + opkg-cl ${ipkg_args} install ${selected_pkg} >> + multilib_tryout_dirs="${multilib_tryout_dirs} ${target_rootfs}" >> + fi >> + done >> +} > > we use --force-overwrite and if mistakenly if a multilib package > installs into standard paths will opkg inform about it ? I'm afraid it will not. That's why we need to check the confliction before we finally get the multilib packages installed. >> # >> # install a bunch of packages using opkg # the following shell >> variables needs to be set before calling this func: >> @@ -78,6 +100,7 @@ package_install_internal_ipk() { >> local package_to_install="${INSTALL_PACKAGES_NORMAL_IPK}" local >> package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_IPK}" local >> package_lingusa="${INSTALL_PACKAGES_LINGUAS_IPK}" + local >> package_multilib="${INSTALL_PACKAGES_MULTILIB_IPK}" local >> task="${INSTALL_TASK_IPK}" >> >> mkdir -p ${target_rootfs}${localstatedir}/lib/opkg/ @@ -102,6 +125,14 >> @@ package_install_internal_ipk() { if [ ! -z >> "${package_attemptonly}" ]; then opkg-cl ${ipkg_args} install >> ${package_attemptonly} > >> "${WORKDIR}/temp/log.do_${task}_attemptonly.${PID}" || true fi >> + >> + package_tryout_install_multilib_ipk >> + #sanity check >> + multilib_sanity_check ${target_rootfs} ${multilib_tryout_dirs}|| >> +exit 1 >> + >> + if [ ! -z "${package_multilib}" ]; then >> + opkg-cl ${ipkg_args} install ${package_multilib} >> + fi >> } >> >> ipk_log_check() { @@ -142,6 +173,11 @@ package_update_index_ipk () { >> packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch >> ${DEPLOY_DIR_IPK}/$sdkarch-nativesdk" done >> >> + multilib_archs="${MULTILIB_ARCHS}" >> + for arch in $multilib_archs; do >> + packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch" >> + done >> + >> for pkgdir in $packagedirs; do if [ -e $pkgdir/ ]; then touch >> $pkgdir/Packages @@ -173,6 +209,13 @@ package_generate_ipkg_conf () { >> echo "src oe-$sdkarch$extension >> file:${DEPLOY_DIR_IPK}/$sdkarch$extension" >> ${IPKGCONF_SDK} 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 () { @@ -188,6 +231,14 @@ >> package_generate_archlist () { echo "arch $sdkarch$extension >> $priority" >> ${IPKGCONF_SDK} 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 () { >> diff --git a/meta/classes/rootfs_ipk.bbclass >> b/meta/classes/rootfs_ipk.bbclass index 4fcacc6..695bee0 100644 >> --- a/meta/classes/rootfs_ipk.bbclass >> +++ b/meta/classes/rootfs_ipk.bbclass >> @@ -22,6 +22,7 @@ opkglibdir = "${localstatedir}/lib/opkg" >> >> # Which packages to not install on the basis of a recommendation >> BAD_RECOMMENDATIONS ?= "" >> +MULTILIBRE_ALLOW_REP = "${opkglibdir}" >> >> fakeroot rootfs_ipk_do_rootfs () { set -x @@ -58,6 +59,7 @@ fakeroot >> rootfs_ipk_do_rootfs () { export INSTALL_ROOTFS_IPK="${IMAGE_ROOTFS}" >> export INSTALL_CONF_IPK="${IPKGCONF_TARGET}" export >> INSTALL_PACKAGES_NORMAL_IPK="${PACKAGE_INSTALL}" >> + export INSTALL_PACKAGES_MULTILIB_IPK="${MULTILIB_PACKAGE_INSTALL}" >> >> package_install_internal_ipk Best Regards, Lianhao ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] image.bbclass: Added variables for multilib support. 2011-07-26 22:50 [PATCH 0/3] Multilib image/package backend enablement Richard Purdie 2011-07-26 22:50 ` [PATCH 1/3] package/rootfs_rpm: Implement RPM multilib package handling Richard Purdie 2011-07-26 22:50 ` [PATCH 2/3] package(rootfs)_ipk.bbclass: support multilib in opkg backend Richard Purdie @ 2011-07-26 22:50 ` Richard Purdie 2 siblings, 0 replies; 7+ messages in thread From: Richard Purdie @ 2011-07-26 22:50 UTC (permalink / raw) To: openembedded-core From: Lianhao Lu <lianhao.lu@intel.com> 1. Added MULTILIB_PACKAGE_INSTALL for multilib instances of packages to be installed in the rootfs. 2. MULTILIBRE_ALLOW_REP contains the regular expression to match the files allow to be replaced by the conflicting files. 3. MULTILIBRE_FORCE_SAME contains the regular expression to match the files allow to be replaced only if the conflicting files are identical. 4. Added shell function multilib_sanity_check() to check whether the overwring for multilib situation is allowed. Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> --- meta/classes/image.bbclass | 54 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 53 insertions(+), 1 deletions(-) diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index edfb2d6..1db915b 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -5,13 +5,15 @@ inherit imagetest-${IMAGETEST} LICENSE = "MIT" PACKAGES = "" -RDEPENDS += "${IMAGE_INSTALL} ${LINGUAS_INSTALL}" +MULTILIB_IMAGE_INSTALL ?= "" +RDEPENDS += "${IMAGE_INSTALL} ${LINGUAS_INSTALL} ${MULTILIB_IMAGE_INSTALL}" INHIBIT_DEFAULT_DEPS = "1" # "export IMAGE_BASENAME" not supported at this time IMAGE_BASENAME[export] = "1" export PACKAGE_INSTALL ?= "${IMAGE_INSTALL}" +export MULTILIB_PACKAGE_INSTALL ?= "${MULTILIB_IMAGE_INSTALL}" PACKAGE_INSTALL_ATTEMPTONLY ?= "" # Images are generally built explicitly, do not need to be part of world. @@ -88,6 +90,7 @@ do_rootfs[umask] = 022 fakeroot do_rootfs () { #set -x rm -rf ${IMAGE_ROOTFS} + rm -rf ${MULTILIB_TEMP_ROOTFS} mkdir -p ${IMAGE_ROOTFS} mkdir -p ${DEPLOY_DIR_IMAGE} @@ -163,6 +166,55 @@ log_check() { done } +MULTILIBRE_ALLOW_REP =. "${base_bindir}|${base_sbindir}|${bindir}|${sbindir}|${libexecdir}|" +MULTILIBRE_FORCE_SAME =. "${sysconfdir}|${datadir}|" +MULTILIB_CHECK_FILE = "${WORKDIR}/multilib_check.py" +MULTILIB_TEMP_ROOTFS = "${WORKDIR}/multilib" + +multilib_generate_python_file() { + cat >${MULTILIB_CHECK_FILE} <<EOF +import sys, os, os.path +import re,filecmp + +allow_rep=re.compile(re.sub("\|$","","${MULTILIBRE_ALLOW_REP}")) +force_same=re.compile(re.sub("\|$","","${MULTILIBRE_FORCE_SAME}")) +error_promt="Multilib check error:" + +files={} +dirs=raw_input() +for dir in dirs.split(): + for root, subfolers, subfiles in os.walk(dir): + for file in subfiles: + item=os.path.join(root,file) + key=str(os.path.join("/",os.path.relpath(item,dir))) + + valid=True; + if files.has_key(key): + #check whether files are the same + if force_same.match(key): + if not filecmp.cmp(files[key],item): + valid=False + print("%s %s is not the same as %s\n" % (error_promt, item, files[key])) + sys.exit(1) + #check whether the file is allow to replace + elif allow_rep.match(key): + valid=True + else: + valid=False + print("%s duplicated files %s %s not allowed\n" % (error_promt, item, files[key])) + sys.exit(1) + + #pass the check, add to list + if valid: + files[key]=item +EOF +} + +multilib_sanity_check() { + multilib_generate_python_file + echo $@ | python ${MULTILIB_CHECK_FILE} +} + # set '*' as the rootpassword so the images # can decide if they want it or not -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-08-01 1:17 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-07-26 22:50 [PATCH 0/3] Multilib image/package backend enablement Richard Purdie 2011-07-26 22:50 ` [PATCH 1/3] package/rootfs_rpm: Implement RPM multilib package handling Richard Purdie 2011-07-27 3:18 ` Mark Hatle 2011-07-26 22:50 ` [PATCH 2/3] package(rootfs)_ipk.bbclass: support multilib in opkg backend Richard Purdie 2011-07-30 16:23 ` Khem Raj 2011-08-01 1:12 ` Lu, Lianhao 2011-07-26 22:50 ` [PATCH 3/3] image.bbclass: Added variables for multilib support Richard Purdie
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox