Initial revision
authorJeff Law <law@gcc.gnu.org>
Sun, 2 Aug 1998 06:46:43 +0000 (00:46 -0600)
committerJeff Law <law@gcc.gnu.org>
Sun, 2 Aug 1998 06:46:43 +0000 (00:46 -0600)
From-SVN: r21536

gcc/ABOUT-GCC-NLS [new file with mode: 0644]
gcc/exgettext [new file with mode: 0755]
gcc/tmp-emsgids.c [new file with mode: 0644]

diff --git a/gcc/ABOUT-GCC-NLS b/gcc/ABOUT-GCC-NLS
new file mode 100644 (file)
index 0000000..b70a7c8
--- /dev/null
@@ -0,0 +1,542 @@
+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.
+
+The GCC library should not contain any messages that need
+internationalization, because it operates below the
+internationalization library.
+
+Currently, the only language translation supplied is en_UK (British English).
+
+Unlike some other GNU programs, the GCC sources contain few instances
+of explicit translation calls like _("string").  Instead, the
+diagnostic printing routines automatically translate their arguments.
+For example, GCC source code should not contain calls like `error
+(_("unterminated comment"))'; it should contain calls like `error
+("unterminated comment")' instead, as it is the `error' function's
+responsibility to translate the message before the user sees it.
+
+By convention, any function parameter in the GCC sources whose name
+ends in `msgid' is expected to be a message requiring translation.
+For example, the `error' function's first parameter is named `msgid'.
+GCC's exgettext script uses this convention to determine which
+function parameter strings need to be translated.  The exgettext
+script also assumes that any occurrence of `%eMSGID}' on a source
+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;
++
+       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)
++      {
++        len = sp - name;
++        argnum = atoi (sp + 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;
++
++  /* 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;
++
+        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)'; \
diff --git a/gcc/exgettext b/gcc/exgettext
new file mode 100755 (executable)
index 0000000..93d553c
--- /dev/null
@@ -0,0 +1,118 @@
+#! /bin/sh
+# Wrapper around gettext for GCC sources.
+# Copyright 1998 Free Software Foundation, Inc.
+
+# Written by Paul Eggert <eggert@twinsun.com>.
+
+# This file is part of GNU CC.
+
+# GNU CC 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.
+
+# GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# Set environment to default value, if not already set.
+: ${AWK=awk}
+
+# The argument to this wrapper is the xgettext command to be executed.
+# Extract the xgettext program name from the rest of the command.
+xgettext=${1?}
+shift
+
+# Save work if we're just wrapping a no-op.
+case $xgettext in
+:) exit;;
+esac
+
+# Find the files to be scanned, and the directory to scan them from.
+directory=.
+files=
+for i
+do
+  case $i in
+  --directory=*)
+    directory=`expr " $i" : ' --directory=\(.*\)'`;;
+  --files-from=*)
+    files_from=`expr " $i" : ' --files-from=\(.*\)'`
+    files=`$AWK '/^[^#]/ { print }' $files_from`;;
+  esac
+done
+
+# Generate keyword options for xgettext,
+# by scanning for declarations of functions
+# whose parameter names end in "msgid".
+generate_keyword_options='
+  /^[A-Z_a-z].*\(.*msgid[,)]/ {
+
+    paren_index = index($0, "(")
+
+    name = substr($0, 1, paren_index - 1)
+    sub(/[^0-9A-Z_a-z]*$/, "", name)
+    sub(/[      ]+PARAMS/, "", name)
+    sub(/[      ]+VPROTO/, "", name)
+    sub(/.*[^0-9A-Z_a-z]/, "", name)
+
+    args = substr($0, paren_index)
+    sub(/msgid[,)].*/, "", args)
+    for (n = 1; sub(/^[^,]*,/, "", args); n++) {
+      continue;
+    }
+
+    if (n == 1) {
+      keyword = name
+    } else {
+      keyword = name ":" n
+    }
+
+    if (! keyword_seen[keyword]++) {
+      print "--keyword=" keyword
+    }
+  }
+'
+keyword_options=`(
+  cd $directory &&
+  $AWK "$generate_keyword_options" $files < /dev/null
+)` || exit
+
+# Generate temporary file reflecting the %e strings in the scanned files.
+tmp=tmp-emsgids.c
+
+generate_emsgids='
+  /%e.*}/ {
+    line = $0
+    while ((percent_index = index(line, "%e")) != 0) {
+      line = substr(line, percent_index + 2)
+      bracket_index = index(line, "}")
+      if (bracket_index == 0) {
+       continue
+      }
+      msgid = substr(line, 1, bracket_index - 1)
+      if (index(msgid, "%") != 0) {
+        continue
+      }
+      printf "#line %d \"%s\"\n", FNR, FILENAME
+      printf "_(\"%s\")\n", msgid
+      line = substr(line, bracket_index + 1)
+    }
+  }
+' 
+(cd $directory &&
+ $AWK "$generate_emsgids" $files < /dev/null
+) > $directory/$tmp || exit
+
+# Run the xgettext command, with temporary added as a file to scan.
+"$xgettext" $keyword_options ${1+"$@"} $tmp || exit
+
+# Clean up.
+# If we don't get here, `make clean' will remove this file later.
+rm -f $directory/$tmp
diff --git a/gcc/tmp-emsgids.c b/gcc/tmp-emsgids.c
new file mode 100644 (file)
index 0000000..67e8adb
--- /dev/null
@@ -0,0 +1,96 @@
+#line 59 "config/arc/arc.h"
+_("may not use both -EB and -EL")
+#line 176 "config/arm/arm.h"
+_("-mapcs-26 and -mapcs-32 may not be used together")
+#line 187 "config/arm/arm.h"
+_("-msoft-float and -mhard_float may not be used together")
+#line 198 "config/arm/arm.h"
+_("-mbig-endian and -mlittle-endian may not be used together")
+#line 72 "config/arm/riscix.h"
+_("-mbsd and -pedantic incompatible")
+#line 73 "config/arm/riscix.h"
+_("-mbsd and -mxopen incompatible")
+#line 74 "config/arm/riscix.h"
+_("-mxopen and -pedantic incompatible")
+#line 133 "config/arm/riscix.h"
+_("-mbsd and -pedantic incompatible")
+#line 134 "config/arm/riscix.h"
+_("-mbsd and -mxopen incompatible")
+#line 135 "config/arm/riscix.h"
+_("-mxopen and -pedantic incompatible")
+#line 126 "config/dsp16xx/dsp16xx.h"
+_("A -ifile option requires a -map option")
+#line 135 "config/dsp16xx/dsp16xx.h"
+_("A -ifile option requires a -map option")
+#line 809 "config/i386/sco5.h"
+_("-static not valid with -mcoff")
+#line 810 "config/i386/sco5.h"
+_("-shared not valid with -mcoff")
+#line 811 "config/i386/sco5.h"
+_("-symbolic not valid with -mcoff")
+#line 847 "config/i386/sco5.h"
+_("-fpic is not valid with -mcoff")
+#line 848 "config/i386/sco5.h"
+_("-fPIC is not valid with -mcoff")
+#line 882 "config/i386/sco5.h"
+_("-static not valid with -mcoff")
+#line 883 "config/i386/sco5.h"
+_("-shared not valid with -mcoff")
+#line 884 "config/i386/sco5.h"
+_("-symbolic not valid with -mcoff")
+#line 885 "config/i386/sco5.h"
+_("-fpic not valid with -mcoff")
+#line 886 "config/i386/sco5.h"
+_("-fPIC not valid with -mcoff")
+#line 305 "config/i860/fx2800.h"
+_("-p option not supported: use -pg instead")
+#line 674 "config/mips/mips.h"
+_("-pipe is not supported.")
+#line 811 "config/mips/mips.h"
+_("may not use both -mfp64 and -msingle-float")
+#line 812 "config/mips/mips.h"
+_("may not use both -mfp64 and -m4650")
+#line 815 "config/mips/mips.h"
+_("may not use both -EB and -EL")
+#line 27 "config/mips/r3900.h"
+_("-mhard-float not supported.")
+#line 29 "config/mips/r3900.h"
+_("-msingle-float and -msoft-float can not both be specified.")
+#line 41 "config/mips/r3900.h"
+_("-mhard-float not supported.")
+#line 43 "config/mips/r3900.h"
+_("-msingle-float and -msoft-float can not both be specified.")
+#line 166 "config/nextstep.h"
+_("-p profiling is no longer supported.  Use -pg instead.")
+#line 169 "config/nextstep.h"
+_("-p profiling is no longer supported.  Use -pg instead.")
+#line 36 "config/vax/vax.h"
+_("profiling not supported with -mg\n")
+#line 37 "config/vax/vax.h"
+_("profiling not supported with -mg\n")
+#line 32 "cp/lang-specs.h"
+_("GNU C++ does not support -C without using -E")
+#line 45 "cp/lang-specs.h"
+_("-pg and -fomit-frame-pointer are incompatible")
+#line 56 "cp/lang-specs.h"
+_("-pg and -fomit-frame-pointer are incompatible")
+#line 603 "gcc.c"
+_("GNU C does not support -C without using -E")
+#line 617 "gcc.c"
+_("-pg and -fomit-frame-pointer are incompatible")
+#line 624 "gcc.c"
+_("GNU C does not support -C without using -E")
+#line 633 "gcc.c"
+_("-E required when input is from standard input")
+#line 637 "gcc.c"
+_("GNU C does not support -C without using -E")
+#line 652 "gcc.c"
+_("-pg and -fomit-frame-pointer are incompatible")
+#line 659 "gcc.c"
+_("Compilation of header file requested")
+#line 661 "gcc.c"
+_("GNU C does not support -C without using -E")
+#line 676 "gcc.c"
+_("-pg and -fomit-frame-pointer are incompatible")
+#line 689 "gcc.c"
+_("GNU C does not support -C without using -E")