]> git.ipfire.org Git - thirdparty/gcc.git/commit - intl/plural-exp.h
intl: Allow building both with old bison and bison >= 3 [PR92008]
authorJakub Jelinek <jakub@redhat.com>
Thu, 16 Apr 2020 08:12:30 +0000 (10:12 +0200)
committerJakub Jelinek <jakub@redhat.com>
Thu, 16 Apr 2020 08:12:30 +0000 (10:12 +0200)
commit2ca17e0a89ff6c37e17851a5bd7b0a03ee8de535
treed382835bed7c6ccc5103c89226444912b774794a
parentfc6b42bbaa298ea6c10af185e1dd0126f5a760cd
intl: Allow building both with old bison and bison >= 3 [PR92008]

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

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/ChangeLog
intl/Makefile.in
intl/config.h.in
intl/configure
intl/configure.ac
intl/plural-exp.h
intl/plural.c
intl/plural.y