Add i18n support to the GLR skeleton. Partially fix the C++

skeleton; a C++ expert needs to finish this.  Remove debugging
msgids; there's little point to having them translated, since they
can be understood only by someone who can read the
(English-language) source code.

Generate runtime-po/bison-runtime.pot automatically, so that we
don't have to worry about garbage getting in that file.  We'll
make sure after the next official release that old msgids don't
get lost.  See
<http://lists.gnu.org/archive/html/bison-patches/2005-07/msg00119.html>.

* runtime-po/Makefile.in.in, runtime-po/bison-runtime.pot: Remove.
Now auto-generated.
* PACKAGING: Don't claim that Gawk, GCC, Perl use this method yet.
Fix typos in explanations of the runtime file.
* bootstrap: Change gettext keyword from YYI18N to YY_.
Use standard Makefile.in.in in runtime-po, since we'll arrange
for backward-compatible bison-runtime.po files in a different way.
* data/glr.c (YY_): New macro, from yacc.c.
(yyuserAction, yyreportAmbiguity, yyreportSyntaxError, yyparse):
Translate messages intended for users.
(yyreportSyntaxError): Change "virtual memory" to "memory" to match
the wording in the other skeletons.  We don't know that the memory
is virtual.
* data/lalr1.cc (YY_): Renamed from _.  All uses changed.
Use same method that yacc.c uses.
Don't translate debugging messages.
(yy::yyreport_syntax_error): Put in a FIXME for the i18n stuff;
it doesn't work (yet), and requires C++ expertise to fix.
* data/yacc.c (YY_): Renamed from YY18N.  All uses changed.
Move defn to a more logical place, to be consistent with other
skeletons.
Don't translate debugging messages.
Don't assume line numbers fit in unsigned int; use unsigned long fmts.
* doc/bison.texinfo: Mention <libintl.h>.  Change glibc cross reference
to gettext cross reference.  Add indexing terms.  Mention YYENABLE_NLS.
* runtime-po/POTFILES.in: Add data/glr.c, data/lalr1.cc.
This commit is contained in:
Paul Eggert
2005-07-18 22:10:15 +00:00
parent ac8c5689f8
commit 30757c8c93
11 changed files with 153 additions and 538 deletions

View File

@@ -1,5 +1,44 @@
2005-07-18 Paul Eggert <eggert@cs.ucla.edu> 2005-07-18 Paul Eggert <eggert@cs.ucla.edu>
Add i18n support to the GLR skeleton. Partially fix the C++
skeleton; a C++ expert needs to finish this. Remove debugging
msgids; there's little point to having them translated, since they
can be understood only by someone who can read the
(English-language) source code.
Generate runtime-po/bison-runtime.pot automatically, so that we
don't have to worry about garbage getting in that file. We'll
make sure after the next official release that old msgids don't
get lost. See
<http://lists.gnu.org/archive/html/bison-patches/2005-07/msg00119.html>.
* runtime-po/Makefile.in.in, runtime-po/bison-runtime.pot: Remove.
Now auto-generated.
* PACKAGING: Don't claim that Gawk, GCC, Perl use this method yet.
Fix typos in explanations of the runtime file.
* bootstrap: Change gettext keyword from YYI18N to YY_.
Use standard Makefile.in.in in runtime-po, since we'll arrange
for backward-compatible bison-runtime.po files in a different way.
* data/glr.c (YY_): New macro, from yacc.c.
(yyuserAction, yyreportAmbiguity, yyreportSyntaxError, yyparse):
Translate messages intended for users.
(yyreportSyntaxError): Change "virtual memory" to "memory" to match
the wording in the other skeletons. We don't know that the memory
is virtual.
* data/lalr1.cc (YY_): Renamed from _. All uses changed.
Use same method that yacc.c uses.
Don't translate debugging messages.
(yy::yyreport_syntax_error): Put in a FIXME for the i18n stuff;
it doesn't work (yet), and requires C++ expertise to fix.
* data/yacc.c (YY_): Renamed from YY18N. All uses changed.
Move defn to a more logical place, to be consistent with other
skeletons.
Don't translate debugging messages.
Don't assume line numbers fit in unsigned int; use unsigned long fmts.
* doc/bison.texinfo: Mention <libintl.h>. Change glibc cross reference
to gettext cross reference. Add indexing terms. Mention YYENABLE_NLS.
* runtime-po/POTFILES.in: Add data/glr.c, data/lalr1.cc.
Fix yyerror / yylex test glitches noted by twlevo@xs4all.nl. Fix yyerror / yylex test glitches noted by twlevo@xs4all.nl.
* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Have yyerror return * tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Have yyerror return
void, not int. void, not int.

View File

@@ -17,8 +17,8 @@ be split into two packages:
The 'bison-runtime' binary package is much smaller than the 'bison' The 'bison-runtime' binary package is much smaller than the 'bison'
binary package. It should be included in any distribution that binary package. It should be included in any distribution that
contains programs that use the diagnostics contained in contains localized programs that use the diagnostics contained in
Bison-generated parsers, e.g., Gawk, GCC, Perl. Bison-generated parsers.
If you want to install both packages at the same time, you simply do If you want to install both packages at the same time, you simply do
at the toplevel directory: at the toplevel directory:
@@ -27,12 +27,12 @@ at the toplevel directory:
make make
make install make install
After installation, the files After installation, the file
$prefix/share/locale/*/LC_MESSAGES/bison-runtime.mo $prefix/share/locale/*/LC_MESSAGES/bison-runtime.mo
belong to the bison-runtime package; all other installed files belong belongs to the bison-runtime package; all other installed files belong
to in the bison package. to the bison package.
----- -----

