#                                                                    -*-perl-*-
$description = "Tests the new VPATH+ functionality added in 3.76.";

$details = "";

$VP = "$workdir$pathsep";

open(MAKEFILE,"> $makefile");

# The Contents of the MAKEFILE ...

print MAKEFILE "VPATH = $VP\n";

print MAKEFILE <<'EOMAKE';

SHELL = /bin/sh

.SUFFIXES: .a .b .c .d
.PHONY: general rename notarget intermediate

%.a:
%.b:
%.c:
%.d:

%.a : %.b
	cat $^ > $@
%.b : %.c
	cat $^ > $@ 2>/dev/null || exit 1
%.c :: %.d
	cat $^ > $@

# General testing info:

general: foo.b
foo.b: foo.c bar.c

# Rename testing info:

rename: $(VPATH)/foo.c foo.d

# Target not made testing info:

notarget: notarget.b
notarget.c: notarget.d
	-@echo "not creating $@ from $^"

# Intermediate files:

intermediate: inter.a

EOMAKE

close(MAKEFILE);

@touchedfiles = ();

sub touchfiles {
  foreach (@_) {
    sleep($wtime);
    ($f = $_) =~ s,VP/,$VP,g;
    &touch($f);
    push(@touchedfiles, $f);
  }
}

# Run the general-case test

&touchfiles("VP/foo.d", "VP/bar.d", "VP/foo.c", "VP/bar.c", "foo.b", "bar.d");

&run_make_with_options($makefile,"general",&get_logfile);

push(@touchedfiles, "bar.c");

$answer = "cat bar.d > bar.c
cat ${VP}foo.c bar.c > foo.b 2>/dev/null || exit 1
";
&compare_output($answer,&get_logfile(1));

# Test rules that don't make the target correctly

&touchfiles("VP/notarget.c", "notarget.b", "notarget.d");

&run_make_with_options($makefile,"notarget",&get_logfile,512);

$answer = "not creating notarget.c from notarget.d
cat notarget.c > notarget.b 2>/dev/null || exit 1
$make_name: *** [notarget.b] Error 1
";

&compare_output($answer,&get_logfile(1));

# Test intermediate file handling (part 1)

&touchfiles("VP/inter.d");

&run_make_with_options($makefile,"intermediate",&get_logfile);

push(@touchedfiles, "inter.a", "inter.b");

$answer = "cat ${VP}inter.d > inter.c
cat inter.c > inter.b 2>/dev/null || exit 1
cat inter.b > inter.a
rm inter.b inter.c
";
&compare_output($answer,&get_logfile(1));

# Test intermediate file handling (part 2)

&touchfiles("VP/inter.b", "VP/inter.d");

&run_make_with_options($makefile,"intermediate",&get_logfile);

$answer = "cat ${VP}inter.d > inter.c
cat inter.c > inter.b 2>/dev/null || exit 1
cat inter.b > inter.a
rm inter.c
";
&compare_output($answer,&get_logfile(1));

unlink @touchedfiles unless $keep;

1;
