diff options
author | Akim Demaille <demaille@gostai.com> | 2012-01-28 13:56:08 +0100 |
---|---|---|
committer | Akim Demaille <demaille@gostai.com> | 2012-01-30 10:39:37 +0100 |
commit | 11c866519f4a4d14d400e734790ef056135d2aeb (patch) | |
tree | 7582c485c60a99f1305ec22d8309fbe1ec056a8c | |
parent | 888b6ddfe44ee87ddc6bd77b960dde820c53f105 (diff) | |
download | bison-candidates/quotes.tar.gz |
use a more consistent quoting style.candidates/quotes
See <http://lists.gnu.org/archive/html/bug-bison/2012-01/msg00120.html>.
Use quotearg as often as possible instead of leaving the choice of
the quotes to the translators. Provide a means to disable locale-
dependent quotes. Use shorter messages. Factor similar messages
to a single format, to make localization easier.
* bootstrap.conf (gnulib_modules): Remove quote.
* lib/quote.h, lib/quote.c: New, based on gnulib's.
(quote_init, quote_free): New.
* src/main.c: Call them.
* src/files.c, src/getargs.c, src/muscle-tab.c, src/reader.c
* src/scan-code.l, src/scan-gram.l, src/symtab.c:
Use quote() or quotearg_colon() on printf arguments instead of
quotes in the format string.
* data/bison.m4: Keep sync with the changes in muscle-tab.c.
* tests/atlocal.in: Disable translated quotes.
* tests/skeletons.at, tests/input.at, tests/regression.at: Adjust
expected messages.
-rw-r--r-- | bootstrap.conf | 2 | ||||
-rw-r--r-- | data/bison.m4 | 8 | ||||
-rw-r--r-- | lib/.gitignore | 4 | ||||
-rw-r--r-- | lib/quote.c | 54 | ||||
-rw-r--r-- | lib/quote.h | 28 | ||||
-rw-r--r-- | m4/.gitignore | 1 | ||||
-rw-r--r-- | src/files.c | 4 | ||||
-rw-r--r-- | src/getargs.c | 10 | ||||
-rw-r--r-- | src/main.c | 6 | ||||
-rw-r--r-- | src/muscle-tab.c | 35 | ||||
-rw-r--r-- | src/muscle-tab.h | 2 | ||||
-rw-r--r-- | src/reader.c | 4 | ||||
-rw-r--r-- | src/scan-code.l | 12 | ||||
-rw-r--r-- | src/scan-gram.l | 9 | ||||
-rw-r--r-- | src/symtab.c | 5 | ||||
-rw-r--r-- | tests/atlocal.in | 4 | ||||
-rw-r--r-- | tests/input.at | 16 | ||||
-rw-r--r-- | tests/regression.at | 4 | ||||
-rw-r--r-- | tests/skeletons.at | 4 |
19 files changed, 152 insertions, 60 deletions
diff --git a/bootstrap.conf b/bootstrap.conf index 599b778f..6f422c12 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -22,7 +22,7 @@ gnulib_modules=' gettext git-version-gen gitlog-to-changelog gpl-3.0 hash inttypes isnan javacomp-script javaexec-script ldexpl maintainer-makefile malloc-gnu mbschr mbsrchr - mbswidth obstack perror pipe-posix quote quotearg realloc-posix + mbswidth obstack perror pipe-posix quotearg realloc-posix spawn-pipe stdbool stpcpy strdup-posix strerror strtoul strverscmp unistd unistd-safer unlocked-io update-copyright unsetenv verify warnings xalloc xalloc-die xstrndup diff --git a/data/bison.m4 b/data/bison.m4 index 7dfb1a72..37bc012f 100644 --- a/data/bison.m4 +++ b/data/bison.m4 @@ -598,7 +598,7 @@ m4_define([b4_percent_define_get_loc], [m4_pushdef([b4_loc], m4_indir([b4_percent_define_loc(]$1[)]))dnl b4_loc[]dnl m4_popdef([b4_loc])], - [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_get_loc]], [$1])])]) + [b4_fatal([[b4_percent_define_get_loc: undefined %%define variable '%s']], [$1])])]) # b4_percent_define_get_syncline(VARIABLE) # ---------------------------------------- @@ -615,7 +615,7 @@ m4_popdef([b4_loc])], m4_define([b4_percent_define_get_syncline], [m4_ifdef([b4_percent_define_syncline(]$1[)], [m4_indir([b4_percent_define_syncline(]$1[)])], - [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_get_syncline]], [$1])])]) + [b4_fatal([[b4_percent_define_get_syncline: undefined %%define variable '%s']], [$1])])]) # b4_percent_define_ifdef(VARIABLE, IF-TRUE, [IF-FALSE]) # ------------------------------------------------------ @@ -659,7 +659,7 @@ m4_define([b4_percent_define_flag_if], [[invalid value for %%define Boolean variable '%s']], [$1])], [[b4_percent_define_flag_if($1)]])])], - [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_flag_if]], [$1])])]) + [b4_fatal([[b4_percent_define_flag_if: undefined %%define variable '%s']], [$1])])]) # b4_percent_define_default(VARIABLE, DEFAULT) @@ -731,7 +731,7 @@ m4_define([_b4_percent_define_check_values], [[accepted value: '%s']], m4_dquote(b4_value))])])dnl m4_popdef([b4_good_value])], - [b4_fatal([[undefined %%define variable '%s' passed to b4_percent_define_check_values]], [$1])])]) + [b4_fatal([[b4_percent_define_check_values: undefined %%define variable '%s']], [$1])])]) # b4_percent_code_get([QUALIFIER]) # -------------------------------- diff --git a/lib/.gitignore b/lib/.gitignore index 54edced3..737dbba6 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,4 +1,3 @@ - /*.a /*.bak /*.o @@ -125,8 +124,6 @@ /printf-parse.c /printf-parse.h /printf.c -/quote.c -/quote.h /quotearg.c /quotearg.h /rawmemchr.c @@ -242,7 +239,6 @@ /xsize.h /xstrndup.c /xstrndup.h - /c-strcaseeq.h /fd-hook.c /fd-hook.h diff --git a/lib/quote.c b/lib/quote.c new file mode 100644 index 00000000..b897df6c --- /dev/null +++ b/lib/quote.c @@ -0,0 +1,54 @@ +/* quote.c - quote arguments for output + + Copyright (C) 1998-2001, 2003, 2005-2006, 2009-2012 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert <eggert@twinsun.com> */ + +#include <config.h> +#include <stdlib.h> + +#include <quotearg.h> +#include <streq.h> +#include <quote.h> + +void +quote_init (void) +{ + char const *cp = getenv ("LC_CTYPE"); + if (cp && STREQ (cp, "C", 'C', 0,0,0,0,0,0,0,0)) + set_custom_quoting (0, "'", "'"); + else + set_quoting_style (0, locale_quoting_style); +} + +void +quote_free (void) +{ + quotearg_free (); +} + +char const * +quote_n (int n, char const *name) +{ + return quotearg_n (n, name); +} + +char const * +quote (char const *name) +{ + return quote_n (0, name); +} diff --git a/lib/quote.h b/lib/quote.h new file mode 100644 index 00000000..8f545bba --- /dev/null +++ b/lib/quote.h @@ -0,0 +1,28 @@ +/* quote.h - prototypes for quote.c + + Copyright (C) 1998-2001, 2003, 2009-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + +void quote_init (void); +void quote_free (void); + +/* Return an unambiguous printable representation of NAME, + allocated in slot N, suitable for diagnostics. */ +char const *quote_n (int n, char const *name); + +/* Return an unambiguous printable representation of NAME, + suitable for diagnostics. */ +char const *quote (char const *name); diff --git a/m4/.gitignore b/m4/.gitignore index c50ed39a..f46e1646 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -166,3 +166,4 @@ /raise.m4 /ssize_t.m4 /strerror_r.m4 +/gnulib-comp.m4 diff --git a/src/files.c b/src/files.c index 66d92185..d80b718d 100644 --- a/src/files.c +++ b/src/files.c @@ -25,6 +25,7 @@ #include <dirname.h> #include <get-errno.h> #include <quote.h> +#include <quotearg.h> #include <stdio-safer.h> #include <xstrndup.h> @@ -109,7 +110,8 @@ xfopen (const char *name, const char *mode) ptr = fopen_safer (name, mode); if (!ptr) - error (EXIT_FAILURE, get_errno (), _("cannot open file '%s'"), name); + error (EXIT_FAILURE, get_errno (), + _("%s: cannot open"), quotearg_colon (name)); return ptr; } diff --git a/src/getargs.c b/src/getargs.c index 5fa3c452..e5d1faa3 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -26,7 +26,6 @@ #include <c-strcase.h> #include <configmake.h> #include <error.h> -#include <quotearg.h> /* Hack to get <getopt.h> to declare getopt with a prototype. */ #if lint && ! defined __GNU_LIBRARY__ @@ -45,6 +44,7 @@ #include "files.h" #include "getargs.h" #include "muscle-tab.h" +#include "quote.h" #include "uniqstr.h" bool defines_flag; @@ -421,14 +421,14 @@ language_argmatch (char const *arg, int prio, location loc) language = &valid_languages[i]; return; } - msg = _("invalid language '%s'"); + msg = _("%s: invalid language"); } else if (language_prio == prio) msg = _("multiple language declarations are invalid"); else return; - complain_at (loc, msg, arg); + complain_at (loc, msg, quotearg_colon (arg)); } /*----------------------. @@ -679,9 +679,9 @@ getargs (int argc, char *argv[]) if (argc - optind != 1) { if (argc - optind < 1) - error (0, 0, _("missing operand after '%s'"), argv[argc - 1]); + error (0, 0, _("%s: missing operand"), quotearg_colon (argv[argc - 1])); else - error (0, 0, _("extra operand '%s'"), argv[optind + 1]); + error (0, 0, _("extra operand %s"), quote (argv[optind + 1])); usage (EXIT_FAILURE); } @@ -24,7 +24,6 @@ #include <bitset_stats.h> #include <bitset.h> #include <configmake.h> -#include <quotearg.h> #include <timevar.h> #include "LR0.h" @@ -39,6 +38,7 @@ #include "muscle-tab.h" #include "nullable.h" #include "output.h" +#include "quote.h" #include "print.h" #include "print_graph.h" #include "print-xml.h" @@ -52,7 +52,6 @@ #include "uniqstr.h" - int main (int argc, char *argv[]) { @@ -62,6 +61,7 @@ main (int argc, char *argv[]) (void) bindtextdomain ("bison-runtime", LOCALEDIR); (void) textdomain (PACKAGE); + quote_init (); uniqstrs_new (); muscle_init (); @@ -192,7 +192,6 @@ main (int argc, char *argv[]) uniqstrs_free (); code_scanner_free (); skel_scanner_free (); - quotearg_free (); timevar_pop (TV_FREE); if (trace_flag & trace_bitsets) @@ -203,6 +202,7 @@ main (int argc, char *argv[]) /* Stop timing and print the times. */ timevar_stop (TV_TOTAL); timevar_print (stderr); + quote_free (); return complaint_issued ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/muscle-tab.c b/src/muscle-tab.c index e366d33b..bc1aa1fc 100644 --- a/src/muscle-tab.c +++ b/src/muscle-tab.c @@ -21,12 +21,12 @@ #include "system.h" #include <hash.h> -#include <quotearg.h> #include "complain.h" #include "files.h" -#include "muscle-tab.h" #include "getargs.h" +#include "muscle-tab.h" +#include "quote.h" /* A key-value pair, along with storage that can be reclaimed when this pair is no longer needed. */ @@ -439,8 +439,8 @@ muscle_percent_define_insert (char const *variable, location variable_loc, atoi (muscle_find_const (how_name)); if (how_old == MUSCLE_PERCENT_DEFINE_F) return; - complain_at (variable_loc, _("%%define variable '%s' redefined"), - variable); + complain_at (variable_loc, _("%%define variable %s redefined"), + quote (variable)); complain_at (muscle_percent_define_get_loc (variable), _("previous definition")); } @@ -503,8 +503,8 @@ muscle_percent_define_get_loc (char const *variable) char const *loc_name; loc_name = UNIQSTR_CONCAT ("percent_define_loc(", variable, ")"); if (!muscle_find_const (loc_name)) - fatal(_("undefined %%define variable '%s' passed to" - " muscle_percent_define_get_loc"), variable); + fatal(_("%s: undefined %%define variable %s"), + "muscle_percent_define_get_loc", quote (variable)); return muscle_location_decode (loc_name); } @@ -517,8 +517,8 @@ muscle_percent_define_get_syncline (char const *variable) UNIQSTR_CONCAT ("percent_define_syncline(", variable, ")"); syncline = muscle_find_const (syncline_name); if (!syncline) - fatal(_("undefined %%define variable '%s' passed to" - " muscle_percent_define_get_syncline"), variable); + fatal(_("%s: undefined %%define variable %s"), + "muscle_percent_define_get_syncline", quote (variable)); return syncline; } @@ -563,14 +563,14 @@ muscle_percent_define_flag_if (char const *variable) { muscle_insert (invalid_boolean_name, ""); complain_at(muscle_percent_define_get_loc (variable), - _("invalid value for %%define Boolean variable '%s'"), - variable); + _("invalid value for %%define Boolean variable %s"), + quote (variable)); } free (value); } else - fatal(_("undefined %%define variable '%s' passed to muscle_percent_define_flag_if"), - variable); + fatal(_("%s: undefined %%define variable %s"), + "muscle_percent_define_flag", quote (variable)); return result; } @@ -621,10 +621,10 @@ muscle_percent_define_check_values (char const * const *values) { location loc = muscle_percent_define_get_loc (*variablep); complain_at(loc, - _("invalid value for %%define variable '%s': '%s'"), - *variablep, value); + _("invalid value for %%define variable %s: %s"), + quote (*variablep), quote_n (1, value)); for (values = variablep + 1; *values; ++values) - complain_at (loc, _("accepted value: '%s'"), *values); + complain_at (loc, _("accepted value: %s"), quote (*values)); } else { @@ -634,9 +634,8 @@ muscle_percent_define_check_values (char const * const *values) free (value); } else - fatal(_("undefined %%define variable '%s' passed to" - " muscle_percent_define_check_values"), - *variablep); + fatal (_("%s: undefined %%define variable %s"), + "muscle_percent_define_check_values", quote (*variablep)); } } diff --git a/src/muscle-tab.h b/src/muscle-tab.h index 4bf8d66d..5f701ae4 100644 --- a/src/muscle-tab.h +++ b/src/muscle-tab.h @@ -20,6 +20,8 @@ #ifndef MUSCLE_TAB_H_ # define MUSCLE_TAB_H_ +# include <quotearg.h> + # include "location.h" void muscle_init (void); diff --git a/src/reader.c b/src/reader.c index 60fe7bd0..107fe901 100644 --- a/src/reader.c +++ b/src/reader.c @@ -130,8 +130,8 @@ record_merge_function_type (int merger, uniqstr type, location declaration_loc) if (merge_function->type != NULL && !UNIQSTR_EQ (merge_function->type, type)) { complain_at (declaration_loc, - _("result type clash on merge function '%s': <%s> != <%s>"), - merge_function->name, type, merge_function->type); + _("result type clash on merge function %s: <%s> != <%s>"), + quote (merge_function->name), type, merge_function->type); complain_at (merge_function->type_declaration_location, _("previous declaration")); } diff --git a/src/scan-code.l b/src/scan-code.l index ba6adb1f..b8c0c1b0 100644 --- a/src/scan-code.l +++ b/src/scan-code.l @@ -755,13 +755,13 @@ handle_action_dollar (symbol_list *rule, char *text, location dollar_loc) { if (rule->midrule_parent_rule) complain_at (dollar_loc, - _("$$ for the midrule at $%d of '%s'" + _("$$ for the midrule at $%d of %s" " has no declared type"), rule->midrule_parent_rhs_index, - effective_rule->content.sym->tag); + quote (effective_rule->content.sym->tag)); else - complain_at (dollar_loc, _("$$ of '%s' has no declared type"), - rule->content.sym->tag); + complain_at (dollar_loc, _("$$ of %s has no declared type"), + quote (rule->content.sym->tag)); } else untyped_var_seen = true; @@ -782,8 +782,8 @@ handle_action_dollar (symbol_list *rule, char *text, location dollar_loc) if (!type_name) { if (union_seen | tag_seen) - complain_at (dollar_loc, _("$%s of '%s' has no declared type"), - cp, effective_rule->content.sym->tag); + complain_at (dollar_loc, _("$%s of %s has no declared type"), + cp, quote (effective_rule->content.sym->tag)); else untyped_var_seen = true; type_name = ""; diff --git a/src/scan-gram.l b/src/scan-gram.l index 449fbea9..e2e08f9a 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -39,6 +39,7 @@ #include <ctype.h> #include <mbswidth.h> #include <quote.h> +#include <streq.h> #include <src/scan-gram.h> @@ -965,6 +966,10 @@ unexpected_end (boundary start, char const *msgid, char const *token_end) location loc; loc.start = start; loc.end = scanner_cursor; + token_end = quote (token_end); + // Instead of '\'', display "'". + if (STREQ (token_end, "'\\''", '\'', '\\', '\'', '\'', 0,0,0,0,0)) + token_end = "\"'\""; complain_at (loc, _(msgid), token_end); } @@ -977,7 +982,7 @@ unexpected_end (boundary start, char const *msgid, char const *token_end) static void unexpected_eof (boundary start, char const *token_end) { - unexpected_end (start, N_("missing '%s' at end of file"), token_end); + unexpected_end (start, N_("missing %s at end of file"), token_end); } @@ -988,7 +993,7 @@ unexpected_eof (boundary start, char const *token_end) static void unexpected_newline (boundary start, char const *token_end) { - unexpected_end (start, N_("missing '%s' at end of line"), token_end); + unexpected_end (start, N_("missing %s at end of line"), token_end); } diff --git a/src/symtab.c b/src/symtab.c index 07d5efb0..5a595648 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -26,6 +26,7 @@ #include "complain.h" #include "gram.h" +#include "quote.h" #include "symtab.h" /*-------------------------------------------------------------------. @@ -444,10 +445,10 @@ void symbol_make_alias (symbol *sym, symbol *str, location loc) { if (str->alias) - warn_at (loc, _("symbol '%s' used more than once as a literal string"), + warn_at (loc, _("symbol %s used more than once as a literal string"), str->tag); else if (sym->alias) - warn_at (loc, _("symbol '%s' given more than one literal string"), + warn_at (loc, _("symbol %s given more than one literal string"), sym->tag); else { diff --git a/tests/atlocal.in b/tests/atlocal.in index 764540c8..d005f85a 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -45,3 +45,7 @@ CONF_JAVA='@CONF_JAVA@' # We need egrep. : ${EGREP='@EGREP@'} + +# Use simple quotes (lib/quote.c). +LC_CTYPE=C +export LC_CTYPE diff --git a/tests/input.at b/tests/input.at index 6a2bcdcc..84ae0ffe 100644 --- a/tests/input.at +++ b/tests/input.at @@ -745,8 +745,8 @@ start: ; AT_BISON_CHECK([-o input.c input.y], 1, [], [[input.y:1.10-2.0: missing '"' at end of line -input.y:4.10-5.0: missing ''' at end of line -input.y:14.11-15.0: missing ''' at end of line +input.y:4.10-5.0: missing "'" at end of line +input.y:14.11-15.0: missing "'" at end of line input.y:16.11-17.0: missing '"' at end of line input.y:19.13-20.0: missing '}' at end of file input.y:20.1: syntax error, unexpected end of file @@ -1206,9 +1206,9 @@ AT_CHECK([[perl -e "print 'start: \'';" >> empty.y || exit 77]]) AT_BISON_CHECK([empty.y], [1], [], [[empty.y:2.8-9: warning: empty character literal empty.y:3.8-4.0: warning: empty character literal -empty.y:3.8-4.0: missing ''' at end of line +empty.y:3.8-4.0: missing "'" at end of line empty.y:4.8: warning: empty character literal -empty.y:4.8: missing ''' at end of file +empty.y:4.8: missing "'" at end of file ]]) AT_DATA([two.y], @@ -1221,9 +1221,9 @@ AT_CHECK([[perl -e "print 'start: \'ab';" >> two.y || exit 77]]) AT_BISON_CHECK([two.y], [1], [], [[two.y:2.8-11: warning: extra characters in character literal two.y:3.8-4.0: warning: extra characters in character literal -two.y:3.8-4.0: missing ''' at end of line +two.y:3.8-4.0: missing "'" at end of line two.y:4.8-10: warning: extra characters in character literal -two.y:4.8-10: missing ''' at end of file +two.y:4.8-10: missing "'" at end of file ]]) AT_DATA([three.y], @@ -1236,9 +1236,9 @@ AT_CHECK([[perl -e "print 'start: \'abc';" >> three.y || exit 77]]) AT_BISON_CHECK([three.y], [1], [], [[three.y:2.8-12: warning: extra characters in character literal three.y:3.8-4.0: warning: extra characters in character literal -three.y:3.8-4.0: missing ''' at end of line +three.y:3.8-4.0: missing "'" at end of line three.y:4.8-11: warning: extra characters in character literal -three.y:4.8-11: missing ''' at end of file +three.y:4.8-11: missing "'" at end of file ]]) AT_CLEANUP diff --git a/tests/regression.at b/tests/regression.at index 5affe4d9..9aaedde0 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -197,7 +197,7 @@ exp: '(' exp ')' | NUM ; ]]) AT_BISON_CHECK([-v -o input.c input.y], 0, [], -[[input.y:6.8-14: warning: symbol '"<="' used more than once as a literal string +[[input.y:6.8-14: warning: symbol "<=" used more than once as a literal string ]]) AT_CLEANUP @@ -475,7 +475,7 @@ main (void) # the user specification is eliminated. AT_BISON_CHECK([-o input.c input.y], [[0]], [[]], [[input.y:22.8-14: warning: symbol SPECIAL redeclared -input.y:22.8-63: warning: symbol '"\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!"' used more than once as a literal string +input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string ]]) AT_COMPILE([input]) diff --git a/tests/skeletons.at b/tests/skeletons.at index eee57b0c..1a9933fe 100644 --- a/tests/skeletons.at +++ b/tests/skeletons.at @@ -228,7 +228,7 @@ start: ; ]]) AT_BISON_CHECK([[input3.y]], [[1]], [[]], -[[input3.y: fatal error: undefined %define variable 'bogus' passed to b4_percent_define_get_loc +[[input3.y: fatal error: b4_percent_define_get_loc: undefined %define variable 'bogus' ]]) AT_DATA([[skel4.c]], @@ -242,7 +242,7 @@ start: ; ]]) AT_BISON_CHECK([[input4.y]], [[1]], [[]], -[[input4.y: fatal error: undefined %define variable 'bogus' passed to b4_percent_define_get_syncline +[[input4.y: fatal error: b4_percent_define_get_syncline: undefined %define variable 'bogus' ]]) AT_CLEANUP |