| # -*-perl-*- |
| |
| $description = "Test parallelism (-j) option."; |
| |
| |
| $details = "This test creates a makefile with three 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_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 |
| |
| EOF |
| |
| close(MAKEFILE); |
| |
| &run_make_with_options($makefile, "-j 4", &get_logfile); |
| $answer = "FIVE\nSIX\nONE\nTWO\nTHREE\nFOUR\n"; |
| &compare_output($answer, &get_logfile(1)); |
| |
| |
| # Test parallelism with included files |
| |
| $makefile2 = &get_tmpfile; |
| |
| open(MAKEFILE,"> $makefile2"); |
| |
| print MAKEFILE <<'EOF'; |
| all: 1 2 3; @echo success |
| |
| -include 1.inc 2.inc 3.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" > $@ |
| 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"; |
| &compare_output($answer, &get_logfile(1)); |
| |
| unlink('1.inc', '2.inc', '3.inc'); |
| |
| 1; |