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