* Ouch: found a bug where re-exec from changed makefiles turned off 3.78.1
authorPaul Smith <psmith@gnu.org>
Thu, 23 Sep 1999 18:23:33 +0000 (18:23 +0000)
committerPaul Smith <psmith@gnu.org>
Thu, 23 Sep 1999 18:23:33 +0000 (18:23 +0000)
  jobserver :(.

ChangeLog
configure.in
main.c
make.texinfo
tests/ChangeLog
tests/scripts/features/parallelism

index 9a02343..e3b3166 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+1999-09-23  Paul D. Smith  <psmith@gnu.org>
+
+       * 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  <psmith@gnu.org>
 
        * Version 3.78 released.
        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  <psmith@gnu.org>
 
index 2768653..6cb935f 100644 (file)
@@ -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 ec92f01..4065265 100644 (file)
--- 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);
 
index 8334526..fb15117 100644 (file)
@@ -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
 
index b40612f..f8f6700 100644 (file)
@@ -1,3 +1,10 @@
+1999-09-23  Paul D. Smith  <psmith@gnu.org>
+
+       * 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  <psmith@gnu.org>
 
        * scripts/features/reinvoke: Remove invocations of "touch" in
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;