#                                                                    -*-perl-*-

$description = "Test proper handling of SHELL.";

# If we don't have a POSIX shell available, never mind
$is_posix_sh or return -1;

# On Windows, shell names might not match
if ($port_type eq 'W32') {
    return -1;
}

$mshell = $sh_name;

# 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.  A more portable option might be to set SHELL to
# be $^X (perl) in the makefile, and set .SHELLFLAGS to -e.

$ENV{SHELL} = $mshell;

my $altshell = "/./$mshell";
my $altshell2 = "/././$mshell";

if ($mshell =~ m,^([a-zA-Z]:)([\\/])(.*),) {
    $altshell = "$1$2.$2$3";
    $altshell2 = "$1$2.$2.$2$3";
}

run_make_test("SHELL := $altshell\n".'
all:;@echo "$(SHELL) $$SHELL"
', '', "$altshell $mshell");

# As a GNU make extension, if make's SHELL variable is explicitly exported,
# then we really _DO_ export it.

$ENV{SHELL} = $mshell;

run_make_test("export SHELL := $altshell\n".'
all:;@echo "$(SHELL) $$SHELL"
', '', "$altshell $altshell");


# Test out setting of SHELL, both exported and not, as a target-specific
# variable.

$ENV{SHELL} = $mshell;

run_make_test("all: SHELL := $altshell\n".'
all:;@echo "$(SHELL) $$SHELL"
', '', "$altshell $mshell");

$ENV{SHELL} = $mshell;

run_make_test("
SHELL := $altshell2
one: two
two: export SHELL := $altshell\n".'
one two:;@echo "$@: $(SHELL) $$SHELL"
', '', "two: $altshell $altshell\none: $altshell2 $mshell\n");

# Test .SHELLFLAGS

# We don't know the output here: on Solaris for example, every line printed
# by the shell in -x mode has a trailing space (!!)
my $script = 'true; true';
my $flags = '-xc';
my $out = `$sh_name $flags '$script' 2>&1`;

run_make_test(qq!
.SHELLFLAGS = $flags
all: ; \@$script
!,
              '', $out);

# Do it again but add spaces to SHELLFLAGS

# Some shells (*shakes fist at Solaris*) cannot handle multiple flags in
# separate arguments.
my $t = `$sh_name -e -c true 2>/dev/null`;
my $multi_ok = $? == 0;

if ($multi_ok) {
    $flags = '-x -c';
    run_make_test(qq!
.SHELLFLAGS = $flags
all: ; \@$script
!,
              '', $out);
}

# We can't just use "false" because on different systems it provides a
# different exit code--once again Solaris: false exits with 255 not 1
$script = 'true; false; true';
$flags = '-xec';
$out = `$sh_name $flags '$script' 2>&1`;
my $err = $? >> 8;

run_make_test(qq!
.SHELLFLAGS = $flags
all: ; \@$script
!,
              '', "$out#MAKE#: *** [#MAKEFILE#:3: all] Error $err\n", 512);

1;
