On 9/21/11 2:06 PM, Dongxiao Xu wrote:
> Firstly we install a base image.
> Then install those multilib packages listed in MULTILIB_IMAGE_INSTALL.
> 
> Signed-off-by: Dongxiao Xu <dongxiao...@intel.com>

I worked with Dongxiao on this solution.

Acked-by: Mark Hatle <mark.ha...@windriver.com>

> ---
>  meta/classes/package_rpm.bbclass |   54 
> +++++++++++++++++++++++++++++++++++---
>  1 files changed, 50 insertions(+), 4 deletions(-)
> 
> diff --git a/meta/classes/package_rpm.bbclass 
> b/meta/classes/package_rpm.bbclass
> index d822b54..775d525 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -166,7 +166,8 @@ 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} 
> ${INSTALL_PACKAGES_MULTILIB_RPM}"
> +     local package_to_install="${INSTALL_PACKAGES_NORMAL_RPM}"
> +     local multilib_to_install="${INSTALL_PACKAGES_MULTILIB_RPM}"
>       local package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_RPM}"
>       local package_linguas="${INSTALL_PACKAGES_LINGUAS_RPM}"
>       local providename="${INSTALL_PROVIDENAME_RPM}"
> @@ -253,11 +254,13 @@ package_install_internal_rpm () {
>               done
>       fi
>  
> +     # Normal package installation
> +
>       # Generate an install solution by doing a --justdb install, then 
> recreate it with
>       # an actual package install!
>       ${RPM} --predefine "_rpmds_sysinfo_path 
> ${target_rootfs}/etc/rpm/sysinfo" \
>               --predefine "_rpmrc_platform_path 
> ${target_rootfs}/etc/rpm/platform" \
> -             -D "_dbpath ${target_rootfs}/install" -D "`cat 
> ${confbase}.macro`" \
> +             -D "_dbpath ${target_rootfs}/install" -D "`cat 
> ${confbase}-base_archs.macro`" \
>               -D "__dbi_txn create nofsync" \
>               -U --justdb --noscripts --notriggers --noparentdirs --nolinktos 
> --ignoresize \
>               ${target_rootfs}/install/install.manifest
> @@ -351,14 +354,57 @@ package_install_internal_rpm () {
>               -D "__dbi_txn create nofsync private" \
>               | grep -i 'Packageorigin' | cut -d : -f 2 > 
> ${target_rootfs}/install/install_solution.manifest
>  
> +     if [ ! -z "${multilib_to_install}" ]; then
> +             for pkg in ${multilib_to_install} ; do
> +                     echo "Processing $pkg..."
> +
> +                     archvar=base_archs
> +                     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
> +                             echo "Unable to find package $pkg ($ml_pkg)!"
> +                             exit 1
> +                     fi
> +                     echo $pkg_name >> 
> ${target_rootfs}/install/install_multilib.manifest
> +             done
> +     fi
> +
> +     # multilib package installation
> +
> +     # Generate an install solution by doing a --justdb install, then 
> recreate it with
> +     # an actual package install!
> +     ${RPM} --predefine "_rpmds_sysinfo_path 
> ${target_rootfs}/etc/rpm/sysinfo" \
> +             --predefine "_rpmrc_platform_path 
> ${target_rootfs}/etc/rpm/platform" \
> +             -D "_dbpath ${target_rootfs}/install" -D "`cat 
> ${confbase}-ml_archs.macro`" \
> +             -D "__dbi_txn create nofsync" \
> +             -U --justdb --noscripts --notriggers --noparentdirs --nolinktos 
> --ignoresize \
> +             ${target_rootfs}/install/install_multilib.manifest
> +
> +     # Now that we have a solution, pull out a list of what to install...
> +     echo "Manifest: ${target_rootfs}/install/install_multilib.manifest"
> +     ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \
> +             -D "__dbi_txn create nofsync private" \
> +             | grep -i 'Packageorigin' | cut -d : -f 2 > 
> ${target_rootfs}/install/install_multilib_solution.manifest
> +
> +
>       # Attempt install
>       ${RPM} --root ${target_rootfs} \
>               --predefine "_rpmds_sysinfo_path 
> ${target_rootfs}/etc/rpm/sysinfo" \
>               --predefine "_rpmrc_platform_path 
> ${target_rootfs}/etc/rpm/platform" \
>               -D "_dbpath ${rpmlibdir}" \
> -             --noscripts --notriggers --noparentdirs --nolinktos \
> +             --noscripts --notriggers --noparentdirs --nolinktos 
> --replacepkgs \
>               -D "__dbi_txn create nofsync private" \
> -             -Uhv ${target_rootfs}/install/install_solution.manifest
> +             -Uhv ${target_rootfs}/install/install_solution.manifest \
> +             ${target_rootfs}/install/install_multilib_solution.manifest
>  }
>  
>  python write_specfile () {


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to