Blame tests/scripts/misc/general3

Packit 26a39e
#                                                                    -*-perl-*-
Packit 26a39e
Packit 26a39e
$description = "\
Packit 26a39e
This tests random features of the parser that need to be supported, and
Packit 26a39e
which have either broken at some point in the past or seem likely to
Packit 26a39e
break.";
Packit 26a39e
Packit 26a39e
run_make_test("
Packit 26a39e
# We want to allow both empty commands _and_ commands that resolve to empty.
Packit 26a39e
EMPTY =
Packit 26a39e
Packit 26a39e
.PHONY: all a1 a2 a3 a4
Packit 26a39e
all: a1 a2 a3 a4
Packit 26a39e
Packit 26a39e
a1:;
Packit 26a39e
a2:
Packit 26a39e
\t
Packit 26a39e
a3:;\$(EMPTY)
Packit 26a39e
a4:
Packit 26a39e
\t\$(EMPTY)
Packit 26a39e
Packit 26a39e
\# Non-empty lines that expand to nothing should also be ignored.
Packit 26a39e
STR =     \# Some spaces
Packit 26a39e
TAB =   \t  \# A TAB and some spaces
Packit 26a39e
Packit 26a39e
\$(STR)
Packit 26a39e
Packit 26a39e
\$(STR) \$(TAB)",
Packit 26a39e
              '', "#MAKE#: Nothing to be done for 'all'.");
Packit 26a39e
Packit 26a39e
# TEST 2
Packit 26a39e
Packit 26a39e
# Make sure files without trailing newlines are handled properly.
Packit 26a39e
# Have to use the old style invocation to test this.
Packit 26a39e
Packit 26a39e
$makefile2 = &get_tmpfile;
Packit 26a39e
Packit 26a39e
open(MAKEFILE, "> $makefile2");
Packit 26a39e
print MAKEFILE "all:;\@echo FOO = \$(FOO)\nFOO = foo";
Packit 26a39e
close(MAKEFILE);
Packit 26a39e
Packit 26a39e
&run_make_with_options($makefile2,"",&get_logfile);
Packit 26a39e
$answer = "FOO = foo\n";
Packit 26a39e
&compare_output($answer,&get_logfile(1));
Packit 26a39e
Packit 26a39e
# TEST 3
Packit 26a39e
Packit 26a39e
# Check semicolons in variable references
Packit 26a39e
Packit 26a39e
run_make_test('
Packit 26a39e
$(if true,$(info true; true))
Packit 26a39e
all: ; @:
Packit 26a39e
',
Packit 26a39e
              '', 'true; true');