View File

@@ -246,11 +246,11 @@ sed '/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-bison@gnu.org/' po/Makevars.template >p
sed ' sed '
s/^\(DOMAIN\) *=.*/\1 = bison-runtime/ s/^\(DOMAIN\) *=.*/\1 = bison-runtime/
s/^\(subdir\) *=.*/\1 = runtime-po/ s/^\(subdir\) *=.*/\1 = runtime-po/
s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = --keyword=YYI18N/ s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = --keyword=YY_/
' <po/Makevars >runtime-po/Makevars ' <po/Makevars >runtime-po/Makevars
# Copy identical files from po to runtime-po. # Copy identical files from po to runtime-po.
(cd po && cp -p *-quot *.header *.sed *.sin ../runtime-po) (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
# if src/parse-gram.[ch] are out of date, rebuild them. # if src/parse-gram.[ch] are out of date, rebuild them.
parse_gram_y=`find src/parse-gram.y \ parse_gram_y=`find src/parse-gram.y \

View File

@@ -403,7 +403,7 @@ b4_location_if([ (void) yylocationp;
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
]b4_location_if([ YY_LOCATION_PRINT (yyoutput, *yylocationp); ]b4_location_if([ YY_LOCATION_PRINT (yyoutput, *yylocationp);
fprintf (yyoutput, ": "); YYFPRINTF (yyoutput, ": ");
])dnl ])dnl
[ [
# ifdef YYPRINT # ifdef YYPRINT

View File

@@ -218,6 +218,18 @@ b4_syncline([@oline@], [@ofile@])
#include <stdarg.h> #include <stdarg.h>
#include <setjmp.h> #include <setjmp.h>
#ifndef YY_
# if YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
# define YY_(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YY_
# define YY_(msgid) msgid
# endif
#endif
#ifndef YYFREE #ifndef YYFREE
# define YYFREE free # define YYFREE free
#endif #endif
@@ -771,7 +783,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
# define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal) # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
# undef YYBACKUP # undef YYBACKUP
# define YYBACKUP(Token, Value) \ # define YYBACKUP(Token, Value) \
return yyerror (]b4_yyerror_args["syntax error: cannot back up"), \ return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
yyerrok, yyerr yyerrok, yyerr
yylow = 1; yylow = 1;
@@ -1524,7 +1536,7 @@ yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1,
yyreportTree (yyx1, 2); yyreportTree (yyx1, 2);
YYFPRINTF (stderr, "\n"); YYFPRINTF (stderr, "\n");
#endif #endif
yyFail (yystack][]b4_pure_args[, "ambiguity detected"); yyFail (yystack][]b4_pure_args[, YY_("ambiguity detected"));
} }
@@ -1774,8 +1786,8 @@ yyreportSyntaxError (yyGLRStack* yystack,
yyprefix = yyor; yyprefix = yyor;
} }
yyf = yyformat; yyf = YY_(yyformat);
yysize1 = yysize + (yyfmt - yyformat); yysize1 = yysize + strlen (yyf);
yysize_overflow |= yysize1 < yysize; yysize_overflow |= yysize1 < yysize;
yysize = yysize1; yysize = yysize1;
@@ -1803,11 +1815,11 @@ yyreportSyntaxError (yyGLRStack* yystack,
YYFREE (yymsg); YYFREE (yymsg);
} }
else else
yyerror (]b4_lyyerror_args["syntax error; also virtual memory exhausted"); yyerror (]b4_lyyerror_args[YY_("syntax error; also memory exhausted"));
} }
else else
#endif /* YYERROR_VERBOSE */ #endif /* YYERROR_VERBOSE */
yyerror (]b4_lyyerror_args["syntax error"); yyerror (]b4_lyyerror_args[YY_("syntax error"));
yynerrs += 1; yynerrs += 1;
} }
} }
@@ -2068,7 +2080,7 @@ b4_syncline([@oline@], [@ofile@])])dnl
{ {
yyundeleteLastStack (&yystack); yyundeleteLastStack (&yystack);
if (yystack.yytops.yysize == 0) if (yystack.yytops.yysize == 0)
yyFail (&yystack][]b4_lpure_args[, "syntax error"); yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
YYCHK1 (yyresolveStack (&yystack]b4_user_args[)); YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[ ]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = *yyllocp;]])[
@@ -2098,7 +2110,7 @@ b4_syncline([@oline@], [@ofile@])])dnl
goto yyreturn; goto yyreturn;
yyoverflowlab: yyoverflowlab:
yyerror (]b4_lyyerror_args["parser stack overflow"); yyerror (]b4_lyyerror_args[YY_("parser stack overflow"));
yyresult = 2; yyresult = 2;
/* Fall through. */ /* Fall through. */

View File

