summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Lattarini <stefano.lattarini@gmail.com>2014-12-30 14:28:52 +0100
committerStefano Lattarini <stefano.lattarini@gmail.com>2014-12-30 14:48:48 +0100
commitb8aa9fc0ce8d411be4451022e4b14d0f4238a9d9 (patch)
tree458f446ac6c66ed4bbcd6be7e612c6a30cce9c03
parent0fae5905f9b676725a7e82c7aa03e8e3cbf5008a (diff)
downloadautomake-b8aa9fc0ce8d411be4451022e4b14d0f4238a9d9.tar.gz
shell-no-trail-bslash: improve diagnostic in case of failure
* t/ax/shell-no-trail-bslash.in: Here, by fixing a typo in a variable name and a logic error. * t/self-check-shell-no-trail-bslash.sh: Enhance to catch the issue. Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
-rw-r--r--t/ax/shell-no-trail-bslash.in19
-rw-r--r--t/self-check-shell-no-trail-bslash.sh8
2 files changed, 21 insertions, 6 deletions
diff --git a/t/ax/shell-no-trail-bslash.in b/t/ax/shell-no-trail-bslash.in
index 322495824..26979b617 100644
--- a/t/ax/shell-no-trail-bslash.in
+++ b/t/ax/shell-no-trail-bslash.in
@@ -26,6 +26,7 @@ am_SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'}
(
set -e
shell_command=; unset shell_command
+ shell_script=; unset shell_script
while test $# -gt 0; do
case $1 in
# The shell might be invoked by make e.g. as "sh -ec" or "sh -ce".
@@ -40,7 +41,8 @@ am_SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'}
if test x${shell_command+"set"} != x"set"; then
if test $# -gt 0; then
- shell_command=$(cat "$1")
+ shell_script=$1
+ shell_command=$(cat <"$shell_script")
else
# Some make implementations, like *BSD's, pass the recipes to the
# shell through its standard input. Trying to run our extra checks
@@ -48,6 +50,7 @@ am_SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'}
exit 0
fi
fi
+ original_shell_command=$shell_command
tab=' '
nl='
@@ -59,10 +62,16 @@ am_SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'}
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
+ {
+ printf '%s\n' "$0: recipe/script ends with backslash character"
+ printf '%s\n' "=== BEGIN recipe/script"
+ if test x${shell_script+"set"} = x"set"; then
+ cat <"$shell_script"
+ else
+ printf '%s\n' "$original_shell_command"
+ fi
+ printf '%s\n' "=== END recipe/script"
+ } >&2
exit 1
;;
esac
diff --git a/t/self-check-shell-no-trail-bslash.sh b/t/self-check-shell-no-trail-bslash.sh
index 19198898b..8b7afa5c5 100644
--- a/t/self-check-shell-no-trail-bslash.sh
+++ b/t/self-check-shell-no-trail-bslash.sh
@@ -58,11 +58,17 @@ for sfx in \
; do
for pfx in "" "echo bad" ": a${nl}# multine${nl}: text"; do
cmd=${pfx}${sfx}
- printf '%s\n' "$cmd" > bad.sh
+ printf '%s' "$cmd" > bad.sh
for args in '-c "$cmd"' './bad.sh'; do
eval "\$SHELL $args 2>stderr && { cat stderr >&2; exit 1; }; :"
cat stderr >&2
$FGREP "recipe/script ends with backslash character" stderr
+ cmd="$cmd" $PERL -w -e '
+ undef $/;
+ $_ = <>;
+ index($_, $ENV{cmd}) >= 0 or exit 1;
+ ' <stderr
+ $FGREP "$cmd" stderr
done
done
done