#                                                                    -*-perl-*-

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

$details = "";


# Ensure turning on .POSIX enables the -e flag for the shell
# We can't assume the exit value of "false" because on different systems it's
# different.

my $script = 'false; true';
my $flags = '-ec';
my $out = `/bin/sh $flags '$script' 2>&1`;
my $err = $? >> 8;
run_make_test(qq!
.POSIX:
all: ; \@$script
!,
              '', "#MAKEFILE#:3: recipe for target 'all' failed
#MAKE#: *** [all] Error $err\n", 512);

# User settings must override .POSIX
$flags = '-xc';
$out = `/bin/sh $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 => '-O',
             FC => 'fort77', FFLAGS => '-O 1',
             GET => 'get', GFLAGS => '',
             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
%extraENV = 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;
