summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2009-01-16 13:20:05 +0100
committerAllan McRae <allan@archlinux.org>2009-01-16 13:20:05 +0100
commit08034ceb1767f4bcbb7b440bcbfed1bc76881d16 (patch)
treed12fdaa7fb58cbf7ffa64a2909793acf088e6e42
parent219cb2eaacf1ff35bd04cd64d0f8b616a732e185 (diff)
downloadpacman-08034ceb1767f4bcbb7b440bcbfed1bc76881d16.tar.gz
pacman-08034ceb1767f4bcbb7b440bcbfed1bc76881d16.tar.xz
makepkg: add optional package function
This patch allows us to split the building and packaging stages of a PKGBUILD and minimize fakeroot usage. This can be done with less code duplication (run_build and run_package look quite similiar) but the run_package function will be where the package splitting logic is implemented in the future. Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--doc/PKGBUILD.5.txt8
-rw-r--r--scripts/makepkg.sh.in57
2 files changed, 63 insertions, 2 deletions
diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt
index 96c7a505..04eacfac 100644
--- a/doc/PKGBUILD.5.txt
+++ b/doc/PKGBUILD.5.txt
@@ -256,6 +256,14 @@ If you create any variables of your own in the build function, it is
recommended to use the bash `local` keyword to scope the variable to inside
the build function.
+package() Function
+------------------
+An optional package() function can be specified in addition to the build() function.
+This function is run immediately after the build() function. When specified in
+combination with the fakeroot BUILDENV option in linkman:makepkg.conf[5], fakeroot
+usage will be limited to running the packaging stage. The build() function will be
+run as the user calling makepkg.
+
Install/Upgrade/Remove Scripting
--------------------------------
Pacman has the ability to store and execute a package-specific script when it
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index e9e38b3a..b21c2af8 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -682,7 +682,7 @@ run_build() {
local ret=0
if [ "$LOGGING" = "1" ]; then
- BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log"
+ BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}-build.log"
if [ -f "$BUILDLOG" ]; then
local i=1
while true; do
@@ -710,6 +710,46 @@ run_build() {
fi
}
+run_package() {
+ # clear user-specified makeflags if requested
+ if [ "$(check_option makeflags)" = "n" ]; then
+ MAKEFLAGS=""
+ fi
+
+ msg "$(gettext "Starting package()...")"
+ cd "$srcdir"
+
+ # ensure all necessary build variables are exported
+ export CFLAGS CXXFLAGS LDFLAGS MAKEFLAGS CHOST
+
+ local ret=0
+ if [ "$LOGGING" = "1" ]; then
+ BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}-package.log"
+ if [ -f "$BUILDLOG" ]; then
+ local i=1
+ while true; do
+ if [ -f "$BUILDLOG.$i" ]; then
+ i=$(($i +1))
+ else
+ break
+ fi
+ done
+ mv "$BUILDLOG" "$BUILDLOG.$i"
+ fi
+
+ package 2>&1 | tee "$BUILDLOG"; ret=${PIPESTATUS[0]}
+ else
+ package 2>&1 || ret=$?
+ fi
+
+ if [ $ret -gt 0 ]; then
+ error "$(gettext "Packaging Failed.")"
+ plain "$(gettext "Aborting...")"
+ remove_deps
+ exit 2 # $E_BUILD_FAILED
+ fi
+}
+
tidy_install() {
cd "$pkgdir"
msg "$(gettext "Tidying install...")"
@@ -1570,7 +1610,11 @@ fi
# Run the bare minimum in fakeroot
if [ "$INFAKEROOT" = "1" ]; then
if [ "$REPKG" = "0" ]; then
- run_build
+ if [ "$(type -t package)" != "function" ]; then
+ run_build
+ else
+ run_package
+ fi
tidy_install
fi
@@ -1662,11 +1706,20 @@ else
if [ "$REPKG" = "0" ]; then
devel_update
run_build
+ if [ "$(type -t package)" == "function" ]; then
+ run_package
+ fi
tidy_install
fi
create_package
else
+ if [ "$(type -t package)" == "function" ]; then
+ devel_update
+ run_build
+ cd "$startdir"
+ fi
+
msg "$(gettext "Entering fakeroot environment...")"
if [ "$newpkgver" != "" ]; then