From 85aae58a93a52ce848346797690cf42b73ca9566 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Sun, 28 Dec 2014 14:02:30 +0100 Subject: tests: make script 'shell-no-trail-bslash' simpler and more robust This solves spurious failure in the 'check-no-trailing-backslash-in-recipes' target for Automake-NG. * t/ax/shell-no-trail-bslash.in: Simplify and fortify. Signed-off-by: Stefano Lattarini --- t/ax/shell-no-trail-bslash.in | 98 +++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/t/ax/shell-no-trail-bslash.in b/t/ax/shell-no-trail-bslash.in index c3499f9b5..82217e564 100644 --- a/t/ax/shell-no-trail-bslash.in +++ b/t/ax/shell-no-trail-bslash.in @@ -14,62 +14,62 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# A "shell" that chokes on '-c' commands having a trailing '\' character -# (possibly followed by whitespace only). This is to emulate problems -# seen in older bash versions (e.g., bash 2.05b). -# See also automake bug#10436. +# A "shell" that chokes on '-c' commands and/or shell scripts having +# a trailing '\' character (possibly followed by whitespace only). +# This is to emulate problems seen in older bash versions (e.g., bash +# 2.05b). See also automake bug#10436. -set -e set -u am_SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'} -tab=' ' -nl=' +( + set -e + shell_command=; unset shell_command + while test $# -gt 0; do + case $1 in + # The shell might be invoked by make e.g. as "sh -ec" or "sh -ce". + # Be liberal (in the spirit of defensive programming) and accept + # both forms. + -*c*) shell_command=$2; shift;; + -?*) ;; + *) break;; + esac + shift + done + + if test x${shell_command+"set"} != x"set"; then + if test $# -gt 0; then + shell_command=$(cat "$1") + else + echo "$0: fatal: no shell script given," \ + "nor a command given via the '-c' option" >&2 + exit 1 + fi + fi + + tab=' ' + nl=' ' -am_shell_flags= -am_shell_command=; unset am_shell_command -while test $# -gt 0; do - case $1 in - # The shell might be invoked by make e.g. as "sh -ec" or "sh -ce". - # Be liberal (in the spirit of defensive programming) and accept - # both forms. - -*c*) - am_flg=$(printf '%s\n' "$1" | sed -e 's/^-//' -e 's/c//g') - if test x"$am_flg" != x; then - am_shell_flags="$am_shell_flags -$am_flg" - fi - am_shell_command=$2 - shift;; - -?*) - am_shell_flags="$am_shell_flags $1";; - *) - break;; + case "$shell_command" in + *" "|*"$tab"|*"$nl") + shell_command=$(printf '%s\n' "$shell_command" | tr -d " $tab$nl");; esac - shift -done - -if test x${am_shell_command+"set"} != x"set"; then - echo "$0: fatal: no shell command given through the '-c' option" >&2 - exit 1 -fi -case $am_shell_command in - *" "|*"$tab"|*"$nl") - am_tweaked_shell_command=$(printf '%s\n' "$am_shell_command" \ - | tr -d " $tab$nl");; - *) - am_tweaked_shell_command=$am_shell_command;; -esac + case "$shell_command" in + *\\) + printf '%s\n' "$0: recipe ends with backslash character" >&2 + printf '%s\n' "=== BEGIN recipe" >&2 + printf '%s\n' "${am_shell_command-}" >&2 + printf '%s\n' "=== END recipe" >&2 + exit 1 + ;; + esac +) -case $am_tweaked_shell_command in - *\\) - printf '%s\n' "$0: recipe ends with backslash character" >&2 - printf '%s\n' "=== BEGIN recipe" >&2 - printf '%s\n' "${am_shell_command-}" >&2 - printf '%s\n' "=== END recipe" >&2 - exit 1 - ;; -esac +if test $? -gt 0; then + # Some of our scripts or makefile recipes had invalid contents. + exit 3 +fi -exec $am_SHELL $am_shell_flags -c "$am_shell_command" ${1+"$@"} +exec ${AM_TESTSUITE_SHELL-'@SHELL@'} ${1+"$@"} -- cgit v1.2.1