$description = "Test parallelism (-j) option.";
-$details = "This test creates a makefile with three double-colon default
+$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
open(MAKEFILE,"> $makefile");
print MAKEFILE <<"EOF";
-all : def_1 def_5 def_6
-def_1 :
-\t\@$sleep_command 3 ; echo ONE
-\t\@echo TWO
-\t\@$sleep_command 1 ; echo THREE
-\t\@echo FOUR
-def_5 :
-\t\@echo FIVE
-def_6 :
-\t\@$sleep_command 1 ; echo SIX
-
+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 = "FIVE\nSIX\nONE\nTWO\nTHREE\nFOUR\n";
+$answer = "ONE\nFOUR\nTHREE\nTWO\n";
&compare_output($answer, &get_logfile(1));
-# Test parallelism with included files
+# 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 3; @echo success
+print MAKEFILE <<"EOF";
+all: 1 2; \@echo success
--include 1.inc 2.inc 3.inc
+-include 1.inc 2.inc
-1.inc: ; @sleep 1; echo 1; echo "1: ; @sleep 2; echo $@ has been included" > $@
-2.inc: ; @sleep 2; echo 2; echo "2: ; @echo $@ has been included" > $@
-3.inc: ; @echo 3; echo "3: ; @sleep 1; echo $@ has been included" > $@
+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 = "3\n1\n2\n2.inc has been included\n3.inc has been included\n1.inc has been included\nsuccess\n";
+$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', '3.inc');
+unlink('1.inc', '2.inc');
1;