@@ -417,9 +417,16 @@ m4_if(b4_defines_flag, 0, [],
[ [
#include @output_header_name@])[ #include @output_header_name@])[
/* INFRINGES ON USER NAME SPACE */ #ifndef YY_
#ifndef _ # if YYENABLE_NLS
# define _(msgid) msgid # if ENABLE_NLS
# include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
# define YY_(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YY_
# define YY_(msgid) msgid
# endif
#endif #endif
/* A pseudo ostream that takes yydebug_ into account. */ /* A pseudo ostream that takes yydebug_ into account. */
@@ -551,7 +558,7 @@ yy::]b4_parser_class_name[::parse ()
{ {
int yyresult_; int yyresult_;
YYCDEBUG << _("Starting parse") << std::endl; YYCDEBUG << "Starting parse" << std::endl;
yynerrs_ = 0; yynerrs_ = 0;
yyerrstatus_ = 0; yyerrstatus_ = 0;
@@ -583,7 +590,7 @@ b4_syncline([@oline@], [@ofile@])])dnl
/* New state. */ /* New state. */
yynewstate: yynewstate:
yystate_stack_.push (yystate_); yystate_stack_.push (yystate_);
YYCDEBUG << _("Entering state ") << yystate_ << std::endl; YYCDEBUG << "Entering state " << yystate_ << std::endl;
goto yybackup; goto yybackup;
/* Backup. */ /* Backup. */
@@ -602,12 +609,12 @@ yybackup:
if (yylooka_ <= yyeof_) if (yylooka_ <= yyeof_)
{ {
yylooka_ = yyilooka_ = yyeof_; yylooka_ = yyilooka_ = yyeof_;
YYCDEBUG << _("Now at end of input.") << std::endl; YYCDEBUG << "Now at end of input." << std::endl;
} }
else else
{ {
yyilooka_ = yytranslate_ (yylooka_); yyilooka_ = yytranslate_ (yylooka_);
YY_SYMBOL_PRINT (_("Next token is"), yyilooka_, &yylval, &yylloc); YY_SYMBOL_PRINT ("Next token is", yyilooka_, &yylval, &yylloc);
} }
/* If the proper action on seeing token ILOOKA_ is to reduce or to /* If the proper action on seeing token ILOOKA_ is to reduce or to
@@ -636,7 +643,7 @@ yybackup:
goto yyacceptlab; goto yyacceptlab;
/* Shift the look-ahead token. */ /* Shift the look-ahead token. */
YY_SYMBOL_PRINT (_("Shifting"), yyilooka_, &yylval, &yylloc); YY_SYMBOL_PRINT ("Shifting", yyilooka_, &yylval, &yylloc);
/* Discard the token being shifted unless it is eof. */ /* Discard the token being shifted unless it is eof. */
if (yylooka_ != yyeof_) if (yylooka_ != yyeof_)
@@ -734,7 +741,7 @@ yyerrlab:
yypop_ (); yypop_ ();
if (yystate_stack_.height () == 1) if (yystate_stack_.height () == 1)
YYABORT; YYABORT;
yydestruct_ (_("Error: popping"), yydestruct_ ("Error: popping",
yystos_[yystate_stack_[0]], yystos_[yystate_stack_[0]],
&yysemantic_stack_[0], &yysemantic_stack_[0],
&yylocation_stack_[0]); &yylocation_stack_[0]);
@@ -742,7 +749,7 @@ yyerrlab:
} }
else else
{ {
yydestruct_ (_("Error: discarding"), yyilooka_, &yylval, &yylloc); yydestruct_ ("Error: discarding", yyilooka_, &yylval, &yylloc);
yylooka_ = yyempty_; yylooka_ = yyempty_;
} }
} }
@@ -793,7 +800,7 @@ yyerrlab1:
YYABORT; YYABORT;
yyerror_range_[0] = yylocation_stack_[0]; yyerror_range_[0] = yylocation_stack_[0];
yydestruct_ (_("Error: popping"), yydestruct_ ("Error: popping",
yystos_[yystate_], yystos_[yystate_],
&yysemantic_stack_[0], &yylocation_stack_[0]); &yysemantic_stack_[0], &yylocation_stack_[0]);
yypop_ (); yypop_ ();
@@ -812,7 +819,7 @@ yyerrlab1:
yylocation_stack_.push (yyloc); yylocation_stack_.push (yyloc);
/* Shift the error token. */ /* Shift the error token. */
YY_SYMBOL_PRINT (_("Shifting"), yystos_[yyn_], YY_SYMBOL_PRINT ("Shifting", yystos_[yyn_],
&yysemantic_stack_[0], &yylocation_stack_[0]); &yysemantic_stack_[0], &yylocation_stack_[0]);
yystate_ = yyn_; yystate_ = yyn_;
@@ -830,14 +837,14 @@ yyabortlab:
yyreturn: yyreturn:
if (yylooka_ != yyeof_ && yylooka_ != yyempty_) if (yylooka_ != yyeof_ && yylooka_ != yyempty_)
yydestruct_ (_("Error: discarding lookahead"), yyilooka_, &yylval, &yylloc); yydestruct_ ("Error: discarding lookahead", yyilooka_, &yylval, &yylloc);
return yyresult_; return yyresult_;
} }
void void
yy::]b4_parser_class_name[::yylex_ () yy::]b4_parser_class_name[::yylex_ ()
{ {
YYCDEBUG << _("Reading a token: "); YYCDEBUG << "Reading a token: ";
yylooka_ = ]b4_c_function_call([yylex], [int], yylooka_ = ]b4_c_function_call([yylex], [int],
[[YYSTYPE*], [&yylval]][]dnl [[YYSTYPE*], [&yylval]][]dnl
b4_location_if([, [[location*], [&yylloc]]])dnl b4_location_if([, [[location*], [&yylloc]]])dnl
@@ -869,7 +876,15 @@ yy::]b4_parser_class_name[::yyreport_syntax_error_ ()
if (yycheck_[x + yyn_] == x && x != yyterror_) if (yycheck_[x + yyn_] == x && x != yyterror_)
++count; ++count;
message = _("syntax error, unexpected "); // FIXME: This method of building the message is not compatible
// with internationalization. It should work like yacc.c does it.
// That is, first build a string that looks like this:
// "syntax error, unexpected %s or %s or %s"
// Then, invoke YY_ on this string.
// Finally, use the string as a format to output
// yyname_[yyilooka_], etc.
// Until this gets fixed, this message appears in English only.
message = "syntax error, unexpected ";
message += yyname_[yyilooka_]; message += yyname_[yyilooka_];
if (count < 5) if (count < 5)
{ {
@@ -877,14 +892,14 @@ yy::]b4_parser_class_name[::yyreport_syntax_error_ ()
for (int x = yyxbegin; x < yyxend; ++x) for (int x = yyxbegin; x < yyxend; ++x)
if (yycheck_[x + yyn_] == x && x != yyterror_) if (yycheck_[x + yyn_] == x && x != yyterror_)
{ {
message += (!count++) ? _(", expecting ") : _(" or "); message += (!count++) ? ", expecting " : " or ";
message += yyname_[x]; message += yyname_[x];
} }
} }
} }
else else
#endif #endif
message = _("syntax error"); message = YY_("syntax error");
error (yylloc, message); error (yylloc, message);
} }
} }
@@ -1008,7 +1023,7 @@ yy::]b4_parser_class_name[::yyrline_[] =
void void
yy::]b4_parser_class_name[::yystack_print_ () yy::]b4_parser_class_name[::yystack_print_ ()
{ {
*yycdebug_ << _("Stack now"); *yycdebug_ << "Stack now";
for (state_stack_type::const_iterator i = yystate_stack_.begin (); for (state_stack_type::const_iterator i = yystate_stack_.begin ();
i != yystate_stack_.end (); ++i) i != yystate_stack_.end (); ++i)
*yycdebug_ << ' ' << *i; *yycdebug_ << ' ' << *i;
@@ -1021,8 +1036,8 @@ yy::]b4_parser_class_name[::yyreduce_print_ (int yyrule)
{ {
unsigned int yylno = yyrline_[yyrule]; unsigned int yylno = yyrline_[yyrule];
/* Print the symbols being reduced, and their result. */ /* Print the symbols being reduced, and their result. */
*yycdebug_ << _("Reducing stack by rule ") << yyn_ - 1 *yycdebug_ << "Reducing stack by rule " << yyn_ - 1
<< " (" << _("line") << ' ' << yylno << "), "; << " (line " << yylno << "), ";
for (]b4_int_type_for([b4_prhs])[ i = yyprhs_[yyn_]; for (]b4_int_type_for([b4_prhs])[ i = yyprhs_[yyn_];
0 <= yyrhs_[i]; ++i) 0 <= yyrhs_[i]; ++i)
*yycdebug_ << yyname_[yyrhs_[i]] << ' '; *yycdebug_ << yyname_[yyrhs_[i]] << ' ';

View File

@@ -228,6 +228,18 @@ b4_syncline([@oline@], [@ofile@])[
# define YYSIZE_T unsigned int # define YYSIZE_T unsigned int
#endif #endif
#ifndef YY_
# if YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
# define YY_(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YY_
# define YY_(msgid) msgid
# endif
#endif
#if ! defined (yyoverflow) || YYERROR_VERBOSE #if ! defined (yyoverflow) || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */ /* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -412,18 +424,6 @@ static const char *const yytname[] =
}; };
#endif #endif
#ifndef YYI18N
# if YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
# define YYI18N(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YYI18N
# define YYI18N(msgid) msgid
# endif
#endif
# ifdef YYPRINT # ifdef YYPRINT
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
token YYLEX-NUM. */ token YYLEX-NUM. */
@@ -525,7 +525,7 @@ do \
} \ } \
else \ else \
{ \ { \
yyerror (]b4_yyerror_args[YYI18N ("syntax error: cannot back up")); \ yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \
YYERROR; \ YYERROR; \
} \ } \
while (0) while (0)
@@ -619,7 +619,7 @@ do { \
[[short int *bottom], [bottom]], [[short int *bottom], [bottom]],
[[short int *top], [top]])[ [[short int *top], [top]])[
{ {
YYFPRINTF (stderr, YYI18N ("Stack now")); YYFPRINTF (stderr, "Stack now");
for (/* Nothing. */; bottom <= top; ++bottom) for (/* Nothing. */; bottom <= top; ++bottom)
YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, " %d", *bottom);
YYFPRINTF (stderr, "\n"); YYFPRINTF (stderr, "\n");
@@ -640,8 +640,8 @@ do { \
[[int yyrule], [yyrule]])[ [[int yyrule], [yyrule]])[
{ {
int yyi; int yyi;
unsigned int yylno = yyrline[yyrule]; unsigned long int yylno = yyrline[yyrule];
YYFPRINTF (stderr, YYI18N ("Reducing stack by rule %d (line %u), "), YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
yyrule - 1, yylno); yyrule - 1, yylno);
/* Print the symbols being reduced, and their result. */ /* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
@@ -911,7 +911,7 @@ m4_ifdef([b4_at_dollar_used], [[ yylsp[0] = yylloc;
data in use in that stack, in bytes. This used to be a data in use in that stack, in bytes. This used to be a
conditional around just the two extra args, but that might conditional around just the two extra args, but that might
be undefined if yyoverflow is a macro. */ be undefined if yyoverflow is a macro. */
yyoverflow (YYI18N ("parser stack overflow"), yyoverflow (YY_("parser stack overflow"),
&yyss1, yysize * sizeof (*yyssp), &yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp), &yyvs1, yysize * sizeof (*yyvsp),
]b4_location_if([ &yyls1, yysize * sizeof (*yylsp),])[ ]b4_location_if([ &yyls1, yysize * sizeof (*yylsp),])[
@@ -951,14 +951,14 @@ m4_ifdef([b4_at_dollar_used], [[ yylsp[0] = yylloc;
yyvsp = yyvs + yysize - 1; yyvsp = yyvs + yysize - 1;
]b4_location_if([ yylsp = yyls + yysize - 1;])[ ]b4_location_if([ yylsp = yyls + yysize - 1;])[
YYDPRINTF ((stderr, YYI18N ("Stack size increased to %lu\n"), YYDPRINTF ((stderr, "Stack size increased to %lu\n",
(unsigned long int) yystacksize)); (unsigned long int) yystacksize));
if (yyss + yystacksize - 1 <= yyssp) if (yyss + yystacksize - 1 <= yyssp)
YYABORT; YYABORT;
} }
YYDPRINTF ((stderr, YYI18N ("Entering state %d\n"), yystate)); YYDPRINTF ((stderr, "Entering state %d\n", yystate));
goto yybackup; goto yybackup;
@@ -982,19 +982,19 @@ yybackup:
/* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
if (yychar == YYEMPTY) if (yychar == YYEMPTY)
{ {
YYDPRINTF ((stderr, YYI18N ("Reading a token: "))); YYDPRINTF ((stderr, "Reading a token: "));
yychar = YYLEX; yychar = YYLEX;
} }
if (yychar <= YYEOF) if (yychar <= YYEOF)
{ {
yychar = yytoken = YYEOF; yychar = yytoken = YYEOF;
YYDPRINTF ((stderr, YYI18N ("Now at end of input.\n"))); YYDPRINTF ((stderr, "Now at end of input.\n"));
} }
else else
{ {
yytoken = YYTRANSLATE (yychar); yytoken = YYTRANSLATE (yychar);
YY_SYMBOL_PRINT (YYI18N ("Next token is"), yytoken, &yylval, &yylloc); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
} }
/* If the proper action on seeing token YYTOKEN is to reduce or to /* If the proper action on seeing token YYTOKEN is to reduce or to
@@ -1015,7 +1015,7 @@ yybackup:
YYACCEPT; YYACCEPT;
/* Shift the look-ahead token. */ /* Shift the look-ahead token. */
YY_SYMBOL_PRINT (YYI18N ("Shifting"), yytoken, &yylval, &yylloc); YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
/* Discard the token being shifted unless it is eof. */ /* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF) if (yychar != YYEOF)
@@ -1123,11 +1123,11 @@ yyerrlab:
#if 0 #if 0
/* This is so xgettext sees the translatable formats that are /* This is so xgettext sees the translatable formats that are
constructed on the fly. */ constructed on the fly. */
YYI18N ("syntax error, unexpected %s"); YY_("syntax error, unexpected %s");
YYI18N ("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s");
YYI18N ("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s");
YYI18N ("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s");
YYI18N ("syntax error, unexpected %s, expecting %s or %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
#endif #endif
char *yyfmt; char *yyfmt;
char const *yyf; char const *yyf;
@@ -1170,7 +1170,7 @@ yyerrlab:
yyprefix = yyor; yyprefix = yyor;
} }
yyf = YYI18N (yyformat); yyf = YY_(yyformat);
yysize1 = yysize + yystrlen (yyf); yysize1 = yysize + yystrlen (yyf);
yysize_overflow |= yysize1 < yysize; yysize_overflow |= yysize1 < yysize;
yysize = yysize1; yysize = yysize1;
@@ -1201,11 +1201,11 @@ yyerrlab:
YYSTACK_FREE (yymsg); YYSTACK_FREE (yymsg);
} }
else else
yyerror (]b4_yyerror_args[YYI18N ("syntax error; also memory exhausted")); yyerror (]b4_yyerror_args[YY_("syntax error; also memory exhausted"));
} }
else else
#endif /* YYERROR_VERBOSE */ #endif /* YYERROR_VERBOSE */
yyerror (]b4_yyerror_args[YYI18N ("syntax error")); yyerror (]b4_yyerror_args[YY_("syntax error"));
} }
]b4_location_if([[ yyerror_range[0] = yylloc;]])[ ]b4_location_if([[ yyerror_range[0] = yylloc;]])[
@@ -1224,7 +1224,7 @@ yyerrlab:
} }
else else
{ {
yydestruct (YYI18N ("Error: discarding"), yytoken, &yylval]b4_location_if([, &yylloc])[); yydestruct ("Error: discarding", yytoken, &yylval]b4_location_if([, &yylloc])[);
yychar = YYEMPTY; yychar = YYEMPTY;
} }
} }
@@ -1278,7 +1278,7 @@ yyerrlab1:
YYABORT; YYABORT;
]b4_location_if([[ yyerror_range[0] = *yylsp;]])[ ]b4_location_if([[ yyerror_range[0] = *yylsp;]])[
yydestruct (YYI18N ("Error: popping"), yystos[yystate], yyvsp]b4_location_if([, yylsp])[); yydestruct ("Error: popping", yystos[yystate], yyvsp]b4_location_if([, yylsp])[);
YYPOPSTACK; YYPOPSTACK;
yystate = *yyssp; yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp); YY_STACK_PRINT (yyss, yyssp);
@@ -1296,7 +1296,7 @@ yyerrlab1:
*++yylsp = yyloc;]])[ *++yylsp = yyloc;]])[
/* Shift the error token. */ /* Shift the error token. */
YY_SYMBOL_PRINT (YYI18N ("Shifting"), yystos[yyn], yyvsp, yylsp); YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
yystate = yyn; yystate = yyn;
goto yynewstate; goto yynewstate;
@@ -1321,14 +1321,14 @@ yyabortlab:
| yyoverflowlab -- parser overflow comes here. | | yyoverflowlab -- parser overflow comes here. |
`----------------------------------------------*/ `----------------------------------------------*/
yyoverflowlab: yyoverflowlab:
yyerror (]b4_yyerror_args[YYI18N ("parser stack overflow")); yyerror (]b4_yyerror_args[YY_("parser stack overflow"));
yyresult = 2; yyresult = 2;
/* Fall through. */ /* Fall through. */
#endif #endif
yyreturn: yyreturn:
if (yychar != YYEOF && yychar != YYEMPTY) if (yychar != YYEOF && yychar != YYEMPTY)
yydestruct (YYI18N ("Error: discarding lookahead"), yydestruct ("Error: discarding lookahead",
yytoken, &yylval]b4_location_if([, &yylloc])[); yytoken, &yylval]b4_location_if([, &yylloc])[);
if (yyssp != yyss) if (yyssp != yyss)
for (;;) for (;;)
@@ -1337,7 +1337,7 @@ yyreturn:
YYPOPSTACK; YYPOPSTACK;
if (yyssp == yyss) if (yyssp == yyss)
break; break;
yydestruct (YYI18N ("Error: popping"), yydestruct ("Error: popping",
yystos[*yyssp], yyvsp]b4_location_if([, yylsp])[); yystos[*yyssp], yyvsp]b4_location_if([, yylsp])[);
} }
#ifndef yyoverflow #ifndef yyoverflow

