mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-28 15:57:48 +00:00
dbb8f3e30b
jobserver :(.
100 lines
2.7 KiB
Perl
100 lines
2.7 KiB
Perl
# -*-perl-*-
|
|
|
|
$description = "Test parallelism (-j) option.";
|
|
|
|
|
|
$details = "This test creates a makefile with two double-colon default
|
|
rules. The first rule has a series of sleep and echo commands
|
|
intended to run in series. The second and third have just an
|
|
echo statement. When make is called in this test, it is given
|
|
the -j option with a value of 4. This tells make that it may
|
|
start up to four jobs simultaneously. In this case, since the
|
|
first command is a sleep command, the output of the second
|
|
and third commands will appear before the first if indeed
|
|
make is running all of these commands in parallel.";
|
|
|
|
if (!$parallel_jobs) {
|
|
return -1;
|
|
}
|
|
|
|
if ($vos) {
|
|
$delete_command = "delete_file -no_ask";
|
|
$sleep_command = "sleep -seconds";
|
|
}
|
|
else {
|
|
$delete_command = "rm -f";
|
|
$sleep_command = "sleep";
|
|
}
|
|
|
|
open(MAKEFILE,"> $makefile");
|
|
|
|
print MAKEFILE <<"EOF";
|
|
all : def_1 def_2 def_3
|
|
def_1 : ; \@echo ONE; $sleep_command 3 ; echo TWO
|
|
def_2 : ; \@$sleep_command 2 ; echo THREE
|
|
def_3 : ; \@$sleep_command 1 ; echo FOUR
|
|
EOF
|
|
|
|
close(MAKEFILE);
|
|
|
|
&run_make_with_options($makefile, "-j 4", &get_logfile);
|
|
$answer = "ONE\nFOUR\nTHREE\nTWO\n";
|
|
&compare_output($answer, &get_logfile(1));
|
|
|
|
|
|
# Test parallelism with included files. Here we sleep/echo while
|
|
# building the included files, to test that they are being built in
|
|
# parallel.
|
|
|
|
$makefile2 = &get_tmpfile;
|
|
|
|
open(MAKEFILE,"> $makefile2");
|
|
|
|
print MAKEFILE <<"EOF";
|
|
all: 1 2; \@echo success
|
|
|
|
-include 1.inc 2.inc
|
|
|
|
1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo "1: ; \@echo ONE; $sleep_command 2; echo TWO" > \$\@
|
|
2.inc: ; \@$sleep_command 1; echo THREE.inc; echo "2: ; \@$sleep_command 1; echo THREE" > \$\@
|
|
EOF
|
|
|
|
close(MAKEFILE);
|
|
|
|
&run_make_with_options("$makefile2", "-j 4", &get_logfile);
|
|
$answer = "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n";
|
|
&compare_output($answer, &get_logfile(1));
|
|
|
|
unlink('1.inc', '2.inc');
|
|
|
|
|
|
# Test parallelism with included files--this time recurse first and make
|
|
# sure the jobserver works.
|
|
|
|
$makefile3 = &get_tmpfile;
|
|
|
|
open(MAKEFILE,"> $makefile3");
|
|
|
|
print MAKEFILE <<"EOF";
|
|
recurse: ; \@\$(MAKE) --no-print-directory -f $makefile3 INC=yes all
|
|
|
|
all: 1 2; \@echo success
|
|
|
|
INC = no
|
|
ifeq (\$(INC),yes)
|
|
-include 1.inc 2.inc
|
|
endif
|
|
|
|
1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo "1: ; \@echo ONE; $sleep_command 2; echo TWO" > \$\@
|
|
2.inc: ; \@$sleep_command 1; echo THREE.inc; echo "2: ; \@$sleep_command 1; echo THREE" > \$\@
|
|
EOF
|
|
|
|
close(MAKEFILE);
|
|
|
|
&run_make_with_options("$makefile3", "-j 4", &get_logfile);
|
|
$answer = "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n";
|
|
&compare_output($answer, &get_logfile(1));
|
|
|
|
unlink('1.inc', '2.inc');
|
|
|
|
1;
|