| # -*-perl-*- |
| |
| $description = "Test the behaviour of the .ONESHELL target."; |
| |
| $details = ""; |
| |
| # Some shells (*shakes fist at Solaris*) cannot handle multiple flags in |
| # separate arguments. |
| my $t = `/bin/sh -e -c true 2>/dev/null`; |
| my $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 |
| |
| 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"); |
| |
| 1; |