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 <ebb9@byu.net>
This commit is contained in:
Eric Blake
2009-08-20 08:24:46 -06:00
parent b1a4261e6d
commit b9ad39c1fb
5 changed files with 65 additions and 32 deletions

View File

@@ -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.

2
NEWS
View File

@@ -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:

View 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])

View File

@@ -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 ;;

View 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);