Packit 26a39e
Packit 26a39e
# TEST 4
Packit 26a39e
Packit 26a39e
# Check that backslashes in command scripts are handled according to POSIX.
Packit 26a39e
# Checks Savannah bug # 1332.
Packit 26a39e
Packit 26a39e
# Test the fastpath / no quotes
Packit 26a39e
run_make_test('
Packit 26a39e
all:
Packit 26a39e
	@echo foo\
Packit 26a39e
bar
Packit 26a39e
	@echo foo\
Packit 26a39e
	bar
Packit 26a39e
	@echo foo\
Packit 26a39e
    bar
Packit 26a39e
	@echo foo\
Packit 26a39e
	    bar
Packit 26a39e
	@echo foo \
Packit 26a39e
bar
Packit 26a39e
	@echo foo \
Packit 26a39e
	bar
Packit 26a39e
	@echo foo \
Packit 26a39e
    bar
Packit 26a39e
	@echo foo \
Packit 26a39e
	    bar
Packit 26a39e
',
Packit 26a39e
              '', 'foobar
Packit 26a39e
foobar
Packit 26a39e
foo bar
Packit 26a39e
foo bar
Packit 26a39e
foo bar
Packit 26a39e
foo bar
Packit 26a39e
foo bar
Packit 26a39e
foo bar');
Packit 26a39e
Packit 26a39e
# Test the fastpath / single quotes
Packit 26a39e
run_make_test("
Packit 26a39e
all:
Packit 26a39e
	\@echo 'foo\\
Packit 26a39e
bar'
Packit 26a39e
	\@echo 'foo\\
Packit 26a39e
	bar'
Packit 26a39e
	\@echo 'foo\\
Packit 26a39e
    bar'
Packit 26a39e
	\@echo 'foo\\
Packit 26a39e
	    bar'
Packit 26a39e
	\@echo 'foo \\
Packit 26a39e
bar'
Packit 26a39e
	\@echo 'foo \\
Packit 26a39e
	bar'
Packit 26a39e
	\@echo 'foo \\
Packit 26a39e
    bar'
Packit 26a39e
	\@echo 'foo \\
Packit 26a39e
	    bar'
Packit 26a39e
",
Packit 26a39e
              '', 'foo\
Packit 26a39e
bar
Packit 26a39e
foo\
Packit 26a39e
bar
Packit 26a39e
foo\
Packit 26a39e
    bar
Packit 26a39e
foo\
Packit 26a39e
    bar
Packit 26a39e
foo \
Packit 26a39e
bar
Packit 26a39e
foo \
Packit 26a39e
bar
Packit 26a39e
foo \
Packit 26a39e
    bar
Packit 26a39e
foo \
Packit 26a39e
    bar');
Packit 26a39e
Packit 26a39e
# Test the fastpath / double quotes
Packit 26a39e
run_make_test('
Packit 26a39e
all:
Packit 26a39e
	@echo "foo\
Packit 26a39e
bar"
Packit 26a39e
	@echo "foo\
Packit 26a39e
	bar"
Packit 26a39e
	@echo "foo\
Packit 26a39e
    bar"
Packit 26a39e
	@echo "foo\
Packit 26a39e
	    bar"
Packit 26a39e
	@echo "foo \
Packit 26a39e
bar"
Packit 26a39e
	@echo "foo \
Packit 26a39e
	bar"
Packit 26a39e
	@echo "foo \
Packit 26a39e
    bar"
Packit 26a39e
	@echo "foo \
Packit 26a39e
	    bar"
Packit 26a39e
',
Packit 26a39e
              '', 'foobar
Packit 26a39e
foobar
Packit 26a39e
foo    bar
Packit 26a39e
foo    bar
Packit 26a39e
foo bar
Packit 26a39e
foo bar
Packit 26a39e
foo     bar
Packit 26a39e
foo     bar');
Packit 26a39e
Packit 26a39e
# Test the slow path / no quotes
Packit 26a39e
run_make_test('
Packit 26a39e
all:
Packit 26a39e
	@echo hi; echo foo\
Packit 26a39e
bar
Packit 26a39e
	@echo hi; echo foo\
Packit 26a39e
	bar
Packit 26a39e
	@echo hi; echo foo\
Packit 26a39e
 bar
Packit 26a39e
	@echo hi; echo foo\
Packit 26a39e
	 bar
Packit 26a39e
	@echo hi; echo foo \
Packit 26a39e
bar
Packit 26a39e
	@echo hi; echo foo \
Packit 26a39e
	bar
Packit 26a39e
	@echo hi; echo foo \
Packit 26a39e
 bar
Packit 26a39e
	@echo hi; echo foo \
Packit 26a39e
	 bar
Packit 26a39e
',
Packit 26a39e
              '', 'hi
Packit 26a39e
foobar
Packit 26a39e
hi
Packit 26a39e
foobar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar');
Packit 26a39e
Packit 26a39e
# Test the slow path / no quotes.  This time we put the slow path
Packit 26a39e
# determination _after_ the backslash-newline handling.
Packit 26a39e
run_make_test('
Packit 26a39e
all:
Packit 26a39e
	@echo foo\
Packit 26a39e
bar; echo hi
Packit 26a39e
	@echo foo\
Packit 26a39e
	bar; echo hi
Packit 26a39e
	@echo foo\
Packit 26a39e
 bar; echo hi
Packit 26a39e
	@echo foo\
Packit 26a39e
	 bar; echo hi
Packit 26a39e
	@echo foo \
Packit 26a39e
bar; echo hi
Packit 26a39e
	@echo foo \
Packit 26a39e
	bar; echo hi
Packit 26a39e
	@echo foo \
Packit 26a39e
 bar; echo hi
Packit 26a39e
	@echo foo \
Packit 26a39e
	 bar; echo hi
Packit 26a39e
',
Packit 26a39e
              '', 'foobar
Packit 26a39e
hi
Packit 26a39e
foobar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi');
Packit 26a39e
Packit 26a39e
# Test the slow path / single quotes
Packit 26a39e
run_make_test("
Packit 26a39e
all:
Packit 26a39e
	\@echo hi; echo 'foo\\
Packit 26a39e
bar'
Packit 26a39e
	\@echo hi; echo 'foo\\
Packit 26a39e
	bar'
Packit 26a39e
	\@echo hi; echo 'foo\\
Packit 26a39e
    bar'
Packit 26a39e
	\@echo hi; echo 'foo\\
Packit 26a39e
	    bar'
Packit 26a39e
	\@echo hi; echo 'foo \\
Packit 26a39e
bar'
Packit 26a39e
	\@echo hi; echo 'foo \\
Packit 26a39e
	bar'
Packit 26a39e
	\@echo hi; echo 'foo \\
Packit 26a39e
    bar'
Packit 26a39e
	\@echo hi; echo 'foo \\
Packit 26a39e
	    bar'
Packit 26a39e
",
Packit 26a39e
              '', 'hi
Packit 26a39e
foo\
Packit 26a39e
bar
Packit 26a39e
hi
Packit 26a39e
foo\
Packit 26a39e
bar
Packit 26a39e
hi
Packit 26a39e
foo\
Packit 26a39e
    bar
Packit 26a39e
hi
Packit 26a39e
foo\
Packit 26a39e
    bar
Packit 26a39e
hi
Packit 26a39e
foo \
Packit 26a39e
bar
Packit 26a39e
hi
Packit 26a39e
foo \
Packit 26a39e
bar
Packit 26a39e
hi
Packit 26a39e
foo \
Packit 26a39e
    bar
Packit 26a39e
hi
Packit 26a39e
foo \
Packit 26a39e
    bar');
Packit 26a39e
Packit 26a39e
# Test the slow path / double quotes
Packit 26a39e
run_make_test('
Packit 26a39e
all:
Packit 26a39e
	@echo hi; echo "foo\
Packit 26a39e
bar"
Packit 26a39e
	@echo hi; echo "foo\
Packit 26a39e
	bar"
Packit 26a39e
	@echo hi; echo "foo\
Packit 26a39e
    bar"
Packit 26a39e
	@echo hi; echo "foo\
Packit 26a39e
	    bar"
Packit 26a39e
	@echo hi; echo "foo \
Packit 26a39e
bar"
Packit 26a39e
	@echo hi; echo "foo \
Packit 26a39e
	bar"
Packit 26a39e
	@echo hi; echo "foo \
Packit 26a39e
    bar"
Packit 26a39e
	@echo hi; echo "foo \
Packit 26a39e
	    bar"
Packit 26a39e
',
Packit 26a39e
              '', 'hi
Packit 26a39e
foobar
Packit 26a39e
hi
Packit 26a39e
foobar
Packit 26a39e
hi
Packit 26a39e
foo    bar
Packit 26a39e
hi
Packit 26a39e
foo    bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo bar
Packit 26a39e
hi
Packit 26a39e
foo     bar
Packit 26a39e
hi
Packit 26a39e
foo     bar');
Packit 26a39e
Packit 26a39e
run_make_test('x:;@-exit 1', '', "#MAKE#: [#MAKEFILE#:1: x] Error 1 (ignored)\n");
Packit 26a39e
Packit 26a39e
1;