View File

@@ -1203,7 +1203,9 @@ In some cases the Bison parser file includes system headers, and in
those cases your code should respect the identifiers reserved by those those cases your code should respect the identifiers reserved by those
headers. On some non-@acronym{GNU} hosts, @code{<alloca.h>}, headers. On some non-@acronym{GNU} hosts, @code{<alloca.h>},
@code{<stddef.h>}, and @code{<stdlib.h>} are included as needed to @code{<stddef.h>}, and @code{<stdlib.h>} are included as needed to
declare memory allocators and related types. Other system headers may declare memory allocators and related types. @code{<libintl.h>} is
included if message translation is in use
(@pxref{Internationalization}). Other system headers may
be included if you define @code{YYDEBUG} to a nonzero value be included if you define @code{YYDEBUG} to a nonzero value
(@pxref{Tracing, ,Tracing Your Parser}). (@pxref{Tracing, ,Tracing Your Parser}).
@@ -4821,8 +4823,8 @@ A Bison-generated parser can print diagnostics, including error and
tracing messages. By default, they appear in English. However, Bison tracing messages. By default, they appear in English. However, Bison
also supports outputting diagnostics in the user's native language. also supports outputting diagnostics in the user's native language.
To make this work, the user should set the usual environment To make this work, the user should set the usual environment
variables. @xref{Using gettextized software, , User influence on variables. @xref{Users, , The User's View, gettext, GNU
@code{gettext}, libc, The GNU C Library Reference Manual}. For @code{gettext} utilities}. For
example, the shell command @samp{export LC_ALL=fr_CA.UTF-8} might set example, the shell command @samp{export LC_ALL=fr_CA.UTF-8} might set
the user's locale to French Canadian using the @acronym{UTF}-8 the user's locale to French Canadian using the @acronym{UTF}-8
encoding. The exact set of available locales depends on the user's encoding. The exact set of available locales depends on the user's
@@ -4835,6 +4837,7 @@ steps. Here we assume a package that uses @acronym{GNU} Autoconf and
@enumerate @enumerate
@item @item
@cindex bison-i18n.m4
Into the directory containing the @acronym{GNU} Autoconf macros used Into the directory containing the @acronym{GNU} Autoconf macros used
by the package---often called @file{m4}---copy the by the package---often called @file{m4}---copy the
@file{bison-i18n.m4} file installed by Bison under @file{bison-i18n.m4} file installed by Bison under
@@ -4846,11 +4849,16 @@ cp /usr/local/share/aclocal/bison-i18n.m4 m4/bison-i18n.m4
@end example @end example
@item @item
@findex BISON_I18N
@vindex BISON_LOCALEDIR
@vindex YYENABLE_NLS
In the top-level @file{configure.ac}, after the @code{AM_GNU_GETTEXT} In the top-level @file{configure.ac}, after the @code{AM_GNU_GETTEXT}
invocation, add an invocation of @code{BISON_I18N}. This macro is invocation, add an invocation of @code{BISON_I18N}. This macro is
defined in the file @file{bison-i18n.m4} that you copied earlier. It defined in the file @file{bison-i18n.m4} that you copied earlier. It
causes @samp{configure} to find the value of the causes @samp{configure} to find the value of the
@code{BISON_LOCALEDIR} variable. @code{BISON_LOCALEDIR} variable, and it defines the source-language
symbol @code{YYENABLE_NLS} to enable translations in the
Bison-generated parser.
@item @item
In the @code{main} function of your program, designate the directory In the @code{main} function of your program, designate the directory

