diff options
| -rw-r--r-- | meta/classes/image.bbclass | 89 | ||||
| -rw-r--r-- | meta/classes/package_rpm.bbclass | 74 | ||||
| -rw-r--r-- | meta/classes/populate_sdk_deb.bbclass | 2 | ||||
| -rw-r--r-- | meta/classes/populate_sdk_ipk.bbclass | 2 | ||||
| -rw-r--r-- | meta/classes/populate_sdk_rpm.bbclass | 3 | ||||
| -rw-r--r-- | meta/classes/rootfs_deb.bbclass | 27 | ||||
| -rw-r--r-- | meta/classes/rootfs_ipk.bbclass | 26 | ||||
| -rw-r--r-- | meta/classes/rootfs_rpm.bbclass | 35 | ||||
| -rwxr-xr-x | scripts/oe-pkgdata-util | 167 | ||||
| -rwxr-xr-x | scripts/opkg-query-helper.py | 76 |
10 files changed, 390 insertions, 111 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 | ||
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 29018e9cca..b4bc52e69b 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
| @@ -248,6 +248,7 @@ process_pkg_list_rpm() { | |||
| 248 | # INSTALL_PACKAGES_LINGUAS_RPM - additional packages for uclibc | 248 | # INSTALL_PACKAGES_LINGUAS_RPM - additional packages for uclibc |
| 249 | # INSTALL_PROVIDENAME_RPM - content for provide name | 249 | # INSTALL_PROVIDENAME_RPM - content for provide name |
| 250 | # INSTALL_TASK_RPM - task name | 250 | # INSTALL_TASK_RPM - task name |
| 251 | # INSTALL_COMPLEMENTARY_RPM - 1 to enable complementary package install mode | ||
| 251 | 252 | ||
| 252 | package_install_internal_rpm () { | 253 | package_install_internal_rpm () { |
| 253 | 254 | ||
| @@ -261,31 +262,35 @@ package_install_internal_rpm () { | |||
| 261 | local providename="${INSTALL_PROVIDENAME_RPM}" | 262 | local providename="${INSTALL_PROVIDENAME_RPM}" |
| 262 | local task="${INSTALL_TASK_RPM}" | 263 | local task="${INSTALL_TASK_RPM}" |
| 263 | 264 | ||
| 264 | # Setup base system configuration | 265 | if [ "${INSTALL_COMPLEMENTARY_RPM}" != "1" ] ; then |
| 265 | mkdir -p ${target_rootfs}/etc/rpm/ | 266 | # Setup base system configuration |
| 266 | echo "${platform}${TARGET_VENDOR}-${TARGET_OS}" > ${target_rootfs}/etc/rpm/platform | 267 | mkdir -p ${target_rootfs}/etc/rpm/ |
| 267 | if [ ! -z "$platform_extra" ]; then | 268 | echo "${platform}${TARGET_VENDOR}-${TARGET_OS}" > ${target_rootfs}/etc/rpm/platform |
| 268 | for pt in $platform_extra ; do | 269 | if [ ! -z "$platform_extra" ]; then |
| 269 | case $pt in | 270 | for pt in $platform_extra ; do |
| 270 | noarch | any | all) | 271 | case $pt in |
| 271 | os="`echo ${TARGET_OS} | sed "s,-.*,,"`.*" | 272 | noarch | any | all) |
| 272 | ;; | 273 | os="`echo ${TARGET_OS} | sed "s,-.*,,"`.*" |
| 273 | *) | 274 | ;; |
| 274 | os="${TARGET_OS}" | 275 | *) |
| 275 | ;; | 276 | os="${TARGET_OS}" |
| 276 | esac | 277 | ;; |
| 277 | echo "$pt-.*-$os" >> ${target_rootfs}/etc/rpm/platform | 278 | esac |
| 278 | done | 279 | echo "$pt-.*-$os" >> ${target_rootfs}/etc/rpm/platform |
| 279 | fi | 280 | done |
| 281 | fi | ||
| 280 | 282 | ||
| 281 | # Tell RPM that the "/" directory exist and is available | 283 | # Tell RPM that the "/" directory exist and is available |
| 282 | mkdir -p ${target_rootfs}/etc/rpm/sysinfo | 284 | mkdir -p ${target_rootfs}/etc/rpm/sysinfo |
| 283 | echo "/" >${target_rootfs}/etc/rpm/sysinfo/Dirnames | 285 | echo "/" >${target_rootfs}/etc/rpm/sysinfo/Dirnames |
| 284 | if [ ! -z "$providename" ]; then | 286 | if [ ! -z "$providename" ]; then |
| 285 | cat /dev/null > ${target_rootfs}/etc/rpm/sysinfo/Providename | 287 | cat /dev/null > ${target_rootfs}/etc/rpm/sysinfo/Providename |
| 286 | for provide in $providename ; do | 288 | for provide in $providename ; do |
| 287 | echo $provide >> ${target_rootfs}/etc/rpm/sysinfo/Providename | 289 | echo $provide >> ${target_rootfs}/etc/rpm/sysinfo/Providename |
| 288 | done | 290 | done |
| 291 | fi | ||
| 292 | else | ||
| 293 | mv ${target_rootfs}/install/total_solution.manifest ${target_rootfs}/install/original_solution.manifest | ||
| 289 | fi | 294 | fi |
| 290 | 295 | ||
| 291 | # Setup manifest of packages to install... | 296 | # Setup manifest of packages to install... |
| @@ -480,13 +485,22 @@ mutex_set_max 163840 | |||
| 480 | # ================ Replication | 485 | # ================ Replication |
| 481 | EOF | 486 | EOF |
| 482 | 487 | ||
| 483 | # RPM is special. It can't handle dependencies and preinstall scripts correctly. Its | 488 | if [ "${INSTALL_COMPLEMENTARY_RPM}" = "1" ] ; then |
| 484 | # probably a feature. The only way to convince rpm to actually run the preinstall scripts | 489 | # Only install packages not already installed (dependency calculation will |
| 485 | # for base-passwd and shadow first before installing packages that depend on these packages | 490 | # almost certainly have added some that have been) |
| 486 | # is to do two image installs, installing one set of packages, then the other. | 491 | sort ${target_rootfs}/install/original_solution.manifest > ${target_rootfs}/install/original_solution_sorted.manifest |
| 487 | if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f "$pre_btmanifest" ]; then | 492 | sort ${target_rootfs}/install/total_solution.manifest > ${target_rootfs}/install/total_solution_sorted.manifest |
| 488 | echo "Skipping pre install due to exisitng image" | 493 | comm -2 -3 ${target_rootfs}/install/total_solution_sorted.manifest \ |
| 494 | ${target_rootfs}/install/original_solution_sorted.manifest | awk '{print $1}' > \ | ||
| 495 | ${target_rootfs}/install/diff.manifest | ||
| 496 | mv ${target_rootfs}/install/diff.manifest ${target_rootfs}/install/total_solution.manifest | ||
| 497 | elif [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f "$pre_btmanifest" ]; then | ||
| 498 | echo "Skipping pre install due to existing image" | ||
| 489 | else | 499 | else |
| 500 | # RPM is special. It can't handle dependencies and preinstall scripts correctly. Its | ||
| 501 | # probably a feature. The only way to convince rpm to actually run the preinstall scripts | ||
| 502 | # for base-passwd and shadow first before installing packages that depend on these packages | ||
| 503 | # is to do two image installs, installing one set of packages, then the other. | ||
| 490 | rm -f ${target_rootfs}/install/initial_install.manifest | 504 | rm -f ${target_rootfs}/install/initial_install.manifest |
| 491 | echo "Installing base dependencies first (base-passwd, base-files and shadow) since rpm is special" | 505 | echo "Installing base dependencies first (base-passwd, base-files and shadow) since rpm is special" |
| 492 | grep /base-passwd-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true | 506 | grep /base-passwd-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true |
diff --git a/meta/classes/populate_sdk_deb.bbclass b/meta/classes/populate_sdk_deb.bbclass index 9e9e1e1d8b..6f89dcfa06 100644 --- a/meta/classes/populate_sdk_deb.bbclass +++ b/meta/classes/populate_sdk_deb.bbclass | |||
| @@ -36,6 +36,8 @@ populate_sdk_deb () { | |||
| 36 | 36 | ||
| 37 | package_install_internal_deb | 37 | package_install_internal_deb |
| 38 | 38 | ||
| 39 | ${POPULATE_SDK_POST_TARGET_COMMAND} | ||
| 40 | |||
| 39 | populate_sdk_post_deb ${INSTALL_ROOTFS_DEB} | 41 | populate_sdk_post_deb ${INSTALL_ROOTFS_DEB} |
| 40 | 42 | ||
| 41 | populate_sdk_log_check populate_sdk | 43 | populate_sdk_log_check populate_sdk |
diff --git a/meta/classes/populate_sdk_ipk.bbclass b/meta/classes/populate_sdk_ipk.bbclass index 4321afb295..65a95e7a2b 100644 --- a/meta/classes/populate_sdk_ipk.bbclass +++ b/meta/classes/populate_sdk_ipk.bbclass | |||
| @@ -29,6 +29,8 @@ populate_sdk_ipk() { | |||
| 29 | 29 | ||
| 30 | package_install_internal_ipk | 30 | package_install_internal_ipk |
| 31 | 31 | ||
| 32 | ${POPULATE_SDK_POST_TARGET_COMMAND} | ||
| 33 | |||
| 32 | #install host | 34 | #install host |
| 33 | export INSTALL_ROOTFS_IPK="${SDK_OUTPUT}" | 35 | export INSTALL_ROOTFS_IPK="${SDK_OUTPUT}" |
| 34 | export INSTALL_CONF_IPK="${IPKGCONF_SDK}" | 36 | export INSTALL_CONF_IPK="${IPKGCONF_SDK}" |
diff --git a/meta/classes/populate_sdk_rpm.bbclass b/meta/classes/populate_sdk_rpm.bbclass index 365a337a05..fac653bd6f 100644 --- a/meta/classes/populate_sdk_rpm.bbclass +++ b/meta/classes/populate_sdk_rpm.bbclass | |||
| @@ -37,6 +37,7 @@ populate_sdk_rpm () { | |||
| 37 | export INSTALL_PACKAGES_LINGUAS_RPM="" | 37 | export INSTALL_PACKAGES_LINGUAS_RPM="" |
| 38 | export INSTALL_PROVIDENAME_RPM="/bin/sh /bin/bash /usr/bin/env /usr/bin/perl pkgconfig pkgconfig(pkg-config)" | 38 | export INSTALL_PROVIDENAME_RPM="/bin/sh /bin/bash /usr/bin/env /usr/bin/perl pkgconfig pkgconfig(pkg-config)" |
| 39 | export INSTALL_TASK_RPM="populate_sdk-target" | 39 | export INSTALL_TASK_RPM="populate_sdk-target" |
| 40 | export INSTALL_COMPLEMENTARY_RPM="" | ||
| 40 | 41 | ||
| 41 | # Setup base system configuration | 42 | # Setup base system configuration |
| 42 | mkdir -p ${INSTALL_ROOTFS_RPM}/etc/rpm/ | 43 | mkdir -p ${INSTALL_ROOTFS_RPM}/etc/rpm/ |
| @@ -74,6 +75,7 @@ EOF | |||
| 74 | export INSTALL_PLATFORM_EXTRA_RPM | 75 | export INSTALL_PLATFORM_EXTRA_RPM |
| 75 | 76 | ||
| 76 | package_install_internal_rpm | 77 | package_install_internal_rpm |
| 78 | ${POPULATE_SDK_POST_TARGET_COMMAND} | ||
| 77 | populate_sdk_post_rpm ${INSTALL_ROOTFS_RPM} | 79 | populate_sdk_post_rpm ${INSTALL_ROOTFS_RPM} |
| 78 | 80 | ||
| 79 | ## install nativesdk ## | 81 | ## install nativesdk ## |
| @@ -86,6 +88,7 @@ EOF | |||
| 86 | export INSTALL_PACKAGES_LINGUAS_RPM="" | 88 | export INSTALL_PACKAGES_LINGUAS_RPM="" |
| 87 | export INSTALL_PROVIDENAME_RPM="/bin/sh /bin/bash /usr/bin/env /usr/bin/perl pkgconfig libGL.so()(64bit) libGL.so" | 89 | export INSTALL_PROVIDENAME_RPM="/bin/sh /bin/bash /usr/bin/env /usr/bin/perl pkgconfig libGL.so()(64bit) libGL.so" |
| 88 | export INSTALL_TASK_RPM="populate_sdk_rpm-nativesdk" | 90 | export INSTALL_TASK_RPM="populate_sdk_rpm-nativesdk" |
| 91 | export INSTALL_COMPLEMENTARY_RPM="" | ||
| 89 | 92 | ||
| 90 | # List must be prefered to least preferred order | 93 | # List must be prefered to least preferred order |
| 91 | INSTALL_PLATFORM_EXTRA_RPM="" | 94 | INSTALL_PLATFORM_EXTRA_RPM="" |
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass index 67871a9087..a002b1ec02 100644 --- a/meta/classes/rootfs_deb.bbclass +++ b/meta/classes/rootfs_deb.bbclass | |||
| @@ -10,7 +10,7 @@ do_rootfs[recrdeptask] += "do_package_write_deb" | |||
| 10 | 10 | ||
| 11 | do_rootfs[lockfiles] += "${WORKDIR}/deb.lock" | 11 | do_rootfs[lockfiles] += "${WORKDIR}/deb.lock" |
| 12 | 12 | ||
| 13 | DEB_POSTPROCESS_COMMANDS = "rootfs_install_all_locales; " | 13 | DEB_POSTPROCESS_COMMANDS = "" |
| 14 | 14 | ||
| 15 | opkglibdir = "${localstatedir}/lib/opkg" | 15 | opkglibdir = "${localstatedir}/lib/opkg" |
| 16 | 16 | ||
| @@ -42,6 +42,8 @@ fakeroot rootfs_deb_do_rootfs () { | |||
| 42 | package_install_internal_deb | 42 | package_install_internal_deb |
| 43 | ${DEB_POSTPROCESS_COMMANDS} | 43 | ${DEB_POSTPROCESS_COMMANDS} |
| 44 | 44 | ||
| 45 | rootfs_install_complementary | ||
| 46 | |||
| 45 | export D=${IMAGE_ROOTFS} | 47 | export D=${IMAGE_ROOTFS} |
| 46 | export OFFLINE_ROOT=${IMAGE_ROOTFS} | 48 | export OFFLINE_ROOT=${IMAGE_ROOTFS} |
| 47 | export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} | 49 | export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} |
| @@ -87,10 +89,16 @@ remove_packaging_data_files() { | |||
| 87 | rm -rf ${IMAGE_ROOTFS}/usr/dpkg/ | 89 | rm -rf ${IMAGE_ROOTFS}/usr/dpkg/ |
| 88 | } | 90 | } |
| 89 | 91 | ||
| 90 | DPKG_QUERY_COMMAND = "${STAGING_BINDIR_NATIVE}/dpkg --admindir=${IMAGE_ROOTFS}/var/lib/dpkg" | 92 | # This will of course only work after rootfs_deb_do_rootfs has been called |
| 93 | DPKG_QUERY_COMMAND = "${STAGING_BINDIR_NATIVE}/dpkg-query --admindir=$INSTALL_ROOTFS_DEB/var/lib/dpkg" | ||
| 91 | 94 | ||
| 92 | list_installed_packages() { | 95 | list_installed_packages() { |
| 93 | ${DPKG_QUERY_COMMAND} -l | grep ^ii | awk '{ print $2 }' | 96 | if [ "$1" = "arch" ] ; then |
| 97 | # Here we want the PACKAGE_ARCH not the deb architecture | ||
| 98 | ${DPKG_QUERY_COMMAND} -W -f='${Package} ${PackageArch}\n' | ||
| 99 | else | ||
| 100 | ${DPKG_QUERY_COMMAND} -W -f='${Package}\n' | ||
| 101 | fi | ||
| 94 | } | 102 | } |
| 95 | 103 | ||
| 96 | get_package_filename() { | 104 | get_package_filename() { |
| @@ -110,16 +118,9 @@ list_package_recommends() { | |||
| 110 | ${DPKG_QUERY_COMMAND} -s $1 | grep ^Recommends | sed -e 's/^Recommends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' | 118 | ${DPKG_QUERY_COMMAND} -s $1 | grep ^Recommends | sed -e 's/^Recommends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' |
| 111 | } | 119 | } |
| 112 | 120 | ||
| 113 | rootfs_check_package_exists() { | ||
| 114 | if [ `apt-cache policy $1 | wc -l` -gt 4 ]; then | ||
| 115 | echo $1 | ||
| 116 | fi | ||
| 117 | } | ||
| 118 | |||
| 119 | rootfs_install_packages() { | 121 | rootfs_install_packages() { |
| 120 | ${STAGING_BINDIR_NATIVE}/apt-get install $@ --force-yes --allow-unauthenticated | 122 | ${STAGING_BINDIR_NATIVE}/apt-get install `cat $1` --force-yes --allow-unauthenticated |
| 121 | 123 | ||
| 122 | for pkg in $@ ; do | 124 | # Mark all packages installed |
| 123 | deb_package_setflag installed $pkg | 125 | sed -i -e "s/Status: install ok unpacked/Status: install ok installed/;" $INSTALL_ROOTFS_DEB/var/lib/dpkg/status |
| 124 | done | ||
| 125 | } | 126 | } |
diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass index 9732385613..7df97a014b 100644 --- a/meta/classes/rootfs_ipk.bbclass +++ b/meta/classes/rootfs_ipk.bbclass | |||
| @@ -15,10 +15,12 @@ do_rootfs[recrdeptask] += "do_package_write_ipk" | |||
| 15 | do_rootfs[lockfiles] += "${WORKDIR}/ipk.lock" | 15 | do_rootfs[lockfiles] += "${WORKDIR}/ipk.lock" |
| 16 | 16 | ||
| 17 | IPKG_ARGS = "-f ${IPKGCONF_TARGET} -o ${IMAGE_ROOTFS} --force-overwrite" | 17 | IPKG_ARGS = "-f ${IPKGCONF_TARGET} -o ${IMAGE_ROOTFS} --force-overwrite" |
| 18 | # The _POST version also works when constructing the matching SDK | ||
| 19 | IPKG_ARGS_POST = "-f ${IPKGCONF_TARGET} -o $INSTALL_ROOTFS_IPK --force-overwrite" | ||
| 18 | 20 | ||
| 19 | OPKG_PREPROCESS_COMMANDS = "package_update_index_ipk; package_generate_ipkg_conf" | 21 | OPKG_PREPROCESS_COMMANDS = "package_update_index_ipk; package_generate_ipkg_conf" |
| 20 | 22 | ||
| 21 | OPKG_POSTPROCESS_COMMANDS = "ipk_insert_feed_uris; rootfs_install_all_locales; " | 23 | OPKG_POSTPROCESS_COMMANDS = "ipk_insert_feed_uris; " |
| 22 | 24 | ||
| 23 | opkglibdir = "${localstatedir}/lib/opkg" | 25 | opkglibdir = "${localstatedir}/lib/opkg" |
| 24 | 26 | ||
| @@ -74,6 +76,8 @@ fakeroot rootfs_ipk_do_rootfs () { | |||
| 74 | #mkdir -p ${IMAGE_ROOTFS}/etc/opkg/ | 76 | #mkdir -p ${IMAGE_ROOTFS}/etc/opkg/ |
| 75 | #grep "^arch" ${IPKGCONF_TARGET} >${IMAGE_ROOTFS}/etc/opkg/arch.conf | 77 | #grep "^arch" ${IPKGCONF_TARGET} >${IMAGE_ROOTFS}/etc/opkg/arch.conf |
| 76 | 78 | ||
| 79 | rootfs_install_complementary | ||
| 80 | |||
| 77 | ${OPKG_POSTPROCESS_COMMANDS} | 81 | ${OPKG_POSTPROCESS_COMMANDS} |
| 78 | ${ROOTFS_POSTINSTALL_COMMAND} | 82 | ${ROOTFS_POSTINSTALL_COMMAND} |
| 79 | 83 | ||
| @@ -125,12 +129,16 @@ remove_packaging_data_files() { | |||
| 125 | } | 129 | } |
| 126 | 130 | ||
| 127 | list_installed_packages() { | 131 | list_installed_packages() { |
| 128 | grep ^Package: ${IMAGE_ROOTFS}${opkglibdir}/status | sed "s/^Package: //" | 132 | if [ "$1" = "arch" ] ; then |
| 133 | opkg-cl ${IPKG_ARGS_POST} status | opkg-query-helper.py -a | ||
| 134 | else | ||
| 135 | opkg-cl ${IPKG_ARGS_POST} list_installed | awk '{ print $1 }' | ||
| 136 | fi | ||
| 129 | } | 137 | } |
| 130 | 138 | ||
| 131 | get_package_filename() { | 139 | get_package_filename() { |
| 132 | set +x | 140 | set +x |
| 133 | info=`opkg-cl ${IPKG_ARGS} info $1 | grep -B 7 -A 7 "^Status.* \(\(installed\)\|\(unpacked\)\)" || true` | 141 | info=`opkg-cl ${IPKG_ARGS_POST} info $1 | grep -B 7 -A 7 "^Status.* \(\(installed\)\|\(unpacked\)\)" || true` |
| 134 | name=`echo "${info}" | awk '/^Package/ {printf $2"_"}'` | 142 | name=`echo "${info}" | awk '/^Package/ {printf $2"_"}'` |
| 135 | name=$name`echo "${info}" | awk -F: '/^Version/ {printf $NF"_"}' | sed 's/^\s*//g'` | 143 | name=$name`echo "${info}" | awk -F: '/^Version/ {printf $NF"_"}' | sed 's/^\s*//g'` |
| 136 | name=$name`echo "${info}" | awk '/^Archi/ {print $2".ipk"}'` | 144 | name=$name`echo "${info}" | awk '/^Archi/ {print $2".ipk"}'` |
| @@ -145,21 +153,15 @@ get_package_filename() { | |||
| 145 | } | 153 | } |
| 146 | 154 | ||
| 147 | list_package_depends() { | 155 | list_package_depends() { |
| 148 | opkg-cl ${IPKG_ARGS} info $1 | grep ^Depends | sed -e 's/^Depends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' | 156 | opkg-cl ${IPKG_ARGS_POST} info $1 | grep ^Depends | sed -e 's/^Depends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' |
| 149 | } | 157 | } |
| 150 | 158 | ||
| 151 | list_package_recommends() { | 159 | list_package_recommends() { |
| 152 | opkg-cl ${IPKG_ARGS} info $1 | grep ^Recommends | sed -e 's/^Recommends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' | 160 | opkg-cl ${IPKG_ARGS_POST} info $1 | grep ^Recommends | sed -e 's/^Recommends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' |
| 153 | } | ||
| 154 | |||
| 155 | rootfs_check_package_exists() { | ||
| 156 | if [ `opkg-cl ${IPKG_ARGS} info $1 | wc -l` -gt 2 ]; then | ||
| 157 | echo $1 | ||
| 158 | fi | ||
| 159 | } | 161 | } |
| 160 | 162 | ||
| 161 | rootfs_install_packages() { | 163 | rootfs_install_packages() { |
| 162 | opkg-cl ${IPKG_ARGS} install $PACKAGES_TO_INSTALL | 164 | opkg-cl ${IPKG_ARGS_POST} install `cat $1` |
| 163 | } | 165 | } |
| 164 | 166 | ||
| 165 | ipk_insert_feed_uris () { | 167 | ipk_insert_feed_uris () { |
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index cd9c5ab778..1cc4a84495 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass | |||
| @@ -22,7 +22,7 @@ do_rootfs[depends] += "opkg-native:do_populate_sysroot" | |||
| 22 | do_rootfs[recrdeptask] += "do_package_write_rpm" | 22 | do_rootfs[recrdeptask] += "do_package_write_rpm" |
| 23 | 23 | ||
| 24 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; package_generate_rpm_conf; " | 24 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; package_generate_rpm_conf; " |
| 25 | RPM_POSTPROCESS_COMMANDS = "rootfs_install_all_locales; " | 25 | RPM_POSTPROCESS_COMMANDS = "" |
| 26 | 26 | ||
| 27 | # | 27 | # |
| 28 | # Allow distributions to alter when [postponed] package install scripts are run | 28 | # Allow distributions to alter when [postponed] package install scripts are run |
| @@ -56,6 +56,7 @@ fakeroot rootfs_rpm_do_rootfs () { | |||
| 56 | export INSTALL_PACKAGES_LINGUAS_RPM="${LINGUAS_INSTALL}" | 56 | export INSTALL_PACKAGES_LINGUAS_RPM="${LINGUAS_INSTALL}" |
| 57 | export INSTALL_PROVIDENAME_RPM="" | 57 | export INSTALL_PROVIDENAME_RPM="" |
| 58 | export INSTALL_TASK_RPM="rootfs_rpm_do_rootfs" | 58 | export INSTALL_TASK_RPM="rootfs_rpm_do_rootfs" |
| 59 | export INSTALL_COMPLEMENTARY_RPM="" | ||
| 59 | 60 | ||
| 60 | # Setup base system configuration | 61 | # Setup base system configuration |
| 61 | mkdir -p ${INSTALL_ROOTFS_RPM}/etc/rpm/ | 62 | mkdir -p ${INSTALL_ROOTFS_RPM}/etc/rpm/ |
| @@ -69,6 +70,8 @@ fakeroot rootfs_rpm_do_rootfs () { | |||
| 69 | 70 | ||
| 70 | package_install_internal_rpm | 71 | package_install_internal_rpm |
| 71 | 72 | ||
| 73 | rootfs_install_complementary | ||
| 74 | |||
| 72 | export D=${IMAGE_ROOTFS} | 75 | export D=${IMAGE_ROOTFS} |
| 73 | export OFFLINE_ROOT=${IMAGE_ROOTFS} | 76 | export OFFLINE_ROOT=${IMAGE_ROOTFS} |
| 74 | export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} | 77 | export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} |
| @@ -134,11 +137,15 @@ remove_packaging_data_files() { | |||
| 134 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} | 137 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} |
| 135 | } | 138 | } |
| 136 | 139 | ||
| 137 | RPM_QUERY_CMD = '${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath ${rpmlibdir}" \ | 140 | RPM_QUERY_CMD = '${RPM} --root $INSTALL_ROOTFS_RPM -D "_dbpath ${rpmlibdir}" \ |
| 138 | -D "__dbi_txn create nofsync private"' | 141 | -D "__dbi_txn create nofsync private"' |
| 139 | 142 | ||
| 140 | list_installed_packages() { | 143 | list_installed_packages() { |
| 141 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME}\n]" | 144 | if [ "$1" = "arch" ] ; then |
| 145 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH}\n]" | ||
| 146 | else | ||
| 147 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME}\n]" | ||
| 148 | fi | ||
| 142 | } | 149 | } |
| 143 | 150 | ||
| 144 | get_package_filename() { | 151 | get_package_filename() { |
| @@ -172,21 +179,15 @@ list_package_recommends() { | |||
| 172 | ${RPM_QUERY_CMD} -q --suggests $1 | 179 | ${RPM_QUERY_CMD} -q --suggests $1 |
| 173 | } | 180 | } |
| 174 | 181 | ||
| 175 | rootfs_check_package_exists() { | ||
| 176 | resolve_package_rpm ${RPMCONF_TARGET_BASE}-base_archs.conf $1 | ||
| 177 | } | ||
| 178 | |||
| 179 | rootfs_install_packages() { | 182 | rootfs_install_packages() { |
| 180 | # The pkg to be installed here is not controlled by the | 183 | # Note - we expect the variables not set here to already have been set |
| 181 | # package_install_internal_rpm, so it may have already been | 184 | export INSTALL_PACKAGES_RPM="" |
| 182 | # installed(e.g, installed in the first time when generate the | 185 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="`cat $1`" |
| 183 | # rootfs), use '--replacepkgs' to always install them | 186 | export INSTALL_PROVIDENAME_RPM="" |
| 184 | for pkg in $@; do | 187 | export INSTALL_TASK_RPM="rootfs_install_packages" |
| 185 | ${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath ${rpmlibdir}" \ | 188 | export INSTALL_COMPLEMENTARY_RPM="1" |
| 186 | -D "__dbi_txn create nofsync private" \ | 189 | |
| 187 | --noscripts --notriggers --noparentdirs --nolinktos \ | 190 | package_install_internal_rpm |
| 188 | --replacepkgs -Uhv $pkg || true | ||
| 189 | done | ||
| 190 | } | 191 | } |
| 191 | 192 | ||
| 192 | python () { | 193 | python () { |
diff --git a/scripts/oe-pkgdata-util b/scripts/oe-pkgdata-util new file mode 100755 index 0000000000..2427f10d89 --- /dev/null +++ b/scripts/oe-pkgdata-util | |||
| @@ -0,0 +1,167 @@ | |||
| 1 | #!/usr/bin/env python | ||
| 2 | |||
| 3 | # OpenEmbedded pkgdata utility | ||
| 4 | # | ||
| 5 | # Written by: Paul Eggleton <paul.eggleton@linux.intel.com> | ||
| 6 | # | ||
| 7 | # Copyright 2012 Intel Corporation | ||
| 8 | # | ||
| 9 | # This program is free software; you can redistribute it and/or modify | ||
| 10 | # it under the terms of the GNU General Public License version 2 as | ||
| 11 | # published by the Free Software Foundation. | ||
| 12 | # | ||
| 13 | # This program is distributed in the hope that it will be useful, | ||
| 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | # GNU General Public License for more details. | ||
| 17 | # | ||
| 18 | # You should have received a copy of the GNU General Public License along | ||
| 19 | # with this program; if not, write to the Free Software Foundation, Inc., | ||
| 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 21 | # | ||
| 22 | # | ||
| 23 | # Currently only has one function - mapping of packages to their dev/dbg/doc/locale etc. | ||
| 24 | # counterparts ("glob" command). Could be extended in future to perform other useful querying | ||
| 25 | # functions on the pkgdata though. | ||
| 26 | # | ||
| 27 | |||
| 28 | import sys | ||
| 29 | import os | ||
| 30 | import os.path | ||
| 31 | import fnmatch | ||
| 32 | import re | ||
| 33 | |||
| 34 | def usage(): | ||
| 35 | print("syntax: pkgdata-util glob [-d] <pkgdatadir> <vendor-os> <pkglist> \"<globs>\""); | ||
| 36 | |||
| 37 | |||
| 38 | |||
| 39 | def glob(args): | ||
| 40 | if len(args) < 4: | ||
| 41 | usage() | ||
| 42 | sys.exit(1) | ||
| 43 | |||
| 44 | pkgdata_dir = args[0] | ||
| 45 | target_suffix = args[1] | ||
| 46 | pkglist_file = args[2] | ||
| 47 | globs = args[3].split() | ||
| 48 | |||
| 49 | if target_suffix.startswith("-"): | ||
| 50 | target_suffix = target_suffix[1:] | ||
| 51 | |||
| 52 | skipregex = re.compile("-locale-|^locale-base-|-dev$|-doc$|-dbg$|-staticdev$|^kernel-module-") | ||
| 53 | |||
| 54 | mappedpkgs = set() | ||
| 55 | with open(pkglist_file, 'r') as f: | ||
| 56 | for line in f: | ||
| 57 | fields = line.rstrip().split() | ||
| 58 | if len(fields) < 2: | ||
| 59 | continue | ||
| 60 | pkg = fields[0] | ||
| 61 | arch = fields[1] | ||
| 62 | multimach_target_sys = "%s-%s" % (arch, target_suffix) | ||
| 63 | |||
| 64 | # Skip packages for which there is no point applying globs | ||
| 65 | if skipregex.search(pkg): | ||
| 66 | if debug: | ||
| 67 | print("%s -> !!" % pkg) | ||
| 68 | continue | ||
| 69 | |||
| 70 | # Skip packages that already match the globs, so if e.g. a dev package | ||
| 71 | # is already installed and thus in the list, we don't process it any further | ||
| 72 | # Most of these will be caught by skipregex already, but just in case... | ||
| 73 | already = False | ||
| 74 | for g in globs: | ||
| 75 | if fnmatch.fnmatchcase(pkg, g): | ||
| 76 | already = True | ||
| 77 | break | ||
| 78 | if already: | ||
| 79 | if debug: | ||
| 80 | print("%s -> !" % pkg) | ||
| 81 | continue | ||
| 82 | |||
| 83 | # Define some functions | ||
| 84 | def revpkgdata(pkgn): | ||
| 85 | return os.path.join(pkgdata_dir, multimach_target_sys, "runtime-reverse", pkgn) | ||
| 86 | def fwdpkgdata(pkgn): | ||
| 87 | return os.path.join(pkgdata_dir, multimach_target_sys, "runtime", pkgn) | ||
| 88 | def readpn(pkgdata_file): | ||
| 89 | pn = "" | ||
| 90 | with open(pkgdata_file, 'r') as f: | ||
| 91 | for line in f: | ||
| 92 | if line.startswith("PN:"): | ||
| 93 | pn = line.split(': ')[1].rstrip() | ||
| 94 | return pn | ||
| 95 | def readrenamed(pkgdata_file): | ||
| 96 | renamed = "" | ||
| 97 | pn = os.path.basename(pkgdata_file) | ||
| 98 | with open(pkgdata_file, 'r') as f: | ||
| 99 | for line in f: | ||
| 100 | if line.startswith("PKG_%s:" % pn): | ||
| 101 | renamed = line.split(': ')[1].rstrip() | ||
| 102 | return renamed | ||
| 103 | |||
| 104 | # Main processing loop | ||
| 105 | for g in globs: | ||
| 106 | mappedpkg = "" | ||
| 107 | # First just try substitution (i.e. packagename -> packagename-dev) | ||
| 108 | newpkg = g.replace("*", pkg) | ||
| 109 | revlink = revpkgdata(newpkg) | ||
| 110 | if os.path.exists(revlink): | ||
| 111 | mappedpkg = os.path.basename(os.readlink(revlink)) | ||
| 112 | fwdfile = fwdpkgdata(mappedpkg) | ||
| 113 | if os.path.exists(fwdfile): | ||
| 114 | mappedpkg = readrenamed(fwdfile) | ||
| 115 | else: | ||
| 116 | # That didn't work, so now get the PN, substitute that, then map in the other direction | ||
| 117 | revlink = revpkgdata(pkg) | ||
| 118 | if os.path.exists(revlink): | ||
| 119 | pn = readpn(revlink) | ||
| 120 | newpkg = g.replace("*", pn) | ||
| 121 | fwdfile = fwdpkgdata(newpkg) | ||
| 122 | if os.path.exists(fwdfile): | ||
| 123 | mappedpkg = readrenamed(fwdfile) | ||
| 124 | else: | ||
| 125 | # Package doesn't even exist... | ||
| 126 | if debug: | ||
| 127 | print "%s is not a valid package!" % (pkg) | ||
| 128 | break | ||
| 129 | |||
| 130 | if mappedpkg: | ||
| 131 | if debug: | ||
| 132 | print "%s (%s) -> %s" % (pkg, g, mappedpkg) | ||
| 133 | mappedpkgs.add(mappedpkg) | ||
| 134 | else: | ||
| 135 | if debug: | ||
| 136 | print "%s (%s) -> ?" % (pkg, g) | ||
| 137 | |||
| 138 | if debug: | ||
| 139 | print "------" | ||
| 140 | |||
| 141 | print("\n".join(mappedpkgs)) | ||
| 142 | |||
| 143 | |||
| 144 | |||
| 145 | # Too lazy to use getopt | ||
| 146 | debug = False | ||
| 147 | noopt = False | ||
| 148 | args = [] | ||
| 149 | for arg in sys.argv[1:]: | ||
| 150 | if arg == "--": | ||
| 151 | noopt = True | ||
| 152 | else: | ||
| 153 | if not noopt: | ||
| 154 | if arg == "-d": | ||
| 155 | debug = True | ||
| 156 | continue | ||
| 157 | args.append(arg) | ||
| 158 | |||
| 159 | if len(args) < 1: | ||
| 160 | usage() | ||
| 161 | sys.exit(1) | ||
| 162 | |||
| 163 | if args[0] == "glob": | ||
| 164 | glob(args[1:]) | ||
| 165 | else: | ||
| 166 | usage() | ||
| 167 | sys.exit(1) | ||
diff --git a/scripts/opkg-query-helper.py b/scripts/opkg-query-helper.py new file mode 100755 index 0000000000..b52284b325 --- /dev/null +++ b/scripts/opkg-query-helper.py | |||
| @@ -0,0 +1,76 @@ | |||
| 1 | #!/usr/bin/env python | ||
| 2 | |||
| 3 | # OpenEmbedded opkg query helper utility | ||
| 4 | # | ||
| 5 | # Written by: Paul Eggleton <paul.eggleton@linux.intel.com> | ||
| 6 | # | ||
| 7 | # Copyright 2012 Intel Corporation | ||
| 8 | # | ||
| 9 | # This program is free software; you can redistribute it and/or modify | ||
| 10 | # it under the terms of the GNU General Public License version 2 as | ||
| 11 | # published by the Free Software Foundation. | ||
| 12 | # | ||
| 13 | # This program is distributed in the hope that it will be useful, | ||
| 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | # GNU General Public License for more details. | ||
| 17 | # | ||
| 18 | # You should have received a copy of the GNU General Public License along | ||
| 19 | # with this program; if not, write to the Free Software Foundation, Inc., | ||
| 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 21 | # | ||
| 22 | # | ||
| 23 | |||
| 24 | |||
| 25 | import sys | ||
| 26 | import fileinput | ||
| 27 | import re | ||
| 28 | |||
| 29 | archmode = False | ||
| 30 | filemode = False | ||
| 31 | |||
| 32 | args = [] | ||
| 33 | for arg in sys.argv[1:]: | ||
| 34 | if arg == '-a': | ||
| 35 | archmode = True | ||
| 36 | elif arg == '-f': | ||
| 37 | filemode = True | ||
| 38 | else: | ||
| 39 | args.append(arg) | ||
| 40 | |||
| 41 | # Regex for removing version specs after dependency items | ||
| 42 | verregex = re.compile(' \([=<>]* [^ )]*\)') | ||
| 43 | |||
| 44 | pkg = "" | ||
| 45 | ver = "" | ||
| 46 | for line in fileinput.input(args): | ||
| 47 | line = line.rstrip() | ||
| 48 | if ': ' in line: | ||
| 49 | if line.startswith("Package:"): | ||
| 50 | pkg = line.split(": ")[1] | ||
| 51 | ver = "" | ||
| 52 | else: | ||
| 53 | if archmode: | ||
| 54 | if line.startswith("Architecture:"): | ||
| 55 | arch = line.split(": ")[1] | ||
| 56 | print("%s %s" % (pkg,arch)) | ||
| 57 | elif filemode: | ||
| 58 | if line.startswith("Version:"): | ||
| 59 | ver = line.split(": ")[1] | ||
| 60 | elif line.startswith("Architecture:"): | ||
| 61 | arch = line.split(": ")[1] | ||
| 62 | print("%s %s_%s_%s.ipk" % (pkg,pkg,ver,arch)) | ||
| 63 | else: | ||
| 64 | if line.startswith("Depends:"): | ||
| 65 | depval = line.split(": ")[1] | ||
| 66 | deps = depval.split(", ") | ||
| 67 | for dep in deps: | ||
| 68 | dep = verregex.sub('', dep) | ||
| 69 | print("%s|%s" % (pkg,dep)) | ||
| 70 | elif line.startswith("Recommends:"): | ||
| 71 | recval = line.split(": ")[1] | ||
| 72 | recs = recval.split(", ") | ||
| 73 | for rec in recs: | ||
| 74 | rec = verregex.sub('', rec) | ||
| 75 | print("%s|%s [REC]" % (pkg, rec)) | ||
| 76 | |||
