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@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