#                                                                    -*-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 (@_) {
    ($f = $_) =~ s,VP/,$VP,g;
    &touch($f);
    push(@touchedfiles, $f);
    # Sleep 2 seconds for DOS/Windows FAT volumes which have 2-second
    # granularity of file times.
    sleep(2);
  }
}

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