Hash :
aecd1be6
Author :
Date :
2012-10-28T14:02:46
tests: can check our recipes avoid trailing backslashes This is related to commit v1.11-1704-g254227b of 2012-05-01, "parallel-tests: avoid trailing backslashes in make recipes", and automake bug#10436. Recipes with a trailing backslash character (possibly followed by blank characters only) can cause spurious syntax errors with at least older bash versions (e.g., bash 2.05b), and can be potentially be unportable to other weaker shells. So provide a target that runs the testsuite looking for this kind of breakage (without requiring a real bugged shell). * t/ax/shell-no-trail-bslash.in: New, a "shell" that chokes on '-c' commands having a trailing '\' (possibly followed by whitespace only). * Makefile (t/ax/shell-no-trail-bslash): Generate this script from it. (noinst_SCRIPTS, CLEANFILES): Add it. (EXTRA_DIST): Add 't/ax/shell-no-trail-bslash.in'. (check-no-trailing-backslash-in-recipes): New target, runs the testsuite with 'shell-no-trail-bslash' as the CONFIG_SHELL, to catch possible recipes having a trailing backslash character (possibly followed by * .gitignore: Update. * t/self-check-shell-no-trail-bslash.sh: New testsuite self-check. * t/parallel-tests-trailing-bslash.sh: Remove as obsolete. * t/list-of-tests.mk: Adjust. Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
#! @AM_TEST_RUNNER_SHELL@
# Copyright (C) 2012 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
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# 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.
set -e
set -u
am_SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'}
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;;
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 $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
exec $am_SHELL $am_shell_flags -c "$am_shell_command" ${1+"$@"}