+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.
+
2020-02-20 Alan Modra <amodra@gmail.com>
* aclocal.m4: Regenerate.
$(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)
/* 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
ac_header_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
+BISON3_NO
+BISON3_YES
INCINTL
LIBINTL_DEP
MAINT
;;
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
;;
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
/* 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
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,
#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
# 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;
# 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,
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. */
/* 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
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.
switch (yyn) {
case 1:
-#line 175 "plural.y"
+#line 185 "plural.y"
{
if (yyvsp[0].exp == NULL)
YYABORT;
}
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;
}
#endif
return yyresult;
}
-#line 229 "plural.y"
+#line 239 "plural.y"
void
}
+#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;
}
+#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. */
%{
/* 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
# 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 {
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. */
}
+#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;
}
+#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. */