View File

@@ -1,356 +0,0 @@
# Makefile for PO directory in any package using GNU gettext.
# Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
#
# This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU General Public
# License but which still want to provide support for the GNU gettext
# functionality.
# Please note that the actual code of GNU gettext is covered by the GNU
# General Public License and is *not* in the public domain.
PACKAGE = @PACKAGE@
VERSION = @VERSION@
SHELL = /bin/sh
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
datadir = @datadir@
localedir = $(datadir)/locale
gettextsrcdir = $(datadir)/gettext/po
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MKINSTALLDIRS = @MKINSTALLDIRS@
mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
GMSGFMT = @GMSGFMT@
MSGFMT = @MSGFMT@
XGETTEXT = @XGETTEXT@
MSGMERGE = msgmerge
MSGMERGE_UPDATE = @MSGMERGE@ --update
MSGINIT = msginit
MSGCONV = msgconv
MSGFILTER = msgfilter
POFILES = @POFILES@
GMOFILES = @GMOFILES@
UPDATEPOFILES = @UPDATEPOFILES@
DUMMYPOFILES = @DUMMYPOFILES@
DISTFILES.common = Makefile.in.in remove-potcdate.sin \
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \
$(POFILES) $(GMOFILES) \
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
POTFILES = \
CATALOGS = @CATALOGS@
# Makevars gets inserted here. (Don't remove this line!)
.SUFFIXES:
.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update
.po.mo:
@echo "$(MSGFMT) -c -o $@ $<"; \
$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
.po.gmo:
@lang=`echo $* | sed -e 's,.*/,,'`; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
.sin.sed:
sed -e '/^#/d' $< > t-$@
mv t-$@ $@
all: all-@USE_NLS@
all-yes: stamp-po
all-no:
# stamp-po is a timestamp denoting the last time at which the CATALOGS have
# been loosely updated. Its purpose is that when a developer or translator
# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
# invocations of "make" will do nothing. This timestamp would not be necessary
# if updating the $(CATALOGS) would always touch them; however, the rule for
# $(POFILES) has been designed to not touch files that don't need to be
# changed.
stamp-po: $(srcdir)/$(DOMAIN).pot
test -z "$(CATALOGS)" || $(MAKE) $(CATALOGS)
@echo "touch stamp-po"
@echo timestamp > stamp-poT
@mv stamp-poT stamp-po
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
# otherwise packages like GCC can not be built if only parts of the source
# have been downloaded.
# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
$(XGETTEXT) -o $(DOMAIN).old.pot --no-location $(DOMAIN).pot && \
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
--add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
--files-from=$(srcdir)/POTFILES.in $(subdir)/$(DOMAIN).old.pot \
--copyright-holder='$(COPYRIGHT_HOLDER)' \
--msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
rm -f $(DOMAIN).old.pot
test ! -f $(DOMAIN).po || { \
if test -f $(srcdir)/$(DOMAIN).pot; then \
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
else \
rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
fi; \
else \
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
fi; \
}
# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
# every "make" invocation, only create it when it is missing.
# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
$(srcdir)/$(DOMAIN).pot:
$(MAKE) $(DOMAIN).pot-update
# This target rebuilds a PO file if $(DOMAIN).pot has changed.
# Note that a PO file is not touched if it doesn't need to be changed.
$(POFILES): $(srcdir)/$(DOMAIN).pot
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
install: install-exec install-data
install-exec:
install-data: install-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
for file in $(DISTFILES.common) Makevars.template; do \
$(INSTALL_DATA) $(srcdir)/$$file \
$(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
for file in Makevars; do \
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
else \
: ; \
fi
install-data-no: all
install-data-yes: all
$(mkinstalldirs) $(DESTDIR)$(datadir)
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
$(mkinstalldirs) $(DESTDIR)$$dir; \
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
if test -n "$$lc"; then \
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
for file in *; do \
if test -f $$file; then \
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
fi; \
done); \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
else \
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
:; \
else \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
fi; \
fi; \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
fi; \
done; \
done
install-strip: install
installdirs: installdirs-exec installdirs-data
installdirs-exec:
installdirs-data: installdirs-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
else \
: ; \
fi
installdirs-data-no:
installdirs-data-yes:
$(mkinstalldirs) $(DESTDIR)$(datadir)
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
$(mkinstalldirs) $(DESTDIR)$$dir; \
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
if test -n "$$lc"; then \
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
for file in *; do \
if test -f $$file; then \
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
fi; \
done); \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
else \
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
:; \
else \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
fi; \
fi; \
fi; \
done; \
done
# Define this as empty until I found a useful application.
installcheck:
uninstall: uninstall-exec uninstall-data
uninstall-exec:
uninstall-data: uninstall-data-@USE_NLS@
if test "$(PACKAGE)" = "gettext-tools"; then \
for file in $(DISTFILES.common) Makevars.template; do \
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
else \
: ; \
fi
uninstall-data-no:
uninstall-data-yes:
catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
done; \
done
check: all
info dvi ps pdf html tags TAGS ctags CTAGS ID:
mostlyclean:
rm -f remove-potcdate.sed
rm -f stamp-poT
rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
rm -f *.old.pot
rm -fr *.o
clean: mostlyclean
distclean: clean
rm -f Makefile Makefile.in POTFILES *.mo
maintainer-clean: distclean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
rm -f stamp-po $(GMOFILES)
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
dist distdir:
$(MAKE) update-po
@$(MAKE) dist2
# This is a separate target because 'update-po' must be executed before.
dist2: $(DISTFILES)
dists="$(DISTFILES)"; \
if test "$(PACKAGE)" = "gettext-tools"; then \
dists="$$dists Makevars.template"; \
fi; \
if test -f $(srcdir)/ChangeLog; then \
dists="$$dists ChangeLog"; \
fi; \
for i in 0 1 2 3 4 5 6 7 8 9; do \
if test -f $(srcdir)/ChangeLog.$$i; then \
dists="$$dists ChangeLog.$$i"; \
fi; \
done; \
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
for file in $$dists; do \
if test -f $$file; then \
cp -p $$file $(distdir); \
else \
cp -p $(srcdir)/$$file $(distdir); \
fi; \
done
update-po: Makefile
$(MAKE) $(DOMAIN).pot-update
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
$(MAKE) update-gmo
# General rule for updating PO files.
.nop.po-update:
@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
tmpdir=`pwd`; \
echo "$$lang:"; \
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
cd $(srcdir); \
if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
rm -f $$tmpdir/$$lang.new.po; \
else \
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
:; \
else \
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
exit 1; \
fi; \
fi; \
else \
echo "msgmerge for $$lang.po failed!" 1>&2; \
rm -f $$tmpdir/$$lang.new.po; \
fi
$(DUMMYPOFILES):
update-gmo: Makefile $(GMOFILES)
@:
Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
$(SHELL) ./config.status
force:
# Tell versions [3.59,3.63) of GNU make not to export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -1 +1,3 @@
data/glr.c
data/lalr1.cc
data/yacc.c data/yacc.c

