Improve forward-compatibility with GNU M4.
authorJoel E. Denny <jdenny@ces.clemson.edu>
Wed, 16 Jul 2008 01:00:36 +0000 (21:00 -0400)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Wed, 16 Jul 2008 01:00:36 +0000 (21:00 -0400)
Reported by Eric Blake at
<http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>.
* bootstrap.conf (gnulib_modules): Add unsetenv.
* lib/.gitignore, lib/.cvsignore (/unsetenv.c): Add.
* m4/.gitignore, m4/.cvsignore (/environ.m4): Add.
(/setenv.m4): Add.
* src/output.c (output_skeleton): For the m4 invocation, pass -dV as
the first argument because it may become position-dependent, and unset
POSIXLY_CORRECT so Bison's skeletons have access to GNU M4 extensions.
Add comments explaining these issues in more detail.

ChangeLog
bootstrap.conf
doc/bison.1
lib/.cvsignore
lib/.gitignore
m4/.cvsignore
m4/.gitignore
src/output.c

index d450038..6a019e3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2008-07-15  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Improve forward-compatibility with GNU M4.  Reported by Eric Blake at
+       <http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>.
+       * bootstrap.conf (gnulib_modules): Add unsetenv.
+       * lib/.gitignore, lib/.cvsignore (/unsetenv.c): Add.
+       * m4/.gitignore, m4/.cvsignore (/environ.m4): Add.
+       (/setenv.m4): Add.
+       * src/output.c (output_skeleton): For the m4 invocation, pass -dV as
+       the first argument because it may become position-dependent, and unset
+       POSIXLY_CORRECT so Bison's skeletons have access to GNU M4 extensions.
+       Add comments explaining these issues in more detail.
+
 2008-07-14  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        Add .gitignore everywhere based on .cvsignore.
index 669777c..f443ccc 100644 (file)
@@ -21,8 +21,8 @@ gnulib_modules='
        dirname error extensions fopen-safer git-version-gen
        getopt gettext hash inttypes javacomp-script javaexec-script malloc
        mbswidth obstack quote quotearg stdbool stpcpy strerror strtoul
-       strverscmp unistd unistd-safer unlocked-io verify xalloc xalloc-die
-       xstrndup
+       strverscmp unistd unistd-safer unlocked-io unsetenv verify xalloc
+       xalloc-die xstrndup
 '
 
 # Any gnulib files needed that are not in modules.
index 7fc0a44..2d13b4c 100644 (file)
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.36.
-.TH BISON "1" "May 2008" "bison 2.3b+" "User Commands"
+.TH BISON "1" "July 2008" "bison 2.3b+" "User Commands"
 .SH NAME
 bison \- GNU Project parser generator (yacc replacement)
 .SH SYNOPSIS
@@ -174,6 +174,8 @@ disable the report
 Written by Robert Corbett and Richard Stallman.
 .SH "REPORTING BUGS"
 Report bugs to <bug\-bison@gnu.org>.
