Message ID | 20200416065708.GE2424@tucnak |
---|---|
State | New |
Headers | show |
Series | intl: Allow building both with old bison and bison >= 3 [PR92008] | expand |
On Thu, 16 Apr 2020, Jakub Jelinek wrote: > Hi! > > bison 3 apparently made a backwards incompatible change, dropped > YYLEX_PARAM/YYPARSE_PARAM support and instead needs %param or %lex-param > and %parse-param. Furthermore, there is no easy way to conditionalize > on bison version in the *.y files. > While e.g. glibc bumped bison requirement and just has the bison 3 > compatible version, Richi said there are still systems with older bison > where we want to build gcc. > > So, this patch instead determines during configure bison version, and > depending on that when building plural.c (if building it at all) tweaks > what is passed over to bison if needed. > > Tested with both bison 3 and bison 1.35, in each case with reconfiguring > intl and building with make all-yes (as in my setup intl isn't normally > used), plus normally bootstrapped/regtested on x86_64-linux and i686-linux, > ok for trunk? OK. Thanks, Richard. > 2020-04-16 Jakub Jelinek <jakub@redhat.com> > > PR bootstrap/92008 > * configure.ac: Add check for bison >= 3, AC_DEFINE HAVE_BISON3 > and AC_SUBST BISON3_YES and BISON3_NO. > * Makefile.in (.y.c): Prefix $(YACC) invocation with @BISON3_NO@, > add @BISON3_YES@ prefixed rule to adjust the *.y source using sed > and adjust output afterwards. > * plural-exp.h (PLURAL_PARSE): If HAVE_BISON3 is defined, use > struct parse_args * type for arg instead of void *. > * plural.y: Add magic /* BISON3 ... */ comments with bison >= 3 > directives. > (YYLEX_PARAM, YYPARSE_PARAM): Don't define if HAVE_BISON3 is defined. > (yylex, yyerror): Adjust prototypes and definitions if HAVE_BISON3 > is defined. > * plural.c: Regenerated. > * config.h.in: Regenerated. > * configure: Regenerated. > > --- intl/configure.ac.jj 2020-01-12 11:54:38.544381258 +0100 > +++ intl/configure.ac 2020-04-15 13:03:05.914359936 +0200 > @@ -47,5 +47,28 @@ case $USE_INCLUDED_LIBINTL in > ;; > esac > > +BISON3_YES='#' > +BISON3_NO= > +if test "$INTLBISON" != :; then > + ac_bison3=no > + AC_MSG_CHECKING([bison 3 or later]) > +changequote(<<,>>)dnl > + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` > + case $ac_prog_version in > + [3-9].*) > +changequote([,])dnl > + ac_prog_version="$ac_prog_version, bison3"; ac_bison3=yes;; > + *) ac_prog_version="$ac_prog_version, old";; > + esac > + AC_MSG_RESULT([$ac_prog_version]) > + if test $ac_bison3 = yes; then > + AC_DEFINE(HAVE_BISON3, 1, [Define if bison 3 or later is used.]) > + BISON3_YES= > + BISON3_NO='#' > + fi > +fi > +AC_SUBST(BISON3_YES) > +AC_SUBST(BISON3_NO) > + > AC_CONFIG_FILES(Makefile config.intl) > AC_OUTPUT > --- intl/Makefile.in.jj 2020-01-12 11:54:38.542381288 +0100 > +++ intl/Makefile.in 2020-04-15 13:16:49.420022007 +0200 > @@ -133,7 +133,11 @@ libintl.h: $(srcdir)/libgnuintl.h > $(COMPILE) $< > > .y.c: > - $(YACC) $(YFLAGS) --output $@ $< > +@BISON3_YES@ sed 's,%pure_parser,,;s,^/\* BISON3 \(.*\) \*/$$,\1,' $< > $@.y > +@BISON3_YES@ $(YACC) $(YFLAGS) --output $@.c $@.y > +@BISON3_YES@ sed 's/\.c\.y"/.y"/' $@.c > $@ > +@BISON3_YES@ rm -f $@.c $@.y $@.h > +@BISON3_NO@ $(YACC) $(YFLAGS) --output $@ $< > rm -f $*.h > > INCLUDES = -I. -I$(srcdir) > --- intl/plural-exp.h.jj 2020-01-11 16:31:56.320274233 +0100 > +++ intl/plural-exp.h 2020-04-15 13:22:26.162972185 +0200 > @@ -1,5 +1,5 @@ > /* Expression parsing and evaluation for plural form selection. > - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. > + Copyright (C) 2000-2020 Free Software Foundation, Inc. > Written by Ulrich Drepper <drepper@cygnus.com>, 2000. > > This program is free software; you can redistribute it and/or modify it > @@ -111,7 +111,11 @@ struct parse_args > > extern void FREE_EXPRESSION PARAMS ((struct expression *exp)) > internal_function; > +#ifdef HAVE_BISON3 > +extern int PLURAL_PARSE PARAMS ((struct parse_args *arg)); > +#else > extern int PLURAL_PARSE PARAMS ((void *arg)); > +#endif > extern struct expression GERMANIC_PLURAL attribute_hidden; > extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry, > struct expression **pluralp, > --- intl/plural.y.jj 2020-04-15 10:58:43.890398648 +0200 > +++ intl/plural.y 2020-04-15 13:11:13.819054699 +0200 > @@ -1,6 +1,6 @@ > %{ > /* Expression parsing for plural form selection. > - Copyright (C) 2000, 2001 Free Software Foundation, Inc. > + Copyright (C) 2000-2020 Free Software Foundation, Inc. > Written by Ulrich Drepper <drepper@cygnus.com>, 2000. > > This program is free software; you can redistribute it and/or modify it > @@ -40,10 +40,15 @@ > # define __gettextparse PLURAL_PARSE > #endif > > +#ifndef HAVE_BISON3 > #define YYLEX_PARAM &((struct parse_args *) arg)->cp > #define YYPARSE_PARAM arg > +#endif > %} > %pure_parser > +/* BISON3 %parse-param {struct parse_args *arg} */ > +/* BISON3 %lex-param {struct parse_args *arg} */ > +/* BISON3 %define api.pure full */ > %expect 7 > > %union { > @@ -66,8 +71,13 @@ static inline struct expression *new_exp > struct expression *bexp, > struct expression *tbranch, > struct expression *fbranch)); > +#ifdef HAVE_BISON3 > +static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg)); > +static void yyerror PARAMS ((struct parse_args *arg, const char *str)); > +#else > static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); > static void yyerror PARAMS ((const char *str)); > +#endif > > /* Allocation of expressions. */ > > @@ -256,11 +266,20 @@ FREE_EXPRESSION (exp) > } > > > +#ifdef HAVE_BISON3 > +static int > +yylex (lval, arg) > + YYSTYPE *lval; > + struct parse_args *arg; > +{ > + const char **pexp = &arg->cp; > +#else > static int > yylex (lval, pexp) > YYSTYPE *lval; > const char **pexp; > { > +#endif > const char *exp = *pexp; > int result; > > @@ -401,8 +420,14 @@ yylex (lval, pexp) > } > > > +#ifdef HAVE_BISON3 > +static void > +yyerror (arg, str) > + struct parse_args *arg; > +#else > static void > yyerror (str) > +#endif > const char *str; > { > /* Do nothing. We don't print error messages here. */ > --- intl/plural.c.jj 2020-01-11 16:31:56.320274233 +0100 > +++ intl/plural.c 2020-04-15 13:20:14.240950496 +0200 > @@ -19,7 +19,7 @@ > #line 1 "plural.y" > > /* Expression parsing for plural form selection. > - Copyright (C) 2000, 2001 Free Software Foundation, Inc. > + Copyright (C) 2000-2020 Free Software Foundation, Inc. > Written by Ulrich Drepper <drepper@cygnus.com>, 2000. > > This program is free software; you can redistribute it and/or modify it > @@ -59,10 +59,12 @@ > # define __gettextparse PLURAL_PARSE > #endif > > +#ifndef HAVE_BISON3 > #define YYLEX_PARAM &((struct parse_args *) arg)->cp > #define YYPARSE_PARAM arg > +#endif > > -#line 49 "plural.y" > +#line 54 "plural.y" > #ifndef YYSTYPE > typedef union { > unsigned long int num; > @@ -72,7 +74,7 @@ typedef union { > # define YYSTYPE yystype > # define YYSTYPE_IS_TRIVIAL 1 > #endif > -#line 55 "plural.y" > +#line 60 "plural.y" > > /* Prototypes for local functions. */ > static struct expression *new_exp PARAMS ((int nargs, enum operator op, > @@ -87,8 +89,13 @@ static inline struct expression *new_exp > struct expression *bexp, > struct expression *tbranch, > struct expression *fbranch)); > +#ifdef HAVE_BISON3 > +static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg)); > +static void yyerror PARAMS ((struct parse_args *arg, const char *str)); > +#else > static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); > static void yyerror PARAMS ((const char *str)); > +#endif > > /* Allocation of expressions. */ > > @@ -236,8 +243,8 @@ static const short yyrhs[] = > /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ > static const short yyrline[] = > { > - 0, 174, 182, 186, 190, 194, 198, 202, 206, 210, > - 214, 218, 223 > + 0, 184, 192, 196, 200, 204, 208, 212, 216, 220, > + 224, 228, 233 > }; > #endif > > @@ -339,8 +346,8 @@ static const short yycheck[] = > > You should have received a copy of the GNU General Public License > along with this program; if not, write to the Free Software > - Foundation, Inc., 51 Franklin Street - Fifth Floor, > - Boston, MA 02110-1301, USA. */ > + Foundation, Inc., 59 Temple Place - Suite 330, > + Boston, MA 02111-1307, USA. */ > > /* As a special exception, when this file is copied by Bison into a > Bison output file, you may use that output file without restriction. > @@ -1027,7 +1034,7 @@ yyreduce: > switch (yyn) { > > case 1: > -#line 175 "plural.y" > +#line 185 "plural.y" > { > if (yyvsp[0].exp == NULL) > YYABORT; > @@ -1035,68 +1042,68 @@ case 1: > } > break; > case 2: > -#line 183 "plural.y" > +#line 193 "plural.y" > { > yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); > } > break; > case 3: > -#line 187 "plural.y" > +#line 197 "plural.y" > { > yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); > } > break; > case 4: > -#line 191 "plural.y" > +#line 201 "plural.y" > { > yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); > } > break; > case 5: > -#line 195 "plural.y" > +#line 205 "plural.y" > { > yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); > } > break; > case 6: > -#line 199 "plural.y" > +#line 209 "plural.y" > { > yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); > } > break; > case 7: > -#line 203 "plural.y" > +#line 213 "plural.y" > { > yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); > } > break; > case 8: > -#line 207 "plural.y" > +#line 217 "plural.y" > { > yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); > } > break; > case 9: > -#line 211 "plural.y" > +#line 221 "plural.y" > { > yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); > } > break; > case 10: > -#line 215 "plural.y" > +#line 225 "plural.y" > { > yyval.exp = new_exp_0 (var); > } > break; > case 11: > -#line 219 "plural.y" > +#line 229 "plural.y" > { > if ((yyval.exp = new_exp_0 (num)) != NULL) > yyval.exp->val.num = yyvsp[0].num; > } > break; > case 12: > -#line 224 "plural.y" > +#line 234 "plural.y" > { > yyval.exp = yyvsp[-1].exp; > } > @@ -1334,7 +1341,7 @@ yyreturn: > #endif > return yyresult; > } > -#line 229 "plural.y" > +#line 239 "plural.y" > > > void > @@ -1365,11 +1372,20 @@ FREE_EXPRESSION (exp) > } > > > +#ifdef HAVE_BISON3 > +static int > +yylex (lval, arg) > + YYSTYPE *lval; > + struct parse_args *arg; > +{ > + const char **pexp = &arg->cp; > +#else > static int > yylex (lval, pexp) > YYSTYPE *lval; > const char **pexp; > { > +#endif > const char *exp = *pexp; > int result; > > @@ -1510,8 +1526,14 @@ yylex (lval, pexp) > } > > > +#ifdef HAVE_BISON3 > +static void > +yyerror (arg, str) > + struct parse_args *arg; > +#else > static void > yyerror (str) > +#endif > const char *str; > { > /* Do nothing. We don't print error messages here. */ > --- intl/config.h.in.jj 2020-01-12 11:54:38.542381288 +0100 > +++ intl/config.h.in 2020-04-15 12:53:40.670817614 +0200 > @@ -28,6 +28,9 @@ > /* Define to 1 if you have the <argz.h> header file. */ > #undef HAVE_ARGZ_H > > +/* Define if bison 3 or later is used. */ > +#undef HAVE_BISON3 > + > /* Define if the GNU dcgettext() function is already present or preinstalled. > */ > #undef HAVE_DCGETTEXT > --- intl/configure.jj 2020-02-01 10:01:36.638700295 +0100 > +++ intl/configure 2020-04-15 13:03:09.509306144 +0200 > @@ -622,6 +622,8 @@ ac_unique_file="gettext.c" > ac_header_list= > ac_subst_vars='LTLIBOBJS > LIBOBJS > +BISON3_NO > +BISON3_YES > INCINTL > LIBINTL_DEP > MAINT > @@ -6791,6 +6793,31 @@ case $USE_INCLUDED_LIBINTL in > ;; > esac > > +BISON3_YES='#' > +BISON3_NO= > +if test "$INTLBISON" != :; then > + ac_bison3=no > + { $as_echo "$as_me:${as_lineno-$LINENO}: checking bison 3 or later" >&5 > +$as_echo_n "checking bison 3 or later... " >&6; } > + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` > + case $ac_prog_version in > + [3-9].*) > + ac_prog_version="$ac_prog_version, bison3"; ac_bison3=yes;; > + *) ac_prog_version="$ac_prog_version, old";; > + esac > + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 > +$as_echo "$ac_prog_version" >&6; } > + if test $ac_bison3 = yes; then > + > +$as_echo "#define HAVE_BISON3 1" >>confdefs.h > + > + BISON3_YES= > + BISON3_NO='#' > + fi > +fi > + > + > + > ac_config_files="$ac_config_files Makefile config.intl" > > cat >confcache <<\_ACEOF > > Jakub > >
--- intl/configure.ac.jj 2020-01-12 11:54:38.544381258 +0100 +++ intl/configure.ac 2020-04-15 13:03:05.914359936 +0200 @@ -47,5 +47,28 @@ case $USE_INCLUDED_LIBINTL in ;; esac +BISON3_YES='#' +BISON3_NO= +if test "$INTLBISON" != :; then + ac_bison3=no + AC_MSG_CHECKING([bison 3 or later]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + [3-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, bison3"; ac_bison3=yes;; + *) ac_prog_version="$ac_prog_version, old";; + esac + AC_MSG_RESULT([$ac_prog_version]) + if test $ac_bison3 = yes; then + AC_DEFINE(HAVE_BISON3, 1, [Define if bison 3 or later is used.]) + BISON3_YES= + BISON3_NO='#' + fi +fi +AC_SUBST(BISON3_YES) +AC_SUBST(BISON3_NO) + AC_CONFIG_FILES(Makefile config.intl) AC_OUTPUT --- intl/Makefile.in.jj 2020-01-12 11:54:38.542381288 +0100 +++ intl/Makefile.in 2020-04-15 13:16:49.420022007 +0200 @@ -133,7 +133,11 @@ libintl.h: $(srcdir)/libgnuintl.h $(COMPILE) $< .y.c: - $(YACC) $(YFLAGS) --output $@ $< +@BISON3_YES@ sed 's,%pure_parser,,;s,^/\* BISON3 \(.*\) \*/$$,\1,' $< > $@.y +@BISON3_YES@ $(YACC) $(YFLAGS) --output $@.c $@.y +@BISON3_YES@ sed 's/\.c\.y"/.y"/' $@.c > $@ +@BISON3_YES@ rm -f $@.c $@.y $@.h +@BISON3_NO@ $(YACC) $(YFLAGS) --output $@ $< rm -f $*.h INCLUDES = -I. -I$(srcdir) --- intl/plural-exp.h.jj 2020-01-11 16:31:56.320274233 +0100 +++ intl/plural-exp.h 2020-04-15 13:22:26.162972185 +0200 @@ -1,5 +1,5 @@ /* Expression parsing and evaluation for plural form selection. - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. This program is free software; you can redistribute it and/or modify it @@ -111,7 +111,11 @@ struct parse_args extern void FREE_EXPRESSION PARAMS ((struct expression *exp)) internal_function; +#ifdef HAVE_BISON3 +extern int PLURAL_PARSE PARAMS ((struct parse_args *arg)); +#else extern int PLURAL_PARSE PARAMS ((void *arg)); +#endif extern struct expression GERMANIC_PLURAL attribute_hidden; extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry, struct expression **pluralp, --- intl/plural.y.jj 2020-04-15 10:58:43.890398648 +0200 +++ intl/plural.y 2020-04-15 13:11:13.819054699 +0200 @@ -1,6 +1,6 @@ %{ /* Expression parsing for plural form selection. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. This program is free software; you can redistribute it and/or modify it @@ -40,10 +40,15 @@ # define __gettextparse PLURAL_PARSE #endif +#ifndef HAVE_BISON3 #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg +#endif %} %pure_parser +/* BISON3 %parse-param {struct parse_args *arg} */ +/* BISON3 %lex-param {struct parse_args *arg} */ +/* BISON3 %define api.pure full */ %expect 7 %union { @@ -66,8 +71,13 @@ static inline struct expression *new_exp struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); +#ifdef HAVE_BISON3 +static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg)); +static void yyerror PARAMS ((struct parse_args *arg, const char *str)); +#else static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); static void yyerror PARAMS ((const char *str)); +#endif /* Allocation of expressions. */ @@ -256,11 +266,20 @@ FREE_EXPRESSION (exp) } +#ifdef HAVE_BISON3 +static int +yylex (lval, arg) + YYSTYPE *lval; + struct parse_args *arg; +{ + const char **pexp = &arg->cp; +#else static int yylex (lval, pexp) YYSTYPE *lval; const char **pexp; { +#endif const char *exp = *pexp; int result; @@ -401,8 +420,14 @@ yylex (lval, pexp) } +#ifdef HAVE_BISON3 +static void +yyerror (arg, str) + struct parse_args *arg; +#else static void yyerror (str) +#endif const char *str; { /* Do nothing. We don't print error messages here. */ --- intl/plural.c.jj 2020-01-11 16:31:56.320274233 +0100 +++ intl/plural.c 2020-04-15 13:20:14.240950496 +0200 @@ -19,7 +19,7 @@ #line 1 "plural.y" /* Expression parsing for plural form selection. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. This program is free software; you can redistribute it and/or modify it @@ -59,10 +59,12 @@ # define __gettextparse PLURAL_PARSE #endif +#ifndef HAVE_BISON3 #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg +#endif -#line 49 "plural.y" +#line 54 "plural.y" #ifndef YYSTYPE typedef union { unsigned long int num; @@ -72,7 +74,7 @@ typedef union { # define YYSTYPE yystype # define YYSTYPE_IS_TRIVIAL 1 #endif -#line 55 "plural.y" +#line 60 "plural.y" /* Prototypes for local functions. */ static struct expression *new_exp PARAMS ((int nargs, enum operator op, @@ -87,8 +89,13 @@ static inline struct expression *new_exp struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); +#ifdef HAVE_BISON3 +static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg)); +static void yyerror PARAMS ((struct parse_args *arg, const char *str)); +#else static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); static void yyerror PARAMS ((const char *str)); +#endif /* Allocation of expressions. */ @@ -236,8 +243,8 @@ static const short yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { - 0, 174, 182, 186, 190, 194, 198, 202, 206, 210, - 214, 218, 223 + 0, 184, 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 233 }; #endif @@ -339,8 +346,8 @@ static const short yycheck[] = You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. @@ -1027,7 +1034,7 @@ yyreduce: switch (yyn) { case 1: -#line 175 "plural.y" +#line 185 "plural.y" { if (yyvsp[0].exp == NULL) YYABORT; @@ -1035,68 +1042,68 @@ case 1: } break; case 2: -#line 183 "plural.y" +#line 193 "plural.y" { yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); } break; case 3: -#line 187 "plural.y" +#line 197 "plural.y" { yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); } break; case 4: -#line 191 "plural.y" +#line 201 "plural.y" { yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); } break; case 5: -#line 195 "plural.y" +#line 205 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); } break; case 6: -#line 199 "plural.y" +#line 209 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); } break; case 7: -#line 203 "plural.y" +#line 213 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); } break; case 8: -#line 207 "plural.y" +#line 217 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); } break; case 9: -#line 211 "plural.y" +#line 221 "plural.y" { yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); } break; case 10: -#line 215 "plural.y" +#line 225 "plural.y" { yyval.exp = new_exp_0 (var); } break; case 11: -#line 219 "plural.y" +#line 229 "plural.y" { if ((yyval.exp = new_exp_0 (num)) != NULL) yyval.exp->val.num = yyvsp[0].num; } break; case 12: -#line 224 "plural.y" +#line 234 "plural.y" { yyval.exp = yyvsp[-1].exp; } @@ -1334,7 +1341,7 @@ yyreturn: #endif return yyresult; } -#line 229 "plural.y" +#line 239 "plural.y" void @@ -1365,11 +1372,20 @@ FREE_EXPRESSION (exp) } +#ifdef HAVE_BISON3 +static int +yylex (lval, arg) + YYSTYPE *lval; + struct parse_args *arg; +{ + const char **pexp = &arg->cp; +#else static int yylex (lval, pexp) YYSTYPE *lval; const char **pexp; { +#endif const char *exp = *pexp; int result; @@ -1510,8 +1526,14 @@ yylex (lval, pexp) } +#ifdef HAVE_BISON3 +static void +yyerror (arg, str) + struct parse_args *arg; +#else static void yyerror (str) +#endif const char *str; { /* Do nothing. We don't print error messages here. */ --- intl/config.h.in.jj 2020-01-12 11:54:38.542381288 +0100 +++ intl/config.h.in 2020-04-15 12:53:40.670817614 +0200 @@ -28,6 +28,9 @@ /* Define to 1 if you have the <argz.h> header file. */ #undef HAVE_ARGZ_H +/* Define if bison 3 or later is used. */ +#undef HAVE_BISON3 + /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT --- intl/configure.jj 2020-02-01 10:01:36.638700295 +0100 +++ intl/configure 2020-04-15 13:03:09.509306144 +0200 @@ -622,6 +622,8 @@ ac_unique_file="gettext.c" ac_header_list= ac_subst_vars='LTLIBOBJS LIBOBJS +BISON3_NO +BISON3_YES INCINTL LIBINTL_DEP MAINT @@ -6791,6 +6793,31 @@ case $USE_INCLUDED_LIBINTL in ;; esac +BISON3_YES='#' +BISON3_NO= +if test "$INTLBISON" != :; then + ac_bison3=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking bison 3 or later" >&5 +$as_echo_n "checking bison 3 or later... " >&6; } + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + [3-9].*) + ac_prog_version="$ac_prog_version, bison3"; ac_bison3=yes;; + *) ac_prog_version="$ac_prog_version, old";; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 +$as_echo "$ac_prog_version" >&6; } + if test $ac_bison3 = yes; then + +$as_echo "#define HAVE_BISON3 1" >>confdefs.h + + BISON3_YES= + BISON3_NO='#' + fi +fi + + + ac_config_files="$ac_config_files Makefile config.intl" cat >confcache <<\_ACEOF