View File

@@ -1,105 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
"POT-Creation-Date: 2005-06-27 00:48+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: data/yacc.c:520
msgid "syntax error: cannot back up"
msgstr ""
#: data/yacc.c:614
msgid "Stack now"
msgstr ""
#: data/yacc.c:636
#, c-format
msgid "Reducing stack by rule %d (line %u), "
msgstr ""
#: data/yacc.c:905 data/yacc.c:1315
msgid "parser stack overflow"
msgstr ""
#: data/yacc.c:945
#, c-format
msgid "Stack size increased to %lu\n"
msgstr ""
#: data/yacc.c:952
#, c-format
msgid "Entering state %d\n"
msgstr ""
#: data/yacc.c:976
msgid "Reading a token: "
msgstr ""
#: data/yacc.c:983
msgid "Now at end of input.\n"
msgstr ""
#: data/yacc.c:988
msgid "Next token is"
msgstr ""
#: data/yacc.c:1009 data/yacc.c:1290
msgid "Shifting"
msgstr ""
#: data/yacc.c:1117
#, c-format
msgid "syntax error, unexpected %s"
msgstr ""
#: data/yacc.c:1118
#, c-format
msgid "syntax error, unexpected %s, expecting %s"
msgstr ""
#: data/yacc.c:1119
#, c-format
msgid "syntax error, unexpected %s, expecting %s or %s"
msgstr ""
#: data/yacc.c:1120
#, c-format
msgid "syntax error, unexpected %s, expecting %s or %s or %s"
msgstr ""
#: data/yacc.c:1121
#, c-format
msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
msgstr ""
#: data/yacc.c:1195
msgid "syntax error; also memory exhausted"
msgstr ""
#: data/yacc.c:1199
msgid "syntax error"
msgstr ""
#: data/yacc.c:1218
msgid "Error: discarding"
msgstr ""
#: data/yacc.c:1272 data/yacc.c:1331
msgid "Error: popping"
msgstr ""
#: data/yacc.c:1322
msgid "Error: discarding lookahead"
msgstr ""