summaryrefslogtreecommitdiffstats
path: root/bin/isolated-functions.sh
diff options
context:
space:
mode:
authorAlec Warner <antarus@gentoo.org>2007-02-07 20:33:45 +0000
committerAlec Warner <antarus@gentoo.org>2007-02-07 20:33:45 +0000
commit038146623c0cdca0ba2038ee7837c3a2170b35de (patch)
treeb0165a810639685ae5bf3f08aa3d07ece7115199 /bin/isolated-functions.sh
parent411d007523f9508170ec6fb4ec070a1abb689ae1 (diff)
downloadportage-038146623c0cdca0ba2038ee7837c3a2170b35de.tar.gz
portage-038146623c0cdca0ba2038ee7837c3a2170b35de.tar.bz2
portage-038146623c0cdca0ba2038ee7837c3a2170b35de.zip
move die into isolated-functions.sh
svn path=/main/trunk/; revision=5910
Diffstat (limited to 'bin/isolated-functions.sh')
-rwxr-xr-xbin/isolated-functions.sh43
1 files changed, 42 insertions, 1 deletions
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index 5aa838ba9..c5c2f4824 100755
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -1,6 +1,47 @@
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header$
+# $Id$
+
+# We need this next line for "die" and "assert". It expands
+# It _must_ preceed all the calls to die and assert.
+shopt -s expand_aliases
+alias die='diefunc "$FUNCNAME" "$LINENO" "$?"'
+alias assert='_pipestatus="${PIPESTATUS[*]}"; [[ "${_pipestatus// /}" -eq 0 ]] || diefunc "$FUNCNAME" "$LINENO" "$_pipestatus"'
+alias save_IFS='[ "${IFS:-unset}" != "unset" ] && old_IFS="${IFS}"'
+alias restore_IFS='if [ "${old_IFS:-unset}" != "unset" ]; then IFS="${old_IFS}"; unset old_IFS; else unset IFS; fi'
+
+diefunc() {
+ local funcname="$1" lineno="$2" exitcode="$3"
+ shift 3
+ echo >&2
+ echo "!!! ERROR: $CATEGORY/$PF failed." >&2
+ dump_trace 2 1>&2
+ echo " $(basename "${BASH_SOURCE[1]}"), line ${BASH_LINENO[0]}: Called die" 1>&2
+ echo >&2
+ echo "!!! ${*:-(no error message)}" >&2
+ echo "!!! If you need support, post the topmost build error, and the call stack if relevant." >&2
+ echo "!!! A complete build log is located at '${PORTAGE_LOG_FILE}'." >&2
+ echo >&2
+ if [ -n "${EBUILD_OVERLAY_ECLASSES}" ] ; then
+ echo "This ebuild used the following eclasses from overlays:" >&2
+ echo >&2
+ for x in ${EBUILD_OVERLAY_ECLASSES} ; do
+ echo " ${x}" >&2
+ done
+ echo >&2
+ fi
+
+ if [ "${EBUILD_PHASE/depend}" == "${EBUILD_PHASE}" ]; then
+ local x
+ for x in $EBUILD_DEATH_HOOKS; do
+ ${x} "$@" >&2 1>&2
+ done
+ fi
+
+ # subshell die support
+ kill -s SIGTERM ${EBUILD_MASTER_PID}
+ exit 1
+}
quiet_mode() {
[[ ${PORTAGE_QUIET} -eq 1 ]]