#                                                                    -*-perl-*-

$description = "Test the behaviour of the .POSIX target.";

$details = "";


# Ensure turning on .POSIX enables the -e flag for the shell

run_make_test(q!
.POSIX:
all: ; @#HELPER# -q fail 1; #HELPER# out hello
!,
              '', "#MAKE#: *** [#MAKEFILE#:3: all] Error 1\n", 512);

# But explicit settings must still take precedence

run_make_test(q!
.POSIX:
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
.SHELLFLAGS = -c
!,
              '', "hello");

run_make_test(q!
.POSIX:
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
all: .SHELLFLAGS = -c
!,
              '', "hello");

# SV 63667: We shouldn't add -e to sh if errors are ignored

run_make_test(q!
.POSIX:
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
!,
              '', "hello\n");

# SV 64085: Also don't add -e if -i or .IGNORE is used

run_make_test(q!
.POSIX:
all: ; @#HELPER# -q fail 1; #HELPER# out hello
!,
              '-i', "hello\n");

run_make_test(q!
.POSIX:
.IGNORE:
all: ; @#HELPER# -q fail 1; #HELPER# out hello
!,
              '', "hello\n");

run_make_test(q!
.POSIX:
.IGNORE: all
all: ; @#HELPER# -q fail 1; #HELPER# out hello
!,
              '', "hello\n");

# But explicit settings must still take precedence

run_make_test(q!
.POSIX:
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
.SHELLFLAGS = -ec
!,
              '', "#MAKE#: [#MAKEFILE#:3: all] Error 1 (ignored)\n");

run_make_test(q!
.POSIX:
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
all: .SHELLFLAGS = -ec
!,
              '', "#MAKE#: [#MAKEFILE#:3: all] Error 1 (ignored)\n");

# User settings must override .POSIX
# In the standard .POSIX must be the first thing in the makefile
# but we relax that rule in GNU Make.

# Different versions of sh generate different output for -x so check it
my $script = subst_make_string('#HELPER# -q fail 1; true');
my $flags = '-xc';
my $out = `$sh_name $flags '$script' 2>&1`;

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

# Test the default value of various POSIX-specific variables
my %POSIX = (AR => 'ar', ARFLAGS => '-rv',
             YACC => 'yacc', YFLAGS => '',
             LEX => 'lex', LFLAGS => '',
             LDFLAGS => '',
             CC => 'c99', CFLAGS => '-O1',
             FC => 'fort77', FFLAGS => '-O1',
             SCCSFLAGS => '', SCCSGETFLAGS => '-s');
my $make = join('', map { "\t\@echo '$_=\$($_)'\n" } sort keys %POSIX);
my $r = join('', map { "$_=$POSIX{$_}\n"} sort keys %POSIX);
run_make_test(qq!
.POSIX:
all:
$make
!,
              '', $r);

# Make sure that local settings take precedence
%ENV = (%ENV, map { $_ => "xx-$_" } keys %POSIX);
$r = join('', map { "$_=xx-$_\n"} sort keys %POSIX);
run_make_test(undef, '', $r);

# This tells the test driver that the perl test script executed properly.
1;
