diff options
Diffstat (limited to 't/ax/shell-no-trail-bslash.in')
-rw-r--r-- | t/ax/shell-no-trail-bslash.in | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/t/ax/shell-no-trail-bslash.in b/t/ax/shell-no-trail-bslash.in index f785de8a8..322495824 100644 --- a/t/ax/shell-no-trail-bslash.in +++ b/t/ax/shell-no-trail-bslash.in @@ -1,5 +1,5 @@ #! @AM_TEST_RUNNER_SHELL@ -# Copyright (C) 2012-2013 Free Software Foundation, Inc. +# Copyright (C) 2012-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,63 +14,63 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -# 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 + # Some make implementations, like *BSD's, pass the recipes to the + # shell through its standard input. Trying to run our extra checks + # in this case would be too tricky, so we just skip them. + exit 0 + fi + fi + + tab=' ' + nl=' ' -am_shell_flags= -am_shell_command=; unset am_shell_command -while test $# -gt 0; do - case $1 in - # If the shell is invoked by make e.g. as "sh -ec" (seen on - # GNU make in POSIX mode) or "sh -ce" (seen on Solaris make). - -*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 - # Some make implementations, like *BSD's, pass the recipes to the shell - # through its standard input. Trying to run our extra checks in this - # case would be too tricky, so we just skip them. - exec $am_SHELL $am_shell_flags ${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/script ends with backslash character" >&2 + printf '%s\n' "=== BEGIN recipe/script" >&2 + printf '%s\n' "${am_shell_command-}" >&2 + printf '%s\n' "=== END recipe/script" >&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+"$@"} |