# -*-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;