1# serial 10 2 3# Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc. 4# This file is free software; the Free Software Foundation 5# gives unlimited permission to copy and/or distribute it, 6# with or without modifications, as long as this notice is preserved. 7 8# There are two types of parser skeletons: 9# 10# * Those that can be used with any Yacc implementation, including bison. 11# For these, in the configure.ac, up to Autoconf 2.69, you could use 12# AC_PROG_YACC 13# In newer Autoconf versions, however, this macro is broken. See 14# https://lists.gnu.org/archive/html/autoconf-patches/2013-03/msg00000.html 15# https://lists.gnu.org/archive/html/bug-autoconf/2018-12/msg00001.html 16# In the Makefile.am you could use 17# $(SHELL) $(YLWRAP) $(srcdir)/foo.y \ 18# y.tab.c foo.c \ 19# y.tab.h foo.h \ 20# y.output foo.output \ 21# -- $(YACC) $(YFLAGS) $(AM_YFLAGS) 22# or similar. 23# 24# * Those that make use of Bison extensions. For example, 25# - %define api.pure requires bison 2.7 or newer, 26# - %precedence requires bison 3.0 or newer. 27# For these, in the configure.ac you will need an invocation of 28# gl_PROG_BISON([VARIABLE], [MIN_BISON_VERSION]) 29# Example: 30# gl_PROG_BISON([PARSE_DATETIME_BISON], [2.4]) 31# With this preparation, in the Makefile.am there are two ways to formulate 32# the invocation. Both are direct, without use of 'ylwrap'. 33# (a) You can invoke 34# $(VARIABLE) -d $(SOME_BISON_OPTIONS) --output foo.c $(srcdir)/foo.y 35# or similar. 36# (b) If you want the invocation to honor an YFLAGS=... parameter passed to 37# 'configure' or an YFLAGS environment variable present at 'configure' 38# time, add an invocation of gl_BISON to the configure.ac, and write 39# $(VARIABLE) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/foo.y 40# or similar. 41 42# This macro defines the autoconf variable VARIABLE to 'bison' if the specified 43# minimum version of bison is found in $PATH, or to ':' otherwise. 44AC_DEFUN([gl_PROG_BISON], 45[ 46 AC_CHECK_PROGS([$1], [bison]) 47 if test -z "$[$1]"; then 48 ac_verc_fail=yes 49 else 50 cat >conftest.y <<_ACEOF 51%require "$2" 52%% 53exp: 54_ACEOF 55 AC_MSG_CHECKING([for bison $2 or newer]) 56 ac_prog_version=`$$1 --version 2>&1 | sed -n 's/^.*GNU Bison.* \([[0-9]]*\.[[0-9.]]*\).*$/\1/p'` 57 : ${ac_prog_version:='v. ?.??'} 58 if $$1 conftest.y -o conftest.c 2>/dev/null; then 59 ac_prog_version="$ac_prog_version, ok" 60 ac_verc_fail=no 61 else 62 ac_prog_version="$ac_prog_version, bad" 63 ac_verc_fail=yes 64 fi 65 rm -f conftest.y conftest.c 66 AC_MSG_RESULT([$ac_prog_version]) 67 fi 68 if test $ac_verc_fail = yes; then 69 [$1]=: 70 fi 71 AC_SUBST([$1]) 72]) 73 74# This macro sets the autoconf variables YACC (for old-style yacc Makefile 75# rules) and YFLAGS (to allow options to be passed as 'configure' time). 76AC_DEFUN([gl_BISON], 77[ 78 : ${YACC='bison -o y.tab.c'} 79dnl 80dnl Declaring YACC & YFLAGS precious will not be necessary after GNULIB 81dnl requires an Autoconf greater than 2.59c, but it will probably still be 82dnl useful to override the description of YACC in the --help output, re 83dnl parse-datetime.y assuming 'bison -o y.tab.c'. 84 AC_ARG_VAR([YACC], 85[The "Yet Another C Compiler" implementation to use. Defaults to 86'bison -o y.tab.c'. Values other than 'bison -o y.tab.c' will most likely 87break on most systems.])dnl 88 AC_ARG_VAR([YFLAGS], 89[YFLAGS contains the list arguments that will be passed by default to Bison. 90This script will default YFLAGS to the empty string to avoid a default value of 91'-d' given by some make applications.])dnl 92]) 93