This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See crosstool-NG for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Add experimental debug config option to make crosstool-NG drop into shell prompt on build errors instead of just aborting the build. Signed-off-by: Johannes Stezenbach <js@sig21.net> diff -r c94bf1e11db2 config/global/ct-behave.in --- a/config/global/ct-behave.in Mon Oct 15 11:48:02 2012 +0200 +++ b/config/global/ct-behave.in Mon Oct 15 17:24:08 2012 +0200 @@ -71,6 +71,25 @@ further doesn't gain much, and takes far more time (believe me, I've got figures here! :-) ). +config DEBUG_CT_FIXUP_SHELL + bool + prompt "Drop into shell prompt on build errors" + depends on EXPERIMENTAL + help + By default. crosstool-NG terminates the build when a build + command fails. When this option is selected, crosstool-NG + instead drops into a shell prompt, with the environment set + up appropriately to re-run build commands manually to debug + the failure or even hot-fix it. You then have three choices, + which you select by the shell exit code: + exit 1: you hot-fixed the issue, continue with the next build command + exit 2: ask crosstool-NG to re-run the failed build command + exit 3: ask crosstool-NG to abort the build + Other exit codes and ^D just cause crosstool-NG to restart the + shell and print a helpful message. + Note that this feature is disabled if stdin, stdout or stderr + are not to a terminal. + config NO_OVERIDE_LC_MESSAGES bool prompt "Do *not* overide LC_MESSAGES (EXPERIMENTAL)" diff -r c94bf1e11db2 scripts/crosstool-NG.sh.in --- a/scripts/crosstool-NG.sh.in Mon Oct 15 11:48:02 2012 +0200 +++ b/scripts/crosstool-NG.sh.in Mon Oct 15 17:24:08 2012 +0200 @@ -25,6 +25,15 @@ . .config.2 # Yes! We can do full logging from now on! +if [ "${CT_DEBUG_CT_FIXUP_SHELL}" = "y" ]; then + # Note: stdout is saved in fd 6 + if [ -t 0 -a -t 6 -a -t 2 ]; then + CT_DoExecLog() { CT_DoExecLog_WithFixupShell "$@"; } + else + CT_DoLog WARN "CT_DEBUG_CT_FIXUP_SHELL disabled due to I/O redirection" + fi +fi + # Override the locale early, in case we ever translate crosstool-NG messages if [ -z "${CT_NO_OVERIDE_LC_MESSAGES}" ]; then export LC_ALL=C diff -r c94bf1e11db2 scripts/functions --- a/scripts/functions Mon Oct 15 11:48:02 2012 +0200 +++ b/scripts/functions Mon Oct 15 17:24:08 2012 +0200 @@ -175,6 +175,61 @@ [ $? -eq 0 ] } +# Variant of CT_DoExecLog for CT_DEBUG_CT_FIXUP_SHELL=y +CT_DoExecLog_WithFixupShell() { + local level="$1" + local result + shift + ( + for i in "$@"; do + tmp_log+="'${i}' " + done + while true; do + case "${1}" in + *=*) eval export "'${1}'"; shift;; + *) break;; + esac + done + trap ERR + while true; do + CT_DoLog DEBUG "==> Executing: ${tmp_log}" + "${@}" 2>&1 |CT_DoLog "${level}" + result=$? + if [ $result -eq 0 ]; then + break + fi + ( + exec >&6 + echo "command error $result:" + echo "$@" + echo "please fix it up and finish by exiting the shell" + while true; do + bash --rcfile <(echo "PS1='ct-ng:\w> '") -i + result=$? + case $result in + 1) result=0; break;; + 2) break;; + 3) break;; + *) echo "please exit with one of these values:" + echo "1 fixed, continue with next build command" + echo "2 repeat this build command" + echo "3 abort build" + ;; + esac + done + exit $result + ) + result=$? + if [ $result -ne 2 ]; then + break + fi + done + exit $result + ) + # Catch failure of the sub-shell + [ $? -eq 0 ] +} + # Tail message to be logged whatever happens # Usage: CT_DoEnd <level> CT_DoEnd() -- For unsubscribe information see http://sourceware.org/lists.html#faq
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |