1# -*-perl-*- 2 3$description = "Test the behaviour of the .INTERMEDIATE target."; 4 5$details = "\ 6Test the behavior of the .INTERMEDIATE special target. 7Create a makefile where a file would not normally be considered 8intermediate, then specify it as .INTERMEDIATE. Build and ensure it's 9deleted properly. Rebuild to ensure that it's not created if it doesn't 10exist but doesn't need to be built. Change the original and ensure 11that the intermediate file and the ultimate target are both rebuilt, and 12that the intermediate file is again deleted. 13 14Try this with implicit rules and explicit rules: both should work.\n"; 15 16open(MAKEFILE,"> $makefile"); 17 18print MAKEFILE <<'EOF'; 19 20.INTERMEDIATE: foo.e bar.e 21 22# Implicit rule test 23%.d : %.e ; cp $< $@ 24%.e : %.f ; cp $< $@ 25 26foo.d: foo.e 27 28# Explicit rule test 29foo.c: foo.e bar.e; cat $^ > $@ 30EOF 31 32close(MAKEFILE); 33 34# TEST #0 35 36&utouch(-20, 'foo.f', 'bar.f'); 37 38&run_make_with_options($makefile,'foo.d',&get_logfile); 39$answer = "cp foo.f foo.e\ncp foo.e foo.d\nrm foo.e\n"; 40&compare_output($answer, &get_logfile(1)); 41 42# TEST #1 43 44&run_make_with_options($makefile,'foo.d',&get_logfile); 45$answer = "$make_name: `foo.d' is up to date.\n"; 46&compare_output($answer, &get_logfile(1)); 47 48# TEST #2 49 50&utouch(-10, 'foo.d'); 51&touch('foo.f'); 52 53&run_make_with_options($makefile,'foo.d',&get_logfile); 54$answer = "cp foo.f foo.e\ncp foo.e foo.d\nrm foo.e\n"; 55&compare_output($answer, &get_logfile(1)); 56 57# TEST #3 58 59&run_make_with_options($makefile,'foo.c',&get_logfile); 60$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm bar.e foo.e\n"; 61&compare_output($answer, &get_logfile(1)); 62 63# TEST #4 64 65&run_make_with_options($makefile,'foo.c',&get_logfile); 66$answer = "$make_name: `foo.c' is up to date.\n"; 67&compare_output($answer, &get_logfile(1)); 68 69# TEST #5 70 71&utouch(-10, 'foo.c'); 72&touch('foo.f'); 73 74&run_make_with_options($makefile,'foo.c',&get_logfile); 75$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm bar.e foo.e\n"; 76&compare_output($answer, &get_logfile(1)); 77 78# TEST #6 -- added for PR/1669: don't remove files mentioned on the cmd line. 79 80&run_make_with_options($makefile,'foo.e',&get_logfile); 81$answer = "cp foo.f foo.e\n"; 82&compare_output($answer, &get_logfile(1)); 83 84unlink('foo.f', 'foo.e', 'foo.d', 'foo.c', 'bar.f', 'bar.e', 'bar.d', 'bar.c'); 85 86# TEST #7 -- added for PR/1423 87 88$makefile2 = &get_tmpfile; 89 90open(MAKEFILE, "> $makefile2"); 91 92print MAKEFILE <<'EOF'; 93all: foo 94foo.a: ; touch $@ 95%: %.a ; touch $@ 96.INTERMEDIATE: foo.a 97EOF 98 99close(MAKEFILE); 100 101&run_make_with_options($makefile2, '-R', &get_logfile); 102$answer = "touch foo.a\ntouch foo\nrm foo.a\n"; 103&compare_output($answer, &get_logfile(1)); 104 105unlink('foo'); 106 107# This tells the test driver that the perl test script executed properly. 1081; 109