VirtualBox

source: kBuild/vendor/gnumake/current/tests/scripts/targets/SECONDARY@ 1989

Last change on this file since 1989 was 1989, checked in by bird, 16 years ago

Load gnumake-2008-10-28-CVS into vendor/gnumake/current.

  • Property svn:eol-style set to native
File size: 3.8 KB
Line 
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# TEST #9 -- Savannah bug #15919
125# The original fix for this bug caused a new bug, shown here.
126
127touch(qw(1.a 2.a));
128
129run_make_test('
130%.c : %.b ; cp $< $@
131%.b : %.a ; cp $< $@
132all : 1.c 2.c', '-rR -j',
133'cp 1.a 1.b
134cp 2.a 2.b
135cp 1.b 1.c
136cp 2.b 2.c
137rm 1.b 2.b');
138
139unlink(qw(1.a 2.a 1.c 2.c));
140
141# TEST #10 -- Savannah bug #15919
142touch('test.0');
143run_make_test('
144.SECONDARY : test.1 test.2 test.3
145
146test : test.4
147
148%.4 : %.int %.3 ; touch $@
149
150%.int : %.3 %.2 ; touch $@
151
152%.3 : | %.2 ; touch $@
153
154%.2 : %.1 ; touch $@
155
156%.1 : %.0 ; touch $@', '-rR -j 2',
157'touch test.1
158touch test.2
159touch test.3
160touch test.int
161touch test.4
162rm test.int');
163
164# After a touch of test.0 it should give the same output, except we don't need
165# to rebuild test.3 (order-only)
166sleep(1);
167touch('test.0');
168run_make_test(undef, '-rR -j 2',
169'touch test.1
170touch test.2
171touch test.int
172touch test.4
173rm test.int');
174
175# With both test.0 and test.3 updated it should still build everything except
176# test.3
177sleep(1);
178touch('test.0', 'test.3');
179run_make_test(undef, '-rR -j 2',
180'touch test.1
181touch test.2
182touch test.int
183touch test.4
184rm test.int');
185
186unlink(qw(test.0 test.1 test.2 test.3 test.4));
187
188# This tells the test driver that the perl test script executed properly.
1891;
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette