diff options
Diffstat (limited to 'tests/scripts/variables/SHELL')
-rw-r--r-- | tests/scripts/variables/SHELL | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/scripts/variables/SHELL b/tests/scripts/variables/SHELL new file mode 100644 index 0000000..9ff5c4b --- /dev/null +++ b/tests/scripts/variables/SHELL @@ -0,0 +1,49 @@ +# -*-perl-*- + +$description = "Test proper handling of SHELL."; + +# Find the default value when SHELL is not set. On UNIX it will be /bin/sh, +# but on other platforms who knows? +$oshell = $ENV{SHELL}; +delete $ENV{SHELL}; +$mshell = `echo 'all:;\@echo \$(SHELL)' | $make_name -f-`; +chop $mshell; + +# According to POSIX, the value of SHELL in the environment has no impact on +# the value in the makefile. + +$ENV{SHELL} = '/dev/null'; +run_make_test('all:;@echo "$(SHELL)"', '', $mshell); + +# According to POSIX, any value of SHELL set in the makefile should _NOT_ be +# exported to the subshell! I wanted to set SHELL to be $^X (perl) in the +# makefile, but make runs $(SHELL) -c 'commandline' and that doesn't work at +# all when $(SHELL) is perl :-/. So, we just add an extra initial / and hope +# for the best on non-UNIX platforms :-/. + +$ENV{SHELL} = $mshell; + +run_make_test("SHELL := /$mshell\n".' +all:;@echo "$(SHELL) $$SHELL" +', '', "/$mshell $mshell"); + +# As a GNU make extension, if make's SHELL variable is explicitly exported, +# then we really _DO_ export it. + +run_make_test("export SHELL := /$mshell\n".' +all:;@echo "$(SHELL) $$SHELL" +', '', "/$mshell /$mshell"); + + +# Test out setting of SHELL, both exported and not, as a target-specific +# variable. + +run_make_test("all: SHELL := /$mshell\n".' +all:;@echo "$(SHELL) $$SHELL" +', '', "/$mshell $mshell"); + +run_make_test("all: export SHELL := /$mshell\n".' +all:;@echo "$(SHELL) $$SHELL" +', '', "/$mshell $mshell"); + +1; |