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