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

Stefano Lattarini <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <b8aa9fc0ce8d411be4451022e4b14d0f4238a9d9.1419947353.git.stefano.lattarini@gmail.com>
* 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 <[email protected]>
---
 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.