# HG changeset patch # User Ralf Wildenhues # Date 1158645781 0 # Node ID dd6e80d0c89e295ef9bd612da938f1871b9a50a7 # Parent a6bfb21a7e0d1989bd8e6acf06de8e365c1f28a5 * gnulib-tool (func_exit): New function, to allow to pass the exit status portably through the trap. Use everywhere. (--help, --version): Signal a write error. (trap): catch SIGPIPE, for write errors. Exit at the end of the trap, with the correct exit status. diff -r a6bfb21a7e0d -r dd6e80d0c89e ChangeLog --- a/ChangeLog Mon Sep 18 20:17:52 2006 +0000 +++ b/ChangeLog Tue Sep 19 06:03:01 2006 +0000 @@ -1,3 +1,11 @@ +2006-09-19 Ralf Wildenhues + + * gnulib-tool (func_exit): New function, to allow to pass the + exit status portably through the trap. Use everywhere. + (--help, --version): Signal a write error. + (trap): catch SIGPIPE, for write errors. + Exit at the end of the trap, with the correct exit status. + 2006-09-18 Bruno Haible * modules/inttypes (Files): Remove m4/inttypes-h.m4. diff -r a6bfb21a7e0d -r dd6e80d0c89e gnulib-tool --- a/gnulib-tool Mon Sep 18 20:17:52 2006 +0000 +++ b/gnulib-tool Tue Sep 19 06:03:01 2006 +0000 @@ -22,7 +22,7 @@ progname=$0 package=gnulib -cvsdatestamp='$Date: 2006-09-18 17:03:47 $' +cvsdatestamp='$Date: 2006-09-19 06:03:02 $' last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'` version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'` nl=' @@ -179,6 +179,13 @@ echo "# Generated by gnulib-tool." } +# func_exit STATUS +# exit with status +func_exit () +{ + (exit $1); exit $1 +} + # func_tmpdir # creates a temporary directory. # Sets variable @@ -206,7 +213,7 @@ } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 - { (exit 1); exit 1; } + func_exit 1 } } @@ -232,7 +239,7 @@ { echo "gnulib-tool: *** $1" 1>&2 echo "gnulib-tool: *** Stop." 1>&2 - exit 1 + func_exit 1 } # func_readlink SYMLINK @@ -567,10 +574,10 @@ shift ;; --help | --hel | --he | --h ) func_usage - exit 0 ;; + func_exit $? ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version - exit 0 ;; + func_exit $? ;; -- ) # Stop option processing shift @@ -578,7 +585,7 @@ -* ) echo "gnulib-tool: unknown option $1" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 - exit 1 ;; + func_exit 1 ;; * ) break ;; esac @@ -590,7 +597,7 @@ echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 echo "you need to use 'gnulib --import' - at your own risk!" 1>&2 - exit 1 + func_exit 1 fi if test -n "$local_gnulib_dir" || test -n "$supplied_libname" \ || test -n "$sourcebase" || test -n "$m4base" \ @@ -601,7 +608,7 @@ echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 echo "you need to use 'gnulib --import' - at your own risk!" 1>&2 - exit 1 + func_exit 1 fi do_changelog=false fi @@ -704,7 +711,16 @@ gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'` func_tmpdir -trap 'rm -rf "$tmp"' 0 1 2 3 15 +trap 'exit_status=$? + if test "$signal" != 0; then + echo "caught signal $signal" >&2 + fi + rm -rf "$tmp" + exit $exit_status' 0 +for signal in 1 2 3 13 15; do + trap '{ signal='$signal'; func_exit 1; }' $signal +done +signal=0 # func_lookup_file file # looks up a file in $local_gnulib_dir or $gnulib_dir, or combines it through @@ -2532,7 +2548,7 @@ # local_gnulib_dir, avoidlist, sourcebase, m4base, docbase, # testsbase, libname, lgpl, makefile_name, libtool, macro_prefix # don't propagate from one directory to another. - (func_import) || exit 1 + (func_import) || func_exit 1 done else # Really ambiguous. @@ -2579,7 +2595,7 @@ if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 echo "gnulib-tool: *** Stop." 1>&2 - exit 1 + func_exit 1 fi cd .. cd .. @@ -2602,7 +2618,7 @@ if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 echo "gnulib-tool: *** Stop." 1>&2 - exit 1 + func_exit 1 fi cd .. cd .. @@ -2705,12 +2721,12 @@ rm -rf "$tmp" # Undo the effect of the previous 'trap' command. Some shellology: -# We cannot use "trap - 0 1 2 3 15", because Solaris sh would attempt to +# We cannot use "trap - 0 1 2 3 13 15", because Solaris sh would attempt to # execute the command "-". "trap '' ..." is fine only for signal 0 (= normal # exit); for the others we need to call 'exit' explicitly. The value of $? is # 128 + signal number and is set before the trap-registered command is run. trap '' 0 -trap 'exit $?' 1 2 3 15 +trap 'func_exit $?' 1 2 3 13 15 exit 0