| # -*-perl-*- |
| |
| $description = 'Test the $(shell ...) function.'; |
| |
| $details = ''; |
| |
| # Test standard shell |
| run_make_test('.PHONY: all |
| OUT := $(shell echo hi) |
| all: ; @echo $(OUT) |
| ','','hi'); |
| |
| # Test shells inside rules. |
| run_make_test('.PHONY: all |
| all: ; @echo $(shell echo hi) |
| ','','hi'); |
| |
| # Verify .SHELLSTATUS |
| run_make_test('.PHONY: all |
| PRE := $(.SHELLSTATUS) |
| $(shell exit 0) |
| OK := $(.SHELLSTATUS) |
| $(shell exit 1) |
| BAD := $(.SHELLSTATUS) |
| all: ; @echo PRE=$(PRE) OK=$(OK) BAD=$(BAD) |
| ','','PRE= OK=0 BAD=1'); |
| |
| # Test unescaped comment characters in shells. Savannah bug #20513 |
| run_make_test(q! |
| FOO := $(shell echo '#') |
| foo: ; echo '$(FOO)' |
| !, |
| '', "echo '#'\n#\n"); |
| |
| # Test shells inside exported environment variables. |
| # This is the test that fails if we try to put make exported variables into |
| # the environment for a $(shell ...) call. |
| run_make_test(' |
| export HI = $(shell echo hi) |
| .PHONY: all |
| all: ; @echo $$HI |
| ','','hi'); |
| |
| if ($port_type ne 'W32') { |
| # Test shell errors in recipes including offset |
| # This needs to be ported to Windows, or else Windows error messages |
| # need to converted to look like more normal make errors. |
| run_make_test(' |
| all: |
| @echo hi |
| $(shell ./basdfdfsed there) |
| @echo $(.SHELLSTATUS) |
| ', |
| '', "#MAKE#: ./basdfdfsed: $ERR_no_such_file\nhi\n127\n"); |
| |
| run_make_test(' |
| $(shell ./basdfdfsed where) |
| all: ; @echo $(.SHELLSTATUS) |
| ', |
| '', "#MAKE#: ./basdfdfsed: $ERR_no_such_file\n127\n"); |
| |
| # Test SHELLSTATUS for kill. |
| # This test could be ported to Windows, using taskkill ... ? |
| |
| # Figure out the exit code for SIGINT |
| my $pid = fork(); |
| if (! $pid) { |
| exec('kill -2 $$') or die "exec: Cannot execute sleep\n"; |
| } |
| waitpid($pid, 0); |
| # .SHELLSTATUS for a signal gives 128 + the signal number |
| my $ret = $?; |
| if ($ret > 255) { |
| # Solaris 10 perl 5.8.4 puts signal number + 128 into the high 8 bits. |
| $ret >>= 8; |
| } |
| $ret |= 128; |
| |
| run_make_test('.PHONY: all |
| $(shell kill -2 $$$$) |
| STAT := $(.SHELLSTATUS) |
| all: ; @echo STAT=$(STAT) |
| ','',"STAT=$ret\n"); |
| } |
| |
| 1; |
| |
| ### Local Variables: |
| ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) |
| ### End: |