summaryrefslogtreecommitdiff
path: root/t/parallel-tests-trailing-bslash.sh
blob: 6770b27212fe0c474465d19966ded9716a6564d8 (plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#! /bin/sh
# 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/>.

# Check that the new testsuite harness do not generate recipes that can
# have a trailing '\', since that can cause spurious syntax errors with
# older bash versions (e.g., bash 2.05b).
# See automake bug#10436.

. test-init.sh

echo AC_OUTPUT >> configure.ac

cat > Makefile.am <<'END'
TESTS = foo.test
EXTRA_DIST = $(TESTS)
am__backslash = \\ # foo
.PHONY: bad-recipe
bad-recipe:
	@printf '%s\n' $(am__backslash)
END

cat > foo.test <<'END'
#!/bin/sh
exit 0
END
chmod +x foo.test

am__SHELL=$SHELL; export am__SHELL
am__PERL=$PERL; export am__PERL

cat > my-shell <<'END'
#!/bin/sh -e
set -u
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*)
        flg=`echo x"$1" | sed -e 's/^x-//' -e 's/c//g'`
        if test x"$flg" != x; then
          am__shell_flags="$am__shell_flags -$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+"$@"}
else
  am__tweaked_shell_command=`printf '%s\n' "$am__shell_command" \
    | tr -d " $tab$nl"`
  case ${am__tweaked_shell_command-} in
    *\\)
      echo "my-shell: 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 99
      ;;
  esac
  exec $am__SHELL $am__shell_flags -c "$am__shell_command" ${1+"$@"}
fi
END
chmod a+x my-shell

cat my-shell

CONFIG_SHELL=$(pwd)/my-shell; export CONFIG_SHELL

$ACLOCAL
$AUTOCONF
$AUTOMAKE -a

./configure CONFIG_SHELL="$CONFIG_SHELL"

st=0
$MAKE bad-recipe 2>stderr && st=1
cat stderr >&2
$FGREP "my-shell: recipe ends with backslash character" stderr || st=1
test $st -eq 0 || skip_ "can't catch trailing backslashes in make recipes"

$MAKE check

: