]> git.saurik.com Git - bison.git/commitdiff
Import latest m4/m4.m4.
authorEric Blake <ebb9@byu.net>
Thu, 20 Aug 2009 14:24:46 +0000 (08:24 -0600)
committerEric Blake <ebb9@byu.net>
Thu, 20 Aug 2009 14:44:40 +0000 (08:44 -0600)
* m4/m4.m4: Copy from autoconf 2.64.
* configure.ac (M4_GNU_OPTION): New define.
* src/output.c (output_skeleton): Use it to resolve FIXME.
* NEWS: Mention this.

Signed-off-by: Eric Blake <ebb9@byu.net>
ChangeLog
NEWS
configure.ac
m4/m4.m4
src/output.c

index 3874c978fb65b0eef3294bbf6519373cf6ffad00..9b5fa94e80080803631e2f77a2b23b0909d6344a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-08-20  Eric Blake  <ebb9@byu.net>
+
+       Import latest m4/m4.m4.
+       * m4/m4.m4: Copy from autoconf 2.64.
+       * configure.ac (M4_GNU_OPTION): New define.
+       * src/output.c (output_skeleton): Use it to resolve FIXME.
+       * NEWS: Mention this.
+
 2009-08-19  Joel E. Denny  <jdenny@clemson.edu>
 
        Fix complaints about escape sequences.
diff --git a/NEWS b/NEWS
index 382c89c49d5844ae45c39363e007668263e9cdef..4706c1c3da69d7615f710ee0482bae23bc075fc3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ Bison News
 
 * Changes in version 2.4.2 (????-??-??):
 
+** Detection of GNU M4 1.4.6 or newer during configure is improved.
+
 ** %code is now a permanent feature.
 
   A traditional Yacc prologue directive is written in the form:
index a3e42923acbbf33e6a416daaf6986744270da57a..28bb5c387bad3be7c2caf1fee095392cee8c853b 100644 (file)
@@ -94,6 +94,8 @@ AC_PROG_YACC
 AC_PROG_RANLIB
 AC_PROG_GNU_M4
 AC_DEFINE_UNQUOTED([M4], ["$M4"], [Define to the GNU M4 executable name.])
+AC_DEFINE_UNQUOTED([M4_GNU_OPTION], ["$M4_GNU"], [Define to "-g" if GNU M4
+supports -g, otherwise to "".])
 AM_MISSING_PROG([HELP2MAN], [help2man])
 AC_PATH_PROG([XSLTPROC], [xsltproc])
 AC_SUBST([XSLTPROC])
index f1ef4fe9f2a1dbafbd146cbc55096bbe25fb7d9f..096fb287a34421e162c1076d513daf51b49e717c 100644 (file)
--- a/m4/m4.m4
+++ b/m4/m4.m4
@@ -1,34 +1,60 @@
-# m4.m4 serial 5
-dnl Copyright (C) 2000, 2006, 2007, 2008-2009 Free Software Foundation,
-dnl Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
+# m4.m4 serial 9
+
+# Copyright (C) 2000, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.  This file is offered as-is,
+# without warranty of any kind.
 
 # AC_PROG_GNU_M4
 # --------------
