VirtualBox

source: kBuild/trunk/src/kmk/tests/scripts/features/parallelism@ 1960

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

tests/scripts/features/parallelism: kmk fails more verbosely.

  • Property svn:eol-style set to LF
File size: 4.7 KB
Line 
1# -*-perl-*-
2
3$description = "Test parallelism (-j) option.";
4
5
6$details = "This test creates a makefile with two double-colon default
7rules. The first rule has a series of sleep and echo commands
8intended to run in series. The second and third have just an
9echo statement. When make is called in this test, it is given
10the -j option with a value of 4. This tells make that it may
11start up to four jobs simultaneously. In this case, since the
12first command is a sleep command, the output of the second
13and third commands will appear before the first if indeed
14make is running all of these commands in parallel.";
15
16if (!$parallel_jobs) {
17 return -1;
18}
19
20if ($vos) {
21 $sleep_command = "sleep -seconds";
22}
23else {
24 $sleep_command = "sleep";
25}
26
27
28run_make_test("
29all : def_1 def_2 def_3
30def_1 : ; \@echo ONE; $sleep_command 3 ; echo TWO
31def_2 : ; \@$sleep_command 2 ; echo THREE
32def_3 : ; \@$sleep_command 1 ; echo FOUR",
33 '-j4', "ONE\nFOUR\nTHREE\nTWO");
34
35# Test parallelism with included files. Here we sleep/echo while
36# building the included files, to test that they are being built in
37# parallel.
38run_make_test("
39all: 1 2; \@echo success
40-include 1.inc 2.inc
411.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo '1: ; \@echo ONE; $sleep_command 2; echo TWO' > \$\@
422.inc: ; \@$sleep_command 1; echo THREE.inc; echo '2: ; \@$sleep_command 1; echo THREE' > \$\@",
43 "-j4",
44 "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n");
45
46unlink('1.inc', '2.inc');
47
48
49# Test parallelism with included files--this time recurse first and make
50# sure the jobserver works.
51run_make_test("
52recurse: ; \@\$(MAKE) --no-print-directory -f #MAKEFILE# INC=yes all
53all: 1 2; \@echo success
54
55INC = no
56ifeq (\$(INC),yes)
57-include 1.inc 2.inc
58endif
59
601.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo '1: ; \@echo ONE; $sleep_command 2; echo TWO' > \$\@
612.inc: ; \@$sleep_command 1; echo THREE.inc; echo '2: ; \@$sleep_command 1; echo THREE' > \$\@",
62 "-j4",
63 "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n");
64
65unlink('1.inc', '2.inc');
66
67# Grant Taylor reports a problem where tokens can be lost (not written back
68# to the pipe when they should be): this happened when there is a $(shell ...)
69# function in an exported recursive variable. I added some code to check
70# for this situation and print a message if it occurred. This test used
71# to trigger this code when I added it but no longer does after the fix.
72
73run_make_test("
74export HI = \$(shell \$(\$\@.CMD))
75first.CMD = echo hi
76second.CMD = $sleep_command 4; echo hi
77
78.PHONY: all first second
79all: first second
80
81first second: ; \@echo \$\@; $sleep_command 1; echo \$\@",
82 '-j2', "first\nfirst\nsecond\nsecond");
83
84# Michael Matz <[email protected]> reported a bug where if make is running in
85# parallel without -k and two jobs die in a row, but not too close to each
86# other, then make will quit without waiting for the rest of the jobs to die.
87
88run_make_test("
89.PHONY: all fail.1 fail.2 fail.3 ok
90all: fail.1 ok fail.2 fail.3
91
92fail.1 fail.2 fail.3:
93 \@sleep \$(patsubst fail.%,%,\$\@)
94 \@echo Fail
95 \@exit 1
96
97ok:
98 \@sleep 4
99 \@echo Ok done",
100 '-rR -j5', (!$is_kmk) ? 'Fail
101#MAKE#: *** [fail.1] Error 1
102#MAKE#: *** Waiting for unfinished jobs....
103Fail
104#MAKE#: *** [fail.2] Error 1
105Fail
106#MAKE#: *** [fail.3] Error 1
107Ok done' : 'Fail
108#MAKE#: *** [fail.1] Error 1
109The failing command:
110 @exit 1
111#MAKE#: *** Waiting for unfinished jobs....
112Fail
113#MAKE#: *** [fail.2] Error 1
114The failing command:
115 @exit 1
116Fail
117#MAKE#: *** [fail.3] Error 1
118The failing command:
119 @exit 1
120Ok done',
121 512);
122
123
124# Test for Savannah bug #15641.
125#
126run_make_test('
127.PHONY: all
128all:; @:
129
130-include foo.d
131
132foo.d: comp
133 @echo building $@
134
135comp: mod_a.o mod_b.o; @:
136
137mod_a.o mod_b.o:
138 @exit 1
139', '-j2', '');
140
141
142# Make sure that all jobserver FDs are closed if we need to re-exec the
143# master copy.
144#
145# First, find the "default" file descriptors we normally use
146# Then make sure they're still used.
147#
148# Right now we don't have a way to run a makefile and capture the output
149# without checking it, so we can't really write this test.
150
151# run_make_test('
152# submake: ; @$(MAKE) --no-print-directory -f #MAKEFILE# fdprint 5>output
153
154# dependfile: ; @echo FOO=bar > $@
155
156# INCL := true
157
158# FOO=foo
159# ifeq ($(INCL),true)
160# -include dependfile
161# endif
162
163# fdprint: ; @echo $(filter --jobserver%,$(MAKEFLAGS))
164
165# recurse: ; @$(MAKE) --no-print-directory -f #MAKEFILE# submake INCL=true',
166# '-j2 INCL=false fdprint',
167# 'bar');
168
169# unlink('dependfile', 'output');
170
171
172# # Do it again, this time where the include is done by the non-master make.
173# run_make_test(undef, '-j2 recurse INCL=false', 'bar');
174
175# unlink('dependfile', 'output');
176
1771;
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