I18N: automatic determination of potfiles list

Zack Weinberg zack@codesourcery.com
Mon Oct 29 21:17:00 GMT 2001


This patch causes us to calculate the list of files to be scanned for
message translation on the fly.  It is no longer necessary to list
every source file in po/POTFILES.in.  Instead, it is necessary to list
source files which should _not_ be scanned in po/EXCLUDES; this list
is much shorter and changes much less frequently, so I hope it will
cause fewer problems.

exgettext has been thoroughly rewritten.  It no longer misses
preprocessor macros which should be translation keywords.  Also, it
makes only one pass over the source and therefore should be faster.
(Time to rebuild gcc.pot is dominated by xgettext, though, and always
has been.)

Finally, the baroque po/Makefile.in.in has been scrapped and a minimal
set of rules inserted into gcc/Makefile.in.  Much easier to read,
comprehend, and maintain.

Assuming this patch is acceptable, I would like to set up automatic
updating of gcc.pot through the snapshot script or some other
mechanism.  The file currently in the tree is perennially out of date.
[It may even make sense to run msgmerge automatically against the
translations that we do have; I'm not sure what the issues are there.]

Related notes: At this time xgettext does not know how to parse Ada and
therefore the Ada front end cannot have its messages translated.  I'm
not sure what should be done about that.

N_("") or _("") causes problems with the current version of xgettext -
the empty string is merged into the magic msgid "" entry at the top of
the file.  I had to tweak m68k.h to avoid this.

Bootstrapped i686-linux; ok to apply?

zw

	* Makefile.in (INTL_TARGETS, POSUB): Kill all references.
	(INTL_SUBDIRS): Only intl.
	(.SUFFIXES): Add .gmo, .po, .pox.
	(native): Depend on @POSUB@.
	(intl.all, intl.install): Depend on config.h and files it includes.
	(po-generated): New target; depend on c-parse.c.
	(install-normal): Depend on install-@POSUB@.
	(XGETTEXT, GMSGFMT, MSGMERGE, PACKAGE, CATALOGS): New variables.
	(po, update-po, .po.gmo, install-, install-po, $(PACKAGE).pot,
	po/$(PACKAGE).pot): New rules.

	* aclocal.m4: Prepend "po/" to each entry in CATALOGS.
	* configure.in: Don't munge XGETTEXT.  Create empty "po"
	directory in build dir from config.status.
	(all_outputs): Remove po/Makefile.in.
	* exgettext: Delete.

	* config/m68k/m68k.h: Add a couple of missing switch descriptions.

cp, java, objc:
	* Make-lang.in: s/$(INTL_TARGETS)/po-generated/

po:
	* EXCLUDES: New file.
	* Makefile.in.in, POTFILES.in: Delete.
	* exgettext: New file, completely rewritten.

	
===================================================================
Index: Makefile.in
--- Makefile.in	2001/10/29 14:34:18	1.760
+++ Makefile.in	2001/10/30 05:07:19
@@ -49,11 +49,6 @@ SUBDIRS =@subdirs@
 CONFIG_LANGUAGES = @all_languages@
 LANGUAGES = c gcov$(exeext) $(CONFIG_LANGUAGES)
 
-# Languages should create dependencies of $(INTL_TARGETS) on generated
-# sources in Make-lang.in.  Example:
-# $(INTL_TARGETS): $(srcdir)/cp/parse.c
-INTL_TARGETS = intl.all intl.install
-
 # Selection of languages to be made during stage1 build.
 # This is overridden by configure.
 BOOT_LANGUAGES = c @all_boot_languages@
@@ -341,8 +336,7 @@ INTLDEPS = @INTLDEPS@
 LIBICONV = @LIBICONV@
 
 # List of internationalization subdirectories.
-POSUB = @POSUB@
-INTL_SUBDIRS = intl $(POSUB)
+INTL_SUBDIRS = intl
 
 # Change this to a null string if obstacks are installed in the
 # system library.
@@ -836,8 +830,9 @@ LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udi
 #
 # The only suffixes we want for implicit rules are .c and .o, so clear
 # the list and add them.  This speeds up GNU Make, and allows -r to work.
+# For i18n support, we also need .gmo, .po, .pox.
 .SUFFIXES:
-.SUFFIXES: .c .o
+.SUFFIXES: .c .o .po .gmo
 
 Makefile: $(srcdir)/Makefile.in config.status $(srcdir)/version.c \
    $(xmake_file) $(tmake_file) $(LANG_MAKEFILES)
@@ -941,7 +936,7 @@ start.encap: native xgcc$(exeext) cpp$(e
 rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
 # This is what is made with the host's compiler
 # whether making a cross compiler or not.
-native: config.status auto-host.h intl.all $(LANGUAGES) \
+native: config.status auto-host.h intl.all @POSUB@ $(LANGUAGES) \
 	$(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
 
 # Define the names for selecting languages in LANGUAGES.
@@ -1969,9 +1964,6 @@ intl.o: intl.c $(CONFIG_H) system.h intl
 
 $(top_builddir)/intl/libintl.a: intl.all
 
-# Make sure all the headers are there for xgettext to scan.
-$(INTL_TARGETS): $(CONFIG_H) $(srcdir)/c-parse.c
-
 intl.all intl.install intl.uninstall \
   intl.mostlyclean intl.clean intl.distclean intl.maintainer-clean:
 	@for d in $(INTL_SUBDIRS); do \
@@ -1981,6 +1973,14 @@ intl.all intl.install intl.uninstall \
 	  if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
 	done
 
+# intl.all and intl.install need config.h to exist, and the files it includes.
+# (FIXME: intl/*.c shouldn't need to see insn-foo.h!)
+intl.all intl.install: config.h insn-flags.h insn-constants.h
+
+# Make-lang.in should add dependencies of po-generated on any generated
+# files which need to be scanned by gettext (usually Yacc-generated parsers).
+po-generated: c-parse.c
+
 #
 # Remake cpp and protoize.
 
@@ -2496,7 +2496,7 @@ install: $(INSTALL_TARGET) ; @true
 # Install the driver last so that the window when things are
 # broken is small.
 install-normal: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
-    $(INSTALL_CPP) install-man install-info intl.install \
+    $(INSTALL_CPP) install-man install-info intl.install install-@POSUB@ \
     lang.install-normal install-driver
 
 # Do nothing while making gcc with a cross-compiler. The person who
@@ -3337,3 +3337,65 @@ float.h-cross:
 	echo "#error float.h values not known for cross-compiler" >> t-float.h-cross
 	echo "#endif" >> t-float.h-cross
 	mv t-float.h-cross float.h-cross
+
+# Rules for generating translated message descriptions.
+# Disabled by autoconf if the tools are not available.
+
+XGETTEXT = @XGETTEXT@
+GMSGFMT = @GMSGFMT@
+MSGMERGE = msgmerge
+
+PACKAGE = @PACKAGE@
+CATALOGS = @CATALOGS@
+
+po: $(CATALOGS)
+
+# This notation should be acceptable to all Make implementations used
+# by people who are interested in updating .po files.
+update-po: $(CATALOGS:.gmo=.pox)
+
+# Update files in $(srcdir) atomically.
+.po.gmo:
+	$(GMSGFMT) --statistics $< -o $@
+	$(SHELL) $(srcdir)/move-if-change $@ $(srcdir)/$@
+
+# This rule does _not_ copy into $(srcdir).  User must do this
+# by hand.  (User is a translation maintainer and is expected to
+# go through the new .po by hand anyway.)
+.po.pox:
+	$(MSGMERGE) $< $(srcdir)/po/$(PACKAGE).pot -o $@
+
+# Dummy rule to deal with dependency produced by use of
+# "install-@POSUB@" above, when NLS is disabled.
+install-:
+
+install-po:
+	$(mkinstalldirs) $(DESTDIR)$(datadir)
+	for cat in $(CATALOGS); do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkinstalldirs) $(DESTDIR)$$dir; \
+	  if test -r $$cat; then \
+	    $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+	    echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
+	  else \
+	    $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+	    echo "installing $(srcdir)/$$cat as" \
+		 "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
+	  fi; \
+	done
+
+# Rule for regenerating the message template (gcc.pot).
+# Instead of forcing everyone to edit POTFILES.in, which proved impractical,
+# this rule has no dependencies and always regenerates gcc.pot.  This is
+# relatively harmless since the .po files do not directly depend on it.
+# Note that exgettext has an awk script embedded in it which requires a
+# fairly modern (POSIX-compliant) awk.
+$(PACKAGE).pot: po/$(PACKAGE).pot
+po/$(PACKAGE).pot: force
+	$(MAKE) po-generated
+	AWK=$(AWK) $(SHELL) $(srcdir)/po/exgettext \
+		$(XGETTEXT) $(PACKAGE) $(srcdir)
+	$(SHELL) $(srcdir)/move-if-change $(PACKAGE).pot \
+		$(srcdir)/po/$(PACKAGE).pot
===================================================================
Index: aclocal.m4
--- aclocal.m4	2001/10/21 16:29:12	1.54
+++ aclocal.m4	2001/10/30 05:07:19
@@ -1691,8 +1691,9 @@ strdup strtoul tsearch __argz_count __ar
      fi
 
      dnl Construct list of names of catalog files to be constructed.
+     dnl GCC LOCAL: Tweak for non-recursive po directory build.
      if test -n "$LINGUAS"; then
-       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS po/$lang$CATOBJEXT"; done
      fi
    fi
 
===================================================================
Index: configure.in
--- configure.in	2001/10/30 04:57:40	1.549
+++ configure.in	2001/10/30 05:07:21
@@ -923,7 +923,6 @@ if test "${build}" != "${host}" && test 
 fi
 
 AM_GNU_GETTEXT
-XGETTEXT="AWK='$AWK' \$(SHELL) \$(top_srcdir)/exgettext $XGETTEXT"
 
 # Windows32 Registry support for specifying GCC installation paths.
 AC_ARG_ENABLE(win32-registry,
@@ -1903,7 +1902,7 @@ all_boot_languages=
 all_compilers=
 all_stagestuff=
 all_diff_excludes=
-all_outputs='Makefile intl/Makefile po/Makefile.in fixinc/Makefile gccbug mklibgcc'
+all_outputs='Makefile intl/Makefile fixinc/Makefile gccbug mklibgcc'
 # List of language makefile fragments.
 all_lang_makefiles=
 all_headers=
@@ -2216,6 +2215,9 @@ if test -f intl/libintl.h; then
   echo creating libintl.h
   echo '#include "intl/libintl.h"' >libintl.h
 fi
+# Create po/ as an empty directory; used by the .po/.gmo build rules for
+# scratch space.
+test -d po || mkdir po
 ],
 [
 host='${host}'
===================================================================
Index: exgettext
--- exgettext	Mon Oct 29 21:07:27 2001
+++ exgettext	Tue May  5 13:32:27 1998
@@ -1,118 +0,0 @@
-#! /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 GCC.
-
-# GCC 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.
-
-# GCC 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 GCC; 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(/[	 ]+VPARAMS/, "", 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
===================================================================
Index: config/m68k/m68k.h
--- config/m68k/m68k.h	2001/09/11 16:49:59	1.54
+++ config/m68k/m68k.h	2001/10/30 05:07:22
@@ -178,11 +178,11 @@ extern int target_flags;
     { "nofpa", - MASK_FPA,						\
       N_("Do not generate code for a Sun FPA") },			\
     { "sky", -(MASK_FPA|MASK_68040_ONLY|MASK_68881),			\
-      N_("") },								\
+      N_("Generate code for a Sun Sky board") },			\
     { "sky", MASK_SKY,							\
-      N_("") },								\
+      N_("Generate code for a Sun Sky board") },			\
     { "nosky", - MASK_SKY,						\
-      N_("") },								\
+      N_("Do not use Sky linkage convention") },			\
     { "68881", - (MASK_FPA|MASK_SKY),					\
       N_("Generate code for a 68881") },				\
     { "68881", MASK_68881, "" },					\
