| # -*-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; |