From: Eric Blake Date: Thu, 20 Aug 2009 14:24:46 +0000 (-0600) Subject: Import latest m4/m4.m4. X-Git-Tag: v2.4.1a~28 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/b9ad39c1fb2482e1513cdf9800b31e71b7986b39?ds=inline 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. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 3874c978..9b5fa94e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-08-20 Eric Blake + + 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 Fix complaints about escape sequences. diff --git a/NEWS b/NEWS index 382c89c4..4706c1c3 100644 --- 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: diff --git a/configure.ac b/configure.ac index a3e42923..28bb5c38 100644 --- a/configure.ac +++ b/configure.ac @@ -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]) diff --git a/m4/m4.m4 b/m4/m4.m4 index f1ef4fe9..096fb287 100644 --- 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(,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(,mac,bug)' + ac_snippet=${ac_snippet}pat'subst(a,\(b\)\|\(a\),\1)d'nl test -z "`$ac_path_M4 -F conftest.m4f &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 ;; diff --git a/src/output.c b/src/output.c index 9af3951b..3fbeb302 100644 --- a/src/output.c +++ b/src/output.c @@ -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 + + 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 - - for details. */ - unsetenv ("POSIXLY_CORRECT"); init_subpipe (); pid = create_subpipe (argv, filter_fd); free (full_m4sugar);