| # -*-perl-*- | |
| $description = "Test the behaviour of the .ONESHELL target."; | |
| $details = ""; | |
| my $multi_ok = 0; | |
| if ($port_type ne 'W32') { | |
| # Some shells (*shakes fist at Solaris*) cannot handle multiple flags in | |
| # separate arguments. | |
| my $t = `$sh_name -e -c true 2>/dev/null`; | |
| $multi_ok = $? == 0; | |
| } | |
| # Simple | |
| run_make_test(q! | |
| .ONESHELL: | |
| all: | |
| a=$$$$ | |
| [ 0"$$a" -eq "$$$$" ] || echo fail | |
| !, | |
| '', 'a=$$ | |
| [ 0"$a" -eq "$$" ] || echo fail | |
| '); | |
| # Simple but use multi-word SHELLFLAGS | |
| if ($multi_ok) { | |
| run_make_test(q! | |
| .ONESHELL: | |
| .SHELLFLAGS = -e -c | |
| all: | |
| a=$$$$ | |
| [ 0"$$a" -eq "$$$$" ] || echo fail | |
| !, | |
| '', 'a=$$ | |
| [ 0"$a" -eq "$$" ] || echo fail | |
| '); | |
| } | |
| # Again, but this time with inner prefix chars | |
| run_make_test(q! | |
| .ONESHELL: | |
| all: | |
| a=$$$$ | |
| @-+ [ 0"$$a" -eq "$$$$" ] || echo fail | |
| !, | |
| '', 'a=$$ | |
| [ 0"$a" -eq "$$" ] || echo fail | |
| '); | |
| # This time with outer prefix chars | |
| run_make_test(q! | |
| .ONESHELL: | |
| all: | |
| @a=$$$$ | |
| [ 0"$$a" -eq "$$$$" ] || echo fail | |
| !, | |
| '', ''); | |
| # This time with outer and inner prefix chars | |
| run_make_test(q! | |
| .ONESHELL: | |
| all: | |
| @a=$$$$ | |
| -@ +[ 0"$$a" -eq "$$$$" ] || echo fail | |
| !, | |
| '', ''); | |
| # Now try using a different interpreter | |
| # This doesn't work on Windows right now | |
| if ($port_type ne 'W32') { | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| .ONESHELL: | |
| SHELL = #PERL# | |
| .SHELLFLAGS = -e | |
| all: | |
| > @$$a=5 | |
| > +7; | |
| > @y=qw(a b c); | |
| >print "a = $$a, y = (@y)\n"; | |
| !, | |
| '', "a = 12, y = (a b c)\n"); | |
| # Simple .SHELLFLAGS, no quotes. | |
| # sv 61805. | |
| run_make_test(q! | |
| .ONESHELL: | |
| SHELL = #PERL# | |
| .SHELLFLAGS = -e | |
| all:; @print "it works\n" | |
| !, '', 'it works'); | |
| # Pass a quoted string with spaces to oneshell. | |
| # sv 61805. | |
| run_make_test(q! | |
| .ONESHELL: | |
| SHELL = #PERL# | |
| .SHELLFLAGS = -w -E 'use warnings FATAL => "all";' -E | |
| all:; @print "it works\n" | |
| !, '', 'it works'); | |
| # Empty .SHELLFLAGS. | |
| # sv 61805. | |
| run_make_test(q! | |
| .ONESHELL: | |
| SHELL = #PERL# | |
| .SHELLFLAGS = | |
| all:; @print "it works" | |
| !, '', "Can't open perl script \"print \"it works\"\": $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:5: all] Error $ERR_no_such_file_code", 512); | |
| # No .SHELLFLAGS. | |
| # sv 61805. | |
| run_make_test(q! | |
| .ONESHELL: | |
| SHELL = #PERL# | |
| all:; @print "it works" | |
| !, '', "Can't open perl script \"print \"it works\"\": $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:4: all] Error $ERR_no_such_file_code", 512); | |
| # Pass a quoted string with spaces to oneshell. | |
| # sv 61805. | |
| run_make_test(q! | |
| .ONESHELL: | |
| SHELL = #PERL# | |
| .SHELLFLAGS = -w -E 'use warnings FATAL => "all";' -E 'my $$foo = "bar";' -E | |
| all:; @print "it works: $$foo\n" | |
| !, '', 'it works: bar'); | |
| } | |
| # This tells the test driver that the perl test script executed properly. | |
| 1; | |
| ### Local Variables: | |
| ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) | |
| ### End: |