summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ABOUT-GCC-NLS639
1 files changed, 132 insertions, 507 deletions
diff --git a/gcc/ABOUT-GCC-NLS b/gcc/ABOUT-GCC-NLS
index b70a7c8df67..e969c57035e 100644
--- a/gcc/ABOUT-GCC-NLS
+++ b/gcc/ABOUT-GCC-NLS
@@ -1,26 +1,19 @@
Notes on GCC's Native Language Support
-GCC's Native Language Support (NLS) is relatively new and
-experimental, so NLS is currently disabled by default. Use
-configure's --enable-nls option to enable it. Eventually, NLS will be
-enabled by default, and you'll need --disable-nls to disable it. You
-must enable NLS in order to make a GCC distribution.
-
By and large, only diagnostic messages have been internationalized.
Some work remains in other areas; for example, GCC does not yet allow
non-ASCII letters in identifiers.
-Not all of GCC's diagnostic messages have been internationalized.
-Programs like `enquire' and `genattr' are not internationalized, as
-their users are GCC maintainers who typically need to be able to read
-English anyway; internationalizing them would thus entail needless
-work for the human translators. And no one has yet gotten around to
-internationalizing the messages in the C++ compiler, or in the
-specialized MIPS-specific programs mips-tdump and mips-tfile.
+Not all of GCC's diagnostic messages have been internationalized. Programs
+like `enquire' and `genattr' (in fact all gen* programs) are not
+internationalized, as their users are GCC maintainers who typically need to
+be able to read English anyway; internationalizing them would thus entail
+needless work for the human translators. Messages used for debugging, such
+as used in dumped tables, should also not be translated.
The GCC library should not contain any messages that need
-internationalization, because it operates below the
-internationalization library.
+internationalization, because it operates below the internationalization
+library.
Currently, the only language translation supplied is en_UK (British English).
@@ -42,501 +35,133 @@ line, where MSGID does not contain `%' or `}', corresponds to a
message MSGID that requires translation; this is needed to identify
diagnostics in GCC spec strings.
-If you enable NLS and modify source files, you'll need to use a
-special version of the GNU gettext package to propagate the
-modifications to the translation tables. Apply the following patch
-(use `patch -p0') to GNU gettext 0.10.35, which you can retrieve from:
-
-ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz
-
-This patch has been submitted to the GNU gettext maintainer, so
-eventually we shouldn't need this special gettext version.
-
-This patch 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 2, or (at your option)
-any later version.
-
-This patch 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 patch; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
-
-1998-07-26 Paul Eggert <eggert@twinsun.com>
-
- * po/Makefile.in.in (maintainer-clean): Remove cat-id-tbl.c and
- stamp-cat-id.
-
-1998-07-24 Paul Eggert <eggert@twinsun.com>
-
- * po/Makefile.in.in (cat-id-tbl.o): Depend on
- $(top_srcdir)/intl/libgettext.h, not ../intl/libgettext.h.
-
-1998-07-20 Paul Eggert <eggert@twinsun.com>
-
- * po/Makefile.in.in (.po.pox, all-yes, $(srcdir)/cat-id-tbl.c,
- $(srcdir)/stamp-cat-id, update-po): Prepend `$(srcdir)/' to
- files built in the source directory; this is needed for
- VPATH-based make in Solaris 2.6.
-
-1998-07-17 Paul Eggert <eggert@twinsun.com>
-
- Add support for user-specified argument numbers for keywords.
- Extract all strings from a keyword arg, not just the first one.
- Handle parenthesized commas inside keyword args correctly.
- Warn about nested keywords.
-
- * doc/gettext.texi: Document --keyword=id:argnum.
-
- * src/xgettext.c (scan_c_file):
- Warn about nested keywords, e.g. _(_("xxx")).
- Warn also about not-yet-implemented but allowed nesting, e.g.
- dcgettext(..._("xxx")..., "yyy").
- Get all strings in a keyword arg, not just the first one.
- Handle parenthesized commas inside keyword args correctly.
-
- * src/xget-lex.h (enum xgettext_token_type_ty):
- Replace xgettext_token_type_keyword1 and
- xgettext_token_type_keyword2 with just plain
- xgettext_token_type_keyword; it now has argnum value.
- Add xgettext_token_type_rp.
- (struct xgettext_token_ty): Add argnum member.
- line_number and file_name are now also set for
- xgettext_token_type_keyword.
- (xgettext_lex_keyword): Arg is const char *.
-
- * src/xget-lex.c: Include "hash.h".
- (enum token_type_ty): Add token_type_rp.
- (keywords): Now a hash table.
- (phase5_get): Return token_type_rp for ')'.
- (xgettext_lex, xgettext_lex_keyword): Add support for keyword argnums.
- (xgettext_lex): Return xgettext_token_type_rp for ')'.
- Report keyword argnum, line number, and file name back to caller.
-
-1998-07-09 Paul Eggert <eggert@twinsun.com>
-
- * intl/Makefile.in (uninstall):
- Do nothing unless $(PACKAGE) is gettext.
-
-===================================================================
-RCS file: doc/gettext.texi,v
-retrieving revision 0.10.35.0
-retrieving revision 0.10.35.1
-diff -pu -r0.10.35.0 -r0.10.35.1
---- doc/gettext.texi 1998/05/01 05:53:32 0.10.35.0
-+++ doc/gettext.texi 1998/07/18 00:25:15 0.10.35.1
-@@ -1854,13 +1854,19 @@ List of directories searched for input f
- Join messages with existing file.
-
- @item -k @var{word}
--@itemx --keyword[=@var{word}]
--Additonal keyword to be looked for (without @var{word} means not to
-+@itemx --keyword[=@var{keywordspec}]
-+Additonal keyword to be looked for (without @var{keywordspec} means not to
- use default keywords).
-
--The default keywords, which are always looked for if not explicitly
--disabled, are @code{gettext}, @code{dgettext}, @code{dcgettext} and
--@code{gettext_noop}.
-+If @var{keywordspec} is a C identifer @var{id}, @code{xgettext} looks
-+for strings in the first argument of each call to the function or macro
-+@var{id}. If @var{keywordspec} is of the form
-+@samp{@var{id}:@var{argnum}}, @code{xgettext} looks for strings in the
-+@var{argnum}th argument of the call.
-+
-+The default keyword specifications, which are always looked for if not
-+explicitly disabled, are @code{gettext}, @code{dgettext:2},
-+@code{dcgettext:2} and @code{gettext_noop}.
-
- @item -m [@var{string}]
- @itemx --msgstr-prefix[=@var{string}]
-===================================================================
-RCS file: intl/Makefile.in,v
-retrieving revision 0.10.35.0
-retrieving revision 0.10.35.1
-diff -pu -r0.10.35.0 -r0.10.35.1
---- intl/Makefile.in 1998/04/27 21:53:18 0.10.35.0
-+++ intl/Makefile.in 1998/07/09 21:39:18 0.10.35.1
-@@ -143,10 +143,14 @@ install-data: all
- installcheck:
-
- uninstall:
-- dists="$(DISTFILES.common)"; \
-- for file in $$dists; do \
-- rm -f $(gettextsrcdir)/$$file; \
-- done
-+ if test "$(PACKAGE)" = "gettext"; then \
-+ dists="$(DISTFILES.common)"; \
-+ for file in $$dists; do \
-+ rm -f $(gettextsrcdir)/$$file; \
-+ done
-+ else \
-+ : ; \
-+ fi
-
- info dvi:
-
-===================================================================
-RCS file: src/xget-lex.c,v
-retrieving revision 0.10.35.0
-retrieving revision 0.10.35.1
-diff -pu -r0.10.35.0 -r0.10.35.1
---- src/xget-lex.c 1998/07/09 22:49:48 0.10.35.0
-+++ src/xget-lex.c 1998/07/18 00:25:15 0.10.35.1
-@@ -33,6 +33,7 @@
- #include "error.h"
- #include "system.h"
- #include "libgettext.h"
-+#include "hash.h"
- #include "str-list.h"
- #include "xget-lex.h"
-
-@@ -83,6 +84,7 @@ enum token_type_ty
- token_type_eoln,
- token_type_hash,
- token_type_lp,
-+ token_type_rp,
- token_type_comma,
- token_type_name,
- token_type_number,
-@@ -109,7 +111,7 @@ static FILE *fp;
- static int trigraphs;
- static int cplusplus_comments;
- static string_list_ty *comment;
--static string_list_ty *keywords;
-+static hash_table keywords;
- static int default_keywords = 1;
-
- /* These are for tracking whether comments count as immediately before
-@@ -941,6 +943,10 @@ phase5_get (tp)
- tp->type = token_type_lp;
- return;
-
-+ case ')':
-+ tp->type = token_type_rp;
-+ return;
-+
- case ',':
- tp->type = token_type_comma;
- return;
-@@ -1179,6 +1185,7 @@ xgettext_lex (tp)
- while (1)
- {
- token_ty token;
-+ void *keyword_value;
-
- phase8_get (&token);
- switch (token.type)
-@@ -1213,17 +1220,20 @@ xgettext_lex (tp)
- if (default_keywords)
- {
- xgettext_lex_keyword ("gettext");
-- xgettext_lex_keyword ("dgettext");
-- xgettext_lex_keyword ("dcgettext");
-+ xgettext_lex_keyword ("dgettext:2");
-+ xgettext_lex_keyword ("dcgettext:2");
- xgettext_lex_keyword ("gettext_noop");
- default_keywords = 0;
- }
-
-- if (string_list_member (keywords, token.string))
-- {
-- tp->type = (strcmp (token.string, "dgettext") == 0
-- || strcmp (token.string, "dcgettext") == 0)
-- ? xgettext_token_type_keyword2 : xgettext_token_type_keyword1;
-+ if (find_entry (&keywords, token.string, strlen (token.string),
-+ &keyword_value)
-+ == 0)
-+ {
-+ tp->type = xgettext_token_type_keyword;
-+ tp->argnum = (int) keyword_value;
-+ tp->line_number = token.line_number;
-+ tp->file_name = logical_file_name;
- }
- else
- tp->type = xgettext_token_type_symbol;
-@@ -1236,6 +1246,12 @@ xgettext_lex (tp)
- tp->type = xgettext_token_type_lp;
- return;
-
-+ case token_type_rp:
-+ last_non_comment_line = newline_count;
-+
-+ tp->type = xgettext_token_type_rp;
-+ return;
+If you modify source files, you'll need to use a special
+version of the GNU gettext package to propagate the modifications to the
+translation tables.
+
+Paul Eggerts original patches have been incorporated into the official
+gettext CVS. These sources may be accessed via anonymous cvs. The root for
+the gettext CVS is :pserver:anoncvs@anoncvs.cygnus.com:/cvs/gettext
+Password is `anoncvs' like for the GCC CVS. After having retrieved the
+sources, you have to apply the following patch, which is pending approval by
+the gettext maintainer.
+
+After having built and installed these gettext tools, you have to configure
+GCC with --enable-maintainer-mode to get the master catalog rebuilt.
+
+2000-06-01 Martin v. Löwis <loewis@informatik.hu-berlin.de>
+
+ * xgettext.c (long_options): New option defines.
+ * xget-lex.c (phase6_get): If set, process #defines as well.
+
+--- doc/gettext.texi 2000/07/28 21:11:32 1.2
++++ doc/gettext.texi 2000/08/27 23:28:32
+@@ -20,7 +20,7 @@
+ This file provides documentation for GNU @code{gettext} utilities.
+ It also serves as a reference for the free Translation Project.
+
+-Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of
+ this manual provided the copyright notice and this permission notice
+@@ -54,7 +54,7 @@ by the Foundation.
+
+ @page
+ @vskip 0pt plus 1filll
+-Copyright @copyright{} 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
++Copyright @copyright{} 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of
+ this manual provided the copyright notice and this permission notice
+@@ -1828,6 +1828,10 @@ not have to care about these details.
+ @item -d @var{name}
+ @itemx --default-domain=@var{name}
+ Use @file{@var{name}.po} for output (instead of @file{messages.po}).
+
- case token_type_comma:
- last_non_comment_line = newline_count;
-
-@@ -1263,16 +1279,32 @@ xgettext_lex (tp)
-
- void
- xgettext_lex_keyword (name)
-- char *name;
-+ const char *name;
- {
- if (name == NULL)
- default_keywords = 0;
- else
- {
-- if (keywords == NULL)
-- keywords = string_list_alloc ();
-+ int argnum;
-+ size_t len;
-+ const char *sp;
-+
-+ if (keywords.table == NULL)
-+ init_hash (&keywords, 100);
-+
-+ sp = strchr (name, ':');
-+ if (sp)
++@itemx --defines
++Look for the keywords in #define statements as well. Normally, xgettext
++will treat them as white space.
+
+ The special domain name @file{-} or @file{/dev/stdout} means to write
+ the output to @file{stdout}.
+
+--- src/xget-lex.c 2000/07/28 21:11:32 1.2
++++ src/xget-lex.c 2000/08/27 23:28:33
+@@ -1045,6 +1045,7 @@ phaseX_get (tp)
+ static token_ty phase6_pushback[4];
+ static int phase6_pushback_length;
+
++extern int defines;
+
+ static void
+ phase6_get (tp)
+@@ -1068,9 +1069,36 @@ phase6_get (tp)
+ if (tp->type != token_type_hash)
+ return;
+
++ /* Find the first non-whitespace token. If it is a define, we
++ will treat the rest of the line as normal input, if defines
++ is set. */
++ if (defines)
+ {
-+ len = sp - name;
-+ argnum = atoi (sp + 1);
++ while (1)
++ {
++ phaseX_get (tp);
++ if (tp->type == token_type_eoln || tp->type == token_type_eof)
++ return;
++ if (tp->type != token_type_white_space)
++ break;
++ }
++ if (tp->type == token_type_name
++ && strcmp (tp->string, "define") == 0)
++ return;
++ /* It's not a define, so we start collecting tokens. */
++ if (!bufmax)
++ {
++ bufmax = 100;
++ buf = xrealloc (buf, bufmax * sizeof (buf[0]));
++ }
++ buf[0] = *tp;
++ bufpos = 1;
+ }
+ else
-+ {
-+ len = strlen (name);
-+ argnum = 1;
-+ }
-
-- string_list_append_unique (keywords, name);
-+ insert_entry (&keywords, name, len, (void *) argnum);
- }
- }
-
-===================================================================
-RCS file: src/xget-lex.h,v
-retrieving revision 0.10.35.0
-retrieving revision 0.10.35.1
-diff -pu -r0.10.35.0 -r0.10.35.1
---- src/xget-lex.h 1998/07/09 22:49:48 0.10.35.0
-+++ src/xget-lex.h 1998/07/18 00:25:15 0.10.35.1
-@@ -23,9 +23,9 @@ Foundation, Inc., 59 Temple Place - Suit
- enum xgettext_token_type_ty
- {
- xgettext_token_type_eof,
-- xgettext_token_type_keyword1,
-- xgettext_token_type_keyword2,
-+ xgettext_token_type_keyword,
- xgettext_token_type_lp,
-+ xgettext_token_type_rp,
- xgettext_token_type_comma,
- xgettext_token_type_string_literal,
- xgettext_token_type_symbol
-@@ -37,8 +37,14 @@ struct xgettext_token_ty
- {
- xgettext_token_type_ty type;
-
-- /* These 3 are only set for xgettext_token_type_string_literal. */
-+ /* This 1 is set only for xgettext_token_type_keyword. */
-+ int argnum;
-+
-+ /* This 1 is set only for xgettext_token_type_string_literal. */
- char *string;
++ bufpos = 0;
+
-+ /* These 2 are set only for xgettext_token_type_keyword and
-+ xgettext_token_type_string_literal. */
- int line_number;
- char *file_name;
- };
-@@ -50,7 +56,7 @@ void xgettext_lex PARAMS ((xgettext_toke
- const char *xgettext_lex_comment PARAMS ((size_t __n));
- void xgettext_lex_comment_reset PARAMS ((void));
- /* void xgettext_lex_filepos PARAMS ((char **, int *)); FIXME needed? */
--void xgettext_lex_keyword PARAMS ((char *__name));
-+void xgettext_lex_keyword PARAMS ((const char *__name));
- void xgettext_lex_cplusplus PARAMS ((void));
- void xgettext_lex_trigraphs PARAMS ((void));
-
-===================================================================
-RCS file: src/xgettext.c,v
-retrieving revision 0.10.35.0
-retrieving revision 0.10.35.1
-diff -pu -r0.10.35.0 -r0.10.35.1
---- src/xgettext.c 1998/07/09 22:49:48 0.10.35.0
-+++ src/xgettext.c 1998/07/18 00:25:15 0.10.35.1
-@@ -835,6 +835,8 @@ scan_c_file(filename, mlp, is_cpp_file)
- int is_cpp_file;
- {
- int state;
-+ int commas_to_skip; /* defined only when in states 1 and 2 */
-+ int paren_nesting; /* defined only when in state 2 */
-
- /* Inform scanner whether we have C++ files or not. */
- if (is_cpp_file)
-@@ -854,63 +856,79 @@ scan_c_file(filename, mlp, is_cpp_file)
- {
- xgettext_token_ty token;
-
-- /* A simple state machine is used to do the recognising:
-+ /* A state machine is used to do the recognising:
- State 0 = waiting for something to happen
-- State 1 = seen one of our keywords with string in first parameter
-- State 2 = was in state 1 and now saw a left paren
-- State 3 = seen one of our keywords with string in second parameter
-- State 4 = was in state 3 and now saw a left paren
-- State 5 = waiting for comma after being in state 4
-- State 6 = saw comma after being in state 5 */
-+ State 1 = seen one of our keywords
-+ State 2 = waiting for part of an argument */
- xgettext_lex (&token);
- switch (token.type)
- {
-- case xgettext_token_type_keyword1:
-+ case xgettext_token_type_keyword:
-+ if (!extract_all && state == 2)
-+ {
-+ if (commas_to_skip == 0)
-+ {
-+ error (0, 0,
-+ _("%s:%d: warning: keyword nested in keyword arg"),
-+ token.file_name, token.line_number);
-+ continue;
-+ }
-+
-+ /* Here we should nest properly, but this would require a
-+ potentially unbounded stack. We haven't run across an
-+ example that needs this functionality yet. For now,
-+ we punt and forget the outer keyword. */
-+ error (0, 0,
-+ _("%s:%d: warning: keyword between outer keyword and its arg"),
-+ token.file_name, token.line_number);
-+ }
-+ commas_to_skip = token.argnum - 1;
- state = 1;
- continue;
-
-- case xgettext_token_type_keyword2:
-- state = 3;
-- continue;
--
- case xgettext_token_type_lp:
- switch (state)
- {
- case 1:
-+ paren_nesting = 0;
- state = 2;
- break;
-- case 3:
-- state = 4;
-+ case 2:
-+ paren_nesting++;
- break;
-- default:
-- state = 0;
- }
- continue;
-
-+ case xgettext_token_type_rp:
-+ if (state == 2 && paren_nesting != 0)
-+ paren_nesting--;
-+ else
-+ state = 0;
-+ continue;
+ /* Accumulate the rest of the directive in a buffer. Work out
+ what it is later. */
+- bufpos = 0;
+ while (1)
+ {
+ phaseX_get (tp);
+
+--- src/xgettext.c 2000/07/28 21:11:32 1.2
++++ src/xgettext.c 2000/08/27 23:28:35
+@@ -80,6 +80,9 @@ static char *comment_tag;
+ /* Name of default domain file. If not set defaults to messages.po. */
+ static char *default_domain;
+
++/* If preprocessor defines are also analyzed for keywords. */
++int defines;
+
- case xgettext_token_type_comma:
-- state = state == 5 ? 6 : 0;
-+ if (state == 2 && commas_to_skip != 0)
-+ commas_to_skip -= paren_nesting == 0;
-+ else
-+ state = 0;
- continue;
-
- case xgettext_token_type_string_literal:
-- if (extract_all || state == 2 || state == 6)
-- {
-- remember_a_message (mlp, &token);
-- state = 0;
-- }
-+ if (extract_all || (state == 2 && commas_to_skip == 0))
-+ remember_a_message (mlp, &token);
- else
- {
- free (token.string);
-- state = (state == 4 || state == 5) ? 5 : 0;
-+ state = state == 2 ? 2 : 0;
- }
- continue;
-
- case xgettext_token_type_symbol:
-- state = (state == 4 || state == 5) ? 5 : 0;
-+ state = state == 2 ? 2 : 0;
- continue;
-
- default:
-- state = 0;
-- continue;
-+ abort ();
-
- case xgettext_token_type_eof:
- break;
-===================================================================
-RCS file: po/Makefile.in.in,v
-retrieving revision 0.10.35.0
-retrieving revision 0.10.35.5
-diff -u -r0.10.35.0 -r0.10.35.5
---- po/Makefile.in.in 1998/07/20 20:20:38 0.10.35.0
-+++ po/Makefile.in.in 1998/07/26 09:07:52 0.10.35.5
-@@ -62,7 +62,7 @@
- $(COMPILE) $<
-
- .po.pox:
-- $(MAKE) $(PACKAGE).pot
-+ $(MAKE) $(srcdir)/$(PACKAGE).pot
- $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
-
- .po.mo:
-@@ -79,7 +79,7 @@
-
- all: all-@USE_NLS@
-
--all-yes: cat-id-tbl.c $(CATALOGS)
-+all-yes: $(srcdir)/cat-id-tbl.c $(CATALOGS)
- all-no:
-
- $(srcdir)/$(PACKAGE).pot: $(POTFILES)
-@@ -90,8 +90,8 @@
- || ( rm -f $(srcdir)/$(PACKAGE).pot \
- && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
-
--$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
--$(srcdir)/stamp-cat-id: $(PACKAGE).pot
-+$(srcdir)/cat-id-tbl.c: $(srcdir)/stamp-cat-id; @:
-+$(srcdir)/stamp-cat-id: $(srcdir)/$(PACKAGE).pot
- rm -f cat-id-tbl.tmp
- sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
- | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
-@@ -180,7 +180,8 @@
-
- check: all
-
--cat-id-tbl.o: ../intl/libgettext.h
-+cat-id-tbl.o: $(srcdir)/cat-id-tbl.c $(top_srcdir)/intl/libgettext.h
-+ $(COMPILE) $(srcdir)/cat-id-tbl.c
-
- dvi info tags TAGS ID:
-
-@@ -196,7 +197,7 @@
- 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 $(GMOFILES)
-+ rm -f $(GMOFILES) cat-id-tbl.c stamp-cat-id
-
- distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
- dist distdir: update-po $(DISTFILES)
-@@ -207,7 +208,7 @@
- done
-
- update-po: Makefile
-- $(MAKE) $(PACKAGE).pot
-+ $(MAKE) $(srcdir)/$(PACKAGE).pot
- PATH=`pwd`/../src:$$PATH; \
- cd $(srcdir); \
- catalogs='$(CATALOGS)'; \
+ /* If called with --debug option the output reflects whether format
+ string recognition is done automatically or forced by the user. */
+ static int do_debug;
+@@ -125,6 +128,7 @@ static const struct option long_options[
+ { "debug", no_argument, &do_debug, 1 },
+ { "default-domain", required_argument, NULL, 'd' },
+ { "directory", required_argument, NULL, 'D' },
++ { "defines", no_argument, &defines, 1 },
+ { "escape", no_argument, NULL, 'E' },
+ { "exclude-file", required_argument, NULL, 'x' },
+ { "extract-all", no_argument, &extract_all, 1 },
+@@ -552,6 +556,7 @@ Mandatory arguments to long options are
+ -C, --c++ shorthand for --language=C++\n\
+ --debug more detailed formatstring recognision result\n\
+ -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n\
++ --defines analyze preprocessor defines\n\
+ -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\
+ -e, --no-escape do not use C escapes in output (default)\n\
+ -E, --escape use C escapes in output, no extended chars\n\
+
+