#                                                                    -*-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 some systems, 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);
}

$script = subst_make_string('true; #HELPER# -q fail 1; true');
$flags = '-xec';
$out = `"$sh_name" $flags '$script' 2>&1`;

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

1;
