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