makepkg: allow specifying subsets of packages to build

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>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Allan McRae 2009-10-22 14:40:03 +10:00 committed by Dan McGee
parent 82443e0059
commit f2c9e51eb0
2 changed files with 22 additions and 1 deletions

View file

@ -149,6 +149,10 @@ Options
remote builder, or a tarball upload. Because integrity checks are verified, remote builder, or a tarball upload. Because integrity checks are verified,
all source files of the package need to be present or downloadable. 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*:: *\--noconfirm*::
(Passed to pacman) Prevent pacman from waiting for user input before (Passed to pacman) Prevent pacman from waiting for user input before
proceeding with operations. proceeding with operations.

View file

@ -73,6 +73,7 @@ HOLDVER=0
BUILDFUNC=0 BUILDFUNC=0
PKGFUNC=0 PKGFUNC=0
SPLITPKG=0 SPLITPKG=0
PKGLIST=""
# Forces the pkgver of the current PKGBUILD. Used by the fakeroot call # Forces the pkgver of the current PKGBUILD. Used by the fakeroot call
# when dealing with svn/cvs/etc PKGBUILDs. # when dealing with svn/cvs/etc PKGBUILDs.
@ -1247,6 +1248,15 @@ check_sanity() {
done done
fi 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 return 0
} }
@ -1465,6 +1475,7 @@ usage() {
echo "$(gettext " --asroot Allow makepkg to run as root user")" 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" 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 " --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 " --skipinteg Do not fail when integrity checks are missing")"
echo "$(gettext " --source Generate a source-only tarball without downloaded sources")" echo "$(gettext " --source Generate a source-only tarball without downloaded sources")"
echo echo
@ -1501,7 +1512,7 @@ ARGLIST=("$@")
OPT_SHORT="AcCdefFghiLmop:rRsV" OPT_SHORT="AcCdefFghiLmop:rRsV"
OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps" OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps"
OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver" 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:" OPT_LONG="$OPT_LONG,source,syncdeps,version,config:"
# Pacman Options # Pacman Options
OPT_LONG="$OPT_LONG,noconfirm,noprogressbar" OPT_LONG="$OPT_LONG,noconfirm,noprogressbar"
@ -1539,6 +1550,7 @@ while true; do
-m|--nocolor) USE_COLOR='n' ;; -m|--nocolor) USE_COLOR='n' ;;
-o|--nobuild) NOBUILD=1 ;; -o|--nobuild) NOBUILD=1 ;;
-p) shift; BUILDFILE=$1 ;; -p) shift; BUILDFILE=$1 ;;
--pkg) shift; PKGLIST=$1 ;;
-r|--rmdeps) RMDEPS=1 ;; -r|--rmdeps) RMDEPS=1 ;;
-R|--repackage) REPKG=1 ;; -R|--repackage) REPKG=1 ;;
--skipinteg) SKIPINTEG=1 ;; --skipinteg) SKIPINTEG=1 ;;
@ -1735,6 +1747,11 @@ fi
pkgbase=${pkgbase:-${pkgname[0]}} pkgbase=${pkgbase:-${pkgname[0]}}
if [[ -n "${PKGLIST[@]}" ]]; then
unset pkgname
pkgname="${PKGLIST[@]}"
fi
if (( ! SPLITPKG )); then if (( ! SPLITPKG )); then
if [[ -f $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} \ if [[ -f $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} \
|| -f $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-any${PKGEXT} ]] \ || -f $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-any${PKGEXT} ]] \