ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
%{
|
|
|
|
/* Expression parsing for plural form selection.
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
Copyright (C) 2000-2020 Free Software Foundation, Inc.
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify it
|
|
|
|
under the terms of the GNU Library General Public License as published
|
|
|
|
by the Free Software Foundation; either version 2, or (at your option)
|
|
|
|
any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
|
|
License along with this program; if not, write to the Free Software
|
2005-05-13 16:03:47 +08:00
|
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
USA. */
|
|
|
|
|
|
|
|
/* The bison generated parser uses alloca. AIX 3 forces us to put this
|
|
|
|
declaration at the beginning of the file. The declaration in bison's
|
|
|
|
skeleton file comes too late. This must come before <config.h>
|
|
|
|
because <config.h> may include arbitrary system headers. */
|
|
|
|
#if defined _AIX && !defined __GNUC__
|
|
|
|
#pragma alloca
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include <config.h>
|
|
|
|
#endif
|
|
|
|
|
intl: New directory; see intl/ChangeLog for details.
top:
* intl: New directory; see intl/ChangeLog for details.
* ABOUT-NLS, config.rpath: Import from gettext 0.12.1.
* Makefile.tpl: all-gcc depends on maybe-all-intl.
* Makefile.in: Regenerate.
config:
* gettext.m4: New file - copy of gettext.m4 from binutils
CVS, with added AC_ISC_POSIX macro from gcc/aclocal.m4.
gcc:
* ABOUT-NLS: Delete.
* intl: Delete entire directory.
* aclocal.m4: Include ../config/gettext.m4. Delete
AC_ISC_POSIX, AM_LANGINFO_CODESET, jm_GLIBC21, AM_LC_MESSAGES,
AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, and AM_GNU_GETTEXT.
* configure.in: Use CY_GNU_GETTEXT, not AM_GNU_GETTEXT.
Remove intl/Makefile from all_outputs.
* configure, config.in: Regenerate.
* Makefile.in: Expunge all references to intl subdirectory.
Add -I../intl to INCLUDES.
* intl.h: Include libintl.h if and only if ENABLE_NLS is defined.
intl:
* Makefile.in: Remove unnecessary capabilities for
installation, build of shared libraries, generation of
distribution tarballs, etc. Fix all the places that rely on
the parent directory. Don't generate libgnuintl.h from
anything; do generate $(objdir)/libintl.h from libgnuintl.h if
necessary. Adjust DEFS for use of config.h.
* libgnuintl.h.in: Rename libgnuintl.h.
* README: New file.
* config.charset, ref-add.sin, ref-del.sin: Delete (unused).
* COPYING.LIB-2.0, COPYING.LIB-2.1: Delete (redundant).
* aclocal.m4: New; generated per instructions in gettext manual.
* configure.in: New; written from scratch for this configuration.
* configure, config.h.in: Generated.
contrib:
* gcc_update: Remove gcc/intl/plural.c from list.
Add new generated files intl/plural.c, intl/configure,
intl/config.h.in.
From-SVN: r68928
2003-07-05 02:18:54 +08:00
|
|
|
#include <stddef.h>
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
#include <stdlib.h>
|
intl: New directory; see intl/ChangeLog for details.
top:
* intl: New directory; see intl/ChangeLog for details.
* ABOUT-NLS, config.rpath: Import from gettext 0.12.1.
* Makefile.tpl: all-gcc depends on maybe-all-intl.
* Makefile.in: Regenerate.
config:
* gettext.m4: New file - copy of gettext.m4 from binutils
CVS, with added AC_ISC_POSIX macro from gcc/aclocal.m4.
gcc:
* ABOUT-NLS: Delete.
* intl: Delete entire directory.
* aclocal.m4: Include ../config/gettext.m4. Delete
AC_ISC_POSIX, AM_LANGINFO_CODESET, jm_GLIBC21, AM_LC_MESSAGES,
AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, and AM_GNU_GETTEXT.
* configure.in: Use CY_GNU_GETTEXT, not AM_GNU_GETTEXT.
Remove intl/Makefile from all_outputs.
* configure, config.in: Regenerate.
* Makefile.in: Expunge all references to intl subdirectory.
Add -I../intl to INCLUDES.
* intl.h: Include libintl.h if and only if ENABLE_NLS is defined.
intl:
* Makefile.in: Remove unnecessary capabilities for
installation, build of shared libraries, generation of
distribution tarballs, etc. Fix all the places that rely on
the parent directory. Don't generate libgnuintl.h from
anything; do generate $(objdir)/libintl.h from libgnuintl.h if
necessary. Adjust DEFS for use of config.h.
* libgnuintl.h.in: Rename libgnuintl.h.
* README: New file.
* config.charset, ref-add.sin, ref-del.sin: Delete (unused).
* COPYING.LIB-2.0, COPYING.LIB-2.1: Delete (redundant).
* aclocal.m4: New; generated per instructions in gettext manual.
* configure.in: New; written from scratch for this configuration.
* configure, config.h.in: Generated.
contrib:
* gcc_update: Remove gcc/intl/plural.c from list.
Add new generated files intl/plural.c, intl/configure,
intl/config.h.in.
From-SVN: r68928
2003-07-05 02:18:54 +08:00
|
|
|
#include "plural-exp.h"
|
|
|
|
|
|
|
|
/* The main function generated by the parser is called __gettextparse,
|
|
|
|
but we want it to be called PLURAL_PARSE. */
|
|
|
|
#ifndef _LIBC
|
|
|
|
# define __gettextparse PLURAL_PARSE
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
#endif
|
|
|
|
|
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.
2020-04-16 17:55:00 +08:00
|
|
|
#ifndef USE_BISON3
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
|
|
|
#define YYPARSE_PARAM arg
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
#endif
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
%}
|
|
|
|
%pure_parser
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
/* BISON3 %parse-param {struct parse_args *arg} */
|
|
|
|
/* BISON3 %lex-param {struct parse_args *arg} */
|
|
|
|
/* BISON3 %define api.pure full */
|
intl: New directory; see intl/ChangeLog for details.
top:
* intl: New directory; see intl/ChangeLog for details.
* ABOUT-NLS, config.rpath: Import from gettext 0.12.1.
* Makefile.tpl: all-gcc depends on maybe-all-intl.
* Makefile.in: Regenerate.
config:
* gettext.m4: New file - copy of gettext.m4 from binutils
CVS, with added AC_ISC_POSIX macro from gcc/aclocal.m4.
gcc:
* ABOUT-NLS: Delete.
* intl: Delete entire directory.
* aclocal.m4: Include ../config/gettext.m4. Delete
AC_ISC_POSIX, AM_LANGINFO_CODESET, jm_GLIBC21, AM_LC_MESSAGES,
AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, and AM_GNU_GETTEXT.
* configure.in: Use CY_GNU_GETTEXT, not AM_GNU_GETTEXT.
Remove intl/Makefile from all_outputs.
* configure, config.in: Regenerate.
* Makefile.in: Expunge all references to intl subdirectory.
Add -I../intl to INCLUDES.
* intl.h: Include libintl.h if and only if ENABLE_NLS is defined.
intl:
* Makefile.in: Remove unnecessary capabilities for
installation, build of shared libraries, generation of
distribution tarballs, etc. Fix all the places that rely on
the parent directory. Don't generate libgnuintl.h from
anything; do generate $(objdir)/libintl.h from libgnuintl.h if
necessary. Adjust DEFS for use of config.h.
* libgnuintl.h.in: Rename libgnuintl.h.
* README: New file.
* config.charset, ref-add.sin, ref-del.sin: Delete (unused).
* COPYING.LIB-2.0, COPYING.LIB-2.1: Delete (redundant).
* aclocal.m4: New; generated per instructions in gettext manual.
* configure.in: New; written from scratch for this configuration.
* configure, config.h.in: Generated.
contrib:
* gcc_update: Remove gcc/intl/plural.c from list.
Add new generated files intl/plural.c, intl/configure,
intl/config.h.in.
From-SVN: r68928
2003-07-05 02:18:54 +08:00
|
|
|
%expect 7
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
|
|
|
|
%union {
|
|
|
|
unsigned long int num;
|
|
|
|
enum operator op;
|
|
|
|
struct expression *exp;
|
|
|
|
}
|
|
|
|
|
|
|
|
%{
|
|
|
|
/* Prototypes for local functions. */
|
|
|
|
static struct expression *new_exp PARAMS ((int nargs, enum operator op,
|
|
|
|
struct expression * const *args));
|
|
|
|
static inline struct expression *new_exp_0 PARAMS ((enum operator op));
|
|
|
|
static inline struct expression *new_exp_1 PARAMS ((enum operator op,
|
|
|
|
struct expression *right));
|
|
|
|
static struct expression *new_exp_2 PARAMS ((enum operator op,
|
|
|
|
struct expression *left,
|
|
|
|
struct expression *right));
|
|
|
|
static inline struct expression *new_exp_3 PARAMS ((enum operator op,
|
|
|
|
struct expression *bexp,
|
|
|
|
struct expression *tbranch,
|
|
|
|
struct expression *fbranch));
|
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.
2020-04-16 17:55:00 +08:00
|
|
|
#ifdef USE_BISON3
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg));
|
|
|
|
static void yyerror PARAMS ((struct parse_args *arg, const char *str));
|
|
|
|
#else
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
|
|
|
|
static void yyerror PARAMS ((const char *str));
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
#endif
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
|
|
|
|
/* Allocation of expressions. */
|
|
|
|
|
|
|
|
static struct expression *
|
|
|
|
new_exp (nargs, op, args)
|
|
|
|
int nargs;
|
|
|
|
enum operator op;
|
|
|
|
struct expression * const *args;
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
struct expression *newp;
|
|
|
|
|
|
|
|
/* If any of the argument could not be malloc'ed, just return NULL. */
|
|
|
|
for (i = nargs - 1; i >= 0; i--)
|
|
|
|
if (args[i] == NULL)
|
|
|
|
goto fail;
|
|
|
|
|
|
|
|
/* Allocate a new expression. */
|
|
|
|
newp = (struct expression *) malloc (sizeof (*newp));
|
|
|
|
if (newp != NULL)
|
|
|
|
{
|
|
|
|
newp->nargs = nargs;
|
|
|
|
newp->operation = op;
|
|
|
|
for (i = nargs - 1; i >= 0; i--)
|
|
|
|
newp->val.args[i] = args[i];
|
|
|
|
return newp;
|
|
|
|
}
|
|
|
|
|
|
|
|
fail:
|
|
|
|
for (i = nargs - 1; i >= 0; i--)
|
|
|
|
FREE_EXPRESSION (args[i]);
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline struct expression *
|
|
|
|
new_exp_0 (op)
|
|
|
|
enum operator op;
|
|
|
|
{
|
|
|
|
return new_exp (0, op, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline struct expression *
|
|
|
|
new_exp_1 (op, right)
|
|
|
|
enum operator op;
|
|
|
|
struct expression *right;
|
|
|
|
{
|
|
|
|
struct expression *args[1];
|
|
|
|
|
|
|
|
args[0] = right;
|
|
|
|
return new_exp (1, op, args);
|
|
|
|
}
|
|
|
|
|
|
|
|
static struct expression *
|
|
|
|
new_exp_2 (op, left, right)
|
|
|
|
enum operator op;
|
|
|
|
struct expression *left;
|
|
|
|
struct expression *right;
|
|
|
|
{
|
|
|
|
struct expression *args[2];
|
|
|
|
|
|
|
|
args[0] = left;
|
|
|
|
args[1] = right;
|
|
|
|
return new_exp (2, op, args);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline struct expression *
|
|
|
|
new_exp_3 (op, bexp, tbranch, fbranch)
|
|
|
|
enum operator op;
|
|
|
|
struct expression *bexp;
|
|
|
|
struct expression *tbranch;
|
|
|
|
struct expression *fbranch;
|
|
|
|
{
|
|
|
|
struct expression *args[3];
|
|
|
|
|
|
|
|
args[0] = bexp;
|
|
|
|
args[1] = tbranch;
|
|
|
|
args[2] = fbranch;
|
|
|
|
return new_exp (3, op, args);
|
|
|
|
}
|
|
|
|
|
|
|
|
%}
|
|
|
|
|
|
|
|
/* This declares that all operators have the same associativity and the
|
|
|
|
precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
|
|
|
|
There is no unary minus and no bitwise operators.
|
|
|
|
Operators with the same syntactic behaviour have been merged into a single
|
|
|
|
token, to save space in the array generated by bison. */
|
|
|
|
%right '?' /* ? */
|
|
|
|
%left '|' /* || */
|
|
|
|
%left '&' /* && */
|
|
|
|
%left EQUOP2 /* == != */
|
|
|
|
%left CMPOP2 /* < > <= >= */
|
|
|
|
%left ADDOP2 /* + - */
|
|
|
|
%left MULOP2 /* * / % */
|
|
|
|
%right '!' /* ! */
|
|
|
|
|
|
|
|
%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
|
|
|
|
%token <num> NUMBER
|
|
|
|
%type <exp> exp
|
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
start: exp
|
|
|
|
{
|
|
|
|
if ($1 == NULL)
|
|
|
|
YYABORT;
|
|
|
|
((struct parse_args *) arg)->res = $1;
|
|
|
|
}
|
|
|
|
;
|
|
|
|
|
|
|
|
exp: exp '?' exp ':' exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_3 (qmop, $1, $3, $5);
|
|
|
|
}
|
|
|
|
| exp '|' exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_2 (lor, $1, $3);
|
|
|
|
}
|
|
|
|
| exp '&' exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_2 (land, $1, $3);
|
|
|
|
}
|
|
|
|
| exp EQUOP2 exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_2 ($2, $1, $3);
|
|
|
|
}
|
|
|
|
| exp CMPOP2 exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_2 ($2, $1, $3);
|
|
|
|
}
|
|
|
|
| exp ADDOP2 exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_2 ($2, $1, $3);
|
|
|
|
}
|
|
|
|
| exp MULOP2 exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_2 ($2, $1, $3);
|
|
|
|
}
|
|
|
|
| '!' exp
|
|
|
|
{
|
|
|
|
$$ = new_exp_1 (lnot, $2);
|
|
|
|
}
|
|
|
|
| 'n'
|
|
|
|
{
|
|
|
|
$$ = new_exp_0 (var);
|
|
|
|
}
|
|
|
|
| NUMBER
|
|
|
|
{
|
|
|
|
if (($$ = new_exp_0 (num)) != NULL)
|
|
|
|
$$->val.num = $1;
|
|
|
|
}
|
|
|
|
| '(' exp ')'
|
|
|
|
{
|
|
|
|
$$ = $2;
|
|
|
|
}
|
|
|
|
;
|
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
void
|
|
|
|
internal_function
|
|
|
|
FREE_EXPRESSION (exp)
|
|
|
|
struct expression *exp;
|
|
|
|
{
|
|
|
|
if (exp == NULL)
|
|
|
|
return;
|
|
|
|
|
|
|
|
/* Handle the recursive case. */
|
|
|
|
switch (exp->nargs)
|
|
|
|
{
|
|
|
|
case 3:
|
|
|
|
FREE_EXPRESSION (exp->val.args[2]);
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
case 2:
|
|
|
|
FREE_EXPRESSION (exp->val.args[1]);
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
case 1:
|
|
|
|
FREE_EXPRESSION (exp->val.args[0]);
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
free (exp);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
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.
2020-04-16 17:55:00 +08:00
|
|
|
#ifdef USE_BISON3
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
static int
|
|
|
|
yylex (lval, arg)
|
|
|
|
YYSTYPE *lval;
|
|
|
|
struct parse_args *arg;
|
|
|
|
{
|
|
|
|
const char **pexp = &arg->cp;
|
|
|
|
#else
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
static int
|
|
|
|
yylex (lval, pexp)
|
|
|
|
YYSTYPE *lval;
|
|
|
|
const char **pexp;
|
|
|
|
{
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
#endif
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
const char *exp = *pexp;
|
|
|
|
int result;
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
if (exp[0] == '\0')
|
|
|
|
{
|
|
|
|
*pexp = exp;
|
|
|
|
return YYEOF;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (exp[0] != ' ' && exp[0] != '\t')
|
|
|
|
break;
|
|
|
|
|
|
|
|
++exp;
|
|
|
|
}
|
|
|
|
|
|
|
|
result = *exp++;
|
|
|
|
switch (result)
|
|
|
|
{
|
|
|
|
case '0': case '1': case '2': case '3': case '4':
|
|
|
|
case '5': case '6': case '7': case '8': case '9':
|
|
|
|
{
|
|
|
|
unsigned long int n = result - '0';
|
|
|
|
while (exp[0] >= '0' && exp[0] <= '9')
|
|
|
|
{
|
|
|
|
n *= 10;
|
|
|
|
n += exp[0] - '0';
|
|
|
|
++exp;
|
|
|
|
}
|
|
|
|
lval->num = n;
|
|
|
|
result = NUMBER;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '=':
|
|
|
|
if (exp[0] == '=')
|
|
|
|
{
|
|
|
|
++exp;
|
|
|
|
lval->op = equal;
|
|
|
|
result = EQUOP2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
result = YYERRCODE;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '!':
|
|
|
|
if (exp[0] == '=')
|
|
|
|
{
|
|
|
|
++exp;
|
|
|
|
lval->op = not_equal;
|
|
|
|
result = EQUOP2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '&':
|
|
|
|
case '|':
|
|
|
|
if (exp[0] == result)
|
|
|
|
++exp;
|
|
|
|
else
|
|
|
|
result = YYERRCODE;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '<':
|
|
|
|
if (exp[0] == '=')
|
|
|
|
{
|
|
|
|
++exp;
|
|
|
|
lval->op = less_or_equal;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
lval->op = less_than;
|
|
|
|
result = CMPOP2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '>':
|
|
|
|
if (exp[0] == '=')
|
|
|
|
{
|
|
|
|
++exp;
|
|
|
|
lval->op = greater_or_equal;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
lval->op = greater_than;
|
|
|
|
result = CMPOP2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '*':
|
|
|
|
lval->op = mult;
|
|
|
|
result = MULOP2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '/':
|
|
|
|
lval->op = divide;
|
|
|
|
result = MULOP2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '%':
|
|
|
|
lval->op = module;
|
|
|
|
result = MULOP2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '+':
|
|
|
|
lval->op = plus;
|
|
|
|
result = ADDOP2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case '-':
|
|
|
|
lval->op = minus;
|
|
|
|
result = ADDOP2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'n':
|
|
|
|
case '?':
|
|
|
|
case ':':
|
|
|
|
case '(':
|
|
|
|
case ')':
|
|
|
|
/* Nothing, just return the character. */
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ';':
|
|
|
|
case '\n':
|
|
|
|
case '\0':
|
|
|
|
/* Be safe and let the user call this function again. */
|
|
|
|
--exp;
|
|
|
|
result = YYEOF;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
result = YYERRCODE;
|
|
|
|
#if YYDEBUG != 0
|
|
|
|
--exp;
|
|
|
|
#endif
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
*pexp = exp;
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
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.
2020-04-16 17:55:00 +08:00
|
|
|
#ifdef USE_BISON3
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
static void
|
|
|
|
yyerror (arg, str)
|
|
|
|
struct parse_args *arg;
|
|
|
|
#else
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
static void
|
|
|
|
yyerror (str)
|
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.
2020-04-16 16:12:30 +08:00
|
|
|
#endif
|
intl: New directory; see intl/ChangeLog for details.
top:
* intl: New directory; see intl/ChangeLog for details.
* ABOUT-NLS, config.rpath: Import from gettext 0.12.1.
* Makefile.tpl: all-gcc depends on maybe-all-intl.
* Makefile.in: Regenerate.
config:
* gettext.m4: New file - copy of gettext.m4 from binutils
CVS, with added AC_ISC_POSIX macro from gcc/aclocal.m4.
gcc:
* ABOUT-NLS: Delete.
* intl: Delete entire directory.
* aclocal.m4: Include ../config/gettext.m4. Delete
AC_ISC_POSIX, AM_LANGINFO_CODESET, jm_GLIBC21, AM_LC_MESSAGES,
AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, and AM_GNU_GETTEXT.
* configure.in: Use CY_GNU_GETTEXT, not AM_GNU_GETTEXT.
Remove intl/Makefile from all_outputs.
* configure, config.in: Regenerate.
* Makefile.in: Expunge all references to intl subdirectory.
Add -I../intl to INCLUDES.
* intl.h: Include libintl.h if and only if ENABLE_NLS is defined.
intl:
* Makefile.in: Remove unnecessary capabilities for
installation, build of shared libraries, generation of
distribution tarballs, etc. Fix all the places that rely on
the parent directory. Don't generate libgnuintl.h from
anything; do generate $(objdir)/libintl.h from libgnuintl.h if
necessary. Adjust DEFS for use of config.h.
* libgnuintl.h.in: Rename libgnuintl.h.
* README: New file.
* config.charset, ref-add.sin, ref-del.sin: Delete (unused).
* COPYING.LIB-2.0, COPYING.LIB-2.1: Delete (redundant).
* aclocal.m4: New; generated per instructions in gettext manual.
* configure.in: New; written from scratch for this configuration.
* configure, config.h.in: Generated.
contrib:
* gcc_update: Remove gcc/intl/plural.c from list.
Add new generated files intl/plural.c, intl/configure,
intl/config.h.in.
From-SVN: r68928
2003-07-05 02:18:54 +08:00
|
|
|
const char *str;
|
ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.
From-SVN: r46233
2001-10-13 01:24:30 +08:00
|
|
|
{
|
|
|
|
/* Do nothing. We don't print error messages here. */
|
|
|
|
}
|