-# Check for GNU M4, at least 1.4.5 (all earlier versions had a bug in
-# trace support:
-# http://lists.gnu.org/archive/html/bug-gnu-utils/2006-11/msg00096.html)
+# Check for GNU M4, at least 1.4.6 (all earlier versions had bugs in
+# trace support and regexp support):
+# http://lists.gnu.org/archive/html/bug-gnu-utils/2006-11/msg00096.html
+# http://lists.gnu.org/archive/html/bug-autoconf/2009-07/msg00023.html
 # Also, check whether --error-output (through 1.4.x) or --debugfile (2.0)
 # is supported, and AC_SUBST M4_DEBUGFILE accordingly.
 AC_DEFUN([AC_PROG_GNU_M4],
-  [AC_ARG_VAR([M4], [Location of GNU M4 1.4.5 or later.  Defaults to the first
+  [AC_ARG_VAR([M4], [Location of GNU M4 1.4.6 or later.  Defaults to the first
     program of `m4', `gm4', or `gnum4' on PATH that meets Autoconf needs.])
   AC_CACHE_CHECK([for GNU M4 that supports accurate traces], [ac_cv_path_M4],
     [rm -f conftest.m4f
+ac_had_posixly_correct=${POSIXLY_CORRECT:+yes}
+AS_UNSET([POSIXLY_CORRECT])
 AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4 gnum4],
       [dnl Creative quoting here to avoid raw dnl and ifdef in configure.
-      # Root out GNU M4 1.4.4, as well as non-GNU m4 that ignore -t, -F.
-      ac_snippet=change'quote(<,>)in''dir(<if''def>,mac,bug)d'nl
+      # Root out GNU M4 1.4.5, as well as non-GNU m4 that ignore -t, -F.
+      ac_snippet=change'quote(<,>)in''dir(<if''def>,mac,bug)'
+      ac_snippet=${ac_snippet}pat'subst(a,\(b\)\|\(a\),\1)d'nl
       test -z "`$ac_path_M4 -F conftest.m4f </dev/null 2>&1`" \
       && test -z "`echo $ac_snippet | $ac_path_M4 --trace=mac 2>&1`" \
       && test -f conftest.m4f \
       && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:
       rm -f conftest.m4f],
       [AC_MSG_ERROR([no acceptable m4 could be found in \$PATH.
-GNU M4 1.4.5 or later is required; 1.4.11 is recommended])])])
+GNU M4 1.4.6 or later is required; 1.4.13 is recommended])])])
   M4=$ac_cv_path_M4
+  AC_CACHE_CHECK([whether $ac_cv_path_M4 accepts --gnu],
+    [ac_cv_prog_gnu_m4_gnu],
+    [case `$M4 --help < /dev/null 2>&1` in
+      *--gnu*) ac_cv_prog_gnu_m4_gnu=yes ;;
+      *) ac_cv_prog_gnu_m4_gnu=no ;;
+    esac])
+  if test "$ac_cv_prog_gnu_m4_gnu" = yes; then
+    M4_GNU=--gnu
+  else
+    M4_GNU=
+  fi
+  AC_SUBST([M4_GNU])
+  if test x$ac_had_posixly_correct = xyes; then
+    POSIXLY_CORRECT=:
+    if test $ac_cv_prog_gnu_m4_gnu = no; then
+      AC_MSG_WARN([The version of M4 that was found does not support -g.])
+      AC_MSG_WARN([Using it with POSIXLY_CORRECT set may cause problems.])
+    fi
+  fi
   AC_CACHE_CHECK([how m4 supports trace files], [ac_cv_prog_gnu_m4_debugfile],
     [case `$M4 --help < /dev/null 2>&1` in
       *debugfile*) ac_cv_prog_gnu_m4_debugfile=--debugfile ;;
index 9af3951bc15b9d5044f2cbe8f067f1ae6ea8fc41..3fbeb302015ef4b8abf9e5533c49f07ebd5d6411 100644 (file)
@@ -473,7 +473,7 @@ output_skeleton (void)
   FILE *in;
   FILE *out;
   int filter_fd[2];
-  char const *argv[9];
+  char const *argv[10];
   pid_t pid;
 
   /* Compute the names of the package data dir and skeleton files.  */
@@ -524,6 +524,19 @@ output_skeleton (void)
   {
     int i = 0;
     argv[i++] = m4;
+
+    /* When POSIXLY_CORRECT is set, GNU M4 1.6 and later disable GNU
+       extensions, which Bison's skeletons depend on.  With older M4,
+       it has no effect.  M4 1.4.12 added a -g/--gnu command-line
+       option to make it explicit that a program wants GNU M4
+       extensions even when POSIXLY_CORRECT is set.
+
+       See the thread starting at
+       <http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>
+       for details.  */
+    if (*M4_GNU_OPTION)
+      argv[i++] = M4_GNU_OPTION;
+
     argv[i++] = "-I";
     argv[i++] = pkgdatadir;
     if (trace_flag & trace_m4)
@@ -534,25 +547,7 @@ output_skeleton (void)
     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_m4sugar);