* [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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.