1 #! -*-perl-*- 2 3 $description = "Test the behaviour of the .SECONDARY target."; 4 5 $details = "\ 6 Test the behavior of the .SECONDARY special target. 7 Create a makefile where a file would not normally be considered 8 intermediate, then specify it as .SECONDARY. Build and note that it's 9 not automatically deleted. Delete the file. Rebuild to ensure that 10 it's not created if it doesn't exist but doesn't need to be built. 11 Change the original and ensure that the secondary file and the ultimate 12 target are both rebuilt, and that the secondary file is not deleted. 13 14 Try this with implicit rules and explicit rules: both should work.\n"; 15 16 open(MAKEFILE,"> $makefile"); 17 18 print MAKEFILE <<'EOF'; 19 20 .SECONDARY: foo.e 21 22 # Implicit rule test 23 %.d : %.e ; cp $< $@ 24 %.e : %.f ; cp $< $@ 25 26 foo.d: foo.e 27 28 # Explicit rule test 29 foo.c: foo.e ; cp $< $@ 30 EOF 31 32 close(MAKEFILE); 33 34 # TEST #1 35 36 &utouch(-20, 'foo.f'); 37 38 &run_make_with_options($makefile,'foo.d',&get_logfile); 39 $answer = "cp foo.f foo.e\ncp foo.e foo.d\n"; 40 &compare_output($answer, &get_logfile(1)); 41 42 # TEST #2 43 44 unlink('foo.e'); 45 46 &run_make_with_options($makefile,'foo.d',&get_logfile); 47 $answer = "$make_name: `foo.d' is up to date.\n"; 48 &compare_output($answer, &get_logfile(1)); 49 50 # TEST #3 51 52 &utouch(-10, 'foo.d'); 53 &touch('foo.f'); 54 55 &run_make_with_options($makefile,'foo.d',&get_logfile); 56 $answer = "cp foo.f foo.e\ncp foo.e foo.d\n"; 57 &compare_output($answer, &get_logfile(1)); 58 59 # TEST #4 60 61 &run_make_with_options($makefile,'foo.c',&get_logfile); 62 $answer = "cp foo.e foo.c\n"; 63 &compare_output($answer, &get_logfile(1)); 64 65 # TEST #5 66 67 unlink('foo.e'); 68 69 &run_make_with_options($makefile,'foo.c',&get_logfile); 70 $answer = "$make_name: `foo.c' is up to date.\n"; 71 &compare_output($answer, &get_logfile(1)); 72 73 # TEST #6 74 75 &utouch(-10, 'foo.c'); 76 &touch('foo.f'); 77 78 &run_make_with_options($makefile,'foo.c',&get_logfile); 79 $answer = "cp foo.f foo.e\ncp foo.e foo.c\n"; 80 &compare_output($answer, &get_logfile(1)); 81 82 unlink('foo.f', 'foo.e', 'foo.d', 'foo.c'); 83 84 # TEST #7 -- test the "global" .SECONDARY, with no targets. 85 86 $makefile2 = &get_tmpfile; 87 88 open(MAKEFILE, "> $makefile2"); 89 90 print MAKEFILE <<'EOF'; 91 .SECONDARY: 92 93 final: intermediate 94 intermediate: source 95 96 final intermediate source: 97 echo $< > $@ 98 EOF 99 100 close(MAKEFILE); 101 102 &utouch(-10, 'source'); 103 touch('final'); 104 105 &run_make_with_options($makefile2, '', &get_logfile); 106 $answer = "$make_name: `final' is up to date.\n"; 107 &compare_output($answer, &get_logfile(1)); 108 109 unlink('source', 'final', 'intermediate'); 110 111 112 # TEST #8 -- test the "global" .SECONDARY, with .PHONY. 113 114 touch('version2'); 115 run_make_test(' 116 .PHONY: version 117 .SECONDARY: 118 version2: version ; @echo GOOD 119 all: version2', 120 'all', 'GOOD'); 121 122 unlink('version2'); 123 124 # This tells the test driver that the perl test script executed properly. 125 1; 126