===================================================================
Index: cp/Make-lang.in
--- cp/Make-lang.in	2001/10/08 20:53:40	1.94
+++ cp/Make-lang.in	2001/10/30 05:07:22
@@ -66,7 +66,7 @@ g++spec.o: $(srcdir)/cp/g++spec.c $(SYST
 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(DRIVER_DEFINES) \
 		$(INCLUDES) $(srcdir)/cp/g++spec.c)
 
-$(INTL_TARGETS): $(srcdir)/cp/parse.c
+po-generated: $(srcdir)/cp/parse.c
 
 # Create the compiler driver for g++.
 GXX_OBJS = gcc.o g++spec.o intl.o prefix.o version.o 
===================================================================
Index: java/Make-lang.in
--- java/Make-lang.in	2001/10/17 17:19:18	1.69
+++ java/Make-lang.in	2001/10/30 05:07:23
@@ -77,7 +77,7 @@ $(GCJ)-cross$(exeext): $(GCJ)$(exeext)
 	-rm -f $(GCJ)-cross$(exeext)
 	cp $(GCJ)$(exeext) $(GCJ)-cross$(exeext)
 
-$(INTL_TARGETS): $(srcdir)/java/parse.c $(srcdir)/java/parse-scan.c
+po-generated: $(srcdir)/java/parse.c $(srcdir)/java/parse-scan.c
 
 $(srcdir)/java/parse.c: $(srcdir)/java/parse.y
 	$(BISON) -t --name-prefix=java_ $(BISONFLAGS) \
===================================================================
Index: objc/Make-lang.in
--- objc/Make-lang.in	2001/08/09 22:33:35	1.37
+++ objc/Make-lang.in	2001/10/30 05:07:23
@@ -63,7 +63,7 @@ objc-parse.o : $(srcdir)/objc/objc-parse
 	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \
 	-c $(srcdir)/objc/objc-parse.c $(OUTPUT_OPTION)
 
