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