+.PP
+Id
 .SH COPYRIGHT
 Copyright \(co 2008 Free Software Foundation, Inc.
 .br
index fa0fe44..c7a817b 100644 (file)
@@ -87,6 +87,7 @@ unitypes.h
 uniwidth
 uniwidth.h
 unlocked-io.h
+unsetenv.c
 verify.h
 wchar.h
 wchar.in.h
index 05e56a6..9d2d22d 100644 (file)
@@ -89,6 +89,7 @@
 /uniwidth
 /uniwidth.h
 /unlocked-io.h
+/unsetenv.c
 /verify.h
 /wchar.h
 /wchar.in.h
index 02485e8..15c7a54 100644 (file)
@@ -4,6 +4,7 @@ config-h.m4
 dirname.m4
 dos.m4
 double-slash-root.m4
+environ.m4
 error.m4
 exitfail.m4
 extensions.m4
@@ -37,6 +38,7 @@ po.m4
 progtest.m4
 quote.m4
 quotearg.m4
+setenv.m4
 stdbool.m4
 stdint.m4
 stdint_h.m4
index d09e90c..a01aaf7 100644 (file)
@@ -4,6 +4,7 @@
 /dirname.m4
 /dos.m4
 /double-slash-root.m4
+/environ.m4
 /error.m4
 /exitfail.m4
 /extensions.m4
@@ -37,6 +38,7 @@
 /progtest.m4
 /quote.m4
 /quotearg.m4
+/setenv.m4
 /stdbool.m4
 /stdint.m4
 /stdint_h.m4
index 043298b..80fef44 100644 (file)
@@ -476,10 +476,7 @@ output_skeleton (void)
   char const *argv[7];
   pid_t pid;
 
-  /* Compute the names of the package data dir and skeleton file.
-     Test whether m4sugar.m4 is readable, to check for proper
-     installation.  A faulty installation can cause deadlock, so a
-     cheap sanity check is worthwhile.  */
+  /* Compute the names of the package data dir and skeleton files.  */
   char const m4sugar[] = "m4sugar/m4sugar.m4";
   char const m4bison[] = "bison.m4";
   char *full_m4sugar;
@@ -505,26 +502,59 @@ output_skeleton (void)
     strcpy (full_skeleton, skeleton);
   else
     strcpy (full_skeleton + pkgdatadirlen + 1, skeleton);
+
+  /* Test whether m4sugar.m4 is readable, to check for proper
+     installation.  A faulty installation can cause deadlock, so a
+     cheap sanity check is worthwhile.  */
   xfclose (xfopen (full_m4sugar, "r"));
 
   /* Create an m4 subprocess connected to us via two pipes.  */
 
   if (trace_flag & trace_tools)
     fprintf (stderr, "running: %s %s - %s %s\n",
-            m4, full_m4sugar, full_m4bison, full_skeleton);
+             m4, full_m4sugar, full_m4bison, full_skeleton);
 
-  argv[0] = m4;
-  argv[1] = full_m4sugar;
-  argv[2] = "-";
-  argv[3] = full_m4bison;
-  argv[4] = full_skeleton;
-  argv[5] = trace_flag & trace_m4 ? "-dV" : NULL;
-  argv[6] = NULL;
+  /* Some future version of GNU M4 (most likely 1.6) may treat the -dV in a
+     position-dependent manner.  Keep it as the first argument so that all
+     files are traced.
 
+     See the thread starting at
+     <http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>
+     for details.  */
+  {
+    int i = 0;
+    argv[i++] = m4;
+    if (trace_flag & trace_m4)
+      argv[i++] = "-dV";
+    argv[i++] = full_m4sugar;
+    argv[i++] = "-";
+    argv[i++] = full_m4bison;
+    argv[i++] = full_skeleton;
+    argv[i++] = NULL;
+  }
+  /* When POSIXLY_CORRECT is set, some future versions of GNU M4 (most likely
+     2.0) may drop some of the GNU extensions that Bison's skeletons depend
+     upon.  So that the next release of Bison is forward compatible with those
+     future versions of GNU M4, we unset POSIXLY_CORRECT here.
+
+     FIXME: A user might set POSIXLY_CORRECT to affect processes run from
+     macros like m4_syscmd in a custom skeleton.  For now, Bison makes no
+     promises about the behavior of custom skeletons, so this scenario is not a
+     concern.  However, we eventually want to eliminate this shortcoming.  The
+     next release of GNU M4 (1.4.12 or 1.6) will accept the -g command-line
+     option as a no-op, and later releases will accept it to indicate that
+     POSIXLY_CORRECT should be ignored.  Once the GNU M4 versions that accept
+     -g are pervasive, Bison should use -g instead of unsetting
+     POSIXLY_CORRECT.
+
+     See the thread starting at
+     <http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>
+     for details.  */
+  unsetenv ("POSIXLY_CORRECT");
   init_subpipe ();
   pid = create_subpipe (argv, filter_fd);
-  free (full_m4bison);
   free (full_m4sugar);
+  free (full_m4bison);
   free (full_skeleton);
 
   out = fdopen (filter_fd[0], "w");