Bison 3.0 incomptatibility (was: Cygwin build for mingw32 host build failure in binutils-gdb/intl with make 4.0)

Pierre Muller pierre.muller@ics-cnrs.unistra.fr
Thu Dec 11 15:13:00 GMT 2014


  After some research, I found out that this is a known issue:
this issue is fixed in glibc


fixed gettext compatibility with bison 3.0
plural.y was incompatible with newer bison versions

https://github.com/zerovm/glibc/commit/9f3f5229848390ae921f77c92f666ca6f0bff
c00

Is there a "master" intl which we should  update from?


Pierre Muller

> -----Message d'origine-----
> De : binutils-owner@sourceware.org [mailto:binutils-
> owner@sourceware.org] De la part de Pierre Muller
> Envoyé : mercredi 10 décembre 2014 13:51
> À : binutils@sourceware.org
> Objet : Cygwin build for mingw32 host build failure in binutils-
> gdb/intl with make 4.0
> 
>   Hi,
> 
>   I get build failure trying to compile mingw32 using
> i686-w64-mingw32-gcc on a cygwin installation.
> 
>   After some checks, I suspect that the problem comes from the fact
> that cygwin has make 4.0 version.
> 
>   in intl sub-directory,
> plural.c is regenerated using
> bison -y -d --name-prefix=__gettext --output plural.c
> ../../../binutils-gdb/intl/plural.y
> command,
> while on msys with make 3.81,
> the file ../../../binutils-gdb/intl/plural.c source is used.
> 
>   Installed bison version is 3.0.2
> and the newly generated plural.c leads to this error below:
> 
>    It seems that this problem is also mingw32 specific because
> for native cygwin compilation, the all target in intl sub-directory is
> all-no.
> But forcing the compilation by running
> make –C intl all-yes
> also leads to a generation of plural.c aand to the same compilation
> error.
> 
>   How should this problem be fixed?
> 
> Pierre Muller
> 
> 
> 
> i686-w64-mingw32-gcc -c  -gstabs+ -O0 -D__USE_MINGW_ACCESS -
> DHAVE_CONFIG_H
> -I. -I../../../binutils-gdb/intl plural.c
> In file included from ../../../binutils-gdb/intl/plural.y:35:0:
> ../../../binutils-gdb/intl/plural-exp.h:102:23: error: conflicting
> types for
> 'libintl_gettextparse'
> # define PLURAL_PARSE libintl_gettextparse
>                        ^
> ../../../binutils-gdb/intl/plural.y:40:25: note: in expansion of macro
> 'PLURAL_PARSE'
> # define __gettextparse PLURAL_PARSE
>                          ^
> plural.c:185:5: note: in expansion of macro '__gettextparse'
> int __gettextparse (void);
>      ^
> ../../../binutils-gdb/intl/plural-exp.h:102:23: note: previous
> declaration
> of 'libintl_gettextparse' was here
> # define PLURAL_PARSE libintl_gettextparse
>                        ^
> ../../../binutils-gdb/intl/plural-exp.h:114:12: note: in expansion of
> macro
> 'PLURAL_PARSE'
> extern int PLURAL_PARSE PARAMS ((void *arg));
>             ^
> ../../../binutils-gdb/intl/plural-exp.h:102:23: error: conflicting
> types for
> 'libintl_gettextparse'
> # define PLURAL_PARSE libintl_gettextparse
>                        ^
> ../../../binutils-gdb/intl/plural.y:40:25: note: in expansion of macro
> 'PLURAL_PARSE'
> # define __gettextparse PLURAL_PARSE
>                          ^
> plural.c:63:25: note: in expansion of macro '__gettextparse'
> #define yyparse         __gettextparse
>                          ^
> plural.c:1130:1: note: in expansion of macro 'yyparse'
> yyparse (void)
> ^
> ../../../binutils-gdb/intl/plural-exp.h:102:23: note: previous
> declaration
> of 'libintl_gettextparse' was here
> # define PLURAL_PARSE libintl_gettextparse
>                        ^
> ../../../binutils-gdb/intl/plural-exp.h:114:12: note: in expansion of
> macro
> 'PLURAL_PARSE'
> extern int PLURAL_PARSE PARAMS ((void *arg));
>             ^
> plural.c: In function 'libintl_gettextparse':
> plural.c:1299:7: error: too few arguments to function '__gettextlex'
>        yychar = yylex (&yylval);
>        ^
> plural.c:64:25: note: declared here
> #define yylex           __gettextlex
>                          ^
> ../../../binutils-gdb/intl/plural.y:69:12: note: in expansion of macro
> 'yylex'
> static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
>             ^
> ../../../binutils-gdb/intl/plural.y:178:29: error: 'arg' undeclared
> (first
> use in this function)
>       ((struct parse_args *) arg)->res = $1;
>                              ^
> ../../../binutils-gdb/intl/plural.y:178:29: note: each undeclared
> identifier
> is reported only once for each function it appears in
> Makefile:133: recipe for target 'plural.o' failed
> make: *** [plural.o] Error 1



More information about the Binutils mailing list