* Ouch: found a bug where re-exec from changed makefiles turned off
[platform/upstream/make.git] / tests / scripts / features / parallelism
index 323eb5c..cd75392 100644 (file)
@@ -3,7 +3,7 @@
 $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
@@ -29,48 +29,72 @@ else {
 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;