diff --git a/lib/bb/build.py b/lib/bb/build.py index 834078fdaf..a6b7c5de12 100644 --- a/lib/bb/build.py +++ b/lib/bb/build.py @@ -314,6 +314,26 @@ def shell_trap_code(): exit $ret } +bb_bash_exit_handler() { + ret=$? + if [ "$ret" != 0 ]; then + echo "WARNING: ${BASH_SOURCE[0]}:${BASH_LINENO[0]} exit $ret from '$BASH_COMMAND'" + + echo "WARNING: Backtrace (BB generated script): " + for ((i=1; i<${#FUNCNAME[@]}; i++)); do + if [ $i -eq 1 ]; then + # TODO: maybe manually track LINENO with a DEBUG trap? + # LINENO / BASH_LINENO for the first frame in an EXIT trap is wrong :/ + # http://gnu-bash.2382.n7.nabble.com/trap-echo-quot-trap-exit-on-LINENO-quot-EXIT-gt-wrong-linenumber-td3666.html + echo "\t#$((i)): ${FUNCNAME[$i]}, ${BASH_SOURCE[$((i-1))]}, line ?" + else + echo "\t#$((i)): ${FUNCNAME[$i]}, ${BASH_SOURCE[$((i-1))]}, line ${BASH_LINENO[$((i-1))]}" + fi + done + fi + exit $ret +} + bb_bash_err_handler() { ret=$? echo "WARNING: ${BASH_SOURCE[0]}:${BASH_LINENO[0]} exit $ret from '$BASH_COMMAND'" @@ -323,6 +343,7 @@ def shell_trap_code(): echo "\t#$((i-1)): ${FUNCNAME[$i]}, ${BASH_SOURCE[$((i-1))]}, line ${BASH_LINENO[$((i-1))]}" done + trap "" EXIT exit $ret } @@ -331,6 +352,7 @@ def shell_trap_code(): set -e ;; *) trap 'bb_bash_err_handler' ERR + trap 'bb_bash_exit_handler' 0 set -eE esac '''