scripts/makepkg.in: Improve error handling and clean up on exit.
* makepkg now runs with errexit (exit on syntax error) enabled for the whole script. * Removed unneeded setting of errexit around build(). * Added bash traps to catch TERM HUP INT signals. * Added trap to catch unhandled/unknown errors. * Added trap to call clean_up() when the script exits. * Moved call to remove_deps() into clean_up(). * Moved -c/--clean code into clean_up(). Signed-off-by: Andrew Fyfe <andrew@neptune-one.net> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
76fd85450e
commit
b69edc1c35
1 changed files with 50 additions and 19 deletions
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash -e
|
||||||
#
|
#
|
||||||
# makepkg - make packages compatable for use with pacman
|
# makepkg - make packages compatable for use with pacman
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
@ -103,6 +103,55 @@ error() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Special exit call for traps, Don't print any error messages when inside,
|
||||||
|
# the fakeroot call, the error message will be printed by the main call.
|
||||||
|
##
|
||||||
|
trap_exit() {
|
||||||
|
if [ "$INFAKEROOT" = "0" ]; then
|
||||||
|
echo
|
||||||
|
error "$@"
|
||||||
|
fi
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Clean up function. Called automatically when the script exits.
|
||||||
|
##
|
||||||
|
clean_up() {
|
||||||
|
local EXIT_CODE=$?
|
||||||
|
|
||||||
|
if [ "$INFAKEROOT" = "1" ]; then
|
||||||
|
# Don't clean up when leaving fakeroot, we're not done yet.
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $EXIT_CODE -eq 0 -a "$CLEANUP" = "1" ]; then
|
||||||
|
# If it's a clean exit and -c/--clean has been passed...
|
||||||
|
msg "$(gettext "Cleaning up...")"
|
||||||
|
cd "$startdir"
|
||||||
|
rm -rf pkg src
|
||||||
|
if [ "$pkgname" != "" ]; then
|
||||||
|
# Can't do this unless the BUILDSCRIPT has been sourced.
|
||||||
|
rm -f "${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log*"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
remove_deps
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Signal Traps
|
||||||
|
##
|
||||||
|
trap 'clean_up' 0
|
||||||
|
trap 'trap_exit "$(gettext "TERM signal caught. Exiting...")"' TERM HUP QUIT
|
||||||
|
trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT
|
||||||
|
trap 'trap_exit "$(gettext "An unknown error has occured. Exiting...")"' ERR
|
||||||
|
|
||||||
|
|
||||||
strip_url() {
|
strip_url() {
|
||||||
echo "$1" | sed 's|^.*://.*/||g'
|
echo "$1" | sed 's|^.*://.*/||g'
|
||||||
}
|
}
|
||||||
|
@ -594,9 +643,6 @@ run_build() {
|
||||||
# ensure all necessary build variables are exported
|
# ensure all necessary build variables are exported
|
||||||
export CFLAGS CXXFLAGS MAKEFLAGS
|
export CFLAGS CXXFLAGS MAKEFLAGS
|
||||||
|
|
||||||
# check for "exit on syntax error" shell option
|
|
||||||
echo $SHELLOPTS | grep errexit 2>&1 >/dev/null; set_e=$?
|
|
||||||
|
|
||||||
local ret=0
|
local ret=0
|
||||||
if [ "$LOGGING" = "1" ]; then
|
if [ "$LOGGING" = "1" ]; then
|
||||||
BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log"
|
BUILDLOG="${startdir}/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log"
|
||||||
|
@ -612,15 +658,9 @@ run_build() {
|
||||||
mv "$BUILDLOG" "$BUILDLOG.$i"
|
mv "$BUILDLOG" "$BUILDLOG.$i"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# use 'errexit' to bail on syntax error
|
|
||||||
[ $set_e -eq 1 ] && set -e
|
|
||||||
build 2>&1 | tee "$BUILDLOG"; ret=${PIPESTATUS[0]}
|
build 2>&1 | tee "$BUILDLOG"; ret=${PIPESTATUS[0]}
|
||||||
[ $set_e -eq 1 ] && set +e
|
|
||||||
else
|
else
|
||||||
# use 'errexit' to bail on syntax error
|
|
||||||
[ $set_e -eq 1 ] && set -e
|
|
||||||
build 2>&1 || ret=$?
|
build 2>&1 || ret=$?
|
||||||
[ $set_e -eq 1 ] && set +e
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $ret -gt 0 ]; then
|
if [ $ret -gt 0 ]; then
|
||||||
|
@ -1296,15 +1336,6 @@ else
|
||||||
create_xdelta "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
|
create_xdelta "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$startdir"
|
|
||||||
if [ "$CLEANUP" = "1" ]; then
|
|
||||||
msg "$(gettext "Cleaning up...")"
|
|
||||||
rm -rf src pkg
|
|
||||||
rm -rf ${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log*
|
|
||||||
fi
|
|
||||||
|
|
||||||
remove_deps
|
|
||||||
|
|
||||||
msg "$(gettext "Finished making: %s")" "$pkgname ($(date))"
|
msg "$(gettext "Finished making: %s")" "$pkgname ($(date))"
|
||||||
|
|
||||||
install_package
|
install_package
|
||||||
|
|
Loading…
Add table
Reference in a new issue