Add option --keep-packs to keep packages already in build root
authorZhang Qiang <qiang.z.zhang@intel.com>
Fri, 22 Nov 2013 02:25:06 +0000 (10:25 +0800)
committerZhang Qiang <qiang.z.zhang@intel.com>
Thu, 3 Apr 2014 07:53:09 +0000 (15:53 +0800)
with --keep-packs, unused packages will not be removed while resusing
buildroot. This can speed up build hundred of packages significantly.

This option also usefull to create a single buildroot to share with other
developers to build all packages.

Change-Id: Ibcb68e49b8eed0bdf695485c2ec79a8eb4efb824

build
init_buildsystem

diff --git a/build b/build
index 82b435f8e9a0a7dd220e3660396ca71eb0e1c148..5643628a8b7ae25e8aaa1788373eeda5e8955d43 100755 (executable)
--- a/build
+++ b/build
@@ -77,6 +77,7 @@ DO_LINT=
 DO_CHECKS=true
 CLEAN_BUILD=
 USE_SYSTEM_QEMU=
+KEEP_PACKS=
 SPECFILES=()
 SRCDIR=
 BUILD_JOBS=
@@ -1188,6 +1189,9 @@ while test -n "$1"; do
       *-use-system-qemu)
        USE_SYSTEM_QEMU="--use-system-qemu"
       ;;
+      --keep-packs)
+       KEEP_PACKS="--keep-packs"
+      ;;
       *-root)
        needarg
        BUILD_ROOT="$ARG"
@@ -2073,7 +2077,7 @@ for SPECFILE in "${SPECFILES[@]}" ; do
        if test "$DO_INIT" = true ; then
            # do first stage of init_buildsystem
            rm -f $BUILD_ROOT/.build.success
-           set -- init_buildsystem --configdir "$CONFIG_DIR" --cachedir "$CACHE_DIR" --prepare "${definesnstuff[@]}" "${repos[@]}" $CLEAN_BUILD $USE_SYSTEM_QEMU $USEUSEDFORBUILD $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS
+           set -- init_buildsystem --configdir "$CONFIG_DIR" --cachedir "$CACHE_DIR" --prepare "${definesnstuff[@]}" "${repos[@]}" $CLEAN_BUILD $USE_SYSTEM_QEMU $KEEP_PACKS $USEUSEDFORBUILD $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS
            echo "$* ..."
             start_time=`date +%s`
            "$@" || cleanup_and_exit 1
@@ -2598,7 +2602,7 @@ for SPECFILE in "${SPECFILES[@]}" ; do
        CREATE_BUILD_BINARIES=
        test "$BUILDTYPE" = preinstallimage && mkdir -p $BUILD_ROOT/.preinstall_image
        egrep '^#[       ]*needsbinariesforbuild[       ]*$' >/dev/null <$MYSRCDIR/$SPECFILE && CREATE_BUILD_BINARIES=--create-build-binaries
-       set -- init_buildsystem --configdir "$CONFIG_DIR" --cachedir "$CACHE_DIR" "${definesnstuff[@]}" "${repos[@]}" $CLEAN_BUILD $USE_SYSTEM_QEMU $USEUSEDFORBUILD $CREATE_BUILD_BINARIES $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS
+       set -- init_buildsystem --configdir "$CONFIG_DIR" --cachedir "$CACHE_DIR" "${definesnstuff[@]}" "${repos[@]}" $CLEAN_BUILD $USE_SYSTEM_QEMU $KEEP_PACKS $USEUSEDFORBUILD $CREATE_BUILD_BINARIES $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS
        echo "$* ..."
         start_time=`date +%s`
        "$@" || cleanup_and_exit 1
index ff0bdddfa9116fb5257be92911ad7d43a702e601..c7dc95a453ae7418b16bd6f67b7cd7a6df5990f4 100755 (executable)
@@ -35,6 +35,7 @@ RPMIDFMT="%{NAME}-%{VERSION}-%{RELEASE} %{BUILDTIME}\n"
 
 PREPARE_VM=
 USE_SYSTEM_QEMU=
+KEEP_PACKS=
 USEUSEDFORBUILD=
 LIST_STATE=
 RPMLIST=
@@ -51,6 +52,10 @@ while test -n "$1" ; do
            shift
            USE_SYSTEM_QEMU=true
            ;;
+       --keep-packs)
+           shift
+           KEEP_PACKS=true
+           ;;
        --create-build-binaries)
            shift
            CREATE_BUILD_BINARIES=true
@@ -906,23 +911,25 @@ rpm_e()
 #
 # delete all packages we don't want
 #
-mkdir -p $BUILD_ROOT/.init_b_cache/todelete
-for PKG in $BUILD_ROOT/.init_b_cache/alreadyinstalled/* ; do
-    PKG=${PKG##*/}
-    test "$PKG" = "*" && continue
-    ln $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG $BUILD_ROOT/.init_b_cache/todelete/$PKG
-done
-for PKG in $PACKAGES_TO_INSTALL; do
-    rm -f $BUILD_ROOT/.init_b_cache/todelete/$PKG
-done
-for PKG in $BUILD_ROOT/.init_b_cache/todelete/* ; do
-    PKG=${PKG##*/}
-    test "$PKG" = "*" && continue
-    echo "deleting $PKG"
-    rpm_e "$PKG"
-    check_exit
-done
-rm -rf "$BUILD_ROOT/.init_b_cache/todelete"
+if [ -z "$KEEP_PACKS" ]; then
+    mkdir -p $BUILD_ROOT/.init_b_cache/todelete
+    for PKG in $BUILD_ROOT/.init_b_cache/alreadyinstalled/* ; do
+        PKG=${PKG##*/}
+        test "$PKG" = "*" && continue
+        ln $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG $BUILD_ROOT/.init_b_cache/todelete/$PKG
+    done
+    for PKG in $PACKAGES_TO_INSTALL; do
+        rm -f $BUILD_ROOT/.init_b_cache/todelete/$PKG
+    done
+    for PKG in $BUILD_ROOT/.init_b_cache/todelete/* ; do
+        PKG=${PKG##*/}
+        test "$PKG" = "*" && continue
+        echo "deleting $PKG"
+        rpm_e "$PKG"
+        check_exit
+    done
+    rm -rf "$BUILD_ROOT/.init_b_cache/todelete"
+fi
 
 rm -rf "$BUILD_ROOT/.init_b_cache/preinstalls"
 mkdir -p "$BUILD_ROOT/.init_b_cache/preinstalls"