diff options
| -rw-r--r-- | bitbake/lib/bb/build.py | 61 |
1 files changed, 50 insertions, 11 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index 977b02fc63..98cbc48cd4 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py | |||
| @@ -303,20 +303,59 @@ def exec_func_python(func, d, runfile, cwd=None): | |||
| 303 | 303 | ||
| 304 | def shell_trap_code(): | 304 | def shell_trap_code(): |
| 305 | return '''#!/bin/sh\n | 305 | return '''#!/bin/sh\n |
| 306 | __BITBAKE_LAST_LINE=0 | ||
| 307 | |||
| 306 | # Emit a useful diagnostic if something fails: | 308 | # Emit a useful diagnostic if something fails: |
| 307 | bb_exit_handler() { | 309 | bb_sh_exit_handler() { |
| 308 | ret=$? | 310 | ret=$? |
| 309 | case $ret in | 311 | if [ "$ret" != 0 ]; then |
| 310 | 0) ;; | 312 | echo "WARNING: exit code $ret from a shell command." |
| 311 | *) case $BASH_VERSION in | 313 | fi |
| 312 | "") echo "WARNING: exit code $ret from a shell command.";; | 314 | exit $ret |
| 313 | *) echo "WARNING: ${BASH_SOURCE[0]}:${BASH_LINENO[0]} exit $ret from '$BASH_COMMAND'";; | ||
| 314 | esac | ||
| 315 | exit $ret | ||
| 316 | esac | ||
| 317 | } | 315 | } |
| 318 | trap 'bb_exit_handler' 0 | 316 | |
| 319 | set -e | 317 | bb_bash_exit_handler() { |
| 318 | ret=$? | ||
| 319 | trap "" DEBUG | ||
| 320 | if [ "$ret" != 0 ]; then | ||
| 321 | echo "WARNING: ${BASH_SOURCE[0]}:${__BITBAKE_LAST_LINE} exit $ret from '$1'" | ||
| 322 | |||
| 323 | echo "WARNING: Backtrace (BB generated script): " | ||
| 324 | for i in $(seq 1 $((${#FUNCNAME[@]} - 1))); do | ||
| 325 | if [ "$i" -eq 1 ]; then | ||
| 326 | echo -e "\t#$((i)): ${FUNCNAME[$i]}, ${BASH_SOURCE[$((i-1))]}, line ${__BITBAKE_LAST_LINE}" | ||
| 327 | else | ||
| 328 | echo -e "\t#$((i)): ${FUNCNAME[$i]}, ${BASH_SOURCE[$((i-1))]}, line ${BASH_LINENO[$((i-1))]}" | ||
| 329 | fi | ||
| 330 | done | ||
| 331 | fi | ||
| 332 | exit $ret | ||
| 333 | } | ||
| 334 | |||
| 335 | bb_bash_debug_handler() { | ||
| 336 | local line=${BASH_LINENO[0]} | ||
| 337 | # For some reason the DEBUG trap trips with lineno=1 when scripts exit; ignore it | ||
| 338 | if [ "$line" -eq 1 ]; then | ||
| 339 | return | ||
| 340 | fi | ||
| 341 | |||
| 342 | # Track the line number of commands as they execute. This is so we can have access to the failing line number | ||
| 343 | # in the EXIT trap. See http://gnu-bash.2382.n7.nabble.com/trap-echo-quot-trap-exit-on-LINENO-quot-EXIT-gt-wrong-linenumber-td3666.html | ||
| 344 | if [ "${FUNCNAME[1]}" != "bb_bash_exit_handler" ]; then | ||
| 345 | __BITBAKE_LAST_LINE=$line | ||
| 346 | fi | ||
| 347 | } | ||
| 348 | |||
| 349 | case $BASH_VERSION in | ||
| 350 | "") trap 'bb_sh_exit_handler' 0 | ||
| 351 | set -e | ||
| 352 | ;; | ||
| 353 | *) trap 'bb_bash_exit_handler "$BASH_COMMAND"' 0 | ||
| 354 | trap 'bb_bash_debug_handler' DEBUG | ||
| 355 | set -eE | ||
| 356 | shopt -s extdebug | ||
| 357 | ;; | ||
| 358 | esac | ||
| 320 | ''' | 359 | ''' |
| 321 | 360 | ||
| 322 | def create_progress_handler(func, progress, logfile, d): | 361 | def create_progress_handler(func, progress, logfile, d): |
