[pacman-dev] [PATCH] makepkg: allow specifying alternative build directory

Allan McRae allan at archlinux.org
Wed Jun 15 05:13:26 EDT 2011


Add a BUILDDIR variable (which can be overridden in the environment)
to specify an alternative location for building the package. This is
useful for people who want to build on a different filesystem for
improved performance (e.g. tmpfs).

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 doc/makepkg.8.txt      |    3 +++
 doc/makepkg.conf.5.txt |    5 +++++
 etc/makepkg.conf.in    |    3 +++
 scripts/makepkg.sh.in  |   18 ++++++++++++++++--
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt
index e61f7ab..f15226a 100644
--- a/doc/makepkg.8.txt
+++ b/doc/makepkg.8.txt
@@ -206,6 +206,9 @@ Environment Variables
 	Folder where the downloaded sources will be stored. Overrides the
 	corresponding value defined in linkman:makepkg.conf[5].
 
+**BUILDDIR=**"/path/to/folder"::
+	Folder where the package will be built. Overrides the corresponding
+	value defined in linkman:makepkg.conf[5].
 
 Configuration
 -------------
diff --git a/doc/makepkg.conf.5.txt b/doc/makepkg.conf.5.txt
index fcd2f2a..4db8b92 100644
--- a/doc/makepkg.conf.5.txt
+++ b/doc/makepkg.conf.5.txt
@@ -110,6 +110,11 @@ Options
 	running in the DistCC cluster. In addition, you will want to modify your
 	`MAKEFLAGS`.
 
+**BUILDDIR=**"/path/to/folder"::
+	If this value is not set, packages will by default be built in the
+	subdirectories of the current directory.  This option allows setting
+	the build location to another folder.
+
 **GPGKEY=**""::
 	Specify a key to use for gpg signing instead of the default key in the
 	keyring. Can be overridden with makepkg's `--key` option.
diff --git a/etc/makepkg.conf.in b/etc/makepkg.conf.in
index 42ae940..d3b7d3d 100644
--- a/etc/makepkg.conf.in
+++ b/etc/makepkg.conf.in
@@ -54,6 +54,9 @@ BUILDENV=(fakeroot !distcc color !ccache check !sign)
 #-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
 #-- specify a space-delimited list of hosts running in the DistCC cluster.
 #DISTCC_HOSTS=""
+#
+#-- Specify a directory for package building.
+#BUILDDIR=/tmp/makepkg
 
 #########################################################################
 # GLOBAL PACKAGE OPTIONS
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 18df00f..ce8f008 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -41,8 +41,6 @@ myver='@PACKAGE_VERSION@'
 confdir='@sysconfdir@'
 BUILDSCRIPT='@BUILDSCRIPT@'
 startdir="$PWD"
-srcdir="$startdir/src"
-pkgdir="$startdir/pkg"
 
 packaging_options=('strip' 'docs' 'libtool' 'emptydirs' 'zipman' 'purge' 'upx')
 other_options=('ccache' 'distcc' 'buildflags' 'makeflags')
@@ -1653,6 +1651,7 @@ done
 [[ -n ${PKGDEST} ]] && _PKGDEST=$(canonicalize_path ${PKGDEST})
 [[ -n ${SRCDEST} ]] && _SRCDEST=$(canonicalize_path ${SRCDEST})
 [[ -n ${SRCPKGDEST} ]] && _SRCPKGDEST=$(canonicalize_path ${SRCPKGDEST})
+[[ -n ${BUILDDIR} ]] && _BUILDDIR=$(canonicalize_path ${BUILDDIR})
 [[ -n ${PKGEXT} ]] && _PKGEXT=${PKGEXT}
 [[ -n ${SRCEXT} ]] && _SRCEXT=${SRCEXT}
 [[ -n ${GPGKEY} ]] && _GPGKEY=${GPGKEY}
@@ -1700,6 +1699,21 @@ fi
 readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
 
 # override settings with an environment variable for batch processing
+BUILDDIR=${_BUILDDIR:-$BUILDDIR}
+BUILDDIR=${BUILDDIR:-$startdir} #default to $startdir if undefined
+if [[ ! -d $BUILDDIR ]]; then
+	mkdir -p "$BUILDDIR" ||
+			error "$(gettext "You do not have write permission to create packages in %s.")" "$BUILDDIR"
+	chmod a-s "$BUILDDIR"
+fi
+if [[ ! -w $BUILDDIR ]]; then
+	error "$(gettext "You do not have write permission to create packages in %s.")" "$BUILDDIR"
+	plain "$(gettext "Aborting...")"
+	exit 1
+fi
+srcdir="$BUILDDIR/src"
+pkgdir="$BUILDDIR/pkg"
+
 PKGDEST=${_PKGDEST:-$PKGDEST}
 PKGDEST=${PKGDEST:-$startdir} #default to $startdir if undefined
 if [[ ! -w $PKGDEST ]]; then
-- 
1.7.5.4



More information about the pacman-dev mailing list