automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FYI] shell-no-trail-bslash: improve diagnostic in case of failure


From: Stefano Lattarini
Subject: [FYI] shell-no-trail-bslash: improve diagnostic in case of failure
Date: Tue, 30 Dec 2014 14:49:30 +0100

* 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 <address@hidden>
---
 t/ax/shell-no-trail-bslash.in         | 19 ++++++++++++++-----
 t/self-check-shell-no-trail-bslash.sh |  8 +++++++-
 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 3224958..26979b6 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 1919889..8b7afa5 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
-- 
2.1.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]