[pacman-dev] [PATCH] makepkg: allow specifying subsets of packages to build

Allan McRae allan at archlinux.org
Wed Oct 21 00:01:18 EDT 2009


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 <allan at archlinux.org>
---

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 ${PKGLIST[@]}; do
+			if ! in_array $pkg ${pkgname[@]}; 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="${PKGLIST[@]}"
+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 "${ARGLIST[@]}" || exit $?
 		else
-			fakeroot -- $0 -F $ARGLIST || exit $?
+			fakeroot -- $0 -F "${ARGLIST[@]}" || exit $?
 		fi
 	fi
 fi
-- 
1.6.5.1



More information about the pacman-dev mailing list