1#! -*-perl-*-
2
3$description = "Test the behaviour of the .SECONDARY target.";
4
5$details = "\
6Test the behavior of the .SECONDARY special target.
7Create a makefile where a file would not normally be considered
8intermediate, then specify it as .SECONDARY.  Build and note that it's
9not automatically deleted.  Delete the file.  Rebuild to ensure that
10it's not created if it doesn't exist but doesn't need to be built.
11Change the original and ensure that the secondary file and the ultimate
12target are both rebuilt, and that the secondary file is not deleted.
13
14Try this with implicit rules and explicit rules: both should work.\n";
15
16open(MAKEFILE,"> $makefile");
17
18print MAKEFILE <<'EOF';
19
20.SECONDARY: foo.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 ; cp $< $@
30EOF
31
32close(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
44unlink('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
67unlink('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
82unlink('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
88open(MAKEFILE, "> $makefile2");
89
90print MAKEFILE <<'EOF';
91.SECONDARY:
92
93final: intermediate
94intermediate: source
95
96final intermediate source:
97	echo $< > $@
98EOF
99
100close(MAKEFILE);
101
102&utouch(-10, 'source');
103touch('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
109unlink('source', 'final', 'intermediate');
110
111
112# TEST #8 -- test the "global" .SECONDARY, with .PHONY.
113
114touch('version2');
115run_make_test('
116.PHONY: version
117.SECONDARY:
118version2: version ; @echo GOOD
119all: version2',
120              'all', 'GOOD');
121
122unlink('version2');
123
124# This tells the test driver that the perl test script executed properly.
1251;
126