summaryrefslogtreecommitdiff
path: root/intl
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-04-16 11:55:00 +0200
committerNick Alcock <nick.alcock@oracle.com>2021-02-10 15:26:57 +0000
commitadda0248ed0f7a2245f53a79ef6dbc2093a1be22 (patch)
treed0a4056659793dfe46efc8f53c0346d2582aec30 /intl
parent830c5a1ffb0ee5f064b0ba0b07cb111aa7f85141 (diff)
downloadbinutils-gdb-adda0248ed0f7a2245f53a79ef6dbc2093a1be22.tar.gz
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 ;) intl/ChangeLog 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.
Diffstat (limited to 'intl')
-rw-r--r--intl/ChangeLog17
-rw-r--r--intl/Makefile.in7
-rw-r--r--intl/config.h.in3
-rwxr-xr-xintl/configure3
-rw-r--r--intl/configure.ac1
-rw-r--r--intl/plural-config.h1
-rw-r--r--intl/plural-exp.h4
-rw-r--r--intl/plural.c8
-rw-r--r--intl/plural.y8
9 files changed, 35 insertions, 17 deletions
diff --git a/intl/ChangeLog b/intl/ChangeLog
index 8bb12ff5ff0..d88f9266838 100644
--- a/intl/ChangeLog
+++ b/intl/ChangeLog
@@ -1,6 +1,23 @@
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.
+
+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@,
diff --git a/intl/Makefile.in b/intl/Makefile.in
index bdb74ebb78c..356c8ab9b65 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 87738c0aad2..9c9b53dc0ea 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 58cee2983a5..d69767b7d21 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 b11033712bc..6363e55e68a 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 00000000000..53bbd11078e
--- /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 e27c2805093..2dbb104099e 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 ad86faa89ce..f9a8faa7838 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 c97f09a6f69..7531da5a7b2 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;