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]>
---
 doc/makepkg.8.txt     |    4 ++++
 scripts/makepkg.sh.in |   19 ++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt
index ec02875..043ad40 100644
--- a/doc/makepkg.8.txt
+++ b/doc/makepkg.8.txt
@@ -148,6 +148,10 @@ 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`>*::
+       Only build listed packages from a split package. The use of 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 309211b..880b90a 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 "${pkgli...@]}" ]; 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
@@ -1502,7 +1513,7 @@ ARGLIST=("$@")
 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 "${pkgli...@]}" ]; 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}" \) \
-- 
1.6.5.1


Reply via email to