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