diff options
Diffstat (limited to 'meta/classes/image.bbclass')
| -rw-r--r-- | meta/classes/image.bbclass | 89 |
1 files changed, 50 insertions, 39 deletions
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 0a380f1172..0f7744aa5e 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass | |||
| @@ -6,7 +6,8 @@ inherit imagetest-${IMAGETEST} | |||
| 6 | inherit populate_sdk_base | 6 | inherit populate_sdk_base |
| 7 | 7 | ||
| 8 | TOOLCHAIN_TARGET_TASK += "${PACKAGE_INSTALL}" | 8 | TOOLCHAIN_TARGET_TASK += "${PACKAGE_INSTALL}" |
| 9 | TOOLCHAIN_TARGET_TASK_ATTEMPTONLY += "${PACKAGE_INSTALL_ATTEMPTONLY} ${PACKAGE_GROUP_dev-pkgs} ${PACKAGE_GROUP_dbg-pkgs}" | 9 | TOOLCHAIN_TARGET_TASK_ATTEMPTONLY += "${PACKAGE_INSTALL_ATTEMPTONLY}" |
| 10 | POPULATE_SDK_POST_TARGET_COMMAND += "rootfs_install_complementary populate_sdk; " | ||
| 10 | 11 | ||
| 11 | inherit gzipnative | 12 | inherit gzipnative |
| 12 | 13 | ||
| @@ -38,25 +39,23 @@ def normal_groups(d): | |||
| 38 | features = set(oe.data.typed_value('IMAGE_FEATURES', d)) | 39 | features = set(oe.data.typed_value('IMAGE_FEATURES', d)) |
| 39 | return features.difference(extras) | 40 | return features.difference(extras) |
| 40 | 41 | ||
| 41 | def normal_pkgs_to_install(d): | 42 | # Wildcards specifying complementary packages to install for every package that has been explicitly |
| 42 | import oe.packagedata | 43 | # installed into the rootfs |
| 43 | 44 | def complementary_globs(featurevar, d): | |
| 44 | to_install = oe.data.typed_value('IMAGE_INSTALL', d) | 45 | globs = [] |
| 45 | features = normal_groups(d) | 46 | features = set((d.getVar(featurevar, True) or '').split()) |
| 46 | required = list(oe.packagegroup.required_packages(features, d)) | 47 | for feature in features: |
| 47 | optional = list(oe.packagegroup.optional_packages(features, d)) | 48 | if feature == 'dev-pkgs': |
| 48 | all_packages = to_install + required + optional | 49 | globs.append('*-dev') |
| 49 | 50 | elif feature == 'doc-pkgs': | |
| 50 | recipes = filter(None, [oe.packagedata.recipename(pkg, d) for pkg in all_packages]) | 51 | globs.append('*-doc') |
| 51 | 52 | elif feature == 'dbg-pkgs': | |
| 52 | return all_packages + recipes | 53 | globs.append('*-dbg') |
| 53 | 54 | return ' '.join(globs) | |
| 54 | PACKAGE_GROUP_dbg-pkgs = "${@' '.join('%s-dbg' % pkg for pkg in normal_pkgs_to_install(d))}" | 55 | |
| 55 | PACKAGE_GROUP_dbg-pkgs[optional] = "1" | 56 | IMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("IMAGE_FEATURES", d)}' |
| 56 | PACKAGE_GROUP_dev-pkgs = "${@' '.join('%s-dev' % pkg for pkg in normal_pkgs_to_install(d))}" | 57 | SDKIMAGE_FEATURES ??= "dev-pkgs dbg-pkgs" |
| 57 | PACKAGE_GROUP_dev-pkgs[optional] = "1" | 58 | SDKIMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("SDKIMAGE_FEATURES", d)}' |
| 58 | PACKAGE_GROUP_doc-pkgs = "${@' '.join('%s-doc' % pkg for pkg in normal_pkgs_to_install(d))}" | ||
| 59 | PACKAGE_GROUP_doc-pkgs[optional] = "1" | ||
| 60 | 59 | ||
| 61 | # "export IMAGE_BASENAME" not supported at this time | 60 | # "export IMAGE_BASENAME" not supported at this time |
| 62 | IMAGE_INSTALL ?= "" | 61 | IMAGE_INSTALL ?= "" |
| @@ -306,32 +305,44 @@ get_split_linguas() { | |||
| 306 | done | sort | uniq | 305 | done | sort | uniq |
| 307 | } | 306 | } |
| 308 | 307 | ||
| 309 | rootfs_install_all_locales() { | 308 | rootfs_install_complementary() { |
| 310 | # Generate list of installed packages for which additional locale packages might be available | 309 | # Install complementary packages based upon the list of currently installed packages |
| 311 | INSTALLED_PACKAGES=`list_installed_packages | egrep -v -- "(-locale-|^locale-base-|-dev$|-doc$|^kernel|^glibc|^ttf|^task|^perl|^python)"` | 310 | # e.g. locales, *-dev, *-dbg, etc. This will only attempt to install these packages, |
| 312 | 311 | # if they don't exist then no error will occur. | |
| 313 | # Generate a list of locale packages that exist | 312 | # Note: every backend needs to call this function explicitly after the normal |
| 314 | SPLIT_LINGUAS=`get_split_linguas` | 313 | # package installation |
| 315 | PACKAGES_TO_INSTALL="" | 314 | |
| 316 | for lang in $SPLIT_LINGUAS; do | 315 | # Get list of installed packages |
| 317 | for pkg in $INSTALLED_PACKAGES; do | 316 | list_installed_packages arch > ${WORKDIR}/installed_pkgs.txt |
| 318 | existing_pkg=`rootfs_check_package_exists $pkg-locale-$lang` | 317 | |
| 319 | if [ "$existing_pkg" != "" ]; then | 318 | # Apply the globs to all the packages currently installed |
| 320 | PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL $existing_pkg" | 319 | if [ "$1" = "populate_sdk" ] ; then |
| 321 | fi | 320 | GLOBS="${SDKIMAGE_INSTALL_COMPLEMENTARY}" |
| 321 | else | ||
| 322 | GLOBS="${IMAGE_INSTALL_COMPLEMENTARY}" | ||
| 323 | # Add locales | ||
| 324 | SPLIT_LINGUAS=`get_split_linguas` | ||
| 325 | PACKAGES_TO_INSTALL="" | ||
| 326 | for lang in $SPLIT_LINGUAS ; do | ||
| 327 | GLOBS="$GLOBS *-locale-$lang" | ||
| 322 | done | 328 | done |
| 323 | done | 329 | fi |
| 330 | |||
| 331 | if [ "$GLOBS" != "" ] ; then | ||
| 332 | # Use the magic script to do all the work for us :) | ||
| 333 | oe-pkgdata-util glob ${TMPDIR}/pkgdata ${TARGET_VENDOR}-${TARGET_OS} ${WORKDIR}/installed_pkgs.txt "$GLOBS" > ${WORKDIR}/complementary_pkgs.txt | ||
| 324 | 334 | ||
| 325 | # Install the packages, if any | 335 | # Install the packages, if any |
| 326 | if [ "$PACKAGES_TO_INSTALL" != "" ]; then | 336 | sed -i '/^$/d' ${WORKDIR}/complementary_pkgs.txt |
| 327 | rootfs_install_packages $PACKAGES_TO_INSTALL | 337 | if [ -s ${WORKDIR}/complementary_pkgs.txt ]; then |
| 338 | echo "Installing complementary packages" | ||
| 339 | rootfs_install_packages ${WORKDIR}/complementary_pkgs.txt | ||
| 340 | fi | ||
| 328 | fi | 341 | fi |
| 329 | 342 | ||
| 330 | # Workaround for broken shell function dependencies | 343 | # Workaround for broken shell function dependencies |
| 331 | if false ; then | 344 | if false ; then |
| 332 | get_split_linguas | 345 | get_split_linguas |
| 333 | list_installed_packages | ||
| 334 | rootfs_check_package_exists | ||
| 335 | fi | 346 | fi |
| 336 | } | 347 | } |
| 337 | 348 | ||