-$(INTL_TARGETS): $(srcdir)/objc/objc-parse.c
+po-generated: $(srcdir)/objc/objc-parse.c
 $(srcdir)/objc/objc-parse.c : $(srcdir)/objc/objc-parse.y
 	cd $(srcdir)/objc; \
 	$(BISON) $(BISONFLAGS) -o op$$$$.c objc-parse.y ; \
===================================================================
Index: po/EXCLUDES
--- po/EXCLUDES	Tue May  5 13:32:27 1998
+++ po/EXCLUDES	Mon Oct 29 21:07:23 2001
@@ -0,0 +1,74 @@
+# This file lists all the sources which should *not* be scanned for
+# strings to translate.  Only the first word on each line is used; the
+# rest is ignored.  Only files with an extension of .c, .h, or .y are
+# examined to begin with.
+
+#   These files are part of libgcc, or target headers provided by gcc.
+config/rs6000/sol-c0.c
+config/float-c4x.h
+config/float-i128.h
+config/float-i32.h
+config/float-i386.h
+config/float-i64.h
+config/float-m68k.h
+config/float-sh.h
+config/float-sparc.h
+config/float-vax.h
+crtstuff.c
+frame.h
+gbl-ctors.h
+libgcc1.c
+libgcc1-test.c
+libgcc2.c
+libgcc2.h
+limitx.h
+limity.h
+longlong.h
+unwind-dw2-fde.c
+unwind-dw2-fde.h
+unwind-dw2.c
+unwind-pe.h
+unwind-sjlj.c
+unwind.h
+
+#   These programs are meant to be executed only by GCC maintainers or
+#   installers.  Such files do not need to be translated, as these
+#   people typically need to be able to read English anyway.
+enquire.c
+fix-header.c
+gen-protos.c
+genattr.c
+genattrtab.c
+gencheck.c
+gencodes.c
+genconfig.c
+genconstants.c
+genemit.c
+genextract.c
+genflags.c
+gengenrtl.c
+genopinit.c
+genoutput.c
+genpeep.c
+genpreds.c
+genrecog.c
+gensupport.c
+gensupport.h
+scan-decls.c
+scan.c
+scan.h
+
+#   These files are not yet internationalized, because they contain
+#   many strings that require a lot of analysis, and are little-used.
+mips-tdump.c
+mips-tfile.c
+
+#   These are generated from other files which are themselves scanned.
+c-parse.c
+tradcif.c
+cp/parse.c
+cp/parse.h
+java/parse.c
+java/parse.h
+java/parse-scan.c
+objc/objc-parse.c
===================================================================
Index: po/Makefile.in.in
--- po/Makefile.in.in	Mon Oct 29 21:07:28 2001
+++ po/Makefile.in.in	Tue May  5 13:32:27 1998
@@ -1,196 +0,0 @@
-# Makefile for program source directory in GNU NLS utilities package.
-# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-#
-# This file file 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 is *not* freely available.
-
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-
-# These two variables depend on the location of this directory.
-subdir = po
-top_builddir = ..
-
-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) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
-
-CC = @CC@
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
-MSGMERGE = msgmerge
-
-DEFS = @DEFS@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-
-INCLUDES = -I.. -I$(top_srcdir)/intl
-
-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
-
-POFILES = @POFILES@
-GMOFILES = @GMOFILES@
-DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
-$(POFILES) $(GMOFILES)
-
-POTFILES = \
-
-CATALOGS = @CATALOGS@
-
-.SUFFIXES:
-.SUFFIXES: .c .o .po .pox .gmo .mo
-
-.c.o:
-	$(COMPILE) $<
-
-.po.pox:
-	$(MAKE) $(PACKAGE).pot
-	$(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
-
-.po.mo:
-	$(MSGFMT) -o $@ $<
-
-.po.gmo:
-	file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
-	  && rm -f $$file && $(GMSGFMT) --statistics -o $$file $<
-
-
-all: all-@USE_NLS@
-
-all-yes: $(CATALOGS)
-all-no:
-
-# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in
-	$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
-	  --add-comments --keyword=_ --keyword=N_ \
-	  --files-from=$(srcdir)/POTFILES.in \
-	&& test ! -f $(PACKAGE).po \
-	   || ( rm -f $(srcdir)/$(PACKAGE).pot \
-		&& mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data-@USE_NLS@
-	if test "$(PACKAGE)" = "gettext"; then \
-	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
-	  $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
-			  $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
-	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 's/\.gmo$$//'`; \
-	  dir=$(localedir)/$$lang/LC_MESSAGES; \
-	  $(mkinstalldirs) $(DESTDIR)$$dir; \
-	  if test -r $$cat; then \
-	    $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
-	    echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
-	  else \
-	    $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
-	    echo "installing $(srcdir)/$$cat as" \
-		 "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
-	  fi; \
-	done
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall:
-	catalogs='$(CATALOGS)'; \
-	for cat in $$catalogs; do \
-	  cat=`basename $$cat`; \
-	  lang=`echo $$cat | sed 's/\.gmo$$//'`; \
-	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
-	done
-	if test "$(PACKAGE)" = "gettext"; then \
-	  rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
-	else \
-	  : ; \
-	fi
-
-check: all
-
-dvi info tags TAGS ID:
-
-mostlyclean:
-	rm -f core core.* *.pox $(PACKAGE).po *.new.po
-	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 $(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)"; \
-	for file in $$dists; do \
-	  if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
-	  cp -p $$dir/$$file $(distdir); \
-	done
-
-update-po: Makefile
-	$(MAKE) $(PACKAGE).pot
-	if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
-	cd $(srcdir); \
-	catalogs='$(GMOFILES)'; \
-	for cat in $$catalogs; do \
-	  cat=`basename $$cat`; \
-	  lang=`echo $$cat | sed 's/\.gmo$$//'`; \
-	  echo "$$lang:"; \
-	  if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \
-	    mv -f $$lang.new.po $$lang.po; \
-	  else \
-	    echo "msgmerge for $$cat failed!"; \
-	    rm -f $$lang.new.po; \
-	  fi; \
-	done
-	$(MAKE) update-gmo
-
-update-gmo: Makefile $(GMOFILES)
-	@:
-
-Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
-	       $(SHELL) ./config.status
-
-# 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:
===================================================================
Index: po/POTFILES.in
--- po/POTFILES.in	Mon Oct 29 21:07:28 2001
+++ po/POTFILES.in	Tue May  5 13:32:27 1998
@@ -1,1093 +0,0 @@
-# List of files that contain translatable strings.
-# Copyright 1998 Free Software Foundation, Inc.
-
-# 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.
-
-
-# This should list all .c and .h files in this distribution, except
-# those which are directly generated from .y files; in that case, the
-# .y file should be listed instead.  Also, nothing in the intl, po,
-# testsuite, and ginclude directories should be listed.
-
-# Files that are intentionally excluded should be commented out, not removed.
-# To exclude a file, prepend a '#' to its name, and follow it by a space
-# and a comment as to why it was excluded.
-
-# By convention, if any file included in this list defines a function
-# with an argument whose name ends in `msgid', that function
-# is expected to translate the argument before presenting it to the user.
-# ../exgettext uses this convention to scan for strings that need translation.
-# A function can have at most one msgid argument.
-# Two functions with the same name in different programs
-# must agree about which argument (if any) is a msgid.
-
-# NOTE: Entries must not have trailing spaces!
-
-# Here are some reasons why a file might be commented-out in the list below:
-
-#   It is part of the GCC library.
-
-#   It is meant to be executed only by GCC maintainers or installers.
-#   Such files do not need to be translated, 
-#   as these people typically need to be able to read English anyway.
-
-#   It is not yet internationalized, because it contains many strings
-#   that require a lot of analysis, and the file is little-used.
-
-acconfig.h
-alias.c
-attribs.c
-basic-block.h
-bb-reorder.c
-bitmap.c
-bitmap.h
-builtins.c
-c-aux-info.c
-c-common.c
-c-common.h
-c-convert.c
-c-decl.c
-c-dump.c
-c-dump.h
-c-errors.c
-c-format.c
-c-lang.c
-c-lex.c
-c-lex.h
-c-parse.y
-c-pragma.c
-c-pragma.h
-c-semantics.c
-c-tree.h
-c-typeck.c
-caller-save.c
-calls.c
-cfg.c
-cfganal.c
-cfgbuild.c
-cfgcleanup.c
-cfgloop.c
-cfgrtl.c
-ch/actions.c
-ch/actions.h
-ch/ch-tree.h
-ch/convert.c
-ch/decl.c
-ch/except.c
-ch/expr.c
-ch/grant.c
-ch/hash.h
-ch/inout.c
-ch/lang-options.h
-ch/lang-specs.h
-ch/lang.c
-ch/lex.c
-ch/lex.h
-ch/loop.c
-ch/nloop.c
-ch/parse.c
-ch/parse.h
-ch/satisfy.c
-ch/tasking.c
-ch/tasking.h
-ch/timing.c
-ch/tree.c
-ch/typeck.c
-ch/xtypeck.c
-collect2.c
-collect2.h
-combine.c
-conditions.h
-config/1750a/1750a-protos.h
-config/1750a/1750a.c
-config/1750a/1750a.h
-config/a29k/a29k-protos.h
-config/a29k/a29k.c
-config/a29k/a29k.h
-config/a29k/rtems.h
-config/a29k/unix.h
-config/a29k/vx29k.h
-config/alpha/alpha-interix.h
-config/alpha/alpha-protos.h
-config/alpha/alpha.c
-config/alpha/alpha.h
-config/alpha/alpha32.h
-#config/alpha/crtfastmath.c is part of the GCC library
-config/alpha/elf.h
-config/alpha/freebsd.h
-config/alpha/linux-ecoff.h
-config/alpha/linux-elf.h
-config/alpha/linux.h
-config/alpha/netbsd-elf.h
-config/alpha/netbsd.h
-config/alpha/openbsd.h
-config/alpha/osf.h
-config/alpha/osf12.h
-config/alpha/osf2or3.h
-config/alpha/osf5.h
-config/alpha/unicosmk.h
-config/alpha/va_list.h
-config/alpha/vms.h
-config/alpha/vxworks.h
-config/alpha/xm-alpha-interix.h
-config/alpha/xm-vms.h
-config/aoutos.h
-config/arc/arc-protos.h
-config/arc/arc.c
-config/arc/arc.h
-config/arc/initfini.c
-config/arm/aof.h
-config/arm/aout.h
-config/arm/arm-protos.h
-config/arm/arm-wince-pe.h
-config/arm/arm.c
-config/arm/arm.h
-config/arm/coff.h
-config/arm/conix-elf.h
-config/arm/ecos-elf.h
-config/arm/elf.h
-config/arm/linux-elf.h
-config/arm/linux-gas.h
-config/arm/netbsd.h
-config/arm/pe.c
-config/arm/pe.h
-config/arm/riscix.h
-config/arm/riscix1-1.h
-config/arm/rix-gas.h
-config/arm/rtems-elf.h
-config/arm/semi.h
-config/arm/semiaof.h
-config/arm/strongarm-coff.h
-config/arm/strongarm-elf.h
-config/arm/strongarm-pe.h
-config/arm/uclinux-elf.h
-config/arm/unknown-elf-oabi.h
-config/arm/unknown-elf.h
-config/arm/vxarm.h
-config/arm/xscale-coff.h
-config/arm/xscale-elf.h
-config/avr/avr-protos.h
-config/avr/avr.c
-config/avr/avr.h
-config/c4x/c4x-protos.h
-config/c4x/c4x.c
-config/c4x/c4x.h
-config/c4x/rtems.h
-config/chorus.h
-config/clipper/clipper-protos.h
-config/clipper/clipper.c
-config/clipper/clipper.h
-config/clipper/clix.h
-config/convex/convex-protos.h
-config/convex/convex.c
-config/convex/convex.h
-config/d30v/d30v-protos.h
-config/d30v/d30v.c
-config/d30v/d30v.h
-config/darwin-c.c
-config/darwin-protos.h
-config/darwin.c
-config/darwin.h
-config/dbx.h
-config/dbxcoff.h
-config/dbxelf.h
-config/divmod.c
-config/dsp16xx/dsp16xx-protos.h
-config/dsp16xx/dsp16xx.c
-config/dsp16xx/dsp16xx.h
-config/elfos.h
-config/elxsi/elxsi-protos.h
-config/elxsi/elxsi.c
-config/elxsi/elxsi.h
-#config/float-c4x.h is part of the GCC library
-#config/float-i128.h is part of the GCC library
-#config/float-i32.h is part of the GCC library
-#config/float-i386.h is part of the GCC library
-#config/float-i64.h is part of the GCC library
-#config/float-m68k.h is part of the GCC library
-#config/float-sh.h is part of the GCC library
-#config/float-sparc.h is part of the GCC library
-#config/float-vax.h is part of the GCC library
-config/fp-bit.c
-config/fp-bit.h
-config/fr30/fr30-protos.h
-config/fr30/fr30.c
-config/fr30/fr30.h
-config/freebsd-nthr.h
-config/freebsd.h
-config/freebsd3.h
-config/freebsd4.h
-config/freebsd5.h
-config/freebsd6.h
-config/gnu.h
-config/gofast.h
-config/h8300/elf.h
-#config/h8300/fixunssfsi.c is part of the GCC library
-config/h8300/h8300-protos.h
-config/h8300/h8300.c
-config/h8300/h8300.h
-config/h8300/rtems.h
-config/i370/i370-protos.h
-config/i370/i370.c
-config/i370/i370.h
-config/i370/linux.h
-config/i370/mvs.h
-config/i370/oe.h
-config/i386/386bsd.h
-config/i386/aix386.h
-config/i386/aix386ng.h
-config/i386/att.h
-config/i386/beos-elf.h
-config/i386/bsd.h
-config/i386/bsd386.h
-config/i386/crtdll.h
-config/i386/cygwin.h
-config/i386/dgux.c
-config/i386/dgux.h
-config/i386/djgpp-rtems.h
-config/i386/djgpp.h
-config/i386/freebsd-aout.h
-config/i386/freebsd.h
-config/i386/gas.h
-config/i386/gmon-sol2.c
-config/i386/gnu.h
-config/i386/gstabs.h
-config/i386/i386-aout.h
-config/i386/i386-coff.h
-config/i386/i386-interix.h
-config/i386/i386-protos.h
-config/i386/i386.c
-config/i386/i386.h
-config/i386/i386elf.h
-config/i386/interix.c
-config/i386/isc.h
-config/i386/isccoff.h
-config/i386/iscdbx.h
-config/i386/linux-aout.h
-config/i386/linux-oldld.h
-config/i386/linux.h
-config/i386/lynx-ng.h
-config/i386/lynx.h
-config/i386/mach.h
-config/i386/mingw32.h
-config/i386/moss.h
-config/i386/netbsd-elf.h
-config/i386/netbsd.h
-config/i386/netware.h
-config/i386/next.h
-config/i386/openbsd.h
-config/i386/osf1elf.h
-config/i386/osf1elfgdb.h
-config/i386/osfelf.h
-config/i386/osfrose.h
-config/i386/ptx4-i.h
-config/i386/rtems.h
-config/i386/rtemself.h
-config/i386/sco5.h
-config/i386/seq-gas.h
-config/i386/seq-sysv3.h
-config/i386/seq2-sysv3.h
-config/i386/sequent.h
-config/i386/sol2.h
-config/i386/sol2gas.h
-config/i386/sun.h
-config/i386/sun386.h
-config/i386/svr3dbx.h
-config/i386/svr3gas.h
-config/i386/sysv3.h
-config/i386/sysv4.h
-config/i386/sysv5.h
-config/i386/udk.h
-config/i386/unix.h
-config/i386/uwin.h
-config/i386/v3gas.h
-config/i386/vsta.h
-config/i386/vxi386.h
-config/i386/win32.h
-config/i386/winnt.c
-config/i386/xm-cygwin.h
-config/i386/xm-djgpp.h
-config/i386/xm-i386-interix.h
-config/i386/xm-mingw32.h
-config/i386/xm-osf1elf.h
-config/i386/xm-vsta.h
-config/i860/bsd-gas.h
-config/i860/bsd.h
-config/i860/fx2800.h
-config/i860/i860-protos.h
-config/i860/i860.c
-config/i860/i860.h
-config/i860/mach.h
-config/i860/paragon.h
-config/i860/sysv3.h
-config/i860/sysv4.h
-config/i960/i960-c.c
-config/i960/i960-coff.h
-config/i960/i960-protos.h
-config/i960/i960.c
-config/i960/i960.h
-config/i960/rtems.h
-config/i960/vx960-coff.h
-config/i960/vx960.h
-config/ia64/aix.h
-#config/ia64/crtfastmath.c is part of the GCC library
-config/ia64/elf.h
-config/ia64/fde-glibc.c
-config/ia64/hpux.h
-config/ia64/hpux_longdouble.h
-config/ia64/ia64-protos.h
-config/ia64/ia64.c
-config/ia64/ia64.h
-config/ia64/ia64intrin.h
-config/ia64/linux.h
-#config/ia64/quadlib.c is part of the GCC library
-config/ia64/sysv4.h
-#config/ia64/unwind-aix.c is part of the GCC library
-#config/ia64/unwind-ia64.c is part of the GCC library
-#config/ia64/unwind-ia64.h is part of the GCC library
-config/interix.h
-config/libgloss.h
-config/linux-aout.h
-config/linux.h
-config/lynx-ng.h
-config/lynx.h
-config/m32r/initfini.c
-config/m32r/m32r-protos.h
-config/m32r/m32r.c
-config/m32r/m32r.h
-config/m68hc11/m68hc11-protos.h
-config/m68hc11/m68hc11.c
-config/m68hc11/m68hc11.h
-config/m68hc11/m68hc12.h
-config/m68k/3b1.h
-config/m68k/3b1g.h
-config/m68k/a-ux.h
-config/m68k/altos3068.h
-config/m68k/amix.h
-config/m68k/apollo68.h
-config/m68k/atari.h
-config/m68k/aux-crt1.c
-config/m68k/aux-exit.c
-config/m68k/aux-mcount.c
-config/m68k/auxas.h
-config/m68k/auxgas.h
-config/m68k/auxgld.h
-config/m68k/auxld.h
-config/m68k/ccur-GAS.h
-config/m68k/coff.h
-config/m68k/crds.h
-config/m68k/ctix.h
-config/m68k/dpx2.h
-config/m68k/dpx2cdbx.h
-config/m68k/dpx2g.h
-config/m68k/fpgnulib.c
-config/m68k/hp2bsd.h
-config/m68k/hp310.h
-config/m68k/hp310g.h
-config/m68k/hp320.h
-config/m68k/hp320g.h
-config/m68k/hp3bsd.h
-config/m68k/hp3bsd44.h
-config/m68k/hpux7.h
-config/m68k/isi-nfp.h
-config/m68k/isi.h
-config/m68k/linux-aout.h
-config/m68k/linux.h
-config/m68k/lynx-ng.h
-config/m68k/lynx.h
-config/m68k/m68020-elf.h
-config/m68k/m68k-aout.h
-config/m68k/m68k-coff.h
-config/m68k/m68k-none.h
-config/m68k/m68k-protos.h
-config/m68k/m68k-psos.h
-config/m68k/m68k.c
-config/m68k/m68k.h
-config/m68k/m68kelf.h
-config/m68k/m68kemb.h
-config/m68k/m68kv4.h
-config/m68k/mot3300.h
-config/m68k/netbsd.h
-config/m68k/news.h
-config/m68k/news3.h
-config/m68k/news3gas.h
-config/m68k/newsgas.h
-config/m68k/next.h
-config/m68k/next21.h
-config/m68k/openbsd.h
-config/m68k/pbb.h
-config/m68k/plexus.h
-config/m68k/rtems.h
-config/m68k/rtemself.h
-config/m68k/sgs.h
-config/m68k/sun2.h
-config/m68k/sun2o4.h
-config/m68k/sun3.h
-config/m68k/sun3mach.h
-config/m68k/sun3n.h
-config/m68k/sun3n3.h
-config/m68k/sun3o3.h
-config/m68k/tower-as.h
-config/m68k/tower.h
-config/m68k/vxm68k.h
-config/m88k/aout-dbx.h
-config/m88k/dgux.h
-config/m88k/dguxbcs.h
-config/m88k/dolph.h
-config/m88k/luna.h
-config/m88k/m88k-aout.h
-config/m88k/m88k-coff.h
-config/m88k/m88k-protos.h
-config/m88k/m88k.c
-config/m88k/m88k.h
-config/m88k/openbsd.h
-config/m88k/sysv3.h
-config/m88k/sysv4.h
-config/m88k/tekXD88.h
-config/mcore/gfloat.h
-config/mcore/mcore-elf.h
-config/mcore/mcore-pe.h
-config/mcore/mcore-protos.h
-config/mcore/mcore.c
-config/mcore/mcore.h
-config/mips/abi64.h
-config/mips/bsd-4.h
-config/mips/bsd-5.h
-config/mips/cross64.h
-config/mips/dec-bsd.h
-config/mips/dec-osf1.h
-config/mips/ecoff.h
-config/mips/ecoffl.h
-config/mips/elf.h
-config/mips/elf64.h
-config/mips/elfl.h
-config/mips/elfl64.h
-config/mips/elflorion.h
-config/mips/elforion.h
-config/mips/gnu.h
-config/mips/iris3.h
-config/mips/iris4.h
-config/mips/iris4loser.h
-config/mips/iris5.h
-config/mips/iris5gas.h
-config/mips/iris6.h
-config/mips/iris6gld.h
-#config/mips/irix6-libc-compat.c is part of the GCC library
-config/mips/isa32-linux.h
-config/mips/isa3264.h
-config/mips/linux.h
-config/mips/little.h
-config/mips/mips-5.h
-config/mips/mips-protos.h
-config/mips/mips.c
-config/mips/mips.h
-config/mips/netbsd.h
-config/mips/news4.h
-config/mips/news5.h
-config/mips/nws3250v4.h
-config/mips/openbsd-be.h
-config/mips/openbsd.h
-config/mips/osfrose.h
-config/mips/r3900.h
-config/mips/rtems.h
-config/mips/rtems64.h
-config/mips/sni-gas.h
-config/mips/sni-svr4.h
-config/mips/svr3-4.h
-config/mips/svr3-5.h
-config/mips/svr4-4.h
-config/mips/svr4-5.h
-config/mips/svr4-t.h
-config/mips/ultrix.h
-config/mips/vxworks.h
-config/mips/xm-iris5.h
-config/mn10200/mn10200-protos.h
-config/mn10200/mn10200.c
-config/mn10200/mn10200.h
-config/mn10300/mn10300-protos.h
-config/mn10300/mn10300.c
-config/mn10300/mn10300.h
-config/netbsd.h
-config/netware.h
-config/nextstep.c
-config/nextstep.h
-config/nextstep21.h
-config/ns32k/encore.h
-config/ns32k/merlin.h
-config/ns32k/netbsd.h
-config/ns32k/ns32k-protos.h
-config/ns32k/ns32k.c
-config/ns32k/ns32k.h
-config/ns32k/pc532-mach.h
-config/ns32k/pc532-min.h
-config/ns32k/pc532.h
-config/ns32k/sequent.h
-config/ns32k/tek6000.h
-config/ns32k/tek6100.h
-config/ns32k/tek6200.h
-config/openbsd.h
-config/pa/elf.h
-config/pa/long_double.h
-config/pa/pa-64.h
-config/pa/pa-hiux.h
-config/pa/pa-hpux.h
-config/pa/pa-hpux10.h
-config/pa/pa-hpux11.h
-config/pa/pa-hpux7.h
-config/pa/pa-hpux9.h
-config/pa/pa-linux.h
-config/pa/pa-oldas.h
-config/pa/pa-osf.h
-config/pa/pa-pro-end.h
-config/pa/pa-protos.h
-config/pa/pa.c
-config/pa/pa.h
-config/pa/pa32-linux.h
-config/pa/pa32-regs.h
-config/pa/pa64-hpux.h
-config/pa/pa64-linux.h
-config/pa/pa64-regs.h
-config/pa/pa64-start.h
-config/pa/quadlib.c
-config/pa/rtems.h
-config/pa/som.h
-config/pdp11/2bsd.h
-config/pdp11/pdp11-protos.h
-config/pdp11/pdp11.c
-config/pdp11/pdp11.h
-config/pj/linux.h
-config/pj/pj-protos.h
-config/pj/pj.c
-config/pj/pj.h
-config/pj/pjl.h
-config/psos.h
-config/ptx4.h
-config/romp/romp-protos.h
-config/romp/romp.c
-config/romp/romp.h
-config/rs6000/aix.h
-config/rs6000/aix31.h
-config/rs6000/aix3newas.h
-config/rs6000/aix41.h
-config/rs6000/aix43.h
-config/rs6000/aix51.h
-config/rs6000/beos.h
-config/rs6000/darwin.h
-config/rs6000/eabi.h
-config/rs6000/eabiaix.h
-config/rs6000/eabisim.h
-config/rs6000/linux.h
-config/rs6000/linux64.h
-config/rs6000/lynx.h
-config/rs6000/mach.h
-config/rs6000/netbsd.h
-config/rs6000/rs6000-protos.h
-config/rs6000/rs6000.c
-config/rs6000/rs6000.h
-config/rs6000/rtems.h
-#config/rs6000/sol-c0.c is part of the GCC library
-config/rs6000/sol2.h
-config/rs6000/sysv4.h
-config/rs6000/sysv4le.h
-config/rs6000/vxppc.h
-config/rs6000/xcoff.h
-config/rs6000/xm-beos.h
-config/rtems.h
-#config/s390/fixdfdi.h is part of the GCC library
-config/s390/linux.h
-config/s390/linux64.h
-config/s390/s390-protos.h
-config/s390/s390.c
-config/s390/s390.h
-config/sh/elf.h
-config/sh/linux.h
-config/sh/rtems.h
-config/sh/rtemself.h
-config/sh/sh-protos.h
-config/sh/sh.c
-config/sh/sh.h
-config/sparc/aout.h
-config/sparc/bsd.h
-config/sparc/elf.h
-config/sparc/gmon-sol2.c
-config/sparc/hal.h
-config/sparc/linux-aout.h
-config/sparc/linux.h
-config/sparc/linux64.h
-config/sparc/lite.h
-config/sparc/litecoff.h
-config/sparc/liteelf.h
-config/sparc/lynx-ng.h
-config/sparc/lynx.h
-config/sparc/netbsd.h
-config/sparc/openbsd.h
-config/sparc/pbd.h
-config/sparc/rtems.h
-config/sparc/rtemself.h
-config/sparc/sol2-64.h
-config/sparc/sol2-sld-64.h
-config/sparc/sol2-sld.h
-config/sparc/sol2.h
-config/sparc/sp64-aout.h
-config/sparc/sp64-elf.h
-config/sparc/sp86x-aout.h
-config/sparc/sp86x-elf.h
-config/sparc/sparc-protos.h
-config/sparc/sparc.c
-config/sparc/sparc.h
-config/sparc/splet.h
-config/sparc/sun4gas.h
-config/sparc/sun4o3.h
-config/sparc/sunos4.h
-config/sparc/sysv4.h
-config/sparc/vxsim.h
-config/sparc/vxsparc.h
-config/sparc/vxsparc64.h
-#config/stormy16/stormy16-lib2.c is part of the GCC library
-config/stormy16/stormy16-protos.h
-config/stormy16/stormy16.c
-config/stormy16/stormy16.h
-config/svr3.h
-config/svr4.h
-config/tm-dwarf2.h
-config/udivmod.c
-config/udivmodsi4.c
-config/usegas.h
-config/v850/rtems.h
-config/v850/v850-c.c
-config/v850/v850-protos.h
-config/v850/v850.c
-config/v850/v850.h
-config/vax/netbsd.h
-config/vax/openbsd.h
-config/vax/openbsd1.h
-config/vax/ultrix.h
-config/vax/vax-protos.h
-config/vax/vax.c
-config/vax/vax.h
-config/vax/vaxv.h
-config/vax/vms.h
-config/vax/xm-vms.h
-config/we32k/we32k-protos.h
-config/we32k/we32k.c
-config/we32k/we32k.h
-config/xm-interix.h
-conflict.c
-convert.c
-convert.h
-cp/call.c
-cp/cfns.h
-cp/class.c
-cp/cp-lang.c
-cp/cp-tree.h
-cp/cvt.c
-cp/decl.c
-cp/decl.h
-cp/decl2.c
-cp/dump.c
-cp/error.c
-cp/except.c
-cp/expr.c
-cp/friend.c
-cp/g++spec.c
-cp/init.c
-cp/lang-options.h
-cp/lang-specs.h
-cp/lex.c
-cp/lex.h
-cp/mangle.c
-cp/method.c
-cp/optimize.c
-cp/parse.y
-cp/pt.c
-cp/ptree.c
-cp/repo.c
-cp/rtti.c
-cp/search.c
-cp/semantics.c
-cp/spew.c
-cp/tree.c
-cp/typeck.c
-cp/typeck2.c
-cp/xref.c
-cppdefault.c
-cppdefault.h
-cpperror.c
-cppexp.c
-cppfiles.c
-cpphash.c
-cpphash.h
-cppinit.c
-cpplex.c
-cpplib.c
-cpplib.h
-cppmacro.c
-cppmain.c
-cppspec.c
-#crtstuff.c is part of the GCC library
-cse.c
-cselib.c
-cselib.h
-dbxout.c
-dbxout.h
-dbxstclass.h
-debug.c
-debug.h
-defaults.h
-dependence.c
-df.c
-df.h
-diagnostic.c
-diagnostic.h
-doloop.c
-dominance.c
-doprint.c
-doschk.c
-dwarf.h
-dwarf2.h
-dwarf2asm.c
-dwarf2asm.h
-dwarf2out.c
-dwarf2out.h
-dwarfout.c
-emit-rtl.c
-#enquire.c is used only by GCC maintainers and installers
-errors.c
-errors.h
-except.c
-except.h
-explow.c
-expmed.c
-expr.c
-expr.h
-f/ansify.c
-f/bad.c
-f/bad.h
-f/bit.c
-f/bit.h
-f/bld.c
-f/bld.h
-f/com.c
-f/com.h
-f/data.c
-f/data.h
-f/equiv.c
-f/equiv.h
-f/expr.c
-f/expr.h
-f/fini.c
-f/g77spec.c
-f/global.c
-f/global.h
-f/implic.c
-f/implic.h
-f/info.c
-f/info.h
-f/intdoc.c
-f/intrin.c
-f/intrin.h
-f/lab.c
-f/lab.h
-f/lang-options.h
-f/lang-specs.h
-f/lex.c
-f/lex.h
-f/malloc.c
-f/malloc.h
-f/name.c
-f/name.h
-f/parse.c
-f/proj.c
-f/proj.h
-f/src.c
-f/src.h
-f/st.c
-f/st.h
-f/sta.c
-f/sta.h
-f/stb.c
-f/stb.h
-f/stc.c
-f/stc.h
-f/std.c
-f/std.h
-f/ste.c
-f/ste.h
-f/storag.c
-f/storag.h
-f/stp.c
-f/stp.h
-f/str.c
-f/str.h
-f/sts.c
-f/sts.h
-f/stt.c
-f/stt.h
-f/stu.c
-f/stu.h
-f/stv.c
-f/stv.h
-f/stw.c
-f/stw.h
-f/symbol.c
-f/symbol.h
-f/target.c
-f/target.h
-f/top.c
-f/top.h
-f/type.c
-f/type.h
-f/version.c
-f/version.h
-f/where.c
-f/where.h
-final.c
-#fix-header.c is used only by GCC maintainers and installers
-flags.h
-floatlib.c
-flow.c
-fold-const.c
-fp-test.c
-#frame.h is part of the GCC library
-function.c
-function.h
-gcc.c
-gcc.h
-gccspec.c
-gcov-io.h
-gcov.c
-gcse.c
-#gbl-ctors.h is part of the GCC library
-#gen-protos.c is used only by GCC maintainers and installers
-#genattr.c is used only by GCC maintainers and installers
-#genattrtab.c is used only by GCC maintainers and installers
-#gencheck.c is used only by GCC maintainers and installers
-#gencodes.c is used only by GCC maintainers and installers
-#genconstants.c is used only by GCC maintainers and installers
-#genconfig.c is used only by GCC maintainers and installers
-#genemit.c is used only by GCC maintainers and installers
-#genextract.c is used only by GCC maintainers and installers
-#genflags.c is used only by GCC maintainers and installers
-#gengenrtl.c is used only by GCC maintainers and installers
-#genopinit.c is used only by GCC maintainers and installers
-#genoutput.c is used only by GCC maintainers and installers
-#genpeep.c is used only by GCC maintainers and installers
-#genpreds.c is used only by GCC maintainers and installers
-#genrecog.c is used only by GCC maintainers and installers
-#gensupport.c is used only by GCC maintainers and installers
-#gensupport.h is used only by GCC maintainers and installers
-ggc-callbacks.c
-ggc-common.c
-ggc-none.c
-ggc-page.c
-ggc-simple.c
-ggc.h
-glimits.h
-global.c
-gmon.c
-graph.c
-graph.h
-gstab.h
-gsyms.h
-gsyslimits.h
-gthr-aix.h
-gthr-dce.h
-gthr-posix.h
-gthr-rtems.h
-gthr-single.h
-gthr-solaris.h
-gthr-vxworks.h
-gthr-win32.h
-gthr.h
-haifa-sched.c
-halfpic.c
-halfpic.h
-hard-reg-set.h
-hash.c
-hash.h
-hashtable.c
-hashtable.h
-hwint.h
-ifcvt.c
-input.h
-insn-addr.h
-integrate.c
-integrate.h
-intl.c
-intl.h
-java/boehm.c
-java/buffer.c
-java/buffer.h
-java/chartables.h
-java/check-init.c
-java/class.c
-java/constants.c
-java/convert.h
-java/decl.c
-java/except.c
-java/expr.c
-java/gjavah.c
-java/java-except.h
-java/java-opcodes.h
-java/java-tree.h
-java/javaop.h
-java/jcf-depend.c
-java/jcf-dump.c
-java/jcf-io.c
-java/jcf-parse.c
-java/jcf-path.c
-java/jcf-reader.c
-java/jcf-write.c
-java/jcf.h
-java/jv-scan.c
-java/jvgenmain.c
-java/jvspec.c
-java/keyword.h
-java/lang-options.h
-java/lang-specs.h
-java/lang.c
-java/lex.c
-java/lex.h
-java/mangle.c
-java/mangle_name.c
-java/parse-scan.y
-java/parse.y
-java/typeck.c
-java/verify.c
-java/xref.c
-java/xref.h
-java/zextract.c
-java/zipfile.h
-jump.c
-langhooks.h
-langhooks.c
-lcm.c
-libfuncs.h
-#libgcc2.c is part of the GCC library
-#libgcc2.h is part of the GCC library
-#limitx.h is part of the GCC library
-#limity.h is part of the GCC library
-line-map.c
-line-map.h
-lists.c
-local-alloc.c
-#longlong.h is part of the GCC library
-loop.c
-loop.h
-machmode.h
-main.c
-mbchar.c
-mbchar.h
-mkdeps.c
-mkdeps.h
-#mips-tdump.c is not yet internationalized
-#mips-tfile.c is not yet internationalized
-objc/lang-options.h
-objc/lang-specs.h
-objc/objc-act.c
-objc/objc-act.h
-objc/objc-parse.y
-optabs.c
-optabs.h
-output.h
-params.c
-params.h
-predict.c
-predict.h
-prefix.c
-prefix.h
-print-rtl.c
-print-tree.c
-profile.c
-protoize.c
-#read-rtl.c is used only by GCC maintainers and installers
-real.c
-real.h
-recog.c
-recog.h
-reg-stack.c
-regclass.c
-regmove.c
-regrename.c
-regs.h
-reload.c
-reload.h
-reload1.c
-reorg.c
-resource.c
-resource.h
-rtl-error.c
-rtl.c
-rtl.h
-rtlanal.c
-sbitmap.c
-sbitmap.h
-#scan-decls.c is used only by GCC maintainers and installers
-#scan.c is used only by GCC maintainers and installers
-#scan.h is used only by GCC maintainers and installers
-sched-deps.c
-sched-ebb.c
-sched-int.h
-sched-rgn.c
-sched-vis.c
-sdbout.c
-sdbout.h
-sibcall.c
-simplify-rtx.c
-ssa-ccp.c
-ssa-dce.c
-ssa.c
-ssa.h
-stack.h
-stmt.c
-stor-layout.c
-stringpool.c
-sys-protos.h
-sys-types.h
-system.h
-target-def.h
-target.h
-timevar.c
-timevar.h
-tlink.c
-toplev.c
-toplev.h
-tradcif.y
-tradcpp.c
-tradcpp.h
-tree-inline.c
-tree-inline.h
-tree.c
-tree.h
-tsystem.h
-typeclass.h
-unprotoize.c
-unroll.c
-#unwind-dw2-fde.c is part of the GCC library
-#unwind-dw2-fde.h is part of the GCC library
-#unwind-dw2.c is part of the GCC library
-#unwind-pe.h is part of the GCC library
-#unwind-sjlj.c is part of the GCC library
-#unwind.h is part of the GCC library
-varasm.c
-varray.c
-varray.h
-version.c
-version.h
-xcoffout.c
-xcoffout.h
===================================================================
Index: po/exgettext
--- po/exgettext	Tue May  5 13:32:27 1998
+++ po/exgettext	Mon Oct 29 21:07:23 2001
@@ -0,0 +1,156 @@
+#! /bin/sh
+# Wrapper around gettext for GCC sources.
+# Copyright 1998, 2001 Free Software Foundation, Inc.
+
+# Written by Paul Eggert <eggert@twinsun.com>.
+# Revised by Zack Weinberg <zack@codesourcery.com> for no-POTFILES operation.
+
+# 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 arguments to this wrapper are: the program to execute, the
+# name of the "package", and the path to the source directory.
+
+if [ $# -ne 3 ]
+then	echo "usage: $0 <xgettext> <package> <srcdir>"
+	exit 1
+fi
+
+xgettext=$1
+package=$2
+srcdir=$3
+
+nl='
+'
+
+set -e
+
+# Create temporary directory for scratch files.
+T=exg$$.d
+mkdir $T
+trap "rm -r $T" 0
+
+pwd=`pwd`
+kopt=$pwd/$T/keyword-options
+emsg=$pwd/$T/emsgids.c
+posr=$pwd/$T/po-sources
+
+# Locate files to scan, and generate the list.  All .c and .h files in
+# $srcdir are examined, likewise $srcdir/config and $srcdir/config/*
+# (directories).  Also, all subdirectories of $srcdir that contain a
+# config-lang.in.  Exclusions come from $srcdir/po/EXCLUDE.
+#
+# Then generate keyword options for xgettext, by scanning for declarations
+# of functions whose parameter names end in "msgid".
+#
+# Finally, generate a source file containing all %e strings from
+# driver specs, so those can be translated too.
+#
+# All in one huge awk script.
+
+echo "scanning for keywords and %e strings..." >&2
+
+( cd $srcdir
+  lang_subdirs=`echo */config-lang.in | sed -e 's|/config-lang\.in||g'`
+  { echo *.[ch]
+    echo config/*.[ch]
+    echo config/*/*.[ch]
+    for l in $lang_subdirs
+    do	echo $l/*.[ch]
+    done
+  } | tr ' ' "$nl" | 
+  $AWK -v excl=po/EXCLUDES -v posr=$posr -v kopt=$kopt -v emsg=$emsg '
+function keyword_option(line) {
+    paren_index = index(line, "(")
+    name = substr(line, 1, paren_index - 1)
+    sub(/[^0-9A-Z_a-z]*$/, "", name)
+    sub(/[	 ]+PARAMS/, "", name)
+    sub(/[	 ]+VPARAMS/, "", name)
+    sub(/.*[^0-9A-Z_a-z]/, "", name)
+
+    args = substr(line, 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 > kopt
+    }
+}
+
+function spec_error_string (line) {
+    while ((percent_index = index(line, "%e")) != 0) {
+	escape = substr(line, percent_index - 1, 1)
+	line = substr(line, percent_index + 2)
+	if (escape == "%") return
+
+	bracket_index = index(line, "}")
+	if (bracket_index == 0) return
+
+	msgid = substr(line, 1, bracket_index - 1)
+	if (index(msgid, "%") != 0) return
+
+	printf("#line %d \"%s\"\n", lineno, file) > emsg
+	printf("_(\"%s\")\n", msgid) > emsg
+
+	line = substr(line, bracket_index + 1)
+    }
+}
+
+BEGIN {
+  while ((getline < excl) > 0) {
+    if ($0 ~ /^#/ || $0 ~ /^[ 	]*$/)
+      continue
+    excludes[$1] = 1
+  }
+}
+
+{ if (!($0 in excludes)) {
+    print > posr
+    files[NR] = $0
+  }
+}
+
+END {
+    for (f in files) {
+	file = files[f]
+	lineno = 1
+	while (getline < file) {
+	    if (/^(#[ 	]*define[ 	]*)?[A-Za-z_].*\(.*msgid[,\)]/) {
+		keyword_option($0)
+	    } else if (/%e/) {
+		spec_error_string($0)
+	    }
+	    lineno++
+	}
+    }
+    print emsg > posr
+}'
+)
+
+# Run the xgettext command, with temporary added as a file to scan.
+echo "running xgettext..." >&2
+$xgettext --default-domain=$package --directory=$srcdir \
+	  --add-comments `cat $kopt` --files-from=$posr \
+	  -o $package.pot



More information about the Gcc-patches mailing list