1#! /bin/sh 2# Copyright (C) 2012-2021 Free Software Foundation, Inc. 3# 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 2, or (at your option) 7# any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <https://www.gnu.org/licenses/>. 16 17# Check that our fake "shell" used to guard against use of trailing 18# backslashes in recipes actually complains when those are used. 19 20# Our hack doesn't work with some make implementations (see comments 21# in 't/ax/shell-no-trail-bslash.in' for more details). 22required=GNUmake 23am_create_testdir=empty 24. test-init.sh 25 26cat >> Makefile <<'END' 27am__backslash = \\ # foo 28.PHONY: good bad 29good: 30 @printf '%s\n' OK 31.PHONY: bad 32bad: 33 @echo $(am__backslash) 34END 35 36SHELL=$am_testaux_builddir/shell-no-trail-bslash 37 38$SHELL -c 'exit 0' 39test "$($SHELL -c 'echo is o\k')" = "is ok" 40 41echo 'echo is ok\"' > ok.sh 42$SHELL ./ok.sh 43test "$($SHELL ./ok.sh)" = "is ok\"" 44 45tab=' ' 46nl=' 47' 48for sfx in \ 49 '\' \ 50 '\\' \ 51 '\\\\\' \ 52 '\ ' \ 53 "\\$tab" \ 54 "\\ $tab$tab " \ 55 "\\$nl" \ 56 "\\ $nl " \ 57 "\\$nl$nl$nl" \ 58; do 59 for pfx in "" "echo bad" ": a${nl}# multine${nl}: text"; do 60 cmd=${pfx}${sfx} 61 printf '%s' "$cmd" > bad.sh 62 for args in '-c "$cmd"' './bad.sh'; do 63 eval "\$SHELL $args 2>stderr && { cat stderr >&2; exit 1; }; :" 64 cat stderr >&2 65 $FGREP "recipe/script ends with backslash character" stderr 66 cmd="$cmd" $PERL -w -e ' 67 undef $/; 68 $_ = <>; 69 index($_, $ENV{cmd}) >= 0 or exit 1; 70 ' <stderr 71 $FGREP "$cmd" stderr 72 done 73 done 74done 75 76$MAKE good 77 78run_make -E -e FAIL bad SHELL="$SHELL" 79$FGREP "recipe/script ends with backslash character" stderr 80 81: 82