[bitbake-devel,v3,3/4] build: add back the Bash EXIT trap to handle cases that ERR doesn't
Details
Commit Message
@@ -314,6 +314,26 @@ bb_sh_exit_handler() {
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 @@ bb_bash_err_handler() {
echo "\t#$((i-1)): ${FUNCNAME[$i]}, ${BASH_SOURCE[$((i-1))]}, line ${BASH_LINENO[$((i-1))]}"
done
+ trap "" EXIT
exit $ret
}
@@ -331,6 +352,7 @@ case $BASH_VERSION in
set -e
;;
*) trap 'bb_bash_err_handler' ERR
+ trap 'bb_bash_exit_handler' 0
set -eE
esac
'''
ERR unfortunately doesn't trigger for e.g. 'exit 1'. Unfortunately the backtrace we generate in the EXIT trap won't be able to get the correct line number for the first frame. See http://gnu-bash.2382.n7.nabble.com/trap-echo-quot-trap-exit-on-LINENO-quot-EXIT-gt-wrong-linenumber-td3666.html Therefore the metadata-relative backtrace will just not have the first frame. Example: | WARNING: /home/laplante/repos/oe-core/build/tmp-glibc/work/core2-64-oe-linux/libsolv/0.7.14-r0/temp/run.do_compile.85057:1 exit 1 from 'exit 1' | WARNING: Backtrace (BB generated script): | #1: myclass_do_something, /home/laplante/repos/oe-core/build/tmp-glibc/work/core2-64-oe-linux/libsolv/0.7.14-r0/temp/run.do_compile.85057, line ? | #2: do_something, /home/laplante/repos/oe-core/build/tmp-glibc/work/core2-64-oe-linux/libsolv/0.7.14-r0/temp/run.do_compile.85057, line 156 | #3: actually_fail, /home/laplante/repos/oe-core/build/tmp-glibc/work/core2-64-oe-linux/libsolv/0.7.14-r0/temp/run.do_compile.85057, line 144 | #4: my_compile_extra, /home/laplante/repos/oe-core/build/tmp-glibc/work/core2-64-oe-linux/libsolv/0.7.14-r0/temp/run.do_compile.85057, line 146 | #5: do_compile, /home/laplante/repos/oe-core/build/tmp-glibc/work/core2-64-oe-linux/libsolv/0.7.14-r0/temp/run.do_compile.85057, line 137 | #6: main, /home/laplante/repos/oe-core/build/tmp-glibc/work/core2-64-oe-linux/libsolv/0.7.14-r0/temp/run.do_compile.85057, line 180 | | Backtrace (metadata-relative locations): | #2: do_something, autogenerated, line 2 | #3: actually_fail, /home/laplante/repos/oe-core/meta/recipes-extended/libsolv/libsolv_0.7.14.bb, line 36 | #4: my_compile_extra, /home/laplante/repos/oe-core/meta/recipes-extended/libsolv/libsolv_0.7.14.bb, line 38 | #5: do_compile, autogenerated, line 3 Signed-off-by: Chris Laplante <chris.laplante@agilent.com> --- lib/bb/build.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)