This allows makepkg to only build a specified subset of packages
from a split PKGBUILD.  This is very useful in combination with the
-R flag or when bumping the pkgrel of a single package.

Fixes FS#15956.

Signed-off-by: Allan McRae <[email protected]>
---

As always, my changes to the documenation could be improved.  Suggestions 
welcome.

 doc/makepkg.8.txt     |    5 +++++
 scripts/makepkg.sh.in |   26 +++++++++++++++++++++-----
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt
index ec02875..8c68143 100644
--- a/doc/makepkg.8.txt
+++ b/doc/makepkg.8.txt
@@ -148,6 +148,11 @@ Options
        remote builder, or a tarball upload. Because integrity checks are 
verified,
        all source files of the package need to be present or downloadable.
 
+*\--pkg <`list`>*::
+       Builds only the listed packages. Useful in combination with package
+       splitting.  The use quotes is necessary when specifying multiple
+       packages. e.g. `--pkg "pkg1 pkg3"`
+
 *\--noconfirm*::
        (Passed to pacman) Prevent pacman from waiting for user input before
        proceeding with operations.
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 7e10eef..c3672b1 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -72,6 +72,7 @@ IGNOREARCH=0
 HOLDVER=0
 PKGFUNC=0
 SPLITPKG=0
+PKGLIST=""
 COLORMSG=0
 
 # Forces the pkgver of the current PKGBUILD. Used by the fakeroot call
@@ -1243,6 +1244,15 @@ check_sanity() {
                done
        fi
 
+       if [ -n "$PKGLIST" ]; then
+               for pkg in ${pkgli...@]}; do
+                       if ! in_array $pkg ${pkgna...@]}; then
+                               error "$(gettext "requested package %s is not 
provided in %s")" "$pkg" "$BUILDSCRIPT"
+                               return 1
+                       fi
+               done
+       fi
+
        return 0
 }
 
@@ -1466,6 +1476,7 @@ usage() {
        echo "$(gettext "  --asroot         Allow makepkg to run as root user")"
        printf "$(gettext "  --config <file>  Use an alternate config file 
(instead of '%s')")\n" "$confdir/makepkg.conf"
        echo "$(gettext "  --holdver        Prevent automatic version bumping 
for development PKGBUILDs")"
+       echo "$(gettext "  --pkg <list>     Only build listed packages from a 
split package")"
        echo "$(gettext "  --skipinteg      Do not fail when integrity checks 
are missing")"
        echo "$(gettext "  --source         Generate a source-only tarball 
without downloaded sources")"
        echo
@@ -1496,13 +1507,13 @@ if [ ! $(type -t gettext) ]; then
        }
 fi
 
-ARGLIST=$@
+ARGLIST=("$@")
 
 # Parse Command Line Options.
 OPT_SHORT="AcCdefFghiLmop:rRsV"
 OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps"
 OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver"
-OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,rmdeps,repackage,skipinteg"
+OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,pkg:,rmdeps,repackage,skipinteg"
 OPT_LONG="$OPT_LONG,source,syncdeps,version,config:"
 # Pacman Options
 OPT_LONG="$OPT_LONG,noconfirm,noprogressbar"
@@ -1540,6 +1551,7 @@ while true; do
                -m|--nocolor)     USE_COLOR='n' ;;
                -o|--nobuild)     NOBUILD=1 ;;
                -p)               shift; BUILDFILE=$1 ;;
+               --pkg)            shift; PKGLIST=$1 ;;
                -r|--rmdeps)      RMDEPS=1 ;;
                -R|--repackage)   REPKG=1 ;;
                --skipinteg)      SKIPINTEG=1 ;;
@@ -1722,6 +1734,11 @@ fi
 
 pkgbase=${pkgbase:-${pkgname[0]}}
 
+if [ -n "$PKGLIST" ]; then
+       unset pkgname
+       pkgname="${pkgli...@]}"
+fi
+
 if [ "$SPLITPKG" -eq 0 ]; then
        if [ \( -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" \
             -o -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-any${PKGEXT}" \) \
@@ -1914,11 +1931,10 @@ else
                fi
 
                msg "$(gettext "Entering fakeroot environment...")"
-
                if [ -n "$newpkgver" ]; then
-                       fakeroot -- $0 --forcever $newpkgver -F $ARGLIST || 
exit $?
+                       fakeroot -- $0 --forcever $newpkgver -F "${argli...@]}" 
|| exit $?
                else
-                       fakeroot -- $0 -F $ARGLIST || exit $?
+                       fakeroot -- $0 -F "${argli...@]}" || exit $?
                fi
        fi
 fi
-- 
1.6.5.1


Reply via email to