#                                                                    -*-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";

run_make_test(qq!
PATH := ..
all: ; $sname
!,
              '', "$sname\n#MAKE#: $sname: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 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;

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

unlink($sname);

1;
