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 | ||