#                                                                    -*-perl-*-

$description = "\
This tests random features of make's algorithms, often somewhat obscure,
which have either broken at some point in the past or seem likely to
break.";

run_make_test('
# Make sure that subdirectories built as prerequisites are actually handled
# properly.

all: dir/subdir/file.a

dir/subdir: ; @echo mkdir -p dir/subdir

dir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b

dir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@',
              '', "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n");

# Test implicit rules

&touch('foo.c');
run_make_test('foo: foo.o',
              'CC="@echo cc" OUTPUT_OPTION=',
              'cc -c foo.c
cc foo.o -o foo');
unlink('foo.c');


# Test implicit rules with '$' in the name (see se_implicit)

run_make_test(q!
%.foo : baz$$bar ; @echo 'done $<'
%.foo : bar$$baz ; @echo 'done $<'
test.foo:
baz$$bar bar$$baz: ; @echo '$@'
!,
              '',
              "baz\$bar\ndone baz\$bar");


# Test implicit rules with '$' in the name (see se_implicit)
# Use the '$' in the pattern.

run_make_test(q!
%.foo : %$$bar ; @echo 'done $<'
test.foo:
test$$bar: ; @echo '$@'
!,
              '',
              "test\$bar\ndone test\$bar");

# Make sure that subdirectories built as prerequisites are actually handled
# properly... this time with '$'

run_make_test(q!

all: dir/subdir/file.$$a

dir/subdir: ; @echo mkdir -p '$@'

dir/subdir/file.$$b: dir/subdir ; @echo touch '$@'

dir/subdir/%.$$a: dir/subdir/%.$$b ; @echo 'cp $< $@'
!,
              '', "mkdir -p dir/subdir\ntouch dir/subdir/file.\$b\ncp dir/subdir/file.\$b dir/subdir/file.\$a\n");

# Test odd whitespace at the beginning of a line

run_make_test("
all:
   \f

    \\
 \f  \\
    \013 \\
all: ; \@echo hi
",
              '', "hi\n");

# SV-56834 Ensure setting PATH in the makefile works properly
my $sname = "foobar$scriptsuffix";

mkdir('sd', 0775);
create_file("sd/$sname", "exit 0\n");
chmod 0755, "sd/$sname";

run_make_test(qq!
PATH := sd
all: ; $sname >/dev/null
!,
              '', "$sname >/dev/null\n");

# Don't use the general PATH if not found on the target path

$ENV{PATH} = "$ENV{PATH}:sd";

my ($ernum, $erstr);

if ($port_type eq 'W32') {
    $ernum = 2;
    $erstr = "process_begin: CreateProcess(NULL, $sname, ...) failed.\nmake (e=2): The system cannot find the file specified.";
} else {
    $ernum = 127;
    $erstr = "#MAKE#: $sname: $ERR_no_such_file";
}

run_make_test(qq!
PATH := ..
all: ; $sname
!,
              '', "$sname\n$erstr\n#MAKE#: *** [#MAKEFILE#:3: all] Error $ernum", 512);

unlink("sd/$sname");
rmdir('sd');

# Ensure that local programs are not found if "." is not on the PATH

create_file($sname, '');
chmod 0755, $sname;

if ($port_type eq 'W32') {
    $ernum = -1;
    $erstr = "";
} else {
    $ernum = 127;
    $erstr = "#MAKE#: $sname: $ERR_no_such_file\n";
}

run_make_test(qq!
PATH := ..
all: ; $sname
!,
              '', "$sname\n$erstr#MAKE#: *** [#MAKEFILE#:3: all] Error $ernum", 512);

unlink($sname);

if ($port_type eq 'UNIX') {
    # SV 57674: ensure we use a system default PATH if one is not set
    delete $ENV{PATH};
    run_make_test(q!
a: ; @echo hi
!,
                  '', "hi\n");
}

1;
