From dbb8f3e30bade196ab6c56b0918cbb7706cf49a6 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Thu, 23 Sep 1999 18:23:33 +0000 Subject: [PATCH] * Ouch: found a bug where re-exec from changed makefiles turned off jobserver :(. --- ChangeLog | 17 ++++++-- configure.in | 2 +- main.c | 7 +-- make.texinfo | 8 ++-- tests/ChangeLog | 7 +++ tests/scripts/features/parallelism | 68 ++++++++++++++++++++---------- 6 files changed, 73 insertions(+), 36 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9a02343d..e3b31667 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +1999-09-23 Paul D. Smith + + * Version 3.78.1 released. + + * make.texinfo: Update version/date stamp. + + * main.c (main): Argh. For some reason we were closing _all_ the + jobserver pipes before we re-exec'd due to changed makefiles. + This means that any re-exec got a "jobserver unavailable" error :-/. + I can't believe we didn't notice this before. + 1999-09-22 Paul D. Smith * Version 3.78 released. @@ -764,9 +775,9 @@ a bit saying whether we've seen this target in this pass or not. (update_goal_chain): Initially set the global considered toggle to 1, since all targets initialize their boolean to 0. At the end of - each pass, toggle the global considered variable. * filedef.h - (struct file): Per-file considered toggle bit. * file.c: New - global toggle variable considered. + each pass, toggle the global considered variable. + * filedef.h (struct file): Per-file considered toggle bit. + * file.c: New global toggle variable considered. 1999-04-05 Paul D. Smith diff --git a/configure.in b/configure.in index 27686532..6cb935f1 100644 --- a/configure.in +++ b/configure.in @@ -3,7 +3,7 @@ AC_REVISION([$Id$]) AC_PREREQ(2.13)dnl dnl Minimum Autoconf version required. AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir. -AM_INIT_AUTOMAKE(make, 3.78) +AM_INIT_AUTOMAKE(make, 3.78.1) AM_CONFIG_HEADER(config.h) dnl Regular configure stuff diff --git a/main.c b/main.c index ec92f010..40652651 100644 --- a/main.c +++ b/main.c @@ -1700,12 +1700,7 @@ int main (int argc, char ** argv) fflush (stdout); fflush (stderr); - /* Close the jobserver pipes if we opened any. */ - if (job_fds[0] >= 0) - { - close (job_fds[0]); - close (job_fds[1]); - } + /* Close the dup'd jobserver pipe if we opened one. */ if (job_rfd >= 0) close (job_rfd); diff --git a/make.texinfo b/make.texinfo index 8334526f..fb15117f 100644 --- a/make.texinfo +++ b/make.texinfo @@ -8,10 +8,10 @@ @c FSF publishers: format makebook.texi instead of using this file directly. @set RCSID $Id$ -@set EDITION 0.53 -@set VERSION 3.78 -@set UPDATED 14 April 1999 -@set UPDATE-MONTH April 1999 +@set EDITION 0.54 +@set VERSION 3.78.1 +@set UPDATED 09 September 1999 +@set UPDATE-MONTH September 1999 @comment The ISBN number might need to change on next publication. @set ISBN 1-882114-80-9 @c CHANGE THIS BEFORE PRINTING AGAIN! --psmith 16jul98 diff --git a/tests/ChangeLog b/tests/ChangeLog index b40612f6..f8f67004 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +1999-09-23 Paul D. Smith + + * scripts/features/parallelism: Add a check to ensure that the + jobserver works when we re-invoke. Also cleaned up the tests a + little, reducing the number of rules we use so the test won't need + as many "sleep" commands. + 1999-09-16 Paul D. Smith * scripts/features/reinvoke: Remove invocations of "touch" in diff --git a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism index 323eb5c6..cd753928 100644 --- a/tests/scripts/features/parallelism +++ b/tests/scripts/features/parallelism @@ -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', '3.inc'); +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;