diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-04-16 11:55:00 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-04-16 11:55:00 +0200 |
commit | 437eea66a4b010d8e94aa81c2b40ccf0588e5fab (patch) | |
tree | 81c209397de5b0ca4f5a413e13702de9ac94bd97 | |
parent | bd87b1fddbbe7d424671ebf81c96e12d748fafc7 (diff) | |
download | gcc-437eea66a4b010d8e94aa81c2b40ccf0588e5fab.zip gcc-437eea66a4b010d8e94aa81c2b40ccf0588e5fab.tar.gz gcc-437eea66a4b010d8e94aa81c2b40ccf0588e5fab.tar.bz2 |
intl: Unbreak intl build with bison 3 when no regeneration is needed [PR92008]
As Iain reported, my change broke the case when one has bison >= 3,
but make decides there is no reason to regenerate plural.c, unfortunately
that seems to be a scenario I haven't tested. The problem is that
the pregenerated plural.c has been generated with bison 1.35, but when
config.h says HAVE_BISON3, the code assumes it is the bison3 variant.
What used to work fine is when one has bison >= 3 and plural.c has been
regenerated (e.g. do touch intl/plural.y and it will work), or when
one doesn't have any bison (then nothing is regenerated, but HAVE_BISON3
isn't defined either), or when one has bison < 3 and doesn't need to
regenerate, or when one has bison < 3 and it is regenerated.
The following patch fixes this, by killing the HAVE_BISON3 macro from
config.h, and instead remembering the fact whether plural.c has been created
with bison < 3 or bison >= 3 in a separate new plural-config.h header.
The way this works:
- user doesn't have bison
- user has bison >= 3, but intl/{plural-config.h,plural.c} aren't older than intl/plural.y
- user has bison < 3, but intl/{plural-config.h,plural.c} aren't older than intl/plural.y
pregenerated !USE_BISON3 plural.c and plural-config.h from source
dir is used, nothing in the objdir
- user has bison >= 3 and intl/plural.y is newer
Makefile generates plural.c and USE_BISON3 plural-config.h in the
objdir, which is then used in preference to srcdir copies
- user has bison < 3 and intl/plural.y is newer
Makefile generates plural.c and !USE_BISON3 plural-config.h in the
objdir, which is then used in preference to srcdir copies
I have tested all these cases and make all-yes worked in all the cases.
If one uses the unsupported ./configure where srcdir == objdir, I guess
(though haven't tested) that it should still work, just it would be nice
if such people didn't try to check in the plural{.c,-config.h} they have
regenerated.
What doesn't work, but didn't work before either (just tested gcc-9 branch
too) is when one doesn't have bison and plural.y is newer than plural.c.
Don't do that ;)
2020-04-16 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/92008
intl/
* configure.ac: Remove HAVE_BISON3 AC_DEFINE.
* Makefile.in (HEADERS): Add plural-config.h.
(.y.c): Also create plural-config.h.
(dcigettext.o loadmsgcat.o plural.o plural-exp.o): Also depend
on plural-config.h.
(plural-config.h): Depend on plural.c.
* plural-exp.h: Include plural-config.h. Use USE_BISON3 instead
of HAVE_BISON3.
* plural.y: Use USE_BISON3 instead of HAVE_BISON3.
* configure: Regenerated.
* plural.c: Regenerated.
* config.h.in: Regenerated.
* plural-config.h: Generated.
contrib/
* gcc_update: Add intl/plural.y dependency for intl/plural-config.h.
-rw-r--r-- | contrib/ChangeLog | 5 | ||||
-rwxr-xr-x | contrib/gcc_update | 1 | ||||
-rw-r--r-- | intl/ChangeLog | 15 | ||||
-rw-r--r-- | intl/Makefile.in | 7 | ||||
-rw-r--r-- | intl/config.h.in | 3 | ||||
-rwxr-xr-x | intl/configure | 3 | ||||
-rw-r--r-- | intl/configure.ac | 1 | ||||
-rw-r--r-- | intl/plural-config.h | 1 | ||||
-rw-r--r-- | intl/plural-exp.h | 4 | ||||
-rw-r--r-- | intl/plural.c | 8 | ||||
-rw-r--r-- | intl/plural.y | 8 |
11 files changed, 39 insertions, 17 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog index ab9254b..7efe9a4 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,8 @@ +2020-04-16 Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/92008 + * gcc_update: Add intl/plural.y dependency for intl/plural-config.h. + 2020-04-03 Martin Liska <mliska@suse.cz> * gcc-git-customization.sh: Search for the pattern diff --git a/contrib/gcc_update b/contrib/gcc_update index 8c980b1..5e8af0e 100755 --- a/contrib/gcc_update +++ b/contrib/gcc_update @@ -72,6 +72,7 @@ fixincludes/configure: fixincludes/configure.ac fixincludes/aclocal.m4 fixincludes/config.h.in: fixincludes/configure.ac fixincludes/aclocal.m4 # intl library intl/plural.c: intl/plural.y +intl/plural-config.h: intl/plural.y intl/configure: intl/configure.ac intl/aclocal.m4 intl/config.h.in: intl/configure.ac intl/aclocal.m4 # Now, proceed to gcc automatically generated files diff --git a/intl/ChangeLog b/intl/ChangeLog index a3762f8..e8f0d36 100644 --- a/intl/ChangeLog +++ b/intl/ChangeLog @@ -1,6 +1,21 @@ 2020-04-16 Jakub Jelinek <jakub@redhat.com> PR bootstrap/92008 + * configure.ac: Remove HAVE_BISON3 AC_DEFINE. + * Makefile.in (HEADERS): Add plural-config.h. + (.y.c): Also create plural-config.h. + (dcigettext.o loadmsgcat.o plural.o plural-exp.o): Also depend + on plural-config.h. + (plural-config.h): Depend on plural.c. + * plural-exp.h: Include plural-config.h. Use USE_BISON3 instead + of HAVE_BISON3. + * plural.y: Use USE_BISON3 instead of HAVE_BISON3. + * configure: Regenerated. + * plural.c: Regenerated. + * config.h.in: Regenerated. + * plural-config.h: Generated. + + 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@, diff --git a/intl/Makefile.in b/intl/Makefile.in index bdb74eb..356c8ab 100644 --- a/intl/Makefile.in +++ b/intl/Makefile.in @@ -57,6 +57,7 @@ HEADERS = \ gettextP.h \ hash-string.h \ loadinfo.h \ + plural-config.h \ plural-exp.h \ eval-plural.h \ localcharset.h \ @@ -133,10 +134,12 @@ libintl.h: $(srcdir)/libgnuintl.h $(COMPILE) $< .y.c: +@BISON3_YES@ echo '#define USE_BISON3' > $(patsubst %.c,%-config.h,$@) @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@ echo '/* #define USE_BISON3 */' > $(patsubst %.c,%-config.h,$@) @BISON3_NO@ $(YACC) $(YFLAGS) --output $@ $< rm -f $*.h @@ -165,7 +168,7 @@ dngettext.o finddomain.o gettext.o intl-compat.o loadmsgcat.o \ localealias.o ngettext.o textdomain.o: gettextP.h gmo.h loadinfo.h dcigettext.o loadmsgcat.o: hash-string.h explodename.o l10nflist.o: loadinfo.h -dcigettext.o loadmsgcat.o plural.o plural-exp.o: plural-exp.h +dcigettext.o loadmsgcat.o plural.o plural-exp.o: plural-exp.h plural-config.h dcigettext.o: eval-plural.h localcharset.o: localcharset.h localealias.o localcharset.o relocatable.o: relocatable.h @@ -242,6 +245,8 @@ $(srcdir)/aclocal.m4: @MAINT@ $(aclocal_deps) config.h: stamp-h1 test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1) +plural-config.h: plural.c + stamp-h1: $(srcdir)/config.h.in config.status -rm -f stamp-h1 $(SHELL) ./config.status config.h diff --git a/intl/config.h.in b/intl/config.h.in index 87738c0..9c9b53d 100644 --- a/intl/config.h.in +++ b/intl/config.h.in @@ -28,9 +28,6 @@ /* 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 diff --git a/intl/configure b/intl/configure index 58cee29..d69767b 100755 --- a/intl/configure +++ b/intl/configure @@ -6808,9 +6808,6 @@ $as_echo_n "checking bison 3 or later... " >&6; } { $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 diff --git a/intl/configure.ac b/intl/configure.ac index b110337..6363e55 100644 --- a/intl/configure.ac +++ b/intl/configure.ac @@ -62,7 +62,6 @@ changequote([,])dnl 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 diff --git a/intl/plural-config.h b/intl/plural-config.h new file mode 100644 index 0000000..53bbd11 --- /dev/null +++ b/intl/plural-config.h @@ -0,0 +1 @@ +/* #define USE_BISON3 */ diff --git a/intl/plural-exp.h b/intl/plural-exp.h index e27c280..2dbb104 100644 --- a/intl/plural-exp.h +++ b/intl/plural-exp.h @@ -20,6 +20,8 @@ #ifndef _PLURAL_EXP_H #define _PLURAL_EXP_H +#include <plural-config.h> + #ifndef PARAMS # if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES # define PARAMS(args) args @@ -111,7 +113,7 @@ struct parse_args extern void FREE_EXPRESSION PARAMS ((struct expression *exp)) internal_function; -#ifdef HAVE_BISON3 +#ifdef USE_BISON3 extern int PLURAL_PARSE PARAMS ((struct parse_args *arg)); #else extern int PLURAL_PARSE PARAMS ((void *arg)); diff --git a/intl/plural.c b/intl/plural.c index ad86faa..f9a8faa 100644 --- a/intl/plural.c +++ b/intl/plural.c @@ -59,7 +59,7 @@ # define __gettextparse PLURAL_PARSE #endif -#ifndef HAVE_BISON3 +#ifndef USE_BISON3 #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg #endif @@ -89,7 +89,7 @@ static inline struct expression *new_exp_3 PARAMS ((enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); -#ifdef HAVE_BISON3 +#ifdef USE_BISON3 static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg)); static void yyerror PARAMS ((struct parse_args *arg, const char *str)); #else @@ -1372,7 +1372,7 @@ FREE_EXPRESSION (exp) } -#ifdef HAVE_BISON3 +#ifdef USE_BISON3 static int yylex (lval, arg) YYSTYPE *lval; @@ -1526,7 +1526,7 @@ yylex (lval, pexp) } -#ifdef HAVE_BISON3 +#ifdef USE_BISON3 static void yyerror (arg, str) struct parse_args *arg; diff --git a/intl/plural.y b/intl/plural.y index c97f09a..7531da5 100644 --- a/intl/plural.y +++ b/intl/plural.y @@ -40,7 +40,7 @@ # define __gettextparse PLURAL_PARSE #endif -#ifndef HAVE_BISON3 +#ifndef USE_BISON3 #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg #endif @@ -71,7 +71,7 @@ static inline struct expression *new_exp_3 PARAMS ((enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); -#ifdef HAVE_BISON3 +#ifdef USE_BISON3 static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg)); static void yyerror PARAMS ((struct parse_args *arg, const char *str)); #else @@ -266,7 +266,7 @@ FREE_EXPRESSION (exp) } -#ifdef HAVE_BISON3 +#ifdef USE_BISON3 static int yylex (lval, arg) YYSTYPE *lval; @@ -420,7 +420,7 @@ yylex (lval, pexp) } -#ifdef HAVE_BISON3 +#ifdef USE_BISON3 static void yyerror (arg, str) struct parse_args *arg; |