ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
authorZack Weinberg <zack@codesourcery.com>
Fri, 12 Oct 2001 17:24:30 +0000 (17:24 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Fri, 12 Oct 2001 17:24:30 +0000 (17:24 +0000)
top:
* ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
* configure.in, Makefile.in: Take out obsolete check-po logic.
* configure, config.in: Regenerate.
intl:
* Update entire directory from gettext 0.10.40.
* cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
Removed.
* config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
ref-add.sin, ref-del.sin: New.
po:
* Makefile.in.in: Upgrade to gettext-0.10.40.
* cat-id-tbl.c: Remove file.
* stamp-cat-id: Remove file.

From-SVN: r46233

46 files changed:
gcc/ABOUT-NLS
gcc/ChangeLog
gcc/Makefile.in
gcc/aclocal.m4
gcc/config.in
gcc/configure
gcc/configure.in
gcc/intl/ChangeLog
gcc/intl/Makefile.in
gcc/intl/VERSION
gcc/intl/bindtextdom.c
gcc/intl/cat-compat.c [deleted file]
gcc/intl/config.charset [new file with mode: 0755]
gcc/intl/dcgettext.c
gcc/intl/dcigettext.c [new file with mode: 0644]
gcc/intl/dcngettext.c [new file with mode: 0644]
gcc/intl/dgettext.c
gcc/intl/dngettext.c [new file with mode: 0644]
gcc/intl/explodename.c
gcc/intl/finddomain.c
gcc/intl/gettext.c
gcc/intl/gettext.h
gcc/intl/gettextP.h
gcc/intl/hash-string.h
gcc/intl/intl-compat.c
gcc/intl/l10nflist.c
gcc/intl/libgettext.h
gcc/intl/libgnuintl.h [new file with mode: 0644]
gcc/intl/linux-msg.sed [deleted file]
gcc/intl/loadinfo.h
gcc/intl/loadmsgcat.c
gcc/intl/localcharset.c [new file with mode: 0644]
gcc/intl/locale.alias [new file with mode: 0644]
gcc/intl/localealias.c
gcc/intl/ngettext.c [new file with mode: 0644]
gcc/intl/plural.c [new file with mode: 0644]
gcc/intl/plural.y [new file with mode: 0644]
gcc/intl/po2tbl.sed.in [deleted file]
gcc/intl/ref-add.sin [new file with mode: 0644]
gcc/intl/ref-del.sin [new file with mode: 0644]
gcc/intl/textdomain.c
gcc/intl/xopen-msg.sed [deleted file]
gcc/po/ChangeLog
gcc/po/Makefile.in.in
gcc/po/cat-id-tbl.c [deleted file]
gcc/po/stamp-cat-id [deleted file]

index 28d38c7..5fde45a 100644 (file)
@@ -8,7 +8,7 @@ A few packages already provide translations for their messages.
 
    If you found this `ABOUT-NLS' file inside a distribution, you may
 assume that the distributed package does use GNU `gettext' internally,
-itself available at your nearest GNU archive site.  But you do *not*
+itself available at your nearest GNU archive site.  But you do _not_
 need to install GNU `gettext' prior to configuring, installing or using
 this package with messages translated.
 
@@ -22,8 +22,8 @@ related to internationalization, you should tell about the version of
 `gettext' which is used.  The information can be found in the
 `intl/VERSION' file, in internationalized packages.
 
-One advise in advance
-=====================
+Quick configuration advice
+==========================
 
    If you want to exploit the full power of internationalization, you
 should configure it using
@@ -34,13 +34,14 @@ to force usage of internationalizing routines provided within this
 package, despite the existence of internationalizing capabilities in the
 operating system where this package is being installed.  So far, only
 the `gettext' implementation in the GNU C library version 2 provides as
-many features (such as locale alias or message inheritance) as the
-implementation here.  It is also not possible to offer this additional
-functionality on top of a `catgets' implementation.  Future versions of
-GNU `gettext' will very likely convey even more functionality.  So it
-might be a good idea to change to GNU `gettext' as soon as possible.
-
-   So you need not provide this option if you are using GNU libc 2 or
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
 you have installed a recent copy of the GNU gettext package with the
 included `libintl'.
 
@@ -53,23 +54,20 @@ Most such packages use GNU `gettext'.  Other packages have their own
 ways to internationalization, predating GNU `gettext'.
 
    By default, this package will be installed to allow translation of
-messages.  It will automatically detect whether the system provides
-usable `catgets' (if using this is selected by the installer) or
-`gettext' functions.  If neither is available, the GNU `gettext' own
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the GNU `gettext' own
 library will be used.  This library is wholly contained within this
 package, usually in the `intl/' subdirectory, so prior installation of
-the GNU `gettext' package is *not* required.  Installers may use
+the GNU `gettext' package is _not_ required.  Installers may use
 special options at configuration time for changing the default
 behaviour.  The commands:
 
      ./configure --with-included-gettext
-     ./configure --with-catgets
      ./configure --disable-nls
 
-will respectively bypass any pre-existing `catgets' or `gettext' to use
-the internationalizing routines provided within this package, enable
-the use of the `catgets' functions (if found on the locale system), or
-else, *totally* disable translation of messages.
+will respectively bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
 
    When you already have GNU `gettext' installed on your system and run
 configure without an option for your new package, `configure' will
@@ -83,18 +81,10 @@ package is more recent, you should use
 
 to prevent auto-detection.
 
-   By default the configuration process will not test for the `catgets'
-function and therefore they will not be used.  The reasons are already
-given above: the emulation on top of `catgets' cannot provide all the
-extensions provided by the GNU `gettext' library.  If you nevertheless
-want to use the `catgets' functions use
-
-     ./configure --with-catgets
-
-to enable the test for `catgets' (this causes no harm if `catgets' is
-not available on your system).  If you really select this option we
-would like to hear about the reasons because we cannot think of any
-good one ourself.
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
 
    Internationalized packages have usually many `po/LL.po' files, where
 LL gives an ISO 639 two-letter code identifying the language.  Unless
@@ -110,22 +100,35 @@ Using This Package
 
    As a user, if your language has been installed for this package, you
 only have to set the `LANG' environment variable to the appropriate
-ISO 639 `LL' two-letter code prior to using the programs in the
-package.  For example, let's suppose that you speak German.  At the
-shell prompt, merely execute `setenv LANG de' (in `csh'),
-`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash').  This
-can be done from your `.login' or `.profile' file, once and for all.
-
-   An operating system might already offer message localization for
-many of its programs, while other programs have been installed locally
-with the full capabilities of GNU `gettext'.  Just using `gettext'
-extended syntax for `LANG' would break proper localization of already
-available operating system programs.  In this case, users should set
-both `LANGUAGE' and `LANG' variables in their environment, as programs
-using GNU `gettext' give preference to `LANGUAGE'.  For example, some
-Swedish users would rather read translations in German than English for
-when Swedish is not available.  This is easily accomplished by setting
-`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
+`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
 
 Translating Teams
 =================
@@ -133,33 +136,21 @@ Translating Teams
    For the Free Translation Project to be a success, we need interested
 people who like their own language and write it well, and who are also
 able to synergize with other translators speaking the same language.
-Each translation team has its own mailing list, courtesy of Linux
-International.  You may reach your translation team at the address
-`LL@li.org', replacing LL by the two-letter ISO 639 code for your
-language.  Language codes are *not* the same as the country codes given
-in ISO 3166.  The following translation teams exist, as of December
-1997:
-
-     Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
-     Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
-     `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
-     Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
-     `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
-     Swedish `sv', and Turkish `tr'.
-
-For example, you may reach the Chinese translation team by writing to
-`zh@li.org'.
-
-   If you'd like to volunteer to *work* at translating messages, you
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
 should become a member of the translating team for your own language.
-The subscribing address is *not* the same as the list itself, it has
+The subscribing address is _not_ the same as the list itself, it has
 `-request' appended.  For example, speakers of Swedish can send a
 message to `sv-request@li.org', having this message body:
 
      subscribe
 
    Keep in mind that team members are expected to participate
-*actively* in translations, or at solving translational difficulties,
+_actively_ in translations, or at solving translational difficulties,
 rather than merely lurking around.  If your team does not exist yet and
 you want to start one, or if you are unsure about what to do or how to
 get started, please write to `translation@iro.umontreal.ca' to reach the
@@ -173,42 +164,128 @@ Available Packages
 ==================
 
    Languages are not equally supported in all packages.  The following
-matrix shows the current state of internationalization, as of December
-1997.  The matrix shows, in regard of each package, for which languages
-PO files have been submitted to translation coordination.
-
-     Ready PO files    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
-                     .----------------------------------------------------.
-     bash            |       []          []          []                   |  3
-     bison           |       []          []          []                   |  3
-     clisp           |       [] [] []    []                               |  4
-     cpio            |       []    []    []       [] []    []             |  6
-     diffutils       |       []    []    []                []          [] |  5
-     enscript        |       []    [] [] []          []             []    |  6
-     fileutils       | []    []    []    []       [] []    [] []    [] [] | 10
-     findutils       |       []    []    [] []    [] []    []    []    [] |  9
-     flex            |             []    []       []                   [] |  4
-     gcal            |       []          []          []    []          [] |  5
-     gettext         |    [] []    []    []       [] [] [] [] []    [] [] | 12
-     grep            |       []    []    []       [] [] [] []    [] [] [] | 10
-     hello           |    [] []    []    []       [] [] [] [] []    [] [] | 11
-     id-utils        |       []          []                []             |  3
-     indent          |    [] []                   []       []    []       |  5
-     libc            |       []    []    []       [] []    []          [] |  7
-     m4              |       []          []    []    []          []    [] |  6
-     make            |       []    []    []       [] []    []             |  6
-     music           |                   []                []             |  2
-     ptx             |       []    []    []          [] [] [] []       [] |  8
-     recode          |    [] []    []    []          []    [] []    [] [] |  9
-     sh-utils        |       []    []    []          [] [] [] []       [] |  8
-     sharutils       | []    []    []    []          []                [] |  6
-     tar             | []    []          [] []    [] [] [] [] []    [] [] | 11
-     texinfo         | []    []          []                               |  3
-     textutils       | []    []    []    []       [] [] [] []          [] |  9
-     wdiff           | []    []    []    []          [] [] []          [] |  8
-                     `----------------------------------------------------'
-       17 languages    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
-       27 packages      6  4 25  1 18  1 26  2  1 12 20  9 19  7  4  7 17  179
+matrix shows the current state of internationalization, as of September
+2001.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files    bg cs da de el en eo es et fi fr gl he hr id it ja
+                     +----------------------------------------------------+
+     a2ps            |          []             []    []                   |
+     bash            |          []       [] []       []                   |
+     bfd             |                                                    |
+     binutils        |                               []                   |
+     bison           |          []          [] []    []                [] |
+     clisp           |          []    []    []       []                   |
+     cpio            |       [] []          []       [] []                |
+     diffutils       |       [] []       [] []       [] []       []       |
+     enscript        |          []                   []                   |
+     error           |                      []       []                   |
+     fetchmail       |                                                    |
+     fileutils       |    [] [] [] []       []       [] []             [] |
+     findutils       |       [] []          [] []    [] []       [] []    |
+     flex            |       []             []       []                   |
+     freetype        |                                                    |
+     gas             |                                                    |
+     gawk            |                               []    []             |
+     gcal            |                                                    |
+     gcc             |                                                    |
+     gettext         |    [] [] [] []       []       [] []       [] [] [] |
+     gnupg           |          []       []    []    [] []          [] [] |
+     gprof           |                                                    |
+     grep            |    []    []       [] [] []    [] []          []    |
+     hello           |       [] [] []    [] [] [] [] [] []          [] [] |
+     id-utils        |       [] []                   []                   |
+     indent          |       [] []             []    [] []                |
+     jpilot          |                               []                   |
+     kbd             |                                                    |
+     ld              |                               []                   |
+     libc            |    [] [] [] []       []       [] []             [] |
+     lilypond        |                                                 [] |
+     lynx            |    [] [] []                                     [] |
+     m4              |    [] [] [] []                [] []       []    [] |
+     make            |       [] []          []       [] []             [] |
+     mysecretdiary   |          []                                        |
+     nano            |                      []          []       []       |
+     opcodes         |                                                    |
+     parted          |          []                      []             [] |
+     ptx             |       [] []          [] []    [] []       []       |
+     python          |                                                    |
+     recode          |       [] [] []    [] []       [] [] []       []    |
+     sed             |    [] [] [] []    []    []    [] [] []    [] [] [] |
+     sh-utils        |    [] [] [] []       [] []    [] []          [] [] |
+     sharutils       |    [] [] [] []       []       [] []             [] |
+     sketch          |                                                    |
+     soundtracker    |          []          []          []                |
+     sp              |                                                    |
+     tar             |    [] [] []          [] []    []             [] [] |
+     texinfo         |    [] [] []       []          []                [] |
+     textutils       |    [] [] [] []       []       [] []             [] |
+     util-linux      |    [] []                                           |
+     wdiff           |       [] []             []                         |
+     wget            |    [] [] [] []       [] []    [] [] []          [] |
+                     +----------------------------------------------------+
+                       bg cs da de el en eo es et fi fr gl he hr id it ja
+                        0 14 24 32 11  1  8 23 13  1 33 22  4  0  7  9 18
+     
+                       ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
+                     +----------------------------------------------------+
+     a2ps            |          []                   []    []             |  6
+     bash            |                                                    |  4
+     bfd             |                                                    |  0
+     binutils        |                                                    |  1
+     bison           |                               []                   |  6
+     clisp           |          []                                        |  5
+     cpio            | []       []       []     []   []                   | 10
+     diffutils       |                   []          []       [] []       | 11
+     enscript        |          []              []   []                   |  5
+     error           |                                  []       []       |  4
+     fetchmail       |                                                    |  0
+     fileutils       | []       []       []     []   [] [] [] [] []       | 17
+     findutils       | []       []       []     []   []    [] [] []       | 16
+     flex            | []                            []       []          |  6
+     freetype        |                                                    |  0
+     gas             |                                                    |  0
+     gawk            |                                           []       |  3
+     gcal            |                                                    |  0
+     gcc             |                                                    |  0
+     gettext         | []                []     []   []    [] [] []    [] | 18
+     gnupg           |                   []                   [] []       | 10
+     gprof           |                                                    |  0
+     grep            |                   []                [] [] []       | 12
+     hello           | [] [] [] []    [] []          [] []    [] [] []    | 22
+     id-utils        |          []                   []       []          |  6
+     indent          | []       []       []          [] []    [] []       | 12
+     jpilot          |                                                    |  1
+     kbd             |                                           []       |  1
+     ld              |                                                    |  1
+     libc            | []    []       [] []     []      []    [] []       | 16
+     lilypond        |          []                            []          |  3
+     lynx            |          []              []   []       []          |  8
+     m4              |          []       []          []       []          | 12
+     make            | []       []       []     []   []          []       | 12
+     mysecretdiary   |                                                    |  1
+     nano            |                                        []          |  4
+     opcodes         |                                           []       |  1
+     parted          |          []                   []                   |  5
+     ptx             |       [] []    [] [] []       []       [] []       | 15
+     python          |                                                    |  0
+     recode          |                   []          []    [] []          | 13
+     sed             |          []              []   [] [] [] [] []       | 19
+     sh-utils        |       [] []    [] []     []   [] [] [] [] []    [] | 21
+     sharutils       |          []                   []       []          | 11
+     sketch          |                                                    |  0
+     soundtracker    |                                                    |  3
+     sp              |                                                    |  0
+     tar             |       []       [] []     []         [] [] []       | 15
+     texinfo         |                               []                   |  7
+     textutils       |       [] []    [] []     []   [] [] []             | 16
+     util-linux      |                          []               []       |  4
+     wdiff           |                               [] []    [] []       |  7
+     wget            |          []                   [] [] [] [] [] []    | 17
+                     +----------------------------------------------------+
+       33 teams        ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
+       53 domains       9  1  6 20  0  6 17  1  13   25 10 11 23 21  2  2  387
 
    Some counters in the preceding matrix are higher than the number of
 visible blocks let us expect.  This is because a few extra PO files are
@@ -221,6 +298,27 @@ distributed as such by its maintainer.  There might be an observable
 lag between the mere existence a PO file and its wide availability in a
 distribution.
 
-   If December 1997 seems to be old, you may fetch a more recent copy
-of this `ABOUT-NLS' file on most GNU archive sites.
+   If September 2001 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites.  The most
+up-to-date matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+Using `gettext' in new packages
+===============================
+
+   If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+to use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
 
index 3e35208..a41fa48 100644 (file)
@@ -1,3 +1,9 @@
+2001-10-12  Zack Weinberg  <zack@codesourcery.com>
+
+       * ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40.
+       * configure.in, Makefile.in: Take out obsolete check-po logic.
+       * configure, config.in: Regenerate.
+
 2001-10-12  Ziemowit Laski  <zlaski@apple.com>
 
        * objc/objc-act.c (finish_objc): Correct precondition for emitting
index 5a5b849..0184816 100644 (file)
@@ -2862,7 +2862,7 @@ site.exp: ./config.status Makefile
                -e '1,/^## All variables above are.*##/ d' >> site.exp
        -@rm -f ./tmp?
 
-CHECK_TARGETS = check-gcc @check_languages@ @CHECK_PO@
+CHECK_TARGETS = check-gcc @check_languages@
 
 check-c++ : check-g++
 check-f77 : check-g77
@@ -2930,12 +2930,6 @@ check-objc: $(TESTSUITEDIR)/site.exp
            export TCL_LIBRARY ; fi ; \
        $(RUNTEST) --tool objc $(RUNTESTFLAGS))
 
-check-po:
-       if test -f cp/Makefile && test -f f/Makefile && \
-          test -f java/Makefile && test -f objc/Makefile; then \
-          $(MAKE) -C po check-po; \
-       fi
-
 check-consistency: testsuite/site.exp
        -rootme=`pwd`; export rootme; \
        srcdir=`cd ${srcdir}; pwd` ; export srcdir ; \
index 66c6136..b943369 100644 (file)
@@ -420,414 +420,6 @@ fi
 AC_SUBST($1)dnl
 ])
 
-
-
-# Macro to add for using GNU gettext.
-# Ulrich Drepper <drepper@cygnus.com>, 1995.
-#
-# This file can be copied and used freely without restrictions.  It can
-# be used in projects which are not available under the GNU Public License
-# but which still want to provide support for the GNU gettext functionality.
-# Please note that the actual code is *not* freely available.
-
-# serial 5
-
-AC_DEFUN(AM_WITH_NLS,
-  [AC_MSG_CHECKING([whether NLS is requested])
-    dnl Default is enabled NLS
-    AC_ARG_ENABLE(nls,
-      [  --disable-nls           do not use Native Language Support],
-      USE_NLS=$enableval, USE_NLS=yes)
-    AC_MSG_RESULT($USE_NLS)
-    AC_SUBST(USE_NLS)
-
-    USE_INCLUDED_LIBINTL=no
-
-    dnl If we use NLS figure out what method
-    if test "$USE_NLS" = "yes"; then
-      AC_DEFINE(ENABLE_NLS)
-      AC_MSG_CHECKING([whether included gettext is requested])
-      AC_ARG_WITH(included-gettext,
-        [  --with-included-gettext use the GNU gettext library included here],
-        nls_cv_force_use_gnu_gettext=$withval,
-        nls_cv_force_use_gnu_gettext=no)
-      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
-      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
-      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
-        dnl User does not insist on using GNU NLS library.  Figure out what
-        dnl to use.  If gettext or catgets are available (in this order) we
-        dnl use this.  Else we have to fall back to GNU NLS library.
-       dnl catgets is only used if permitted by option --with-catgets.
-       nls_cv_header_intl=
-       nls_cv_header_libgt=
-       CATOBJEXT=NONE
-
-       AC_CHECK_HEADER(libintl.h,
-         [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
-           [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
-              gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
-
-          if test "$gt_cv_func_gettext_libc" != "yes"; then
-            AC_CHECK_LIB(intl, bindtextdomain,
-              [AC_CACHE_CHECK([for gettext in libintl],
-                gt_cv_func_gettext_libintl,
-                [AC_CHECK_LIB(intl, gettext,
-                 gt_cv_func_gettext_libintl=yes,
-                 gt_cv_func_gettext_libintl=no)],
-                gt_cv_func_gettext_libintl=no)])
-          fi
-
-          if test "$gt_cv_func_gettext_libintl" = "yes"; then
-            LIBS="-lintl $LIBS"
-          fi
-
-          if test "$gt_cv_func_gettext_libc" = "yes" \
-             || test "$gt_cv_func_gettext_libintl" = "yes"; then
-             AC_DEFINE(HAVE_GETTEXT)
-             GCC_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-               [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
-             if test "$MSGFMT" != "no"; then
-               AC_CHECK_FUNCS(dcgettext)
-               GCC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-               GCC_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-                 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
-               AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
-                              return _nl_msg_cat_cntr],
-                 [CATOBJEXT=.gmo
-                  DATADIRNAME=share],
-                 [CATOBJEXT=.mo
-                  DATADIRNAME=lib])
-               INSTOBJEXT=.mo
-             else
-               create_catalogs="no"
-             fi
-           fi
-       ])
-
-        if test "$CATOBJEXT" = "NONE"; then
-         AC_MSG_CHECKING([whether catgets can be used])
-         AC_ARG_WITH(catgets,
-           [  --with-catgets          use catgets functions if available],
-           nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
-         AC_MSG_RESULT($nls_cv_use_catgets)
-
-         if test "$nls_cv_use_catgets" = "yes"; then
-           dnl No gettext in C library.  Try catgets next.
-           AC_CHECK_LIB(i, main)
-           AC_CHECK_FUNC(catgets,
-             [AC_DEFINE(HAVE_CATGETS)
-              INTLOBJS="\$(CATOBJS)"
-              GCC_PATH_PROG(GENCAT, gencat, no)dnl
-              if test "$GENCAT" != "no"; then
-                GCC_PATH_PROG(GMSGFMT, gmsgfmt, no)
-                if test "$GMSGFMT" = "no"; then
-                  GCC_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
-                   [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
-                  if test "$GMSGFMT" = "msgfmt"; then
-                    create_catalogs="no"
-                  fi
-                fi
-                GCC_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-                  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
-                USE_INCLUDED_LIBINTL=yes
-                CATOBJEXT=.cat
-                INSTOBJEXT=.cat
-                DATADIRNAME=lib
-                INTLDEPS='$(top_builddir)/intl/libintl.a'
-                INTLLIBS=$INTLDEPS
-                LIBS=`echo $LIBS | sed -e 's/-lintl//'`
-                nls_cv_header_intl=intl/libintl.h
-                nls_cv_header_libgt=intl/libgettext.h
-              fi])
-         fi
-        fi
-
-        if test "$CATOBJEXT" = "NONE"; then
-         dnl Neither gettext nor catgets in included in the C library.
-         dnl Fall back on GNU gettext library.
-         nls_cv_use_gnu_gettext=yes
-        fi
-      fi
-
-      if test "$nls_cv_use_gnu_gettext" = "yes"; then
-        dnl Mark actions used to generate GNU NLS library.
-        INTLOBJS="\$(GETTOBJS)"
-        GCC_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
-        GCC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-        dnl If we didn't find either msgfmt or gmsgfmt, don't try to
-        dnl create a catalog.
-       if test "$MSGFMT" = "msgfmt" && test "$GMSGFMT" = "msgfmt"; then
-         create_catalogs="no"
-       fi
-        GCC_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
-        AC_SUBST(MSGFMT)
-       USE_INCLUDED_LIBINTL=yes
-        CATOBJEXT=.gmo
-        INSTOBJEXT=.mo
-        DATADIRNAME=share
-       INTLDEPS='$(top_builddir)/intl/libintl.a'
-       INTLLIBS=$INTLDEPS
-       LIBS=`echo $LIBS | sed -e 's/-lintl//'`
-        nls_cv_header_intl=intl/libintl.h
-        nls_cv_header_libgt=intl/libgettext.h
-      fi
-
-      dnl Test whether we really found GNU xgettext.
-      if test "$XGETTEXT" != ":"; then
-       dnl If it is no GNU xgettext we define it as : so that the
-       dnl Makefiles still can work.
-       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
-         : ;
-       else
-         AC_MSG_RESULT(
-           [found xgettext program is not GNU xgettext; ignore it])
-         XGETTEXT=":"
-       fi
-      fi
-
-
-
-      # We need to process the po/ directory.
-      POSUB=po
-    else
-      DATADIRNAME=share
-      nls_cv_header_intl=intl/libintl.h
-      nls_cv_header_libgt=intl/libgettext.h
-    fi
-    AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
-    AC_OUTPUT_COMMANDS(
-     [case "$CONFIG_FILES" in *po/Makefile.in*)
-        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
-      esac])
-
-
-    # If this is used in GNU gettext we have to set USE_NLS to `yes'
-    # because some of the sources are only built for this goal.
-    if test "$PACKAGE" = gettext; then
-      USE_NLS=yes
-      USE_INCLUDED_LIBINTL=yes
-    fi
-
-    dnl These rules are solely for the distribution goal.  While doing this
-    dnl we only have to keep exactly one list of the available catalogs
-    dnl in configure.in.
-    for lang in $ALL_LINGUAS; do
-      GMOFILES="$GMOFILES $lang.gmo"
-      POFILES="$POFILES $lang.po"
-    done
-
-    dnl Make all variables we use known to autoconf.
-    AC_SUBST(USE_INCLUDED_LIBINTL)
-    AC_SUBST(CATALOGS)
-    AC_SUBST(CATOBJEXT)
-    AC_SUBST(DATADIRNAME)
-    AC_SUBST(GMOFILES)
-    AC_SUBST(INSTOBJEXT)
-    AC_SUBST(INTLDEPS)
-    AC_SUBST(INTLLIBS)
-    AC_SUBST(INTLOBJS)
-    AC_SUBST(POFILES)
-    AC_SUBST(POSUB)
-  ])
-
-AC_DEFUN(AM_GNU_GETTEXT,
-  [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-   AC_REQUIRE([AC_PROG_CC])dnl
-   AC_REQUIRE([AC_PROG_RANLIB])dnl
-   AC_REQUIRE([AC_ISC_POSIX])dnl
-   AC_REQUIRE([AC_HEADER_STDC])dnl
-   AC_REQUIRE([AC_C_CONST])dnl
-   AC_REQUIRE([AC_C_INLINE])dnl
-   AC_REQUIRE([AC_TYPE_OFF_T])dnl
-   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
-
-   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h sys/param.h])
-   AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
-strdup __argz_count __argz_stringify __argz_next])
-
-   if test "${ac_cv_func_stpcpy+set}" != "set"; then
-     AC_CHECK_FUNCS(stpcpy)
-   fi
-   if test "${ac_cv_func_stpcpy}" = "yes"; then
-     AC_DEFINE(HAVE_STPCPY)
-   fi
-
-   AM_LC_MESSAGES
-   AM_WITH_NLS
-
-   if test "x$create_catalogs" = "xno"; then
-     AC_MSG_WARN([No program for building catalogs found -> building disabled])
-   fi
-
-   if test "x$CATOBJEXT" != "x" && test "x$create_catalogs" != "xno" ; then
-     if test "x$ALL_LINGUAS" = "x"; then
-       LINGUAS=
-     else
-       AC_MSG_CHECKING(for catalogs to be installed)
-       if test "x$LINGUAS" = "x"; then
-        LINGUAS=$ALL_LINGUAS
-       else
-        NEW_LINGUAS=
-        for lang in $ALL_LINGUAS; do
-          case " $LINGUAS " in
-            *" $lang "*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
-          esac
-        done
-         LINGUAS=$NEW_LINGUAS
-       fi
-       AC_MSG_RESULT($LINGUAS)
-     fi
-
-     dnl Construct list of names of catalog files to be constructed.
-     if test -n "$LINGUAS"; then
-       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
-     fi
-   fi
-
-   dnl The reference to <locale.h> in the installed <libintl.h> file
-   dnl must be resolved because we cannot expect the users of this
-   dnl to define HAVE_LOCALE_H.
-   if test $ac_cv_header_locale_h = yes; then
-     INCLUDE_LOCALE_H="#include <locale.h>"
-   else
-     INCLUDE_LOCALE_H="\
-/* The system does not provide the header <locale.h>.  Take care yourself.  */"
-   fi
-   AC_SUBST(INCLUDE_LOCALE_H)
-
-   dnl Determine which catalog format we have (if any is needed)
-   dnl For now we know about two different formats:
-   dnl   Linux libc-5 and the normal X/Open format
-   test -d intl || mkdir intl
-   if test "$CATOBJEXT" = ".cat"; then
-     AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
-
-     dnl Transform the SED scripts while copying because some dumb SEDs
-     dnl cannot handle comments.
-     sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
-   fi
-   dnl po2tbl.sed is always needed.
-   sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
-     $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
-
-   dnl In the intl/Makefile.in we have a special dependency which makes
-   dnl only sense for gettext.  We comment this out for non-gettext
-   dnl packages.
-   if test "$PACKAGE" = "gettext"; then
-     GT_NO="#NO#"
-     GT_YES=
-   else
-     GT_NO=
-     GT_YES="#YES#"
-   fi
-   AC_SUBST(GT_NO)
-   AC_SUBST(GT_YES)
-
-   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
-   dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
-   dnl Try to locate is.
-   MKINSTALLDIRS=
-   if test -n "$ac_aux_dir"; then
-     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
-   fi
-   if test -z "$MKINSTALLDIRS"; then
-     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-   fi
-   AC_SUBST(MKINSTALLDIRS)
-
-   dnl *** For now the libtool support in intl/Makefile is not for real.
-   l=
-   AC_SUBST(l)
-
-   dnl Generate list of files to be processed by xgettext which will
-   dnl be included in po/Makefile.
-   test -d po || mkdir po
-   if test "x$srcdir" != "x."; then
-     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
-       posrcprefix="$srcdir/"
-     else
-       posrcprefix="../$srcdir/"
-     fi
-   else
-     posrcprefix="../"
-   fi
-   rm -f po/POTFILES
-   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,        $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
-       < $srcdir/po/POTFILES.in > po/POTFILES
-  ])
-
-# Check whether LC_MESSAGES is available in <locale.h>.
-# Ulrich Drepper <drepper@cygnus.com>, 1995.
-#
-# This file can be copied and used freely without restrictions.  It can
-# be used in projects which are not available under the GNU Public License
-# but which still want to provide support for the GNU gettext functionality.
-# Please note that the actual code is *not* freely available.
-
-# serial 1
-
-AC_DEFUN(AM_LC_MESSAGES,
-  [if test $ac_cv_header_locale_h = yes; then
-    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
-      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
-       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
-    if test $am_cv_val_LC_MESSAGES = yes; then
-      AC_DEFINE(HAVE_LC_MESSAGES)
-    fi
-  fi])
-
-# Search path for a program which passes the given test.
-# Ulrich Drepper <drepper@cygnus.com>, 1996.
-#
-# This file can be copied and used freely without restrictions.  It can
-# be used in projects which are not available under the GNU Public License
-# but which still want to provide support for the GNU gettext functionality.
-# Please note that the actual code is *not* freely available.
-
-# serial 1
-
-dnl GCC_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN(GCC_PATH_PROG_WITH_TEST,
-[# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(gcc_cv_path_$1,
-[case "[$]$1" in
-  /*)
-  gcc_cv_path_$1="[$]$1" # Let the user override the test with a path.
-  ;;
-  *)
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in ifelse([$5], , $PATH, [$5]); do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if [$3]; then
-       gcc_cv_path_$1="$ac_dir/$ac_word"
-       break
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so GCC_PATH_PROGS will keep looking.
-ifelse([$4], , , [  test -z "[$]gcc_cv_path_$1" && gcc_cv_path_$1="$4"
-])dnl
-  ;;
-esac])dnl
-$1="$gcc_cv_path_$1"
-if test -n "[$]$1"; then
-  AC_MSG_RESULT([$]$1)
-else
-  AC_MSG_RESULT(no)
-fi
-AC_SUBST($1)dnl
-])
-
 # Check whether mmap can map an arbitrary page from /dev/zero or with
 # MAP_ANONYMOUS, without MAP_FIXED.
 AC_DEFUN([AC_FUNC_MMAP_ANYWHERE],
@@ -1590,3 +1182,520 @@ size_t iconv();
   fi
   AC_SUBST(LIBICONV)
 ])
+
+### Gettext macros begin here.
+### Changes for GCC marked by 'dnl GCC LOCAL'.
+### Note iconv.m4 appears above, as it's used for other reasons.
+
+#serial AM1
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET);],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
+
+#serial 1
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+  [
+    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+    dnl GCC LOCAL: Use AC_SEARCH_LIBS.
+    AC_SEARCH_LIBS(strerror, cposix)
+  ]
+)
+
+#serial 2
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([jm_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+       [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       ],
+       ac_cv_gnu_library_2_1=yes,
+       ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 2
+
+AC_DEFUN([AM_LC_MESSAGES],
+  [if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
+
+# Search path for a program which passes the given test.
+# Ulrich Drepper <drepper@cygnus.com>, 1996.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 2
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+       ac_cv_path_$1="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 10
+
+dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
+dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). Otherwise, a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.
+dnl LIBDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_WITH_NLS],
+  [AC_MSG_CHECKING([whether NLS is requested])
+    dnl Default is enabled NLS
+    AC_ARG_ENABLE(nls,
+      [  --disable-nls           do not use Native Language Support],
+      USE_NLS=$enableval, USE_NLS=yes)
+    AC_MSG_RESULT($USE_NLS)
+    AC_SUBST(USE_NLS)
+
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+    INTLLIBS=
+
+    dnl If we use NLS figure out what method
+    if test "$USE_NLS" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+       CATOBJEXT=NONE
+
+        dnl Add a version number to the cache macros.
+        define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
+        define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
+
+       AC_CHECK_HEADER(libintl.h,
+         [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+           [AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+              [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+              gt_cv_func_gnugettext_libc=yes,
+              gt_cv_func_gnugettext_libc=no)])
+
+          if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+            AC_CACHE_CHECK([for GNU gettext in libintl],
+              gt_cv_func_gnugettext_libintl,
+              [gt_save_LIBS="$LIBS"
+               LIBS="$LIBS -lintl $LIBICONV"
+               AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+                 [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+                 gt_cv_func_gnugettext_libintl=yes,
+                 gt_cv_func_gnugettext_libintl=no)
+               LIBS="$gt_save_LIBS"])
+          fi
+
+          dnl If an already present or preinstalled GNU gettext() is found,
+          dnl use it.  But if this macro is used in GNU gettext, and GNU
+          dnl gettext is already preinstalled in libintl, we update this
+          dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+          if test "$gt_cv_func_gnugettext_libc" = "yes" \
+             || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+                  && test "$PACKAGE" != gettext; }; then
+            AC_DEFINE(HAVE_GETTEXT, 1,
+               [Define if the GNU gettext() function is already present or preinstalled.])
+
+            if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+              dnl If iconv() is in a separate libiconv library, then anyone
+              dnl linking with libintl{.a,.so} also needs to link with
+              dnl libiconv.
+              INTLLIBS="-lintl $LIBICONV"
+            fi
+
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $INTLLIBS"
+            AC_CHECK_FUNCS(dcgettext)
+            LIBS="$gt_save_LIBS"
+
+            dnl Search for GNU msgfmt in the PATH.
+            AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+              [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
+            AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+            dnl Search for GNU xgettext in the PATH.
+            AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+              [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
+
+            CATOBJEXT=.gmo
+          fi
+       ])
+
+        if test "$CATOBJEXT" = "NONE"; then
+         dnl GNU gettext is not found in the C library.
+         dnl Fall back on GNU gettext library.
+         nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        INTLOBJS="\$(GETTOBJS)"
+        AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+         [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
+        AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+        AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+         [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
+        AC_SUBST(MSGFMT)
+       BUILD_INCLUDED_LIBINTL=yes
+       USE_INCLUDED_LIBINTL=yes
+        CATOBJEXT=.gmo
+       INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
+       LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+      dnl Test whether we really found GNU msgfmt.
+      if test "$GMSGFMT" != ":"; then
+       dnl If it is no GNU msgfmt we define it as : so that the
+       dnl Makefiles still can work.
+       if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found msgfmt program is not GNU msgfmt; ignore it])
+         GMSGFMT=":"
+       fi
+      fi
+
+      dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+      dnl Test whether we really found GNU xgettext.
+      if test "$XGETTEXT" != ":"; then
+       dnl If it is no GNU xgettext we define it as : so that the
+       dnl Makefiles still can work.
+       if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found xgettext program is not GNU xgettext; ignore it])
+         XGETTEXT=":"
+       fi
+      fi
+
+      dnl We need to process the po/ directory.
+      POSUB=po
+    fi
+    AC_OUTPUT_COMMANDS(
+     [for ac_file in $CONFIG_FILES; do
+        # Support "outfile[:infile[:infile...]]"
+        case "$ac_file" in
+          *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+        esac
+        # PO directories have a Makefile.in generated from Makefile.in.in.
+        case "$ac_file" in */Makefile.in)
+          # Adjust a relative srcdir.
+          ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+          ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+          ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+          # In autoconf-2.13 it is called $ac_given_srcdir.
+          # In autoconf-2.50 it is called $srcdir.
+          test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+          case "$ac_given_srcdir" in
+            .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+            /*) top_srcdir="$ac_given_srcdir" ;;
+            *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+          esac
+          if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+            rm -f "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+            sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          fi
+          ;;
+        esac
+      done])
+
+
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+    dnl because plural.y uses bison specific features. It requires at least
+    dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+    dnl compile.
+    dnl bison is only needed for the maintainer (who touches plural.y). But in
+    dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+    dnl the rule in general Makefile. Now, some people carelessly touch the
+    dnl files or have a broken "make" program, hence the plural.c rule will
+    dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+    dnl present or too old.
+    AC_CHECK_PROGS([INTLBISON], [bison])
+    if test -z "$INTLBISON"; then
+      ac_verc_fail=yes
+    else
+      dnl Found it, now check the version.
+      AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+      case $ac_prog_version in
+        '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+        1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+           ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+        *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+      esac
+      AC_MSG_RESULT([$ac_prog_version])
+    fi
+    if test $ac_verc_fail = yes; then
+      INTLBISON=:
+    fi
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(INTLOBJS)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+  ])
+
+dnl Usage: Just like AM_WITH_NLS, which see.
+AC_DEFUN([AM_GNU_GETTEXT],
+  [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+   AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_CANONICAL_HOST])dnl
+   AC_REQUIRE([AC_PROG_RANLIB])dnl
+   AC_REQUIRE([AC_ISC_POSIX])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   AC_REQUIRE([AC_C_CONST])dnl
+   AC_REQUIRE([AC_C_INLINE])dnl
+   AC_REQUIRE([AC_TYPE_OFF_T])dnl
+   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+dnl GCC LOCAL: Do not refer to AC_FUNC_MMAP, we have special needs.
+dnl   AC_REQUIRE([AC_FUNC_MMAP])dnl
+   AC_REQUIRE([jm_GLIBC21])dnl
+
+   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+   AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
+getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
+strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
+
+   AM_ICONV
+   AM_LANGINFO_CODESET
+   AM_LC_MESSAGES
+   AM_WITH_NLS([$1],[$2],[$3])
+
+   if test "x$CATOBJEXT" != "x"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
+           # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl Enable libtool support if the surrounding package wishes it.
+   INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
+   AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
index 0759770..1c0238b 100644 (file)
@@ -1,8 +1,15 @@
-/* config.in.  Generated automatically from configure.in by autoheader.  */
+/* config.in.  Generated automatically from configure.in by autoheader 2.13.  */
+
+/* Define if using alloca.c.  */
+#undef C_ALLOCA
 
 /* Define to empty if the keyword does not work.  */
 #undef const
 
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+   This function is required for alloca.c support on those systems.  */
+#undef CRAY_STACKSEG_END
+
 /* Define to the type of elements in the array set by `getgroups'.
    Usually this is either `int' or `gid_t'.  */
 #undef GETGROUPS_T
 /* Define to `int' if <sys/types.h> doesn't define.  */
 #undef gid_t
 
+/* Define if you have alloca, as a function or macro.  */
+#undef HAVE_ALLOCA
+
+/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
+#undef HAVE_ALLOCA_H
+
 /* Define if you don't have vprintf but do have _doprnt.  */
 #undef HAVE_DOPRNT
 
 /* Define to `unsigned' if <sys/types.h> doesn't define.  */
 #undef size_t
 
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown
+ */
+#undef STACK_DIRECTION
+
 /* Define if you have the ANSI C header files.  */
 #undef STDC_HEADERS
 
 /* Define vfork as fork if vfork does not work.  */
 #undef vfork
 
-/* Define to 1 if NLS is requested.  */
-#undef ENABLE_NLS
-
-/* Define as 1 if you have catgets and don't want to use GNU gettext.  */
-#undef HAVE_CATGETS
-
-/* Define as 1 if you have gettext and don't want to use GNU gettext.  */
-#undef HAVE_GETTEXT
-
-/* Define if your locale.h file contains LC_MESSAGES.  */
-#undef HAVE_LC_MESSAGES
-
-/* Define as 1 if you have the stpcpy function.  */
-#undef HAVE_STPCPY
-
 /* Define if your assembler supports specifying the maximum number
    of bytes to skip when using the GAS .p2align command. */
 #undef HAVE_GAS_MAX_SKIP_P2ALIGN
 /* Define if you have the dcgettext function.  */
 #undef HAVE_DCGETTEXT
 
+/* Define if you have the feof_unlocked function.  */
+#undef HAVE_FEOF_UNLOCKED
+
+/* Define if you have the fgets_unlocked function.  */
+#undef HAVE_FGETS_UNLOCKED
+
 /* Define if you have the fprintf_unlocked function.  */
 #undef HAVE_FPRINTF_UNLOCKED
 
 /* Define if you have the getcwd function.  */
 #undef HAVE_GETCWD
 
+/* Define if you have the getegid function.  */
+#undef HAVE_GETEGID
+
+/* Define if you have the geteuid function.  */
+#undef HAVE_GETEUID
+
+/* Define if you have the getgid function.  */
+#undef HAVE_GETGID
+
 /* Define if you have the getpagesize function.  */
 #undef HAVE_GETPAGESIZE
 
 /* Define if you have the gettimeofday function.  */
 #undef HAVE_GETTIMEOFDAY
 
+/* Define if you have the getuid function.  */
+#undef HAVE_GETUID
+
 /* Define if you have the isascii function.  */
 #undef HAVE_ISASCII
 
 /* Define if you have the lstat function.  */
 #undef HAVE_LSTAT
 
+/* Define if you have the mempcpy function.  */
+#undef HAVE_MEMPCPY
+
 /* Define if you have the munmap function.  */
 #undef HAVE_MUNMAP
 
 /* Define if you have the times function.  */
 #undef HAVE_TIMES
 
+/* Define if you have the tsearch function.  */
+#undef HAVE_TSEARCH
+
 /* Define if you have the <argz.h> header file.  */
 #undef HAVE_ARGZ_H
 
 /* Define if you have the <unistd.h> header file.  */
 #undef HAVE_UNISTD_H
 
-/* Define if you have the i library (-li).  */
-#undef HAVE_LIBI
-
 /* Define to enable the use of a default linker. */
 #undef DEFAULT_LINKER
 
 /* Define to the version of the distribution. */
 #undef VERSION
 
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if translation of program messages to the user's native language
+   is requested. */
+#undef ENABLE_NLS
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
 /* Define to 1 if installation paths should be looked up in Windows32
    Registry. Ignored on non windows32 hosts. */
 #undef ENABLE_WIN32_REGISTRY
index 40b7953..fe8b083 100755 (executable)
@@ -59,12 +59,12 @@ ac_help="$ac_help
 ac_help="$ac_help
   --enable-nls            use Native Language Support (default)"
 ac_help="$ac_help
+  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib"
+ac_help="$ac_help
   --disable-nls           do not use Native Language Support"
 ac_help="$ac_help
   --with-included-gettext use the GNU gettext library included here"
 ac_help="$ac_help
-  --with-catgets          use catgets functions if available"
-ac_help="$ac_help
   --disable-win32-registry
                           disable lookup of installation paths in the
                           Registry on Windows hosts
@@ -5299,14 +5299,14 @@ fi
 
 
 
-        echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
-echo "configure:5304: checking for strerror in -lcposix" >&5
-ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+            
+echo $ac_n "checking for library containing strerror""... $ac_c" 1>&6
+echo "configure:5305: checking for library containing strerror" >&5
+if eval "test \"`echo '$''{'ac_cv_search_strerror'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  ac_save_LIBS="$LIBS"
-LIBS="-lcposix  $LIBS"
+  ac_func_search_save_LIBS="$LIBS"
+ac_cv_search_strerror="no"
 cat > conftest.$ac_ext <<EOF
 #line 5312 "configure"
 #include "confdefs.h"
@@ -5321,33 +5321,55 @@ strerror()
 EOF
 if { (eval echo configure:5323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+  ac_cv_search_strerror="none required"
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
-LIBS="$ac_save_LIBS"
+test "$ac_cv_search_strerror" = "no" && for i in cposix; do
+LIBS="-l$i  $ac_func_search_save_LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5334 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char strerror();
 
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LIBS="$LIBS -lcposix"
+int main() {
+strerror()
+; return 0; }
+EOF
+if { (eval echo configure:5345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  ac_cv_search_strerror="-l$i"
+break
 else
-  echo "$ac_t""no" 1>&6
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+LIBS="$ac_func_search_save_LIBS"
 fi
 
+echo "$ac_t""$ac_cv_search_strerror" 1>&6
+if test "$ac_cv_search_strerror" != "no"; then
+  test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
+  
+else :
+  
+fi
   
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:5346: checking for working const" >&5
+echo "configure:5368: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5351 "configure"
+#line 5373 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -5396,7 +5418,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:5400: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5422: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -5417,12 +5439,12 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:5421: checking for off_t" >&5
+echo "configure:5443: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5426 "configure"
+#line 5448 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -5450,12 +5472,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:5454: checking for size_t" >&5
+echo "configure:5476: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5459 "configure"
+#line 5481 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -5482,115 +5504,143 @@ EOF
 
 fi
 
-                        
-   for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h sys/param.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5492: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
+echo "configure:5511: checking for working alloca.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5497 "configure"
+#line 5516 "configure"
 #include "confdefs.h"
-#include <$ac_hdr>
+#include <alloca.h>
+int main() {
+char *p = alloca(2 * sizeof(int));
+; return 0; }
 EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5502: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+if { (eval echo configure:5523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
+  ac_cv_header_alloca_h=yes
 else
-  echo "$ac_err" >&5
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
+  ac_cv_header_alloca_h=no
 fi
 rm -f conftest*
 fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
+
+echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
+if test $ac_cv_header_alloca_h = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_ALLOCA_H 1
 EOF
-else
-  echo "$ac_t""no" 1>&6
+
 fi
-done
 
-   for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \
-strdup __argz_count __argz_stringify __argz_next
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5532: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+echo $ac_n "checking for alloca""... $ac_c" 1>&6
+echo "configure:5544: checking for alloca" >&5
+if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5537 "configure"
+#line 5549 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char $ac_func();
-
-int main() {
 
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
+#ifdef __GNUC__
+# define alloca __builtin_alloca
 #else
-$ac_func();
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  if HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
 #endif
 
+int main() {
+char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:5560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_func_$ac_func=yes"
+  ac_cv_func_alloca_works=yes
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  eval "ac_cv_func_$ac_func=no"
+  ac_cv_func_alloca_works=no
 fi
 rm -f conftest*
 fi
 
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
+echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
+if test $ac_cv_func_alloca_works = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_ALLOCA 1
 EOF
+
+fi
+
+if test $ac_cv_func_alloca_works = no; then
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+  # that cause trouble.  Some versions do not even contain alloca or
+  # contain a buggy version.  If you still want to use their alloca,
+  # use ar to extract alloca.o from them instead of compiling alloca.c.
+  ALLOCA=alloca.${ac_objext}
+  cat >> confdefs.h <<\EOF
+#define C_ALLOCA 1
+EOF
+
+
+echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
+echo "configure:5609: checking whether alloca needs Cray hooks" >&5
+if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
 else
-  echo "$ac_t""no" 1>&6
+  cat > conftest.$ac_ext <<EOF
+#line 5614 "configure"
+#include "confdefs.h"
+#if defined(CRAY) && ! defined(CRAY2)
+webecray
+#else
+wenotbecray
+#endif
+
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "webecray" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_os_cray=yes
+else
+  rm -rf conftest*
+  ac_cv_os_cray=no
 fi
-done
+rm -f conftest*
 
+fi
 
-   if test "${ac_cv_func_stpcpy+set}" != "set"; then
-     for ac_func in stpcpy
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5589: checking for $ac_func" >&5
+echo "$ac_t""$ac_cv_os_cray" 1>&6
+if test $ac_cv_os_cray = yes; then
+for ac_func in _getb67 GETB67 getb67; do
+  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:5639: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5594 "configure"
+#line 5644 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5613,7 +5663,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
 
 if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
   cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
+#define CRAY_STACKSEG_END $ac_func
 EOF
+
+  break
 else
   echo "$ac_t""no" 1>&6
 fi
-done
-
-   fi
-   if test "${ac_cv_func_stpcpy}" = "yes"; then
-     cat >> confdefs.h <<\EOF
-#define HAVE_STPCPY 1
-EOF
 
-   fi
+done
+fi
 
-   if test $ac_cv_header_locale_h = yes; then
-    echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:5651: checking for LC_MESSAGES" >&5
-if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
+echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
+echo "configure:5694: checking stack direction for C alloca" >&5
+if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_stack_direction=0
+else
   cat > conftest.$ac_ext <<EOF
-#line 5656 "configure"
+#line 5702 "configure"
 #include "confdefs.h"
-#include <locale.h>
-int main() {
-return LC_MESSAGES
-; return 0; }
+find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+main ()
+{
+  exit (find_stack_direction() < 0);
+}
 EOF
-if { (eval echo configure:5663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  am_cv_val_LC_MESSAGES=yes
+if { (eval echo configure:5721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_c_stack_direction=1
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  am_cv_val_LC_MESSAGES=no
+  rm -fr conftest*
+  ac_cv_c_stack_direction=-1
 fi
-rm -f conftest*
+rm -fr conftest*
 fi
 
-echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6
-    if test $am_cv_val_LC_MESSAGES = yes; then
-      cat >> confdefs.h <<\EOF
-#define HAVE_LC_MESSAGES 1
+fi
+
+echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
+cat >> confdefs.h <<EOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
 EOF
 
-    fi
-  fi
-   echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:5684: checking whether NLS is requested" >&5
-        # Check whether --enable-nls or --disable-nls was given.
-if test "${enable_nls+set}" = set; then
-  enableval="$enable_nls"
-  USE_NLS=$enableval
-else
-  USE_NLS=yes
 fi
 
-    echo "$ac_t""$USE_NLS" 1>&6
-    
 
-    USE_INCLUDED_LIBINTL=no
+    echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6
+echo "configure:5744: checking whether we are using the GNU C Library 2.1 or newer" >&5
+if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 5749 "configure"
+#include "confdefs.h"
 
-        if test "$USE_NLS" = "yes"; then
-      cat >> confdefs.h <<\EOF
-#define ENABLE_NLS 1
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       
 EOF
-
-      echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:5704: checking whether included gettext is requested" >&5
-      # Check whether --with-included-gettext or --without-included-gettext was given.
-if test "${with_included_gettext+set}" = set; then
-  withval="$with_included_gettext"
-  nls_cv_force_use_gnu_gettext=$withval
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "Lucky GNU user" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_gnu_library_2_1=yes
 else
-  nls_cv_force_use_gnu_gettext=no
+  rm -rf conftest*
+  ac_cv_gnu_library_2_1=no
 fi
+rm -f conftest*
 
-      echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6
+      
+    
+fi
 
-      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
-      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
-                                       nls_cv_header_intl=
-       nls_cv_header_libgt=
-       CATOBJEXT=NONE
+echo "$ac_t""$ac_cv_gnu_library_2_1" 1>&6
+    
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  
 
-       ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:5723: checking for libintl.h" >&5
+                                 
+   for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:5785: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5728 "configure"
+#line 5790 "configure"
 #include "confdefs.h"
-#include <libintl.h>
+#include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5745,479 +5807,521 @@ rm -f conftest*
 fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:5750: checking for gettext in libc" >&5
-if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 5755 "configure"
-#include "confdefs.h"
-#include <libintl.h>
-int main() {
-return (int) gettext ("")
-; return 0; }
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
 EOF
-if { (eval echo configure:5762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  gt_cv_func_gettext_libc=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  gt_cv_func_gettext_libc=no
-fi
-rm -f conftest*
+  echo "$ac_t""no" 1>&6
 fi
+done
 
-echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
-
-          if test "$gt_cv_func_gettext_libc" != "yes"; then
-            echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:5778: checking for bindtextdomain in -lintl" >&5
-ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+   for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \
+getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
+strdup strtoul tsearch __argz_count __argz_stringify __argz_next
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:5826: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  ac_save_LIBS="$LIBS"
-LIBS="-lintl  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 5786 "configure"
+  cat > conftest.$ac_ext <<EOF
+#line 5831 "configure"
 #include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
-char bindtextdomain();
+char $ac_func();
 
 int main() {
-bindtextdomain()
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
 ; return 0; }
 EOF
-if { (eval echo configure:5797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+  eval "ac_cv_func_$ac_func=yes"
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  eval "ac_cv_func_$ac_func=no"
 fi
 rm -f conftest*
-LIBS="$ac_save_LIBS"
-
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:5813: checking for gettext in libintl" >&5
-if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:5818: checking for gettext in -lintl" >&5
-ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
 else
-  ac_save_LIBS="$LIBS"
-LIBS="-lintl  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 5826 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char gettext();
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+   
+    
+  # Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval="$with_libiconv_prefix"
+  
+    for dir in `echo "$withval" | tr : ' '`; do
+      if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
+      if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
+    done
+   
+fi
 
+
+  echo $ac_n "checking for iconv""... $ac_c" 1>&6
+echo "configure:5894: checking for iconv" >&5
+if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat > conftest.$ac_ext <<EOF
+#line 5902 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <iconv.h>
 int main() {
-gettext()
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
 ; return 0; }
 EOF
-if { (eval echo configure:5837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+  am_cv_func_iconv=yes
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  gt_cv_func_gettext_libintl=yes
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS -liconv"
+      cat > conftest.$ac_ext <<EOF
+#line 5924 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <iconv.h>
+int main() {
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+; return 0; }
+EOF
+if { (eval echo configure:5934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
 else
-  echo "$ac_t""no" 1>&6
-gt_cv_func_gettext_libintl=no
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
 fi
-
+rm -f conftest*
+      LIBS="$am_save_LIBS"
+    fi
+  
 fi
 
-echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6
+echo "$ac_t""$am_cv_func_iconv" 1>&6
+  if test "$am_cv_func_iconv" = yes; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_ICONV 1
+EOF
+
+    echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
+echo "configure:5955: checking for iconv declaration" >&5
+    if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
 else
-  echo "$ac_t""no" 1>&6
-fi
+  
+      cat > conftest.$ac_ext <<EOF
+#line 5961 "configure"
+#include "confdefs.h"
 
-          fi
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
 
-          if test "$gt_cv_func_gettext_libintl" = "yes"; then
-            LIBS="-lintl $LIBS"
-          fi
+int main() {
 
-          if test "$gt_cv_func_gettext_libc" = "yes" \
-             || test "$gt_cv_func_gettext_libintl" = "yes"; then
-             cat >> confdefs.h <<\EOF
-#define HAVE_GETTEXT 1
+; return 0; }
 EOF
-
-             # Extract the first word of "msgfmt", so it can be a program name with args.
-set dummy msgfmt; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5880: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_MSGFMT'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if { (eval echo configure:5980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  am_cv_proto_iconv_arg1=""
 else
-  case "$MSGFMT" in
-  /*)
-  gcc_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
-  ;;
-  *)
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
-       gcc_cv_path_MSGFMT="$ac_dir/$ac_word"
-       break
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_MSGFMT" && gcc_cv_path_MSGFMT="no"
-  ;;
-esac
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  am_cv_proto_iconv_arg1="const"
 fi
-MSGFMT="$gcc_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
-  echo "$ac_t""$MSGFMT" 1>&6
-else
-  echo "$ac_t""no" 1>&6
+rm -f conftest*
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
 fi
-             if test "$MSGFMT" != "no"; then
-               for ac_func in dcgettext
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5914: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    echo "$ac_t""${ac_t:-
+         }$am_cv_proto_iconv" 1>&6
+    cat >> confdefs.h <<EOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+EOF
+
+  fi
+  LIBICONV=
+  if test "$am_cv_lib_iconv" = yes; then
+    LIBICONV="-liconv"
+  fi
+  
+
+   
+  echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
+echo "configure:6009: checking for nl_langinfo and CODESET" >&5
+if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5919 "configure"
+#line 6014 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char $ac_func();
-
+#include <langinfo.h>
 int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
+char* cs = nl_langinfo(CODESET);
 ; return 0; }
 EOF
-if { (eval echo configure:5942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_func_$ac_func=yes"
+  am_cv_langinfo_codeset=yes
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  eval "ac_cv_func_$ac_func=no"
+  am_cv_langinfo_codeset=no
 fi
 rm -f conftest*
+    
 fi
 
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
+echo "$ac_t""$am_cv_langinfo_codeset" 1>&6
+  if test $am_cv_langinfo_codeset = yes; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_LANGINFO_CODESET 1
 EOF
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
 
-               # Extract the first word of "gmsgfmt", so it can be a program name with args.
-set dummy gmsgfmt; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5969: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
+  fi
+
+   if test $ac_cv_header_locale_h = yes; then
+    echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
+echo "configure:6044: checking for LC_MESSAGES" >&5
+if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  case "$GMSGFMT" in
-  /*)
-  gcc_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
-  ;;
-  ?:/*)                         
-  gcc_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
-  ;;
-  *)
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do 
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      gcc_cv_path_GMSGFMT="$ac_dir/$ac_word"
-      break
+  cat > conftest.$ac_ext <<EOF
+#line 6049 "configure"
+#include "confdefs.h"
+#include <locale.h>
+int main() {
+return LC_MESSAGES
+; return 0; }
+EOF
+if { (eval echo configure:6056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  am_cv_val_LC_MESSAGES=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  am_cv_val_LC_MESSAGES=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      cat >> confdefs.h <<\EOF
+#define HAVE_LC_MESSAGES 1
+EOF
+
     fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_GMSGFMT" && gcc_cv_path_GMSGFMT="$MSGFMT"
-  ;;
-esac
+  fi
+   echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
+echo "configure:6077: checking whether NLS is requested" >&5
+        # Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval="$enable_nls"
+  USE_NLS=$enableval
+else
+  USE_NLS=yes
 fi
-GMSGFMT="$gcc_cv_path_GMSGFMT"
-if test -n "$GMSGFMT"; then
-  echo "$ac_t""$GMSGFMT" 1>&6
+
+    echo "$ac_t""$USE_NLS" 1>&6
+    
+
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+    INTLLIBS=
+
+        if test "$USE_NLS" = "yes"; then
+      cat >> confdefs.h <<\EOF
+#define ENABLE_NLS 1
+EOF
+
+      echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
+echo "configure:6099: checking whether included gettext is requested" >&5
+      # Check whether --with-included-gettext or --without-included-gettext was given.
+if test "${with_included_gettext+set}" = set; then
+  withval="$with_included_gettext"
+  nls_cv_force_use_gnu_gettext=$withval
 else
-  echo "$ac_t""no" 1>&6
+  nls_cv_force_use_gnu_gettext=no
 fi
 
-               # Extract the first word of "xgettext", so it can be a program name with args.
-set dummy xgettext; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6005: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_XGETTEXT'+set}'`\" = set"; then
+      echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+                               CATOBJEXT=NONE
+
+                
+        
+
+       ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
+echo "configure:6119: checking for libintl.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  case "$XGETTEXT" in
-  /*)
-  gcc_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
-  ;;
-  *)
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
-       gcc_cv_path_XGETTEXT="$ac_dir/$ac_word"
-       break
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_XGETTEXT" && gcc_cv_path_XGETTEXT=":"
-  ;;
-esac
-fi
-XGETTEXT="$gcc_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
-  echo "$ac_t""$XGETTEXT" 1>&6
+  cat > conftest.$ac_ext <<EOF
+#line 6124 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:6129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
 else
-  echo "$ac_t""no" 1>&6
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
 fi
-
-               cat > conftest.$ac_ext <<EOF
-#line 6037 "configure"
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6
+echo "configure:6146: checking for GNU gettext in libc" >&5
+if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6151 "configure"
 #include "confdefs.h"
-
-int main() {
+#include <libintl.h>
 extern int _nl_msg_cat_cntr;
-                              return _nl_msg_cat_cntr
+int main() {
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:6045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  CATOBJEXT=.gmo
-                  DATADIRNAME=share
+  gt_cv_func_gnugettext1_libc=yes
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  CATOBJEXT=.mo
-                  DATADIRNAME=lib
+  gt_cv_func_gnugettext1_libc=no
 fi
 rm -f conftest*
-               INSTOBJEXT=.mo
-             else
-               create_catalogs="no"
-             fi
-           fi
-       
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-
-        if test "$CATOBJEXT" = "NONE"; then
-         echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6
-echo "configure:6070: checking whether catgets can be used" >&5
-         # Check whether --with-catgets or --without-catgets was given.
-if test "${with_catgets+set}" = set; then
-  withval="$with_catgets"
-  nls_cv_use_catgets=$withval
-else
-  nls_cv_use_catgets=no
 fi
 
-         echo "$ac_t""$nls_cv_use_catgets" 1>&6
+echo "$ac_t""$gt_cv_func_gnugettext1_libc" 1>&6
 
-         if test "$nls_cv_use_catgets" = "yes"; then
-                   echo $ac_n "checking for main in -li""... $ac_c" 1>&6
-echo "configure:6083: checking for main in -li" >&5
-ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+          if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+            echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6
+echo "configure:6176: checking for GNU gettext in libintl" >&5
+if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  ac_save_LIBS="$LIBS"
-LIBS="-li  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 6091 "configure"
+  gt_save_LIBS="$LIBS"
+               LIBS="$LIBS -lintl $LIBICONV"
+               cat > conftest.$ac_ext <<EOF
+#line 6183 "configure"
 #include "confdefs.h"
-
+#include <libintl.h>
+extern int _nl_msg_cat_cntr;
 int main() {
-main()
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:6098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+  gt_cv_func_gnugettext1_libintl=yes
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  gt_cv_func_gnugettext1_libintl=no
 fi
 rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+               LIBS="$gt_save_LIBS"
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo i | sed -e 's/[^a-zA-Z0-9_]/_/g' \
-    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
+
+echo "$ac_t""$gt_cv_func_gnugettext1_libintl" 1>&6
+          fi
+
+                                          if test "$gt_cv_func_gnugettext1_libc" = "yes" \
+             || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+                  && test "$PACKAGE" != gettext; }; then
+            cat >> confdefs.h <<\EOF
+#define HAVE_GETTEXT 1
 EOF
 
-  LIBS="-li $LIBS"
 
-else
-  echo "$ac_t""no" 1>&6
-fi
+            if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+                                      INTLLIBS="-lintl $LIBICONV"
+            fi
 
-           echo $ac_n "checking for catgets""... $ac_c" 1>&6
-echo "configure:6126: checking for catgets" >&5
-if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $INTLLIBS"
+            for ac_func in dcgettext
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6225: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6131 "configure"
+#line 6230 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char catgets(); below.  */
+    which can conflict with char $ac_func(); below.  */
 #include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
-char catgets();
+char $ac_func();
 
 int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
-#if defined (__stub_catgets) || defined (__stub___catgets)
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-catgets();
+$ac_func();
 #endif
 
 ; return 0; }
 EOF
-if { (eval echo configure:6154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
-  eval "ac_cv_func_catgets=yes"
+  eval "ac_cv_func_$ac_func=yes"
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  eval "ac_cv_func_catgets=no"
+  eval "ac_cv_func_$ac_func=no"
 fi
 rm -f conftest*
 fi
 
-if eval "test \"`echo '$ac_cv_func_'catgets`\" = yes"; then
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  cat >> confdefs.h <<\EOF
-#define HAVE_CATGETS 1
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
 EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
 
-              INTLOBJS="\$(CATOBJS)"
-              # Extract the first word of "gencat", so it can be a program name with args.
-set dummy gencat; ac_word=$2
+            LIBS="$gt_save_LIBS"
+
+                    # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6176: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_GENCAT'+set}'`\" = set"; then
+echo "configure:6282: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  case "$GENCAT" in
+  case "$MSGFMT" in
   /*)
-  gcc_cv_path_GENCAT="$GENCAT" # Let the user override the test with a path.
-  ;;
-  ?:/*)                         
-  gcc_cv_path_GENCAT="$GENCAT" # Let the user override the test with a dos path.
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
   ;;
   *)
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do 
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      gcc_cv_path_GENCAT="$ac_dir/$ac_word"
-      break
+      if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then
+       ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+       break
+      fi
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_GENCAT" && gcc_cv_path_GENCAT="no"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
   ;;
 esac
 fi
-GENCAT="$gcc_cv_path_GENCAT"
-if test -n "$GENCAT"; then
-  echo "$ac_t""$GENCAT" 1>&6
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  echo "$ac_t""$MSGFMT" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
-              if test "$GENCAT" != "no"; then
-                # Extract the first word of "gmsgfmt", so it can be a program name with args.
+
+            # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6212: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
+echo "configure:6316: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$GMSGFMT" in
   /*)
-  gcc_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
   ;;
   ?:/*)                         
-  gcc_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
   ;;
   *)
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
@@ -6225,111 +6329,65 @@ else
   for ac_dir in $ac_dummy; do 
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      gcc_cv_path_GMSGFMT="$ac_dir/$ac_word"
+      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
       break
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_GMSGFMT" && gcc_cv_path_GMSGFMT="no"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
   ;;
 esac
 fi
-GMSGFMT="$gcc_cv_path_GMSGFMT"
+GMSGFMT="$ac_cv_path_GMSGFMT"
 if test -n "$GMSGFMT"; then
   echo "$ac_t""$GMSGFMT" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
-                if test "$GMSGFMT" = "no"; then
-                  # Extract the first word of "msgfmt", so it can be a program name with args.
-set dummy msgfmt; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6249: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  case "$GMSGFMT" in
-  /*)
-  gcc_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
-  ;;
-  *)
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
-       gcc_cv_path_GMSGFMT="$ac_dir/$ac_word"
-       break
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_GMSGFMT" && gcc_cv_path_GMSGFMT="msgfmt"
-  ;;
-esac
-fi
-GMSGFMT="$gcc_cv_path_GMSGFMT"
-if test -n "$GMSGFMT"; then
-  echo "$ac_t""$GMSGFMT" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
 
-                  if test "$GMSGFMT" = "msgfmt"; then
-                    create_catalogs="no"
-                  fi
-                fi
-                # Extract the first word of "xgettext", so it can be a program name with args.
+                    # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6287: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_XGETTEXT'+set}'`\" = set"; then
+echo "configure:6353: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$XGETTEXT" in
   /*)
-  gcc_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
   ;;
   *)
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
   for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
-       gcc_cv_path_XGETTEXT="$ac_dir/$ac_word"
+      if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then
+       ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
        break
       fi
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_XGETTEXT" && gcc_cv_path_XGETTEXT=":"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
   ;;
 esac
 fi
-XGETTEXT="$gcc_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
   echo "$ac_t""$XGETTEXT" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
-                USE_INCLUDED_LIBINTL=yes
-                CATOBJEXT=.cat
-                INSTOBJEXT=.cat
-                DATADIRNAME=lib
-                INTLDEPS='$(top_builddir)/intl/libintl.a'
-                INTLLIBS=$INTLDEPS
-                LIBS=`echo $LIBS | sed -e 's/-lintl//'`
-                nls_cv_header_intl=intl/libintl.h
-                nls_cv_header_libgt=intl/libgettext.h
-              fi
+
+            CATOBJEXT=.gmo
+          fi
+       
 else
   echo "$ac_t""no" 1>&6
 fi
 
-         fi
-        fi
 
         if test "$CATOBJEXT" = "NONE"; then
                          nls_cv_use_gnu_gettext=yes
@@ -6341,32 +6399,32 @@ fi
         # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6345: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_MSGFMT'+set}'`\" = set"; then
+echo "configure:6403: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$MSGFMT" in
   /*)
-  gcc_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
   ;;
   *)
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
   for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
-       gcc_cv_path_MSGFMT="$ac_dir/$ac_word"
+      if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then
+       ac_cv_path_MSGFMT="$ac_dir/$ac_word"
        break
       fi
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_MSGFMT" && gcc_cv_path_MSGFMT="msgfmt"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
   ;;
 esac
 fi
-MSGFMT="$gcc_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
   echo "$ac_t""$MSGFMT" 1>&6
 else
   echo "$ac_t""no" 1>&6
@@ -6375,16 +6433,16 @@ fi
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6379: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_GMSGFMT'+set}'`\" = set"; then
+echo "configure:6437: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$GMSGFMT" in
   /*)
-  gcc_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
   ;;
   ?:/*)                         
-  gcc_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
   ;;
   *)
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
@@ -6392,73 +6450,75 @@ else
   for ac_dir in $ac_dummy; do 
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      gcc_cv_path_GMSGFMT="$ac_dir/$ac_word"
+      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
       break
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_GMSGFMT" && gcc_cv_path_GMSGFMT="$MSGFMT"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
   ;;
 esac
 fi
-GMSGFMT="$gcc_cv_path_GMSGFMT"
+GMSGFMT="$ac_cv_path_GMSGFMT"
 if test -n "$GMSGFMT"; then
   echo "$ac_t""$GMSGFMT" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
-                       if test "$MSGFMT" = "msgfmt" && test "$GMSGFMT" = "msgfmt"; then
-         create_catalogs="no"
-       fi
         # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6418: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'gcc_cv_path_XGETTEXT'+set}'`\" = set"; then
+echo "configure:6473: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$XGETTEXT" in
   /*)
-  gcc_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
   ;;
   *)
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
   for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
-       gcc_cv_path_XGETTEXT="$ac_dir/$ac_word"
+      if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then
+       ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
        break
       fi
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$gcc_cv_path_XGETTEXT" && gcc_cv_path_XGETTEXT=":"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
   ;;
 esac
 fi
-XGETTEXT="$gcc_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
   echo "$ac_t""$XGETTEXT" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
         
+       BUILD_INCLUDED_LIBINTL=yes
        USE_INCLUDED_LIBINTL=yes
         CATOBJEXT=.gmo
-        INSTOBJEXT=.mo
-        DATADIRNAME=share
-       INTLDEPS='$(top_builddir)/intl/libintl.a'
-       INTLLIBS=$INTLDEPS
-       LIBS=`echo $LIBS | sed -e 's/-lintl//'`
-        nls_cv_header_intl=intl/libintl.h
-        nls_cv_header_libgt=intl/libgettext.h
+       INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV"
+       LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+                  if test "$GMSGFMT" != ":"; then
+                       if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         echo "$ac_t""found msgfmt program is not GNU msgfmt; ignore it" 1>&6
+         GMSGFMT=":"
+       fi
       fi
 
-            if test "$XGETTEXT" != ":"; then
-                       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+                  if test "$XGETTEXT" != ":"; then
+                       if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
          : ;
        else
          echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6
@@ -6466,24 +6526,65 @@ fi
        fi
       fi
 
+            POSUB=po
+    fi
+    
 
 
-      # We need to process the po/ directory.
-      POSUB=po
-    else
-      DATADIRNAME=share
-      nls_cv_header_intl=intl/libintl.h
-      nls_cv_header_libgt=intl/libgettext.h
+            if test "$PACKAGE" = gettext; then
+      BUILD_INCLUDED_LIBINTL=yes
     fi
-    
-    
 
+                                            for ac_prog in bison
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:6544: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$INTLBISON"; then
+  ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_INTLBISON="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+INTLBISON="$ac_cv_prog_INTLBISON"
+if test -n "$INTLBISON"; then
+  echo "$ac_t""$INTLBISON" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$INTLBISON" && break
+done
 
-    # If this is used in GNU gettext we have to set USE_NLS to `yes'
-    # because some of the sources are only built for this goal.
-    if test "$PACKAGE" = gettext; then
-      USE_NLS=yes
-      USE_INCLUDED_LIBINTL=yes
+    if test -z "$INTLBISON"; then
+      ac_verc_fail=yes
+    else
+            echo $ac_n "checking version of bison""... $ac_c" 1>&6
+echo "configure:6577: checking version of bison" >&5
+      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+      case $ac_prog_version in
+        '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+        1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+           ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+        *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+      esac
+      echo "$ac_t""$ac_prog_version" 1>&6
+    fi
+    if test $ac_verc_fail = yes; then
+      INTLBISON=:
     fi
 
                 for lang in $ALL_LINGUAS; do
@@ -6500,31 +6601,44 @@ fi
     
     
     
+
+        nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+        DATADIRNAME=share
     
+
+        INSTOBJEXT=.mo
     
-  
 
-   if test "x$create_catalogs" = "xno"; then
-     echo "configure: warning: No program for building catalogs found -> building disabled" 1>&2
-   fi
+        GENCAT=gencat
+    
+  
 
-   if test "x$CATOBJEXT" != "x" && test "x$create_catalogs" != "xno" ; then
+   if test "x$CATOBJEXT" != "x"; then
      if test "x$ALL_LINGUAS" = "x"; then
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:6517: checking for catalogs to be installed" >&5
-       if test "x$LINGUAS" = "x"; then
-        LINGUAS=$ALL_LINGUAS
-       else
-        NEW_LINGUAS=
-        for lang in $ALL_LINGUAS; do
-          case " $LINGUAS " in
-            *" $lang "*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
-          esac
-        done
-         LINGUAS=$NEW_LINGUAS
-       fi
+echo "configure:6624: checking for catalogs to be installed" >&5
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
+           # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
        echo "$ac_t""$LINGUAS" 1>&6
      fi
 
@@ -6533,66 +6647,6 @@ echo "configure:6517: checking for catalogs to be installed" >&5
      fi
    fi
 
-            if test $ac_cv_header_locale_h = yes; then
-     INCLUDE_LOCALE_H="#include <locale.h>"
-   else
-     INCLUDE_LOCALE_H="\
-/* The system does not provide the header <locale.h>.  Take care yourself.  */"
-   fi
-   
-
-            test -d intl || mkdir intl
-   if test "$CATOBJEXT" = ".cat"; then
-     ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:6549: checking for linux/version.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 6554 "configure"
-#include "confdefs.h"
-#include <linux/version.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6559: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  msgformat=linux
-else
-  echo "$ac_t""no" 1>&6
-msgformat=xopen
-fi
-
-
-               sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
-   fi
-      sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
-     $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
-
-            if test "$PACKAGE" = "gettext"; then
-     GT_NO="#NO#"
-     GT_YES=
-   else
-     GT_NO=
-     GT_YES="#YES#"
-   fi
-   
-   
-
             MKINSTALLDIRS=
    if test -n "$ac_aux_dir"; then
      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
@@ -6602,22 +6656,8 @@ fi
    fi
    
 
-      l=
+      INTL_LIBTOOL_SUFFIX_PREFIX=
    
-
-         test -d po || mkdir po
-   if test "x$srcdir" != "x."; then
-     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
-       posrcprefix="$srcdir/"
-     else
-       posrcprefix="../$srcdir/"
-     fi
-   else
-     posrcprefix="../"
-   fi
-   rm -f po/POTFILES
-   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,        $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
-       < $srcdir/po/POTFILES.in > po/POTFILES
   
 XGETTEXT="AWK='$AWK' \$(SHELL) \$(top_srcdir)/exgettext $XGETTEXT"
 
@@ -6631,7 +6671,7 @@ fi
 case $host_os in
        win32 | pe | cygwin* | mingw32* | uwin*)
 echo $ac_n "checking whether windows registry support is requested""... $ac_c" 1>&6
-echo "configure:6635: checking whether windows registry support is requested" >&5
+echo "configure:6675: checking whether windows registry support is requested" >&5
 if test "x$enable_win32_registry" != xno; then
   cat >> confdefs.h <<\EOF
 #define ENABLE_WIN32_REGISTRY 1
@@ -6640,14 +6680,14 @@ EOF
   echo "$ac_t""yes" 1>&6
   
 echo $ac_n "checking for library containing RegOpenKeyExA""... $ac_c" 1>&6
-echo "configure:6644: checking for library containing RegOpenKeyExA" >&5
+echo "configure:6684: checking for library containing RegOpenKeyExA" >&5
 if eval "test \"`echo '$''{'ac_cv_search_RegOpenKeyExA'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_func_search_save_LIBS="$LIBS"
 ac_cv_search_RegOpenKeyExA="no"
 cat > conftest.$ac_ext <<EOF
-#line 6651 "configure"
+#line 6691 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6658,7 +6698,7 @@ int main() {
 RegOpenKeyExA()
 ; return 0; }
 EOF
-if { (eval echo configure:6662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_search_RegOpenKeyExA="none required"
 else
@@ -6669,7 +6709,7 @@ rm -f conftest*
 test "$ac_cv_search_RegOpenKeyExA" = "no" && for i in advapi32; do
 LIBS="-l$i  $ac_func_search_save_LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6673 "configure"
+#line 6713 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6680,7 +6720,7 @@ int main() {
 RegOpenKeyExA()
 ; return 0; }
 EOF
-if { (eval echo configure:6684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_search_RegOpenKeyExA="-l$i"
 break
@@ -6722,7 +6762,7 @@ esac
 
 if test "x$enable_win32_registry" != xno; then
   echo $ac_n "checking registry key on windows hosts""... $ac_c" 1>&6
-echo "configure:6726: checking registry key on windows hosts" >&5
+echo "configure:6766: checking registry key on windows hosts" >&5
   cat >> confdefs.h <<EOF
 #define WIN32_REGISTRY_KEY "$gcc_cv_win32_registry_key"
 EOF
@@ -6905,7 +6945,7 @@ fi
 
 # Figure out what assembler we will be using.
 echo $ac_n "checking what assembler to use""... $ac_c" 1>&6
-echo "configure:6909: checking what assembler to use" >&5
+echo "configure:6949: checking what assembler to use" >&5
 gcc_cv_as=
 gcc_cv_gas_major_version=
 gcc_cv_gas_minor_version=
@@ -6990,7 +7030,7 @@ fi
 
 # Figure out what nm we will be using.
 echo $ac_n "checking what nm to use""... $ac_c" 1>&6
-echo "configure:6994: checking what nm to use" >&5
+echo "configure:7034: checking what nm to use" >&5
 if test -x nm$host_exeext; then
        gcc_cv_nm=./nm$host_exeext
 elif test x$host = x$target; then
@@ -7001,7 +7041,7 @@ echo "$ac_t""$gcc_cv_nm" 1>&6
 
 # Figure out what assembler alignment features are present.
 echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
-echo "configure:7005: checking assembler alignment features" >&5
+echo "configure:7045: checking assembler alignment features" >&5
 gcc_cv_as_alignment_features=none
 if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
        # Gas version 2.6 and later support for .balign and .p2align.
@@ -7049,7 +7089,7 @@ fi
 echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
 
 echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
-echo "configure:7053: checking assembler subsection support" >&5
+echo "configure:7093: checking assembler subsection support" >&5
 gcc_cv_as_subsections=no
 if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
   if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7089,7 +7129,7 @@ fi
 echo "$ac_t""$gcc_cv_as_subsections" 1>&6
 
 echo $ac_n "checking assembler weak support""... $ac_c" 1>&6
-echo "configure:7093: checking assembler weak support" >&5
+echo "configure:7133: checking assembler weak support" >&5
 gcc_cv_as_weak=no
 if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
   if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then
@@ -7112,7 +7152,7 @@ fi
 echo "$ac_t""$gcc_cv_as_weak" 1>&6
 
 echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6
-echo "configure:7116: checking assembler hidden support" >&5
+echo "configure:7156: checking assembler hidden support" >&5
 gcc_cv_as_hidden=no
 if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
   if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 10 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7136,7 +7176,7 @@ fi
 echo "$ac_t""$gcc_cv_as_hidden" 1>&6
 
 echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6
-echo "configure:7140: checking assembler leb128 support" >&5
+echo "configure:7180: checking assembler leb128 support" >&5
 gcc_cv_as_leb128=no
 if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
   if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7181,7 +7221,7 @@ fi
 echo "$ac_t""$gcc_cv_as_leb128" 1>&6
 
 echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6
-echo "configure:7185: checking assembler eh_frame optimization" >&5
+echo "configure:7225: checking assembler eh_frame optimization" >&5
 gcc_cv_as_eh_frame=no
 if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
   if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7262,7 +7302,7 @@ fi
 echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6
 
 echo $ac_n "checking assembler section merging support""... $ac_c" 1>&6
-echo "configure:7266: checking assembler section merging support" >&5
+echo "configure:7306: checking assembler section merging support" >&5
 gcc_cv_as_shf_merge=no
 if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
   if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7287,7 +7327,7 @@ echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6
 case "$target" in 
   sparc*-*-*)
     echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
-echo "configure:7291: checking assembler .register pseudo-op support" >&5
+echo "configure:7331: checking assembler .register pseudo-op support" >&5
 if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7315,7 +7355,7 @@ EOF
     fi
 
     echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
-echo "configure:7319: checking assembler supports -relax" >&5
+echo "configure:7359: checking assembler supports -relax" >&5
 if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7345,7 +7385,7 @@ EOF
     case "$tm_file" in
     *64*)
        echo $ac_n "checking for 64 bit support in assembler ($gcc_cv_as)""... $ac_c" 1>&6
-echo "configure:7349: checking for 64 bit support in assembler ($gcc_cv_as)" >&5
+echo "configure:7389: checking for 64 bit support in assembler ($gcc_cv_as)" >&5
 if eval "test \"`echo '$''{'gcc_cv_as_flags64'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7390,7 +7430,7 @@ EOF
 
     if test "x$gcc_cv_as_flags64" != xno; then
        echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
-echo "configure:7394: checking for assembler offsetable %lo() support" >&5
+echo "configure:7434: checking for assembler offsetable %lo() support" >&5
 if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7430,7 +7470,7 @@ EOF
 
   i[34567]86-*-*)
     echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
-echo "configure:7434: checking assembler instructions" >&5
+echo "configure:7474: checking assembler instructions" >&5
     gcc_cv_as_instructions=
     if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
       if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
@@ -7459,7 +7499,7 @@ EOF
 esac
 
 echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
-echo "configure:7463: checking assembler dwarf2 debug_line support" >&5
+echo "configure:7503: checking assembler dwarf2 debug_line support" >&5
 gcc_cv_as_dwarf2_debug_line=no
 # ??? Not all targets support dwarf2 debug_line, even within a version
 # of gas.  Moreover, we need to emit a valid instruction to trigger any
@@ -7651,7 +7691,7 @@ fi
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:7655: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:7695: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -8182,27 +8222,27 @@ s%@objext@%$objext%g
 s%@PACKAGE@%$PACKAGE%g
 s%@VERSION@%$VERSION%g
 s%@CHECK_PO@%$CHECK_PO%g
+s%@ALLOCA@%$ALLOCA%g
+s%@GLIBC21@%$GLIBC21%g
 s%@USE_NLS@%$USE_NLS%g
 s%@MSGFMT@%$MSGFMT%g
 s%@GMSGFMT@%$GMSGFMT%g
 s%@XGETTEXT@%$XGETTEXT%g
-s%@GENCAT@%$GENCAT%g
+s%@INTLBISON@%$INTLBISON%g
+s%@BUILD_INCLUDED_LIBINTL@%$BUILD_INCLUDED_LIBINTL%g
 s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g
 s%@CATALOGS@%$CATALOGS%g
 s%@CATOBJEXT@%$CATOBJEXT%g
-s%@DATADIRNAME@%$DATADIRNAME%g
 s%@GMOFILES@%$GMOFILES%g
-s%@INSTOBJEXT@%$INSTOBJEXT%g
-s%@INTLDEPS@%$INTLDEPS%g
 s%@INTLLIBS@%$INTLLIBS%g
 s%@INTLOBJS@%$INTLOBJS%g
 s%@POFILES@%$POFILES%g
 s%@POSUB@%$POSUB%g
-s%@INCLUDE_LOCALE_H@%$INCLUDE_LOCALE_H%g
-s%@GT_NO@%$GT_NO%g
-s%@GT_YES@%$GT_YES%g
+s%@DATADIRNAME@%$DATADIRNAME%g
+s%@INSTOBJEXT@%$INSTOBJEXT%g
+s%@GENCAT@%$GENCAT%g
 s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g
-s%@l@%$l%g
+s%@INTL_LIBTOOL_SUFFIX_PREFIX@%$INTL_LIBTOOL_SUFFIX_PREFIX%g
 s%@inhibit_libc@%$inhibit_libc%g
 s%@gthread_flags@%$gthread_flags%g
 s%@GGC@%$GGC%g
@@ -8491,51 +8531,6 @@ cat >> $CONFIG_STATUS <<\EOF
 fi; done
 
 EOF
-
-cat >> $CONFIG_STATUS <<EOF
-ac_sources="$nls_cv_header_libgt"
-ac_dests="$nls_cv_header_intl"
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-srcdir=$ac_given_srcdir
-while test -n "$ac_sources"; do
-  set $ac_dests; ac_dest=$1; shift; ac_dests=$*
-  set $ac_sources; ac_source=$1; shift; ac_sources=$*
-
-  echo "linking $srcdir/$ac_source to $ac_dest"
-
-  if test ! -r $srcdir/$ac_source; then
-    { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
-  fi
-  rm -f $ac_dest
-
-  # Make relative symlinks.
-  # Remove last slash and all that follows it.  Not all systems have dirname.
-  ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
-  if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
-    # The dest file is in a subdirectory.
-    test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
-    ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
-    # A "../" for each directory in $ac_dest_dir_suffix.
-    ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
-  else
-    ac_dest_dir_suffix= ac_dots=
-  fi
-
-  case "$srcdir" in
-  [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
-  *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
-  esac
-
-  # Make a symlink if possible; otherwise try a hard link.
-  if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
-    ln $srcdir/$ac_source $ac_dest; then :
-  else
-    { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
-  fi
-done
-EOF
 cat >> $CONFIG_STATUS <<EOF
 
 
@@ -8574,9 +8569,35 @@ cpp_install_dir='${cpp_install_dir}'
 
 EOF
 cat >> $CONFIG_STATUS <<\EOF
-case "$CONFIG_FILES" in *po/Makefile.in*)
-        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
-      esac
+for ac_file in $CONFIG_FILES; do
+        # Support "outfile[:infile[:infile...]]"
+        case "$ac_file" in
+          *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+        esac
+        # PO directories have a Makefile.in generated from Makefile.in.in.
+        case "$ac_file" in */Makefile.in)
+          # Adjust a relative srcdir.
+          ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+          ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+          ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+          # In autoconf-2.13 it is called $ac_given_srcdir.
+          # In autoconf-2.50 it is called $srcdir.
+          test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+          case "$ac_given_srcdir" in
+            .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+            /*) top_srcdir="$ac_given_srcdir" ;;
+            *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+          esac
+          if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+            rm -f "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+            sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          fi
+          ;;
+        esac
+      done
 
 case x$CONFIG_HEADERS in
 xauto-host.h:config.in)
index 588da5c..f1ea4e4 100644 (file)
@@ -922,15 +922,6 @@ if test "${build}" != "${host}" && test "x$enable_nls" = "xyes"; then
   enable_nls=no
 fi
 
-# if NLS is enabled, also enable check in po subdir
-if test $enable_nls = yes; then
-  CHECK_PO=check-po
-else
-  CHECK_PO=""
-fi
-
-AC_SUBST(CHECK_PO)
-
 AM_GNU_GETTEXT
 XGETTEXT="AWK='$AWK' \$(SHELL) \$(top_srcdir)/exgettext $XGETTEXT"
 
index f87452e..b2018b8 100644 (file)
@@ -1,3 +1,12 @@
+2001-10-12  Zack Weinberg  <zack@codesourcery.com>
+
+       * Update entire directory from gettext 0.10.40.
+       * cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed:
+       Removed.
+       * config.charset, dcigettext.c, dcngettext.c, libgnuintl.h,
+       localcharset.c, locale.alias, ngettext.c, plural.c, plural.y,
+       ref-add.sin, ref-del.sin: New.
+
 2001-07-06  Roman Lechtchinsky  <rl@cs.tu-berlin.de>
 
        * gettextP.h (SWAP): Change parameter type to unsigned int.
index 489adf9..acf050d 100644 (file)
@@ -1,19 +1,20 @@
 # Makefile for directory with message catalog handling in GNU NLS Utilities.
-# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
 # any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
 
 PACKAGE = @PACKAGE@
 VERSION = @VERSION@
@@ -28,76 +29,107 @@ VPATH = @srcdir@
 prefix = @prefix@
 exec_prefix = @exec_prefix@
 transform = @program_transform_name@
-libdir = $(exec_prefix)/lib
-includedir = $(prefix)/include
-datadir = $(prefix)/@DATADIRNAME@
+libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
 localedir = $(datadir)/locale
-gnulocaledir = $(prefix)/share/locale
-gettextsrcdir = @datadir@/gettext/intl
-aliaspath = $(localedir):.
+gettextsrcdir = $(datadir)/gettext/intl
+aliaspath = $(localedir)
 subdir = intl
 
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
 
-l = @l@
+l = @INTL_LIBTOOL_SUFFIX_PREFIX@
 
 AR = ar
 CC = @CC@
 LIBTOOL = @LIBTOOL@
 RANLIB = @RANLIB@
+YACC = @INTLBISON@ -y -d
+YFLAGS = --name-prefix=__gettext
 
-DEFS = -DIN_GCC -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
--DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
+DEFS = -DIN_GCC -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
+-DLIBDIR=\"$(libdir)\" @DEFS@
 CPPFLAGS = @CPPFLAGS@
 CFLAGS = @CFLAGS@
 LDFLAGS = @LDFLAGS@
 
 COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
 
-HEADERS = $(COMHDRS) libgettext.h loadinfo.h
+HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
 COMHDRS = gettext.h gettextP.h hash-string.h
-SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
+SOURCES = $(COMSRCS) intl-compat.c
 COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
 finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
-explodename.c
+explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
+localcharset.c
 OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
 finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
-explodename.$lo
-CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
+explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
+plural.$lo localcharset.$lo
 GETTOBJS = intl-compat.$lo
-DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
-xopen-msg.sed $(HEADERS) $(SOURCES)
+DISTFILES.common = Makefile.in \
+config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
+DISTFILES.generated = plural.c
 DISTFILES.normal = VERSION
-DISTFILES.gettext = libintl.glibc intlh.inst.in
+DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc
+DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
+
+# Libtool's library version information for libintl.
+# Before making a gettext release, the gettext maintainer must change this
+# according to the libtool documentation, section "Library interface versions".
+# Maintainers of other packages that include the intl directory must *not*
+# change these values.
+LTV_CURRENT=1
+LTV_REVISION=1
+LTV_AGE=0
 
 .SUFFIXES:
-.SUFFIXES: .c .o .lo
+.SUFFIXES: .c .y .o .lo .sin .sed
 .c.o:
        $(COMPILE) $<
 .c.lo:
        $(LIBTOOL) --mode=compile $(COMPILE) $<
 
-INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib -I$(srcdir)/.. \
--I$(srcdir)/../config -I$(srcdir)/../../include
+.y.c:
+       $(YACC) $(YFLAGS) --output $@ $<
+       rm -f $*.h
 
-all: all-@USE_INCLUDED_LIBINTL@
+.sin.sed:
+       sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
+       mv t-$@ $@
+
+INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir) \
+          -I$(top_srcdir)/config -I$(top_srcdir)/../include
 
-all-yes: libintl.$la intlh.inst
-all-no:
+all: all-@USE_INCLUDED_LIBINTL@
+all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
+all-no: all-no-@BUILD_INCLUDED_LIBINTL@
+all-no-yes: libgnuintl.$la
+all-no-no:
 
-libintl.a: $(OBJECTS)
+libintl.a libgnuintl.a: $(OBJECTS)
        rm -f $@
        $(AR) cru $@ $(OBJECTS)
        $(RANLIB) $@
 
-libintl.la: $(OBJECTS)
-       $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
-                  -version-info 1:0 -rpath $(libdir)
+libintl.la libgnuintl.la: $(OBJECTS)
+       $(LIBTOOL) --mode=link \
+         $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
+         $(OBJECTS) @LIBICONV@ \
+         -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
+         -rpath $(libdir) \
+         -no-undefined
+
+libintl.h: libgnuintl.h
+       cp $(srcdir)/libgnuintl.h libintl.h
 
-../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
-       cd ../po && $(MAKE) cat-id-tbl.$lo
+charset.alias: config.charset
+       $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+       mv t-$@ $@
 
 check: all
 
@@ -105,36 +137,70 @@ check: all
 # only use the library should use install instead.
 
 # We must not install the libintl.h/libintl.a files if we are on a
-# system which has the gettext() function in its C library or in a
-# separate library or use the catgets interface.  A special case is
-# where configure found a previously installed GNU gettext library.
+# system which has the GNU gettext() function in its C library or in a
+# separate library.
 # If you want to use the one which comes with this version of the
 # package, you have to use `configure --with-included-gettext'.
 install: install-exec install-data
 install-exec: all
        if test "$(PACKAGE)" = "gettext" \
           && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
-         if test -r $(MKINSTALLDIRS); then \
-           $(MKINSTALLDIRS) $(libdir) $(includedir); \
+         $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+         $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
+         $(LIBTOOL) --mode=install \
+           $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
+       else \
+         : ; \
+       fi
+       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+         $(mkinstalldirs) $(DESTDIR)$(libdir); \
+         temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+         dest=$(DESTDIR)$(libdir)/charset.alias; \
+         if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+           orig=$(DESTDIR)$(libdir)/charset.alias; \
+           sed -f ref-add.sed $$orig > $$temp; \
+           $(INSTALL_DATA) $$temp $$dest; \
+           rm -f $$temp; \
          else \
-           $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
+           if test @GLIBC21@ = no; then \
+             orig=charset.alias; \
+             sed -f ref-add.sed $$orig > $$temp; \
+             $(INSTALL_DATA) $$temp $$dest; \
+             rm -f $$temp; \
+           fi; \
          fi; \
-         $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
-         $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
+         $(mkinstalldirs) $(DESTDIR)$(localedir); \
+         test -f $(DESTDIR)$(localedir)/locale.alias \
+           && orig=$(DESTDIR)$(localedir)/locale.alias \
+           || orig=$(srcdir)/locale.alias; \
+         temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+         dest=$(DESTDIR)$(localedir)/locale.alias; \
+         sed -f ref-add.sed $$orig > $$temp; \
+         $(INSTALL_DATA) $$temp $$dest; \
+         rm -f $$temp; \
        else \
          : ; \
        fi
 install-data: all
        if test "$(PACKAGE)" = "gettext"; then \
-         if test -r $(MKINSTALLDIRS); then \
-           $(MKINSTALLDIRS) $(gettextsrcdir); \
-         else \
-           $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
-         fi; \
-         $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
-         dists="$(DISTFILES.common)"; \
+         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+         $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
+         $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
+         dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \
+         for file in $$dists; do \
+           $(INSTALL_DATA) $(srcdir)/$$file \
+                           $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+         chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
+         dists="$(DISTFILES.generated)"; \
          for file in $$dists; do \
-           $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
+           if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+           $(INSTALL_DATA) $$dir/$$file \
+                           $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+         dists="$(DISTFILES.obsolete)"; \
+         for file in $$dists; do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
          done; \
        else \
          : ; \
@@ -144,10 +210,43 @@ install-data: all
 installcheck:
 
 uninstall:
+       if test "$(PACKAGE)" = "gettext" \
+          && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+         rm -f $(DESTDIR)$(includedir)/libintl.h; \
+         $(LIBTOOL) --mode=uninstall \
+           rm -f $(DESTDIR)$(libdir)/libintl.$la; \
+       else \
+         : ; \
+       fi
+       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+         if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+           temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+           dest=$(DESTDIR)$(libdir)/charset.alias; \
+           sed -f ref-del.sed $$dest > $$temp; \
+           if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+             rm -f $$dest; \
+           else \
+             $(INSTALL_DATA) $$temp $$dest; \
+           fi; \
+           rm -f $$temp; \
+         fi; \
+         if test -f $(DESTDIR)$(localedir)/locale.alias; then \
+           temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+           dest=$(DESTDIR)$(localedir)/locale.alias; \
+           sed -f ref-del.sed $$dest > $$temp; \
+           if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+             rm -f $$dest; \
+           else \
+             $(INSTALL_DATA) $$temp $$dest; \
+           fi; \
+           rm -f $$temp; \
+         fi; \
+       else \
+         : ; \
+       fi
        if test "$(PACKAGE)" = "gettext"; then \
-         dists="$(DISTFILES.common)"; \
-         for file in $$dists; do \
-           rm -f $(gettextsrcdir)/$$file; \
+         for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
          done; \
        else \
          : ; \
@@ -155,7 +254,7 @@ uninstall:
 
 info dvi:
 
-$(OBJECTS): ../config.h libgettext.h
+$(OBJECTS): ../config.h libgnuintl.h
 bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
 dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
 
@@ -171,12 +270,19 @@ ID: $(HEADERS) $(SOURCES)
 
 
 mostlyclean:
-       rm -f *.a *.o *.lo core core.*
+       rm -f *.a *.la *.o *.lo core core.*
+       rm -f libintl.h charset.alias ref-add.sed ref-del.sed
+       rm -f -r .libs _libs
 
 clean: mostlyclean
 
 distclean: clean
-       rm -f Makefile ID TAGS po2msg.sed po2tbl.sed
+       rm -f Makefile ID TAGS
+       if test "$(PACKAGE)" = gettext; then \
+         rm -f ChangeLog.inst $(DISTFILES.normal); \
+       else \
+         : ; \
+       fi
 
 maintainer-clean: distclean
        @echo "This command is intended for maintainers to use;"
@@ -186,34 +292,23 @@ maintainer-clean: distclean
 # GNU gettext needs not contain the file `VERSION' but contains some
 # other files which should not be distributed in other packages.
 distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: Makefile $(DISTFILES)
+dist distdir: Makefile
        if test "$(PACKAGE)" = gettext; then \
          additional="$(DISTFILES.gettext)"; \
        else \
          additional="$(DISTFILES.normal)"; \
        fi; \
-       for file in $(DISTFILES.common) $$additional; do \
-         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
-           || cp -p $(srcdir)/$$file $(distdir); \
+       $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
+       for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
+         if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+         ln $$dir/$$file $(distdir) 2> /dev/null \
+           || cp -p $$dir/$$file $(distdir); \
        done
 
-dist-libc:
-       tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
-
 Makefile: Makefile.in ../config.status
        cd .. \
          && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
 
-# The dependency for intlh.inst is different in gettext and all other
-# packages.  Because we cannot you GNU make features we have to solve
-# the problem while rewriting Makefile.in.
-@GT_YES@intlh.inst: intlh.inst.in ../config.status
-@GT_YES@       cd .. \
-@GT_YES@       && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
-@GT_YES@         $(SHELL) ./config.status
-@GT_NO@.PHONY: intlh.inst
-@GT_NO@intlh.inst:
-
 # 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 ee66b06..cb8a01a 100644 (file)
@@ -1 +1 @@
-GNU gettext library from gettext-0.10.35
+GNU gettext library from gettext-0.10.40
index c143cbc..c6a9bd1 100644 (file)
@@ -1,50 +1,45 @@
 /* Implementation of the bindtextdomain(3) function
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-# ifdef HAVE_MALLOC_H
-#  include <malloc.h>
-# else
-void free ();
-# endif
-#endif
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
 
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
+#ifdef _LIBC
+# include <libintl.h>
 #else
-# include <strings.h>
-# ifndef memcpy
-#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
+# include "libgnuintl.h"
 #endif
+#include "gettextP.h"
 
 #ifdef _LIBC
-# include <libintl.h>
+/* We have to handle multi-threaded applications.  */
+# include <bits/libc-lock.h>
 #else
-# include "libgettext.h"
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
 #endif
-#include "gettext.h"
-#include "gettextP.h"
 
 /* The internal variables in the standalone libintl.a must have different
    names than the internal variables in GNU libc, otherwise programs
@@ -54,6 +49,11 @@ void free ();
 # define _nl_domain_bindings _nl_domain_bindings__
 #endif
 
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
 /* @@ end of prolog @@ */
 
 /* Contains the default location of the message catalogs.  */
@@ -62,6 +62,9 @@ extern const char _nl_default_dirname[];
 /* List with bindings of specific domains.  */
 extern struct binding *_nl_domain_bindings;
 
+/* Lock variable to protect the global data in the gettext implementation.  */
+__libc_rwlock_define (extern, _nl_state_lock)
+
 
 /* Names for the libintl functions are a problem.  They must not clash
    with existing names and they should follow ANSI C.  But this source
@@ -69,25 +72,48 @@ extern struct binding *_nl_domain_bindings;
    prefix.  So we have to make a difference here.  */
 #ifdef _LIBC
 # define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
 # ifndef strdup
 #  define strdup(str) __strdup (str)
 # endif
 #else
 # define BINDTEXTDOMAIN bindtextdomain__
+# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
 #endif
 
-/* Specify that the DOMAINNAME message catalog will be found
-   in DIRNAME rather than in the system locale data base.  */
-char *
-BINDTEXTDOMAIN (domainname, dirname)
+/* Prototypes for local functions.  */
+static void set_binding_values PARAMS ((const char *domainname,
+                                       const char **dirnamep,
+                                       const char **codesetp));
+     
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+   to be used for the DOMAINNAME message catalog.
+   If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+   modified, only the current value is returned.
+   If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+   modified nor returned.  */
+static void
+set_binding_values (domainname, dirnamep, codesetp)
      const char *domainname;
-     const char *dirname;
+     const char **dirnamep;
+     const char **codesetp;
 {
   struct binding *binding;
+  int modified;
 
   /* Some sanity checks.  */
   if (domainname == NULL || domainname[0] == '\0')
-    return NULL;
+    {
+      if (dirnamep)
+       *dirnamep = NULL;
+      if (codesetp)
+       *codesetp = NULL;
+      return;
+    }
+
+  __libc_rwlock_wrlock (_nl_state_lock);
+
+  modified = 0;
 
   for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
     {
@@ -103,83 +129,173 @@ BINDTEXTDOMAIN (domainname, dirname)
        }
     }
 
-  if (dirname == NULL)
-    /* The current binding has be to returned.  */
-    return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
-
   if (binding != NULL)
     {
-      /* The domain is already bound.  If the new value and the old
-        one are equal we simply do nothing.  Otherwise replace the
-        old binding.  */
-      if (strcmp (dirname, binding->dirname) != 0)
+      if (dirnamep)
        {
-         char *new_dirname;
+         const char *dirname = *dirnamep;
 
-         if (strcmp (dirname, _nl_default_dirname) == 0)
-           new_dirname = (char *) _nl_default_dirname;
+         if (dirname == NULL)
+           /* The current binding has be to returned.  */
+           *dirnamep = binding->dirname;
          else
            {
+             /* The domain is already bound.  If the new value and the old
+                one are equal we simply do nothing.  Otherwise replace the
+                old binding.  */
+             char *result = binding->dirname;
+             if (strcmp (dirname, result) != 0)
+               {
+                 if (strcmp (dirname, _nl_default_dirname) == 0)
+                   result = (char *) _nl_default_dirname;
+                 else
+                   {
 #if defined _LIBC || defined HAVE_STRDUP
-             new_dirname = strdup (dirname);
-             if (new_dirname == NULL)
-               return NULL;
+                     result = strdup (dirname);
 #else
-             size_t len = strlen (dirname) + 1;
-             new_dirname = (char *) malloc (len);
-             if (new_dirname == NULL)
-               return NULL;
-
-             memcpy (new_dirname, dirname, len);
+                     size_t len = strlen (dirname) + 1;
+                     result = (char *) malloc (len);
+                     if (__builtin_expect (result != NULL, 1))
+                       memcpy (result, dirname, len);
 #endif
+                   }
+
+                 if (__builtin_expect (result != NULL, 1))
+                   {
+                     if (binding->dirname != _nl_default_dirname)
+                       free (binding->dirname);
+
+                     binding->dirname = result;
+                     modified = 1;
+                   }
+               }
+             *dirnamep = result;
            }
+       }
 
-         if (binding->dirname != _nl_default_dirname)
-           free (binding->dirname);
+      if (codesetp)
+       {
+         const char *codeset = *codesetp;
 
-         binding->dirname = new_dirname;
+         if (codeset == NULL)
+           /* The current binding has be to returned.  */
+           *codesetp = binding->codeset;
+         else
+           {
+             /* The domain is already bound.  If the new value and the old
+                one are equal we simply do nothing.  Otherwise replace the
+                old binding.  */
+             char *result = binding->codeset;
+             if (result == NULL || strcmp (codeset, result) != 0)
+               {
+#if defined _LIBC || defined HAVE_STRDUP
+                 result = strdup (codeset);
+#else
+                 size_t len = strlen (codeset) + 1;
+                 result = (char *) malloc (len);
+                 if (__builtin_expect (result != NULL, 1))
+                   memcpy (result, codeset, len);
+#endif
+
+                 if (__builtin_expect (result != NULL, 1))
+                   {
+                     if (binding->codeset != NULL)
+                       free (binding->codeset);
+
+                     binding->codeset = result;
+                     binding->codeset_cntr++;
+                     modified = 1;
+                   }
+               }
+             *codesetp = result;
+           }
        }
     }
+  else if ((dirnamep == NULL || *dirnamep == NULL)
+          && (codesetp == NULL || *codesetp == NULL))
+    {
+      /* Simply return the default values.  */
+      if (dirnamep)
+       *dirnamep = _nl_default_dirname;
+      if (codesetp)
+       *codesetp = NULL;
+    }
   else
     {
       /* We have to create a new binding.  */
-#if !defined _LIBC && !defined HAVE_STRDUP
-      size_t len;
-#endif
+      size_t len = strlen (domainname) + 1;
       struct binding *new_binding =
-       (struct binding *) malloc (sizeof (*new_binding));
+       (struct binding *) malloc (offsetof (struct binding, domainname) + len);
 
-      if (new_binding == NULL)
-       return NULL;
+      if (__builtin_expect (new_binding == NULL, 0))
+       goto failed;
 
+      memcpy (new_binding->domainname, domainname, len);
+
+      if (dirnamep)
+       {
+         const char *dirname = *dirnamep;
+
+         if (dirname == NULL)
+           /* The default value.  */
+           dirname = _nl_default_dirname;
+         else
+           {
+             if (strcmp (dirname, _nl_default_dirname) == 0)
+               dirname = _nl_default_dirname;
+             else
+               {
+                 char *result;
 #if defined _LIBC || defined HAVE_STRDUP
-      new_binding->domainname = strdup (domainname);
-      if (new_binding->domainname == NULL)
-       return NULL;
+                 result = strdup (dirname);
+                 if (__builtin_expect (result == NULL, 0))
+                   goto failed_dirname;
 #else
-      len = strlen (domainname) + 1;
-      new_binding->domainname = (char *) malloc (len);
-      if (new_binding->domainname == NULL)
-       return NULL;
-      memcpy (new_binding->domainname, domainname, len);
+                 size_t len = strlen (dirname) + 1;
+                 result = (char *) malloc (len);
+                 if (__builtin_expect (result == NULL, 0))
+                   goto failed_dirname;
+                 memcpy (result, dirname, len);
 #endif
-
-      if (strcmp (dirname, _nl_default_dirname) == 0)
-       new_binding->dirname = (char *) _nl_default_dirname;
+                 dirname = result;
+               }
+           }
+         *dirnamep = dirname;
+         new_binding->dirname = (char *) dirname;
+       }
       else
+       /* The default value.  */
+       new_binding->dirname = (char *) _nl_default_dirname;
+
+      new_binding->codeset_cntr = 0;
+
+      if (codesetp)
        {
+         const char *codeset = *codesetp;
+
+         if (codeset != NULL)
+           {
+             char *result;
+
 #if defined _LIBC || defined HAVE_STRDUP
-         new_binding->dirname = strdup (dirname);
-         if (new_binding->dirname == NULL)
-           return NULL;
+             result = strdup (codeset);
+             if (__builtin_expect (result == NULL, 0))
+               goto failed_codeset;
 #else
-         len = strlen (dirname) + 1;
-         new_binding->dirname = (char *) malloc (len);
-         if (new_binding->dirname == NULL)
-           return NULL;
-         memcpy (new_binding->dirname, dirname, len);
+             size_t len = strlen (codeset) + 1;
+             result = (char *) malloc (len);
+             if (__builtin_expect (result == NULL, 0))
+               goto failed_codeset;
+             memcpy (result, codeset, len);
 #endif
+             codeset = result;
+             new_binding->codeset_cntr++;
+           }
+         *codesetp = codeset;
+         new_binding->codeset = (char *) codeset;
        }
+      else
+       new_binding->codeset = NULL;
 
       /* Now enqueue it.  */
       if (_nl_domain_bindings == NULL
@@ -199,13 +315,55 @@ BINDTEXTDOMAIN (domainname, dirname)
          binding->next = new_binding;
        }
 
-      binding = new_binding;
+      modified = 1;
+
+      /* Here we deal with memory allocation failures.  */
+      if (0)
+       {
+       failed_codeset:
+         if (new_binding->dirname != _nl_default_dirname)
+           free (new_binding->dirname);
+       failed_dirname:
+         free (new_binding);
+       failed:
+         if (dirnamep)
+           *dirnamep = NULL;
+         if (codesetp)
+           *codesetp = NULL;
+       }
     }
 
-  return binding->dirname;
+  /* If we modified any binding, we flush the caches.  */
+  if (modified)
+    ++_nl_msg_cat_cntr;
+
+  __libc_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+char *
+BINDTEXTDOMAIN (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  set_binding_values (domainname, &dirname, NULL);
+  return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+char *
+BIND_TEXTDOMAIN_CODESET (domainname, codeset)
+     const char *domainname;
+     const char *codeset;
+{
+  set_binding_values (domainname, NULL, &codeset);
+  return (char *) codeset;
 }
 
 #ifdef _LIBC
-/* Alias for function name in GNU C Library.  */
+/* Aliases for function names in GNU C Library.  */
 weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
 #endif
diff --git a/gcc/intl/cat-compat.c b/gcc/intl/cat-compat.c
deleted file mode 100644 (file)
index 867d901..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Compatibility code for gettext-using-catgets interface.
-   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#else
-char *getenv ();
-# ifdef HAVE_MALLOC_H
-#  include <malloc.h>
-# endif
-#endif
-
-#ifdef HAVE_NL_TYPES_H
-# include <nl_types.h>
-#endif
-
-#include "libgettext.h"
-
-/* @@ end of prolog @@ */
-
-/* XPG3 defines the result of `setlocale (category, NULL)' as:
-   ``Directs `setlocale()' to query `category' and return the current
-     setting of `local'.''
-   However it does not specify the exact format.  And even worse: POSIX
-   defines this not at all.  So we can use this feature only on selected
-   system (e.g. those using GNU C Library).  */
-#ifdef _LIBC
-# define HAVE_LOCALE_NULL
-#endif
-
-/* The catalog descriptor.  */
-static nl_catd catalog = (nl_catd) -1;
-
-/* Name of the default catalog.  */
-static const char default_catalog_name[] = "messages";
-
-/* Name of currently used catalog.  */
-static const char *catalog_name = default_catalog_name;
-
-/* Get ID for given string.  If not found return -1.  */
-static int msg_to_cat_id PARAMS ((const char *msg));
-
-/* Substitution for systems lacking this function in their C library.  */
-#if !_LIBC && !HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
-#endif
-
-
-/* Set currently used domain/catalog.  */
-char *
-textdomain (domainname)
-     const char *domainname;
-{
-  nl_catd new_catalog;
-  char *new_name;
-  size_t new_name_len;
-  char *lang;
-
-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
-    && defined HAVE_LOCALE_NULL
-  lang = setlocale (LC_MESSAGES, NULL);
-#else
-  lang = getenv ("LC_ALL");
-  if (lang == NULL || lang[0] == '\0')
-    {
-      lang = getenv ("LC_MESSAGES");
-      if (lang == NULL || lang[0] == '\0')
-       lang = getenv ("LANG");
-    }
-#endif
-  if (lang == NULL || lang[0] == '\0')
-    lang = "C";
-
-  /* See whether name of currently used domain is asked.  */
-  if (domainname == NULL)
-    return (char *) catalog_name;
-
-  if (domainname[0] == '\0')
-    domainname = default_catalog_name;
-
-  /* Compute length of added path element.  */
-  new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
-                + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
-                + sizeof (".cat");
-
-  new_name = (char *) malloc (new_name_len);
-  if (new_name == NULL)
-    return NULL;
-
-  strcpy (new_name, PACKAGE);
-  new_catalog = catopen (new_name, 0);
-
-  if (new_catalog == (nl_catd) -1)
-    {
-      /* NLSPATH search didn't work, try absolute path */
-      sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
-              PACKAGE);
-      new_catalog = catopen (new_name, 0);
-
-      if (new_catalog == (nl_catd) -1)
-       {
-         free (new_name);
-         return (char *) catalog_name;
-       }
-    }
-
-  /* Close old catalog.  */
-  if (catalog != (nl_catd) -1)
-    catclose (catalog);
-  if (catalog_name != default_catalog_name)
-    free ((char *) catalog_name);
-
-  catalog = new_catalog;
-  catalog_name = new_name;
-
-  return (char *) catalog_name;
-}
-
-char *
-bindtextdomain (domainname, dirname)
-     const char *domainname;
-     const char *dirname;
-{
-#if HAVE_SETENV || HAVE_PUTENV
-  char *old_val, *new_val, *cp;
-  size_t new_val_len;
-
-  /* This does not make much sense here but to be compatible do it.  */
-  if (domainname == NULL)
-    return NULL;
-
-  /* Compute length of added path element.  If we use setenv we don't need
-     the first byts for NLSPATH=, but why complicate the code for this
-     peanuts.  */
-  new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
-               + sizeof ("/%L/LC_MESSAGES/%N.cat");
-
-  old_val = getenv ("NLSPATH");
-  if (old_val == NULL || old_val[0] == '\0')
-    {
-      old_val = NULL;
-      new_val_len += 1 + sizeof (LOCALEDIR) - 1
-                    + sizeof ("/%L/LC_MESSAGES/%N.cat");
-    }
-  else
-    new_val_len += strlen (old_val);
-
-  new_val = (char *) malloc (new_val_len);
-  if (new_val == NULL)
-    return NULL;
-
-# if HAVE_SETENV
-  cp = new_val;
-# else
-  cp = stpcpy (new_val, "NLSPATH=");
-# endif
-
-  cp = stpcpy (cp, dirname);
-  cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
-
-  if (old_val == NULL)
-    {
-# if __STDC__
-      stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
-# else
-
-      cp = stpcpy (cp, LOCALEDIR);
-      stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
-# endif
-    }
-  else
-    stpcpy (cp, old_val);
-
-# if HAVE_SETENV
-  setenv ("NLSPATH", new_val, 1);
-  free (new_val);
-# else
-  putenv (new_val);
-  /* Do *not* free the environment entry we just entered.  It is used
-     from now on.   */
-# endif
-
-#endif
-
-  return (char *) domainname;
-}
-
-#undef gettext
-char *
-gettext (msg)
-     const char *msg;
-{
-  int msgid;
-
-  if (msg == NULL || catalog == (nl_catd) -1)
-    return (char *) msg;
-
-  /* Get the message from the catalog.  We always use set number 1.
-     The message ID is computed by the function `msg_to_cat_id'
-     which works on the table generated by `po-to-tbl'.  */
-  msgid = msg_to_cat_id (msg);
-  if (msgid == -1)
-    return (char *) msg;
-
-  return catgets (catalog, 1, msgid, (char *) msg);
-}
-
-/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
-   for the one equal to msg.  If it is found return the ID.  In case when
-   the string is not found return -1.  */
-static int
-msg_to_cat_id (msg)
-     const char *msg;
-{
-  int cnt;
-
-  for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
-    if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
-      return _msg_tbl[cnt]._msg_number;
-
-  return -1;
-}
-
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library.  So we
-   avoid the non-standard function stpcpy.  In GNU C Library this
-   function is available, though.  Also allow the symbol HAVE_STPCPY
-   to be defined.  */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (dest, src)
-     char *dest;
-     const char *src;
-{
-  while ((*dest++ = *src++) != '\0')
-    /* Do nothing. */ ;
-  return dest - 1;
-}
-#endif
diff --git a/gcc/intl/config.charset b/gcc/intl/config.charset
new file mode 100755 (executable)
index 0000000..f4f2611
--- /dev/null
@@ -0,0 +1,438 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+#   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, or (at your option)
+#   any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   USA.
+#
+# The table consists of lines of the form
+#    ALIAS  CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+#       name                         used by which systems         a MIME name?
+#   ASCII, ANSI_X3.4-1968     glibc solaris freebsd
+#   ISO-8859-1                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-2                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-3                glibc                                     yes
+#   ISO-8859-4                osf solaris freebsd                       yes
+#   ISO-8859-5                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-6                glibc aix hpux solaris                    yes
+#   ISO-8859-7                glibc aix hpux irix osf solaris           yes
+#   ISO-8859-8                glibc aix hpux osf solaris                yes
+#   ISO-8859-9                glibc aix hpux irix osf solaris           yes
+#   ISO-8859-13               glibc
+#   ISO-8859-15               glibc aix osf solaris freebsd
+#   KOI8-R                    glibc solaris freebsd                     yes
+#   KOI8-U                    glibc freebsd                             yes
+#   CP437                     dos
+#   CP775                     dos
+#   CP850                     aix osf dos
+#   CP852                     dos
+#   CP855                     dos
+#   CP856                     aix
+#   CP857                     dos
+#   CP861                     dos
+#   CP862                     dos
+#   CP864                     dos
+#   CP865                     dos
+#   CP866                     freebsd dos
+#   CP869                     dos
+#   CP874                     win32 dos
+#   CP922                     aix
+#   CP932                     aix win32 dos
+#   CP943                     aix
+#   CP949                     osf win32 dos
+#   CP950                     win32 dos
+#   CP1046                    aix
+#   CP1124                    aix
+#   CP1129                    aix
+#   CP1250                    win32
+#   CP1251                    glibc win32
+#   CP1252                    aix win32
+#   CP1253                    win32
+#   CP1254                    win32
+#   CP1255                    win32
+#   CP1256                    win32
+#   CP1257                    win32
+#   GB2312                    glibc aix hpux irix solaris freebsd       yes
+#   EUC-JP                    glibc aix hpux irix osf solaris freebsd   yes
+#   EUC-KR                    glibc aix hpux irix osf solaris freebsd   yes
+#   EUC-TW                    glibc aix hpux irix osf solaris
+#   BIG5                      glibc aix hpux osf solaris freebsd        yes
+#   BIG5-HKSCS                glibc
+#   GBK                       aix osf win32 dos
+#   GB18030                   glibc
+#   SHIFT_JIS                 hpux osf solaris freebsd                  yes
+#   JOHAB                     glibc win32
+#   TIS-620                   glibc aix hpux osf solaris
+#   VISCII                    glibc                                     yes
+#   HP-ROMAN8                 hpux
+#   HP-ARABIC8                hpux
+#   HP-GREEK8                 hpux
+#   HP-HEBREW8                hpux
+#   HP-TURKISH8               hpux
+#   HP-KANA8                  hpux
+#   DEC-KANJI                 osf
+#   DEC-HANYU                 osf
+#   UTF-8                     glibc aix hpux osf solaris                yes
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+    linux* | *-gnu*)
+       # With glibc-2.1 or newer, we don't need any canonicalization,
+       # because glibc has iconv and both glibc and libiconv support all
+       # GNU canonical names directly. Therefore, the Makefile does not
+       # need to install the alias file at all.
+       # The following applies only to glibc-2.0.x and older libcs.
+       echo "ISO_646.IRV:1983 ASCII"
+       ;;
+    aix*)
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-6 ISO-8859-6"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-8 ISO-8859-8"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "ISO8859-15 ISO-8859-15"
+       echo "IBM-850 CP850"
+       echo "IBM-856 CP856"
+       echo "IBM-921 ISO-8859-13"
+       echo "IBM-922 CP922"
+       echo "IBM-932 CP932"
+       echo "IBM-943 CP943"
+       echo "IBM-1046 CP1046"
+       echo "IBM-1124 CP1124"
+       echo "IBM-1129 CP1129"
+       echo "IBM-1252 CP1252"
+       echo "IBM-eucCN GB2312"
+       echo "IBM-eucJP EUC-JP"
+       echo "IBM-eucKR EUC-KR"
+       echo "IBM-eucTW EUC-TW"
+       echo "big5 BIG5"
+       echo "GBK GBK"
+       echo "TIS-620 TIS-620"
+       echo "UTF-8 UTF-8"
+       ;;
+    hpux*)
+       echo "iso88591 ISO-8859-1"
+       echo "iso88592 ISO-8859-2"
+       echo "iso88595 ISO-8859-5"
+       echo "iso88596 ISO-8859-6"
+       echo "iso88597 ISO-8859-7"
+       echo "iso88598 ISO-8859-8"
+       echo "iso88599 ISO-8859-9"
+       echo "iso885915 ISO-8859-15"
+       echo "roman8 HP-ROMAN8"
+       echo "arabic8 HP-ARABIC8"
+       echo "greek8 HP-GREEK8"
+       echo "hebrew8 HP-HEBREW8"
+       echo "turkish8 HP-TURKISH8"
+       echo "kana8 HP-KANA8"
+       echo "tis620 TIS-620"
+       echo "big5 BIG5"
+       echo "eucJP EUC-JP"
+       echo "eucKR EUC-KR"
+       echo "eucTW EUC-TW"
+       echo "hp15CN GB2312"
+       #echo "ccdc ?" # what is this?
+       echo "SJIS SHIFT_JIS"
+       echo "utf8 UTF-8"
+       ;;
+    irix*)
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "eucCN GB2312"
+       echo "eucJP EUC-JP"
+       echo "eucKR EUC-KR"
+       echo "eucTW EUC-TW"
+       ;;
+    osf*)
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-4 ISO-8859-4"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-8 ISO-8859-8"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "ISO8859-15 ISO-8859-15"
+       echo "cp850 CP850"
+       echo "big5 BIG5"
+       echo "dechanyu DEC-HANYU"
+       echo "dechanzi GB2312"
+       echo "deckanji DEC-KANJI"
+       echo "deckorean EUC-KR"
+       echo "eucJP EUC-JP"
+       echo "eucKR EUC-KR"
+       echo "eucTW EUC-TW"
+       echo "GBK GBK"
+       echo "KSC5601 CP949"
+       echo "sdeckanji EUC-JP"
+       echo "SJIS SHIFT_JIS"
+       echo "TACTIS TIS-620"
+       echo "UTF-8 UTF-8"
+       ;;
+    solaris*)
+       echo "646 ASCII"
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-4 ISO-8859-4"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-6 ISO-8859-6"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-8 ISO-8859-8"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "ISO8859-15 ISO-8859-15"
+       echo "koi8-r KOI8-R"
+       echo "BIG5 BIG5"
+       echo "gb2312 GB2312"
+       echo "cns11643 EUC-TW"
+       echo "5601 EUC-KR"
+       echo "eucJP EUC-JP"
+       echo "PCK SHIFT_JIS"
+       echo "TIS620.2533 TIS-620"
+       #echo "sun_eu_greek ?" # what is this?
+       echo "UTF-8 UTF-8"
+       ;;
+    freebsd*)
+       # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+       # localcharset.c falls back to using the full locale name
+       # from the environment variables.
+       echo "C ASCII"
+       echo "US-ASCII ASCII"
+       for l in la_LN lt_LN; do
+         echo "$l.ASCII ASCII"
+       done
+       for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+                fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+                lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+         echo "$l.ISO_8859-1 ISO-8859-1"
+         echo "$l.DIS_8859-15 ISO-8859-15"
+       done
+       for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+         echo "$l.ISO_8859-2 ISO-8859-2"
+       done
+       for l in la_LN lt_LT; do
+         echo "$l.ISO_8859-4 ISO-8859-4"
+       done
+       for l in ru_RU ru_SU; do
+         echo "$l.KOI8-R KOI8-R"
+         echo "$l.ISO_8859-5 ISO-8859-5"
+         echo "$l.CP866 CP866"
+       done
+       echo "uk_UA.KOI8-U KOI8-U"
+       echo "zh_TW.BIG5 BIG5"
+       echo "zh_TW.Big5 BIG5"
+       echo "zh_CN.EUC GB2312"
+       echo "ja_JP.EUC EUC-JP"
+       echo "ja_JP.SJIS SHIFT_JIS"
+       echo "ja_JP.Shift_JIS SHIFT_JIS"
+       echo "ko_KR.EUC EUC-KR"
+       ;;
+    beos*)
+       # BeOS has a single locale, and it has UTF-8 encoding.
+       echo "* UTF-8"
+       ;;
+    msdosdjgpp*)
+       # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+       # localcharset.c falls back to using the full locale name
+       # from the environment variables.
+       echo "#"
+       echo "# The encodings given here may not all be correct."
+       echo "# If you find that the encoding given for your language and"
+       echo "# country is not the one your DOS machine actually uses, just"
+       echo "# correct it in this file, and send a mail to"
+       echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
+       echo "# and Bruno Haible <haible@clisp.cons.org>."
+       echo "#"
+       echo "C ASCII"
+       # ISO-8859-1 languages
+       echo "ca CP850"
+       echo "ca_ES CP850"
+       echo "da CP865"    # not CP850 ??
+       echo "da_DK CP865" # not CP850 ??
+       echo "de CP850"
+       echo "de_AT CP850"
+       echo "de_CH CP850"
+       echo "de_DE CP850"
+       echo "en CP850"
+       echo "en_AU CP850" # not CP437 ??
+       echo "en_CA CP850"
+       echo "en_GB CP850"
+       echo "en_NZ CP437"
+       echo "en_US CP437"
+       echo "en_ZA CP850" # not CP437 ??
+       echo "es CP850"
+       echo "es_AR CP850"
+       echo "es_BO CP850"
+       echo "es_CL CP850"
+       echo "es_CO CP850"
+       echo "es_CR CP850"
+       echo "es_CU CP850"
+       echo "es_DO CP850"
+       echo "es_EC CP850"
+       echo "es_ES CP850"
+       echo "es_GT CP850"
+       echo "es_HN CP850"
+       echo "es_MX CP850"
+       echo "es_NI CP850"
+       echo "es_PA CP850"
+       echo "es_PY CP850"
+       echo "es_PE CP850"
+       echo "es_SV CP850"
+       echo "es_UY CP850"
+       echo "es_VE CP850"
+       echo "et CP850"
+       echo "et_EE CP850"
+       echo "eu CP850"
+       echo "eu_ES CP850"
+       echo "fi CP850"
+       echo "fi_FI CP850"
+       echo "fr CP850"
+       echo "fr_BE CP850"
+       echo "fr_CA CP850"
+       echo "fr_CH CP850"
+       echo "fr_FR CP850"
+       echo "ga CP850"
+       echo "ga_IE CP850"
+       echo "gd CP850"
+       echo "gd_GB CP850"
+       echo "gl CP850"
+       echo "gl_ES CP850"
+       echo "id CP850"    # not CP437 ??
+       echo "id_ID CP850" # not CP437 ??
+       echo "is CP861"    # not CP850 ??
+       echo "is_IS CP861" # not CP850 ??
+       echo "it CP850"
+       echo "it_CH CP850"
+       echo "it_IT CP850"
+       echo "lt CP775"
+       echo "lt_LT CP775"
+       echo "lv CP775"
+       echo "lv_LV CP775"
+       echo "nb CP865"    # not CP850 ??
+       echo "nb_NO CP865" # not CP850 ??
+       echo "nl CP850"
+       echo "nl_BE CP850"
+       echo "nl_NL CP850"
+       echo "nn CP865"    # not CP850 ??
+       echo "nn_NO CP865" # not CP850 ??
+       echo "no CP865"    # not CP850 ??
+       echo "no_NO CP865" # not CP850 ??
+       echo "pt CP850"
+       echo "pt_BR CP850"
+       echo "pt_PT CP850"
+       echo "sv CP850"
+       echo "sv_SE CP850"
+       # ISO-8859-2 languages
+       echo "cs CP852"
+       echo "cs_CZ CP852"
+       echo "hr CP852"
+       echo "hr_HR CP852"
+       echo "hu CP852"
+       echo "hu_HU CP852"
+       echo "pl CP852"
+       echo "pl_PL CP852"
+       echo "ro CP852"
+       echo "ro_RO CP852"
+       echo "sk CP852"
+       echo "sk_SK CP852"
+       echo "sl CP852"
+       echo "sl_SI CP852"
+       echo "sq CP852"
+       echo "sq_AL CP852"
+       echo "sr CP852"    # CP852 or CP866 or CP855 ??
+       echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+       # ISO-8859-3 languages
+       echo "mt CP850"
+       echo "mt_MT CP850"
+       # ISO-8859-5 languages
+       echo "be CP866"
+       echo "be_BE CP866"
+       echo "bg CP866"    # not CP855 ??
+       echo "bg_BG CP866" # not CP855 ??
+       echo "mk CP866"    # not CP855 ??
+       echo "mk_MK CP866" # not CP855 ??
+       echo "ru KOI8-R"    # not CP866 ??
+       echo "ru_RU KOI8-R" # not CP866 ??
+       # ISO-8859-6 languages
+       echo "ar CP864"
+       echo "ar_AE CP864"
+       echo "ar_DZ CP864"
+       echo "ar_EG CP864"
+       echo "ar_IQ CP864"
+       echo "ar_IR CP864"
+       echo "ar_JO CP864"
+       echo "ar_KW CP864"
+       echo "ar_MA CP864"
+       echo "ar_OM CP864"
+       echo "ar_QA CP864"
+       echo "ar_SA CP864"
+       echo "ar_SY CP864"
+       # ISO-8859-7 languages
+       echo "el CP869"
+       echo "el_GR CP869"
+       # ISO-8859-8 languages
+       echo "he CP862"
+       echo "he_IL CP862"
+       # ISO-8859-9 languages
+       echo "tr CP857"
+       echo "tr_TR CP857"
+       # Japanese
+       echo "ja CP932"
+       echo "ja_JP CP932"
+       # Chinese
+       echo "zh_CN GBK"
+       echo "zh_TW CP950" # not CP938 ??
+       # Korean
+       echo "kr CP949"    # not CP934 ??
+       echo "kr_KR CP949" # not CP934 ??
+       # Thai
+       echo "th CP874"
+       echo "th_TH CP874"
+       # Other
+       echo "eo CP850"
+       echo "eo_EO CP850"
+       ;;
+esac
index 65de78b..b7c9652 100644 (file)
 /* Implementation of the dcgettext(3) function.
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-# ifndef _GNU_SOURCE
-#  define _GNU_SOURCE  1
-# endif
-
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-#  include <alloca.h>
-# else
-#  ifdef _AIX
- #pragma alloca
-#  else
-#   ifndef alloca
-char *alloca ();
-#   endif
-#  endif
-# endif
-#endif
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-#ifndef __set_errno
-# define __set_errno(val) errno = (val)
-#endif
-
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-char *getenv ();
-# ifdef HAVE_MALLOC_H
-#  include <malloc.h>
-# else
-void free ();
-# endif
-#endif
-
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-#  define strchr index
-# endif
-#endif
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include "gettext.h"
 #include "gettextP.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
-# include "libgettext.h"
-#endif
-#include "hash-string.h"
-
-/* The internal variables in the standalone libintl.a must have different
-   names than the internal variables in GNU libc, otherwise programs
-   using libintl.a cannot be linked statically.  */
-#if !defined _LIBC
-# define _nl_default_default_domain _nl_default_default_domain__
-# define _nl_current_default_domain _nl_current_default_domain__
-# define _nl_default_dirname _nl_default_dirname__
-# define _nl_domain_bindings _nl_domain_bindings__
+# include "libgnuintl.h"
 #endif
 
 /* @@ end of prolog @@ */
 
-#ifdef _LIBC
-/* Rename the non ANSI C functions.  This is required by the standard
-   because some ANSI C functions will require linking with this object
-   file and the name space must not be polluted.  */
-# define getcwd __getcwd
-# ifndef stpcpy
-#  define stpcpy __stpcpy
-# endif
-#else
-# if !defined HAVE_GETCWD
-char *getwd ();
-#  define getcwd(buf, max) getwd (buf)
-# elif !defined (HAVE_DECL_GETCWD)
-char *getcwd ();
-# endif
-# ifndef HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
-# endif
-#endif
-
-/* Amount to increase buffer size by in each try.  */
-#define PATH_INCR 32
-
-/* The following is from pathmax.h.  */
-/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
-   PATH_MAX but might cause redefinition warnings when sys/param.h is
-   later included (as on MORE/BSD 4.3).  */
-#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
-# include <limits.h>
-#endif
-
-#ifndef _POSIX_PATH_MAX
-# define _POSIX_PATH_MAX 255
-#endif
-
-#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
-# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
-#endif
-
-/* Don't include sys/param.h if it already has been.  */
-#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
-# include <sys/param.h>
-#endif
-
-#if !defined(PATH_MAX) && defined(MAXPATHLEN)
-# define PATH_MAX MAXPATHLEN
-#endif
-
-#ifndef PATH_MAX
-# define PATH_MAX _POSIX_PATH_MAX
-#endif
-
-/* XPG3 defines the result of `setlocale (category, NULL)' as:
-   ``Directs `setlocale()' to query `category' and return the current
-     setting of `local'.''
-   However it does not specify the exact format.  And even worse: POSIX
-   defines this not at all.  So we can use this feature only on selected
-   system (e.g. those using GNU C Library).  */
-#ifdef _LIBC
-# define HAVE_LOCALE_NULL
-#endif
-
-/* Name of the default domain used for gettext(3) prior any call to
-   textdomain(3).  The default value for this is "messages".  */
-const char _nl_default_default_domain[] = "messages";
-
-/* Value used as the default domain for gettext(3).  */
-const char *_nl_current_default_domain = _nl_default_default_domain;
-
-/* Contains the default location of the message catalogs.  */
-const char _nl_default_dirname[] = GNULOCALEDIR;
-
-/* List with bindings of specific domains created by bindtextdomain()
-   calls.  */
-struct binding *_nl_domain_bindings;
-
-/* Prototypes for local functions.  */
-static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
-                              const char *msgid)) internal_function;
-static const char *category_to_name PARAMS ((int category)) internal_function;
-static const char *guess_category_value PARAMS ((int category,
-                                                const char *categoryname))
-     internal_function;
-
-
-/* For those loosing systems which don't have `alloca' we have to add
-   some additional code emulating it.  */
-#ifdef HAVE_ALLOCA
-/* Nothing has to be done.  */
-# define ADD_BLOCK(list, address) /* nothing */
-# define FREE_BLOCKS(list) /* nothing */
-#else
-struct block_list
-{
-  void *address;
-  struct block_list *next;
-};
-# define ADD_BLOCK(list, addr)                                               \
-  do {                                                                       \
-    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
-    /* If we cannot get a free block we cannot add the new element to        \
-       the list.  */                                                         \
-    if (newp != NULL) {                                                              \
-      newp->address = (addr);                                                \
-      newp->next = (list);                                                   \
-      (list) = newp;                                                         \
-    }                                                                        \
-  } while (0)
-# define FREE_BLOCKS(list)                                                   \
-  do {                                                                       \
-    while (list != NULL) {                                                   \
-      struct block_list *old = list;                                         \
-      list = list->next;                                                     \
-      free (old);                                                            \
-    }                                                                        \
-  } while (0)
-# undef alloca
-# define alloca(size) (malloc (size))
-#endif /* have alloca */
-
-
 /* Names for the libintl functions are a problem.  They must not clash
    with existing names and they should follow ANSI C.  But this source
    code is also used in GNU C Library where the names have a __
    prefix.  So we have to make a difference here.  */
 #ifdef _LIBC
 # define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
 #else
 # define DCGETTEXT dcgettext__
+# define DCIGETTEXT dcigettext__
 #endif
 
 /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
@@ -236,403 +49,10 @@ DCGETTEXT (domainname, msgid, category)
      const char *msgid;
      int category;
 {
-#ifndef HAVE_ALLOCA
-  struct block_list *block_list = NULL;
-#endif
-  struct loaded_l10nfile *domain;
-  struct binding *binding;
-  const char *categoryname;
-  const char *categoryvalue;
-  char *dirname, *xdomainname;
-  char *single_locale;
-  char *retval;
-  int saved_errno = errno;
-
-  /* If no real MSGID is given return NULL.  */
-  if (msgid == NULL)
-    return NULL;
-
-  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
-     CATEGORY is not LC_MESSAGES this might not make much sense but the
-     defintion left this undefined.  */
-  if (domainname == NULL)
-    domainname = _nl_current_default_domain;
-
-  /* First find matching binding.  */
-  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
-    {
-      int compare = strcmp (domainname, binding->domainname);
-      if (compare == 0)
-       /* We found it!  */
-       break;
-      if (compare < 0)
-       {
-         /* It is not in the list.  */
-         binding = NULL;
-         break;
-       }
-    }
-
-  if (binding == NULL)
-    dirname = (char *) _nl_default_dirname;
-  else if (binding->dirname[0] == '/')
-    dirname = binding->dirname;
-  else
-    {
-      /* We have a relative path.  Make it absolute now.  */
-      size_t dirname_len = strlen (binding->dirname) + 1;
-      size_t path_max;
-      char *ret;
-
-      path_max = (unsigned) PATH_MAX;
-      path_max += 2;           /* The getcwd docs say to do this.  */
-
-      dirname = (char *) alloca (path_max + dirname_len);
-      ADD_BLOCK (block_list, dirname);
-
-      __set_errno (0);
-      while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
-       {
-         path_max += PATH_INCR;
-         dirname = (char *) alloca (path_max + dirname_len);
-         ADD_BLOCK (block_list, dirname);
-         __set_errno (0);
-       }
-
-      if (ret == NULL)
-       {
-         /* We cannot get the current working directory.  Don't signal an
-            error but simply return the default string.  */
-         FREE_BLOCKS (block_list);
-         __set_errno (saved_errno);
-         return (char *) msgid;
-       }
-
-      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
-    }
-
-  /* Now determine the symbolic name of CATEGORY and its value.  */
-  categoryname = category_to_name (category);
-  categoryvalue = guess_category_value (category, categoryname);
-
-  xdomainname = (char *) alloca (strlen (categoryname)
-                                + strlen (domainname) + 5);
-  ADD_BLOCK (block_list, xdomainname);
-
-  stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
-                 domainname),
-         ".mo");
-
-  /* Creating working area.  */
-  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
-  ADD_BLOCK (block_list, single_locale);
-
-
-  /* Search for the given string.  This is a loop because we perhaps
-     got an ordered list of languages to consider for th translation.  */
-  while (1)
-    {
-      /* Make CATEGORYVALUE point to the next element of the list.  */
-      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
-       ++categoryvalue;
-      if (categoryvalue[0] == '\0')
-       {
-         /* The whole contents of CATEGORYVALUE has been searched but
-            no valid entry has been found.  We solve this situation
-            by implicitly appending a "C" entry, i.e. no translation
-            will take place.  */
-         single_locale[0] = 'C';
-         single_locale[1] = '\0';
-       }
-      else
-       {
-         char *cp = single_locale;
-         while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
-           *cp++ = *categoryvalue++;
-         *cp = '\0';
-       }
-
-      /* If the current locale value is C (or POSIX) we don't load a
-        domain.  Return the MSGID.  */
-      if (strcmp (single_locale, "C") == 0
-         || strcmp (single_locale, "POSIX") == 0)
-       {
-         FREE_BLOCKS (block_list);
-         __set_errno (saved_errno);
-         return (char *) msgid;
-       }
-
-
-      /* Find structure describing the message catalog matching the
-        DOMAINNAME and CATEGORY.  */
-      domain = _nl_find_domain (dirname, single_locale, xdomainname);
-
-      if (domain != NULL)
-       {
-         retval = find_msg (domain, msgid);
-
-         if (retval == NULL)
-           {
-             int cnt;
-
-             for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
-               {
-                 retval = find_msg (domain->successor[cnt], msgid);
-
-                 if (retval != NULL)
-                   break;
-               }
-           }
-
-         if (retval != NULL)
-           {
-             FREE_BLOCKS (block_list);
-             __set_errno (saved_errno);
-             return retval;
-           }
-       }
-    }
-  /* NOTREACHED */
+  return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
 }
 
 #ifdef _LIBC
 /* Alias for function name in GNU C Library.  */
 weak_alias (__dcgettext, dcgettext);
 #endif
-
-
-static char *
-internal_function
-find_msg (domain_file, msgid)
-     struct loaded_l10nfile *domain_file;
-     const char *msgid;
-{
-  size_t top, act, bottom;
-  struct loaded_domain *domain;
-
-  if (domain_file->decided == 0)
-    _nl_load_domain (domain_file);
-
-  if (domain_file->data == NULL)
-    return NULL;
-
-  domain = (struct loaded_domain *) domain_file->data;
-
-  /* Locate the MSGID and its translation.  */
-  if (domain->hash_size > 2 && domain->hash_tab != NULL)
-    {
-      /* Use the hashing table.  */
-      nls_uint32 len = strlen (msgid);
-      nls_uint32 hash_val = hash_string (msgid);
-      nls_uint32 idx = hash_val % domain->hash_size;
-      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
-      nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
-
-      if (nstr == 0)
-       /* Hash table entry is empty.  */
-       return NULL;
-
-      if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
-         && strcmp (msgid,
-                    domain->data + W (domain->must_swap,
-                                      domain->orig_tab[nstr - 1].offset)) == 0)
-       return (char *) domain->data + W (domain->must_swap,
-                                         domain->trans_tab[nstr - 1].offset);
-
-      while (1)
-       {
-         if (idx >= domain->hash_size - incr)
-           idx -= domain->hash_size - incr;
-         else
-           idx += incr;
-
-         nstr = W (domain->must_swap, domain->hash_tab[idx]);
-         if (nstr == 0)
-           /* Hash table entry is empty.  */
-           return NULL;
-
-         if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
-             && strcmp (msgid,
-                        domain->data + W (domain->must_swap,
-                                          domain->orig_tab[nstr - 1].offset))
-                == 0)
-           return (char *) domain->data
-             + W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
-       }
-      /* NOTREACHED */
-    }
-
-  /* Now we try the default method:  binary search in the sorted
-     array of messages.  */
-  bottom = 0;
-  act = 0;
-  top = domain->nstrings;
-  while (bottom < top)
-    {
-      int cmp_val;
-
-      act = (bottom + top) / 2;
-      cmp_val = strcmp (msgid, domain->data
-                              + W (domain->must_swap,
-                                   domain->orig_tab[act].offset));
-      if (cmp_val < 0)
-       top = act;
-      else if (cmp_val > 0)
-       bottom = act + 1;
-      else
-       break;
-    }
-
-  /* If an translation is found return this.  */
-  return bottom >= top ? NULL : (char *) domain->data
-                                + W (domain->must_swap,
-                                    domain->trans_tab[act].offset);
-}
-
-
-/* Return string representation of locale CATEGORY.  */
-static const char *
-internal_function
-category_to_name (category)
-     int category;
-{
-  const char *retval;
-
-  switch (category)
-  {
-#ifdef LC_COLLATE
-  case LC_COLLATE:
-    retval = "LC_COLLATE";
-    break;
-#endif
-#ifdef LC_CTYPE
-  case LC_CTYPE:
-    retval = "LC_CTYPE";
-    break;
-#endif
-#ifdef LC_MONETARY
-  case LC_MONETARY:
-    retval = "LC_MONETARY";
-    break;
-#endif
-#ifdef LC_NUMERIC
-  case LC_NUMERIC:
-    retval = "LC_NUMERIC";
-    break;
-#endif
-#ifdef LC_TIME
-  case LC_TIME:
-    retval = "LC_TIME";
-    break;
-#endif
-#ifdef LC_MESSAGES
-  case LC_MESSAGES:
-    retval = "LC_MESSAGES";
-    break;
-#endif
-#ifdef LC_RESPONSE
-  case LC_RESPONSE:
-    retval = "LC_RESPONSE";
-    break;
-#endif
-#ifdef LC_ALL
-  case LC_ALL:
-    /* This might not make sense but is perhaps better than any other
-       value.  */
-    retval = "LC_ALL";
-    break;
-#endif
-  default:
-    /* If you have a better idea for a default value let me know.  */
-    retval = "LC_XXX";
-  }
-
-  return retval;
-}
-
-/* Guess value of current locale from value of the environment variables.  */
-static const char *
-internal_function
-guess_category_value (category, categoryname)
-     int category;
-     const char *categoryname;
-{
-  const char *retval;
-  (void) category;  /* shut up compiler */
-  (void) categoryname;  /* ditto */
-
-  /* The highest priority value is the `LANGUAGE' environment
-     variable.  This is a GNU extension.  */
-  retval = getenv ("LANGUAGE");
-  if (retval != NULL && retval[0] != '\0')
-    return retval;
-
-  /* `LANGUAGE' is not set.  So we have to proceed with the POSIX
-     methods of looking to `LC_ALL', `LC_xxx', and `LANG'.  On some
-     systems this can be done by the `setlocale' function itself.  */
-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
-  return setlocale (category, NULL);
-#else
-  /* Setting of LC_ALL overwrites all other.  */
-  retval = getenv ("LC_ALL");
-  if (retval != NULL && retval[0] != '\0')
-    return retval;
-
-  /* Next comes the name of the desired category.  */
-  retval = getenv (categoryname);
-  if (retval != NULL && retval[0] != '\0')
-    return retval;
-
-  /* Last possibility is the LANG environment variable.  */
-  retval = getenv ("LANG");
-  if (retval != NULL && retval[0] != '\0')
-    return retval;
-
-  /* We use C as the default domain.  POSIX says this is implementation
-     defined.  */
-  return "C";
-#endif
-}
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library.  So we
-   avoid the non-standard function stpcpy.  In GNU C Library this
-   function is available, though.  Also allow the symbol HAVE_STPCPY
-   to be defined.  */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (dest, src)
-     char *dest;
-     const char *src;
-{
-  while ((*dest++ = *src++) != '\0')
-    /* Do nothing. */ ;
-  return dest - 1;
-}
-#endif
-
-
-#ifdef _LIBC
-/* If we want to free all resources we have to do some work at
-   program's end.  */
-static void __attribute__ ((unused))
-free_mem (void)
-{
-  struct binding *runp;
-
-  for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
-    {
-      free (runp->domainname);
-      if (runp->dirname != _nl_default_dirname)
-       /* Yes, this is a pointer comparison.  */
-       free (runp->dirname);
-    }
-
-  if (_nl_current_default_domain != _nl_default_default_domain)
-    /* Yes, again a pointer comparison.  */
-    free ((char *) _nl_current_default_domain);
-}
-
-text_set_element (__libc_subfreeres, free_mem);
-#endif
diff --git a/gcc/intl/dcigettext.c b/gcc/intl/dcigettext.c
new file mode 100644 (file)
index 0000000..5f69d74
--- /dev/null
@@ -0,0 +1,1262 @@
+/* Implementation of the internal dcigettext function.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE   1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include <string.h>
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* Alignment of types.  */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+    ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+   names than the internal variables in GNU libc, otherwise programs
+   using libintl.a cannot be linked statically.  */
+#if !defined _LIBC
+# define _nl_default_default_domain _nl_default_default_domain__
+# define _nl_current_default_domain _nl_current_default_domain__
+# define _nl_default_dirname _nl_default_dirname__
+# define _nl_domain_bindings _nl_domain_bindings__
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define getcwd __getcwd
+# ifndef stpcpy
+#  define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+#  define getcwd(buf, max) getwd (buf)
+# elif !defined HAVE_DECL_GETCWD
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try.  */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h.  */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+   PATH_MAX but might cause redefinition warnings when sys/param.h is
+   later included (as on MORE/BSD 4.3).  */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been.  */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_ABSOLUTE_PATH(P)  tests whether P is an absolute path.  If it is not,
+                        it may be concatenated to a directory pathname.
+   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* XPG3 defines the result of `setlocale (category, NULL)' as:
+   ``Directs `setlocale()' to query `category' and return the current
+     setting of `local'.''
+   However it does not specify the exact format.  Neither do SUSV2 and
+   ISO C 99.  So we can use this feature only on selected systems (e.g.
+   those using GNU C Library).  */
+#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
+# define HAVE_LOCALE_NULL
+#endif
+
+/* This is the type used for the search tree where known translations
+   are stored.  */
+struct known_translation_t
+{
+  /* Domain in which to search.  */
+  char *domainname;
+
+  /* The category.  */
+  int category;
+
+  /* State of the catalog counter at the point the string was found.  */
+  int counter;
+
+  /* Catalog where the string was found.  */
+  struct loaded_l10nfile *domain;
+
+  /* And finally the translation.  */
+  const char *translation;
+  size_t translation_length;
+
+  /* Pointer to the string in question.  */
+  char msgid[ZERO];
+};
+
+/* Root of the search tree with known translations.  We can use this
+   only if the system provides the `tsearch' function family.  */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+#  define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations.  */
+static int transcmp PARAMS ((const void *p1, const void *p2));
+static int
+transcmp (p1, p2)
+     const void *p1;
+     const void *p2;
+{
+  const struct known_translation_t *s1;
+  const struct known_translation_t *s2;
+  int result;
+
+  s1 = (const struct known_translation_t *) p1;
+  s2 = (const struct known_translation_t *) p2;
+
+  result = strcmp (s1->msgid, s2->msgid);
+  if (result == 0)
+    {
+      result = strcmp (s1->domainname, s2->domainname);
+      if (result == 0)
+       /* We compare the category last (though this is the cheapest
+          operation) since it is hopefully always the same (namely
+          LC_MESSAGES).  */
+       result = s1->category - s2->category;
+    }
+
+  return result;
+}
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+   textdomain(3).  The default value for this is "messages".  */
+const char _nl_default_default_domain[] = "messages";
+
+/* Value used as the default domain for gettext(3).  */
+const char *_nl_current_default_domain = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs.  */
+const char _nl_default_dirname[] = LOCALEDIR;
+
+/* List with bindings of specific domains created by bindtextdomain()
+   calls.  */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions.  */
+static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
+                                   unsigned long int n,
+                                   const char *translation,
+                                   size_t translation_len))
+     internal_function;
+static unsigned long int plural_eval PARAMS ((struct expression *pexp,
+                                             unsigned long int n))
+     internal_function;
+static const char *category_to_name PARAMS ((int category)) internal_function;
+static const char *guess_category_value PARAMS ((int category,
+                                                const char *categoryname))
+     internal_function;
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations.  */
+typedef struct transmem_list
+{
+  struct transmem_list *next;
+  char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT dcigettext__
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock)
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+   easier methods therefore we make a difference here.  */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+#  define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+#  define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+#  define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+#  define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+  if (enable_secure == 0)                                                    \
+    {                                                                        \
+      if (getuid () != geteuid () || getgid () != getegid ())                \
+       enable_secure = 1;                                                    \
+      else                                                                   \
+       enable_secure = -1;                                                   \
+    }
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   CATEGORY locale and, if PLURAL is nonzero, search over string
+   depending on the plural form determined by N.  */
+char *
+DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     int plural;
+     unsigned long int n;
+     int category;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  struct loaded_l10nfile *domain;
+  struct binding *binding;
+  const char *categoryname;
+  const char *categoryvalue;
+  char *dirname, *xdomainname;
+  char *single_locale;
+  char *retval;
+  size_t retlen;
+  int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+  struct known_translation_t *search;
+  struct known_translation_t **foundp = NULL;
+  size_t msgid_len;
+#endif
+  size_t domainname_len;
+
+  /* If no real MSGID is given return NULL.  */
+  if (msgid1 == NULL)
+    return NULL;
+
+  __libc_rwlock_rdlock (_nl_state_lock);
+
+  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
+     CATEGORY is not LC_MESSAGES this might not make much sense but the
+     definition left this undefined.  */
+  if (domainname == NULL)
+    domainname = _nl_current_default_domain;
+
+#if defined HAVE_TSEARCH || defined _LIBC
+  msgid_len = strlen (msgid1) + 1;
+
+  /* Try to find the translation among those which we found at
+     some time.  */
+  search = (struct known_translation_t *)
+          alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+  memcpy (search->msgid, msgid1, msgid_len);
+  search->domainname = (char *) domainname;
+  search->category = category;
+
+  foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+  if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+    {
+      /* Now deal with plural.  */
+      if (plural)
+       retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+                               (*foundp)->translation_length);
+      else
+       retval = (char *) (*foundp)->translation;
+
+      __libc_rwlock_unlock (_nl_state_lock);
+      return retval;
+    }
+#endif
+
+  /* Preserve the `errno' value.  */
+  saved_errno = errno;
+
+  /* See whether this is a SUID binary or not.  */
+  DETERMINE_SECURE;
+
+  /* First find matching binding.  */
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (binding == NULL)
+    dirname = (char *) _nl_default_dirname;
+  else if (IS_ABSOLUTE_PATH (binding->dirname))
+    dirname = binding->dirname;
+  else
+    {
+      /* We have a relative path.  Make it absolute now.  */
+      size_t dirname_len = strlen (binding->dirname) + 1;
+      size_t path_max;
+      char *ret;
+
+      path_max = (unsigned int) PATH_MAX;
+      path_max += 2;           /* The getcwd docs say to do this.  */
+
+      for (;;)
+       {
+         dirname = (char *) alloca (path_max + dirname_len);
+         ADD_BLOCK (block_list, dirname);
+
+         __set_errno (0);
+         ret = getcwd (dirname, path_max);
+         if (ret != NULL || errno != ERANGE)
+           break;
+
+         path_max += path_max / 2;
+         path_max += PATH_INCR;
+       }
+
+      if (ret == NULL)
+       {
+         /* We cannot get the current working directory.  Don't signal an
+            error but simply return the default string.  */
+         FREE_BLOCKS (block_list);
+         __libc_rwlock_unlock (_nl_state_lock);
+         __set_errno (saved_errno);
+         return (plural == 0
+                 ? (char *) msgid1
+                 /* Use the Germanic plural rule.  */
+                 : n == 1 ? (char *) msgid1 : (char *) msgid2);
+       }
+
+      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+    }
+
+  /* Now determine the symbolic name of CATEGORY and its value.  */
+  categoryname = category_to_name (category);
+  categoryvalue = guess_category_value (category, categoryname);
+
+  domainname_len = strlen (domainname);
+  xdomainname = (char *) alloca (strlen (categoryname)
+                                + domainname_len + 5);
+  ADD_BLOCK (block_list, xdomainname);
+
+  stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+                 domainname, domainname_len),
+         ".mo");
+
+  /* Creating working area.  */
+  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+  ADD_BLOCK (block_list, single_locale);
+
+
+  /* Search for the given string.  This is a loop because we perhaps
+     got an ordered list of languages to consider for the translation.  */
+  while (1)
+    {
+      /* Make CATEGORYVALUE point to the next element of the list.  */
+      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+       ++categoryvalue;
+      if (categoryvalue[0] == '\0')
+       {
+         /* The whole contents of CATEGORYVALUE has been searched but
+            no valid entry has been found.  We solve this situation
+            by implicitly appending a "C" entry, i.e. no translation
+            will take place.  */
+         single_locale[0] = 'C';
+         single_locale[1] = '\0';
+       }
+      else
+       {
+         char *cp = single_locale;
+         while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+           *cp++ = *categoryvalue++;
+         *cp = '\0';
+
+         /* When this is a SUID binary we must not allow accessing files
+            outside the dedicated directories.  */
+         if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+           /* Ingore this entry.  */
+           continue;
+       }
+
+      /* If the current locale value is C (or POSIX) we don't load a
+        domain.  Return the MSGID.  */
+      if (strcmp (single_locale, "C") == 0
+         || strcmp (single_locale, "POSIX") == 0)
+       {
+         FREE_BLOCKS (block_list);
+         __libc_rwlock_unlock (_nl_state_lock);
+         __set_errno (saved_errno);
+         return (plural == 0
+                 ? (char *) msgid1
+                 /* Use the Germanic plural rule.  */
+                 : n == 1 ? (char *) msgid1 : (char *) msgid2);
+       }
+
+
+      /* Find structure describing the message catalog matching the
+        DOMAINNAME and CATEGORY.  */
+      domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+      if (domain != NULL)
+       {
+         retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+         if (retval == NULL)
+           {
+             int cnt;
+
+             for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+               {
+                 retval = _nl_find_msg (domain->successor[cnt], binding,
+                                        msgid1, &retlen);
+
+                 if (retval != NULL)
+                   {
+                     domain = domain->successor[cnt];
+                     break;
+                   }
+               }
+           }
+
+         if (retval != NULL)
+           {
+             /* Found the translation of MSGID1 in domain DOMAIN:
+                starting at RETVAL, RETLEN bytes.  */
+             FREE_BLOCKS (block_list);
+             __set_errno (saved_errno);
+#if defined HAVE_TSEARCH || defined _LIBC
+             if (foundp == NULL)
+               {
+                 /* Create a new entry and add it to the search tree.  */
+                 struct known_translation_t *newp;
+
+                 newp = (struct known_translation_t *)
+                   malloc (offsetof (struct known_translation_t, msgid)
+                           + msgid_len + domainname_len + 1);
+                 if (newp != NULL)
+                   {
+                     newp->domainname =
+                       mempcpy (newp->msgid, msgid1, msgid_len);
+                     memcpy (newp->domainname, domainname, domainname_len + 1);
+                     newp->category = category;
+                     newp->counter = _nl_msg_cat_cntr;
+                     newp->domain = domain;
+                     newp->translation = retval;
+                     newp->translation_length = retlen;
+
+                     /* Insert the entry in the search tree.  */
+                     foundp = (struct known_translation_t **)
+                       tsearch (newp, &root, transcmp);
+                     if (foundp == NULL
+                         || __builtin_expect (*foundp != newp, 0))
+                       /* The insert failed.  */
+                       free (newp);
+                   }
+               }
+             else
+               {
+                 /* We can update the existing entry.  */
+                 (*foundp)->counter = _nl_msg_cat_cntr;
+                 (*foundp)->domain = domain;
+                 (*foundp)->translation = retval;
+                 (*foundp)->translation_length = retlen;
+               }
+#endif
+             /* Now deal with plural.  */
+             if (plural)
+               retval = plural_lookup (domain, n, retval, retlen);
+
+             __libc_rwlock_unlock (_nl_state_lock);
+             return retval;
+           }
+       }
+    }
+  /* NOTREACHED */
+}
+
+
+char *
+internal_function
+_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
+     struct loaded_l10nfile *domain_file;
+     struct binding *domainbinding;
+     const char *msgid;
+     size_t *lengthp;
+{
+  struct loaded_domain *domain;
+  size_t act;
+  char *result;
+  size_t resultlen;
+
+  if (domain_file->decided == 0)
+    _nl_load_domain (domain_file, domainbinding);
+
+  if (domain_file->data == NULL)
+    return NULL;
+
+  domain = (struct loaded_domain *) domain_file->data;
+
+  /* Locate the MSGID and its translation.  */
+  if (domain->hash_size > 2 && domain->hash_tab != NULL)
+    {
+      /* Use the hashing table.  */
+      nls_uint32 len = strlen (msgid);
+      nls_uint32 hash_val = hash_string (msgid);
+      nls_uint32 idx = hash_val % domain->hash_size;
+      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+      while (1)
+       {
+         nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
+
+         if (nstr == 0)
+           /* Hash table entry is empty.  */
+           return NULL;
+
+         /* Compare msgid with the original string at index nstr-1.
+            We compare the lengths with >=, not ==, because plural entries
+            are represented by strings with an embedded NUL.  */
+         if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
+             && (strcmp (msgid,
+                         domain->data + W (domain->must_swap,
+                                           domain->orig_tab[nstr - 1].offset))
+                 == 0))
+           {
+             act = nstr - 1;
+             goto found;
+           }
+
+         if (idx >= domain->hash_size - incr)
+           idx -= domain->hash_size - incr;
+         else
+           idx += incr;
+       }
+      /* NOTREACHED */
+    }
+  else
+    {
+      /* Try the default method:  binary search in the sorted array of
+        messages.  */
+      size_t top, bottom;
+
+      bottom = 0;
+      act = 0;
+      top = domain->nstrings;
+      while (bottom < top)
+       {
+         int cmp_val;
+
+         act = (bottom + top) / 2;
+         cmp_val = strcmp (msgid, (domain->data
+                                   + W (domain->must_swap,
+                                        domain->orig_tab[act].offset)));
+         if (cmp_val < 0)
+           top = act;
+         else if (cmp_val > 0)
+           bottom = act + 1;
+         else
+           goto found;
+       }
+      /* No translation was found.  */
+      return NULL;
+    }
+
+ found:
+  /* The translation was found at index ACT.  If we have to convert the
+     string to use a different character set, this is the time.  */
+  result = ((char *) domain->data
+           + W (domain->must_swap, domain->trans_tab[act].offset));
+  resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+
+#if defined _LIBC || HAVE_ICONV
+  if (domain->codeset_cntr
+      != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+    {
+      /* The domain's codeset has changed through bind_textdomain_codeset()
+        since the message catalog was initialized or last accessed.  We
+        have to reinitialize the converter.  */
+      _nl_free_domain_conv (domain);
+      _nl_init_domain_conv (domain_file, domain, domainbinding);
+    }
+
+  if (
+# ifdef _LIBC
+      domain->conv != (__gconv_t) -1
+# else
+#  if HAVE_ICONV
+      domain->conv != (iconv_t) -1
+#  endif
+# endif
+      )
+    {
+      /* We are supposed to do a conversion.  First allocate an
+        appropriate table with the same structure as the table
+        of translations in the file, where we can put the pointers
+        to the converted strings in.
+        There is a slight complication with plural entries.  They
+        are represented by consecutive NUL terminated strings.  We
+        handle this case by converting RESULTLEN bytes, including
+        NULs.  */
+
+      if (domain->conv_tab == NULL
+         && ((domain->conv_tab = (char **) calloc (domain->nstrings,
+                                                   sizeof (char *)))
+             == NULL))
+       /* Mark that we didn't succeed allocating a table.  */
+       domain->conv_tab = (char **) -1;
+
+      if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+       /* Nothing we can do, no more memory.  */
+       goto converted;
+
+      if (domain->conv_tab[act] == NULL)
+       {
+         /* We haven't used this string so far, so it is not
+            translated yet.  Do this now.  */
+         /* We use a bit more efficient memory handling.
+            We allocate always larger blocks which get used over
+            time.  This is faster than many small allocations.   */
+         __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE    4080
+         static unsigned char *freemem;
+         static size_t freemem_size;
+
+         const unsigned char *inbuf;
+         unsigned char *outbuf;
+         int malloc_count;
+# ifndef _LIBC
+         transmem_block_t *transmem_list = NULL;
+# endif
+
+         __libc_lock_lock (lock);
+
+         inbuf = (const unsigned char *) result;
+         outbuf = freemem + sizeof (size_t);
+
+         malloc_count = 0;
+         while (1)
+           {
+             transmem_block_t *newmem;
+# ifdef _LIBC
+             size_t non_reversible;
+             int res;
+
+             if (freemem_size < sizeof (size_t))
+               goto resize_freemem;
+
+             res = __gconv (domain->conv,
+                            &inbuf, inbuf + resultlen,
+                            &outbuf,
+                            outbuf + freemem_size - sizeof (size_t),
+                            &non_reversible);
+
+             if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+               break;
+
+             if (res != __GCONV_FULL_OUTPUT)
+               {
+                 __libc_lock_unlock (lock);
+                 goto converted;
+               }
+
+             inbuf = result;
+# else
+#  if HAVE_ICONV
+             const char *inptr = (const char *) inbuf;
+             size_t inleft = resultlen;
+             char *outptr = (char *) outbuf;
+             size_t outleft;
+
+             if (freemem_size < sizeof (size_t))
+               goto resize_freemem;
+
+             outleft = freemem_size - sizeof (size_t);
+             if (iconv (domain->conv,
+                        (ICONV_CONST char **) &inptr, &inleft,
+                        &outptr, &outleft)
+                 != (size_t) (-1))
+               {
+                 outbuf = (unsigned char *) outptr;
+                 break;
+               }
+             if (errno != E2BIG)
+               {
+                 __libc_lock_unlock (lock);
+                 goto converted;
+               }
+#  endif
+# endif
+
+           resize_freemem:
+             /* We must allocate a new buffer or resize the old one.  */
+             if (malloc_count > 0)
+               {
+                 ++malloc_count;
+                 freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+                 newmem = (transmem_block_t *) realloc (transmem_list,
+                                                        freemem_size);
+# ifdef _LIBC
+                 if (newmem != NULL)
+                   transmem_list = transmem_list->next;
+                 else
+                   {
+                     struct transmem_list *old = transmem_list;
+
+                     transmem_list = transmem_list->next;
+                     free (old);
+                   }
+# endif
+               }
+             else
+               {
+                 malloc_count = 1;
+                 freemem_size = INITIAL_BLOCK_SIZE;
+                 newmem = (transmem_block_t *) malloc (freemem_size);
+               }
+             if (__builtin_expect (newmem == NULL, 0))
+               {
+                 freemem = NULL;
+                 freemem_size = 0;
+                 __libc_lock_unlock (lock);
+                 goto converted;
+               }
+
+# ifdef _LIBC
+             /* Add the block to the list of blocks we have to free
+                 at some point.  */
+             newmem->next = transmem_list;
+             transmem_list = newmem;
+
+             freemem = newmem->data;
+             freemem_size -= offsetof (struct transmem_list, data);
+# else
+             transmem_list = newmem;
+             freemem = newmem;
+# endif
+
+             outbuf = freemem + sizeof (size_t);
+           }
+
+         /* We have now in our buffer a converted string.  Put this
+            into the table of conversions.  */
+         *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+         domain->conv_tab[act] = (char *) freemem;
+         /* Shrink freemem, but keep it aligned.  */
+         freemem_size -= outbuf - freemem;
+         freemem = outbuf;
+         freemem += freemem_size & (alignof (size_t) - 1);
+         freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+         __libc_lock_unlock (lock);
+       }
+
+      /* Now domain->conv_tab[act] contains the translation of all
+        the plural variants.  */
+      result = domain->conv_tab[act] + sizeof (size_t);
+      resultlen = *(size_t *) domain->conv_tab[act];
+    }
+
+ converted:
+  /* The result string is converted.  */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+  *lengthp = resultlen;
+  return result;
+}
+
+
+/* Look up a plural variant.  */
+static char *
+internal_function
+plural_lookup (domain, n, translation, translation_len)
+     struct loaded_l10nfile *domain;
+     unsigned long int n;
+     const char *translation;
+     size_t translation_len;
+{
+  struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+  unsigned long int index;
+  const char *p;
+
+  index = plural_eval (domaindata->plural, n);
+  if (index >= domaindata->nplurals)
+    /* This should never happen.  It means the plural expression and the
+       given maximum value do not match.  */
+    index = 0;
+
+  /* Skip INDEX strings at TRANSLATION.  */
+  p = translation;
+  while (index-- > 0)
+    {
+#ifdef _LIBC
+      p = __rawmemchr (p, '\0');
+#else
+      p = strchr (p, '\0');
+#endif
+      /* And skip over the NUL byte.  */
+      p++;
+
+      if (p >= translation + translation_len)
+       /* This should never happen.  It means the plural expression
+          evaluated to a value larger than the number of variants
+          available for MSGID1.  */
+       return (char *) translation;
+    }
+  return (char *) p;
+}
+
+
+/* Function to evaluate the plural expression and return an index value.  */
+static unsigned long int
+internal_function
+plural_eval (pexp, n)
+     struct expression *pexp;
+     unsigned long int n;
+{
+  switch (pexp->nargs)
+    {
+    case 0:
+      switch (pexp->operation)
+       {
+       case var:
+         return n;
+       case num:
+         return pexp->val.num;
+       default:
+         break;
+       }
+      /* NOTREACHED */
+      break;
+    case 1:
+      {
+       /* pexp->operation must be lnot.  */
+       unsigned long int arg = plural_eval (pexp->val.args[0], n);
+       return ! arg;
+      }
+    case 2:
+      {
+       unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+       if (pexp->operation == lor)
+         return leftarg || plural_eval (pexp->val.args[1], n);
+       else if (pexp->operation == land)
+         return leftarg && plural_eval (pexp->val.args[1], n);
+       else
+         {
+           unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+           switch (pexp->operation)
+             {
+             case mult:
+               return leftarg * rightarg;
+             case divide:
+               return leftarg / rightarg;
+             case module:
+               return leftarg % rightarg;
+             case plus:
+               return leftarg + rightarg;
+             case minus:
+               return leftarg - rightarg;
+             case less_than:
+               return leftarg < rightarg;
+             case greater_than:
+               return leftarg > rightarg;
+             case less_or_equal:
+               return leftarg <= rightarg;
+             case greater_or_equal:
+               return leftarg >= rightarg;
+             case equal:
+               return leftarg == rightarg;
+             case not_equal:
+               return leftarg != rightarg;
+             default:
+               break;
+             }
+         }
+       /* NOTREACHED */
+       break;
+      }
+    case 3:
+      {
+       /* pexp->operation must be qmop.  */
+       unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+       return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+      }
+    }
+  /* NOTREACHED */
+  return 0;
+}
+
+
+/* Return string representation of locale CATEGORY.  */
+static const char *
+internal_function
+category_to_name (category)
+     int category;
+{
+  const char *retval;
+
+  switch (category)
+  {
+#ifdef LC_COLLATE
+  case LC_COLLATE:
+    retval = "LC_COLLATE";
+    break;
+#endif
+#ifdef LC_CTYPE
+  case LC_CTYPE:
+    retval = "LC_CTYPE";
+    break;
+#endif
+#ifdef LC_MONETARY
+  case LC_MONETARY:
+    retval = "LC_MONETARY";
+    break;
+#endif
+#ifdef LC_NUMERIC
+  case LC_NUMERIC:
+    retval = "LC_NUMERIC";
+    break;
+#endif
+#ifdef LC_TIME
+  case LC_TIME:
+    retval = "LC_TIME";
+    break;
+#endif
+#ifdef LC_MESSAGES
+  case LC_MESSAGES:
+    retval = "LC_MESSAGES";
+    break;
+#endif
+#ifdef LC_RESPONSE
+  case LC_RESPONSE:
+    retval = "LC_RESPONSE";
+    break;
+#endif
+#ifdef LC_ALL
+  case LC_ALL:
+    /* This might not make sense but is perhaps better than any other
+       value.  */
+    retval = "LC_ALL";
+    break;
+#endif
+  default:
+    /* If you have a better idea for a default value let me know.  */
+    retval = "LC_XXX";
+  }
+
+  return retval;
+}
+
+/* Guess value of current locale from value of the environment variables.  */
+static const char *
+internal_function
+guess_category_value (category, categoryname)
+     int category;
+     const char *categoryname;
+{
+  const char *language;
+  const char *retval;
+  (void) category;  /* shut up compiler */
+  (void) categoryname;  /* ditto */
+  
+  /* The highest priority value is the `LANGUAGE' environment
+     variable.  But we don't use the value if the currently selected
+     locale is the C locale.  This is a GNU extension.  */
+  language = getenv ("LANGUAGE");
+  if (language != NULL && language[0] == '\0')
+    language = NULL;
+
+  /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+     `LC_xxx', and `LANG'.  On some systems this can be done by the
+     `setlocale' function itself.  */
+#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL)
+  retval = setlocale (category, NULL);
+#else
+  /* Setting of LC_ALL overwrites all other.  */
+  retval = getenv ("LC_ALL");
+  if (retval == NULL || retval[0] == '\0')
+    {
+      /* Next comes the name of the desired category.  */
+      retval = getenv (categoryname);
+      if (retval == NULL || retval[0] == '\0')
+       {
+         /* Last possibility is the LANG environment variable.  */
+         retval = getenv ("LANG");
+         if (retval == NULL || retval[0] == '\0')
+           /* We use C as the default domain.  POSIX says this is
+              implementation defined.  */
+           return "C";
+       }
+    }
+#endif
+
+  return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (dest, src, n)
+     void *dest;
+     const void *src;
+     size_t n;
+{
+  return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+   program's end.  */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  void *old;
+
+  while (_nl_domain_bindings != NULL)
+    {
+      struct binding *oldp = _nl_domain_bindings;
+      _nl_domain_bindings = _nl_domain_bindings->next;
+      if (oldp->dirname != _nl_default_dirname)
+       /* Yes, this is a pointer comparison.  */
+       free (oldp->dirname);
+      free (oldp->codeset);
+      free (oldp);
+    }
+
+  if (_nl_current_default_domain != _nl_default_default_domain)
+    /* Yes, again a pointer comparison.  */
+    free ((char *) _nl_current_default_domain);
+
+  /* Remove the search tree with the known translations.  */
+  __tdestroy (root, free);
+  root = NULL;
+
+  while (transmem_list != NULL)
+    {
+      old = transmem_list;
+      transmem_list = transmem_list->next;
+      free (old);
+    }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/gcc/intl/dcngettext.c b/gcc/intl/dcngettext.c
new file mode 100644 (file)
index 0000000..c16af21
--- /dev/null
@@ -0,0 +1,60 @@
+/* Implementation of the dcngettext(3) function.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT dcngettext__
+# define DCIGETTEXT dcigettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCNGETTEXT (domainname, msgid1, msgid2, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+     int category;
+{
+  return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dcngettext, dcngettext);
+#endif
index 0510c2b..3651207 100644 (file)
@@ -1,32 +1,32 @@
-/* Implementation of the dgettext(3) function
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Implementation of the dgettext(3) function.
+   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#if defined HAVE_LOCALE_H || defined _LIBC
-# include <locale.h>
-#endif
+#include <locale.h>
 
+#include "gettextP.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
-# include "libgettext.h"
+# include "libgnuintl.h"
 #endif
 
 /* @@ end of prolog @@ */
diff --git a/gcc/intl/dngettext.c b/gcc/intl/dngettext.c
new file mode 100644 (file)
index 0000000..f214e95
--- /dev/null
@@ -0,0 +1,61 @@
+/* Implementation of the dngettext(3) function.
+   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <locale.h>
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT dngettext__
+# define DCNGETTEXT dcngettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale and skip message according to the plural form.  */
+char *
+DNGETTEXT (domainname, msgid1, msgid2, n)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dngettext, dngettext);
+#endif
index 5186d1f..2985064 100644 (file)
@@ -1,33 +1,27 @@
-/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#endif
-
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-#endif
+#include <stdlib.h>
+#include <string.h>
 #include <sys/types.h>
 
 #include "loadinfo.h"
 
 /* @@ end of prolog @@ */
 
+char *
+_nl_find_language (name)
+     const char *name;
+{
+  while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+        && name[0] != '+' && name[0] != ',')
+    ++name;
+
+  return (char *) name;
+}
+
+
 int
 _nl_explode_name (name, language, modifier, territory, codeset,
                  normalized_codeset, special, sponsor, revision)
@@ -74,9 +80,7 @@ _nl_explode_name (name, language, modifier, territory, codeset,
   mask = 0;
   syntax = undecided;
   *language = cp = name;
-  while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
-        && cp[0] != '+' && cp[0] != ',')
-    ++cp;
+  cp = _nl_find_language (*language);
 
   if (*language == cp)
     /* This does not make sense: language has to be specified.  Use
@@ -108,9 +112,8 @@ _nl_explode_name (name, language, modifier, territory, codeset,
 
          if (*codeset != cp && (*codeset)[0] != '\0')
            {
-             *normalized_codeset = _nl_normalize_codeset (
-                                       *((unsigned char **) codeset),
-                                       cp - *codeset);
+             *normalized_codeset = _nl_normalize_codeset (*codeset,
+                                                          cp - *codeset);
              if (strcmp (*codeset, *normalized_codeset) == 0)
                free ((char *) *normalized_codeset);
              else
index 81ea29b..2f103d5 100644 (file)
@@ -1,64 +1,40 @@
 /* Handle list of needed message catalogs
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.org>, 1995.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#include <ctype.h>
-#include <errno.h>
 #include <stdio.h>
 #include <sys/types.h>
-
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-# ifdef HAVE_MALLOC_H
-#  include <malloc.h>
-# else
-void free ();
-# endif
-#endif
-
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-# ifndef memcpy
-#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
-#endif
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-#  define strchr index
-# endif
-#endif
+#include <stdlib.h>
+#include <string.h>
 
 #if defined HAVE_UNISTD_H || defined _LIBC
 # include <unistd.h>
 #endif
 
-#include "gettext.h"
 #include "gettextP.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
-# include "libgettext.h"
+# include "libgnuintl.h"
 #endif
 
 /* @@ end of prolog @@ */
@@ -71,10 +47,11 @@ static struct loaded_l10nfile *_nl_loaded_domains;
    established bindings.  */
 struct loaded_l10nfile *
 internal_function
-_nl_find_domain (dirname, locale, domainname)
+_nl_find_domain (dirname, locale, domainname, domainbinding)
      const char *dirname;
      char *locale;
      const char *domainname;
+     struct binding *domainbinding;
 {
   struct loaded_l10nfile *retval;
   const char *language;
@@ -120,7 +97,7 @@ _nl_find_domain (dirname, locale, domainname)
       int cnt;
 
       if (retval->decided == 0)
-       _nl_load_domain (retval);
+       _nl_load_domain (retval, domainbinding);
 
       if (retval->data != NULL)
        return retval;
@@ -128,7 +105,7 @@ _nl_find_domain (dirname, locale, domainname)
       for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
        {
          if (retval->successor[cnt]->decided == 0)
-           _nl_load_domain (retval->successor[cnt]);
+           _nl_load_domain (retval->successor[cnt], domainbinding);
 
          if (retval->successor[cnt]->data != NULL)
            break;
@@ -175,14 +152,14 @@ _nl_find_domain (dirname, locale, domainname)
     return NULL;
 
   if (retval->decided == 0)
-    _nl_load_domain (retval);
+    _nl_load_domain (retval, domainbinding);
   if (retval->data == NULL)
     {
       int cnt;
       for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
        {
          if (retval->successor[cnt]->decided == 0)
-           _nl_load_domain (retval->successor[cnt]);
+           _nl_load_domain (retval->successor[cnt], domainbinding);
          if (retval->successor[cnt]->data != NULL)
            break;
        }
@@ -192,6 +169,10 @@ _nl_find_domain (dirname, locale, domainname)
   if (alias_value != NULL)
     free (locale);
 
+  /* The space for normalized_codeset is dynamically allocated.  Free it.  */
+  if (mask & XPG_NORM_CODESET)
+    free ((void *) normalized_codeset);
+
   return retval;
 }
 
@@ -208,6 +189,7 @@ free_mem (void)
       if (runp->data != NULL)
        _nl_unload_domain ((struct loaded_domain *) runp->data);
       runp = runp->next;
+      free ((char *) here->filename);
       free (here);
     }
 }
index d929f98..22a6c24 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of gettext(3) function.
-   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 # define __need_NULL
 # include <stddef.h>
 #else
-# ifdef STDC_HEADERS
-#  include <stdlib.h>          /* Just for NULL.  */
-# else
-#  ifdef HAVE_STRING_H
-#   include <string.h>
-#  else
-#   define NULL ((void *) 0)
-#  endif
-# endif
+# include <stdlib.h>           /* Just for NULL.  */
 #endif
 
+#include "gettextP.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
-# include "libgettext.h"
+# include "libgnuintl.h"
 #endif
 
 /* @@ end of prolog @@ */
    prefix.  So we have to make a difference here.  */
 #ifdef _LIBC
 # define GETTEXT __gettext
-# define DGETTEXT __dgettext
+# define DCGETTEXT __dcgettext
 #else
 # define GETTEXT gettext__
-# define DGETTEXT dgettext__
+# define DCGETTEXT dcgettext__
 #endif
 
 /* Look up MSGID in the current default message catalog for the current
@@ -61,7 +55,7 @@ char *
 GETTEXT (msgid)
      const char *msgid;
 {
-  return DGETTEXT (NULL, msgid);
+  return DCGETTEXT (NULL, msgid, LC_MESSAGES);
 }
 
 #ifdef _LIBC
index 7daee94..4cf083d 100644 (file)
@@ -1,26 +1,24 @@
-/* Internal header for GNU gettext internationalization functions.
-   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+/* Description of GNU message catalog format: general file layout.
+   Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
    You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifndef _GETTEXT_H
 #define _GETTEXT_H 1
 
-#include <stdio.h>
-
 #if HAVE_LIMITS_H || _LIBC
 # include <limits.h>
 #endif
 /* The following contortions are an attempt to use the C preprocessor
    to determine an unsigned integral type that is 32 bits wide.  An
    alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
-   doing that would require that the configure script compile and *run*
-   the resulting executable.  Locally running cross-compiled executables
-   is usually not possible.  We use the maximum values for signed int's
-   for the test to avoid using `U' suffixes.  */
+   as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+   when cross-compiling.  We use the maximum values for signed ints
+   for the test to avoid using U suffixes.  */
 
 #define INT_MAX_32_BITS 2147483647
 
    (that certainly have <limits.h>) have 64+-bit integral types.  */
 
 #ifndef INT_MAX
-# define INT_MAX INT_MAX_32_BITS
+# define INT_MAX UINT_MAX_32_BITS
 #endif
 
 #if INT_MAX == INT_MAX_32_BITS
-typedef unsigned nls_uint32;
+typedef unsigned int nls_uint32;
 #else
 # if SHRT_MAX == INT_MAX_32_BITS
 typedef unsigned short nls_uint32;
index 1b69b28..43de1cd 100644 (file)
@@ -1,26 +1,39 @@
-/* Header describing internals of gettext library
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+/* Header describing internals of libintl library.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifndef _GETTEXTP_H
 #define _GETTEXTP_H
 
+#include <stddef.h>            /* Get size_t.  */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+#  include <iconv.h>
+# endif
+#endif
+
 #include "loadinfo.h"
 
+#include "gettext.h"           /* Get nls_uint32.  */
+
 /* @@ end of prolog @@ */
 
 #ifndef PARAMS
 # define internal_function
 #endif
 
+/* Tell the compiler when a conditional or integer expression is
+   almost always true or almost always false.  */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
 #ifndef W
 # define W(flag, data) ((flag) ? SWAP (data) : (data))
 #endif
 # include <byteswap.h>
 # define SWAP(i) bswap_32 (i)
 #else
-static nls_uint32 SWAP PARAMS ((unsigned int i));
-
 static inline nls_uint32
 SWAP (i)
-     unsigned int i;
+     nls_uint32 i;
 {
-  nls_uint32 x = (nls_uint32) i;
-  return (x << 24) | ((x & 0xff00) << 8) | ((x >> 8) & 0xff00) | (x >> 24);
+  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
 }
 #endif
 
 
+/* This is the representation of the expressions to determine the
+   plural form.  */
+struct expression
+{
+  int nargs;                   /* Number of arguments.  */
+  enum operator
+  {
+    /* Without arguments:  */
+    var,                       /* The variable "n".  */
+    num,                       /* Decimal number.  */
+    /* Unary operators:  */
+    lnot,                      /* Logical NOT.  */
+    /* Binary operators:  */
+    mult,                      /* Multiplication.  */
+    divide,                    /* Division.  */
+    module,                    /* Module operation.  */
+    plus,                      /* Addition.  */
+    minus,                     /* Subtraction.  */
+    less_than,                 /* Comparison.  */
+    greater_than,              /* Comparison.  */
+    less_or_equal,             /* Comparison.  */
+    greater_or_equal,          /* Comparison.  */
+    equal,                     /* Comparision for equality.  */
+    not_equal,                 /* Comparision for inequality.  */
+    land,                      /* Logical AND.  */
+    lor,                       /* Logical OR.  */
+    /* Ternary operators:  */
+    qmop                       /* Question mark operator.  */
+  } operation;
+  union
+  {
+    unsigned long int num;     /* Number value for `num'.  */
+    struct expression *args[3];        /* Up to three arguments.  */
+  } val;
+};
+
+/* This is the data structure to pass information to the parser and get
+   the result in a thread-safe way.  */
+struct parse_args
+{
+  const char *cp;
+  struct expression *res;
+};
+
+
+/* The representation of an opened message catalog.  */
 struct loaded_domain
 {
   const char *data;
@@ -67,23 +129,123 @@ struct loaded_domain
   struct string_desc *trans_tab;
   nls_uint32 hash_size;
   nls_uint32 *hash_tab;
+  int codeset_cntr;
+#ifdef _LIBC
+  __gconv_t conv;
+#else
+# if HAVE_ICONV
+  iconv_t conv;
+# endif
+#endif
+  char **conv_tab;
+
+  struct expression *plural;
+  unsigned long int nplurals;
 };
 
+/* We want to allocate a string at the end of the struct.  But ISO C
+   doesn't allow zero sized arrays.  */
+#ifdef __GNUC__
+# define ZERO 0
+#else
+# define ZERO 1
+#endif
+
+/* A set of settings bound to a message domain.  Used to store settings
+   from bindtextdomain() and bind_textdomain_codeset().  */
 struct binding
 {
   struct binding *next;
-  char *domainname;
   char *dirname;
+  int codeset_cntr;    /* Incremented each time codeset changes.  */
+  char *codeset;
+  char domainname[ZERO];
 };
 
+/* A counter which is incremented each time some previous translations
+   become invalid.
+   This variable is part of the external ABI of the GNU libintl.  */
+extern int _nl_msg_cat_cntr;
+
 struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
                                                 char *__locale,
-                                                const char *__domainname))
+                                                const char *__domainname,
+                                             struct binding *__domainbinding))
      internal_function;
-void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
+                             struct binding *__domainbinding))
      internal_function;
 void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
      internal_function;
+const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
+                                         struct loaded_domain *__domain,
+                                         struct binding *__domainbinding))
+     internal_function;
+void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
+     internal_function;
+
+char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+                           struct binding *domainbinding,
+                           const char *msgid, size_t *lengthp))
+     internal_function;
+
+#ifdef _LIBC
+extern char *__gettext PARAMS ((const char *__msgid));
+extern char *__dgettext PARAMS ((const char *__domainname,
+                                const char *__msgid));
+extern char *__dcgettext PARAMS ((const char *__domainname,
+                                 const char *__msgid, int __category));
+extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
+                                unsigned long int __n));
+extern char *__dngettext PARAMS ((const char *__domainname,
+                                 const char *__msgid1, const char *__msgid2,
+                                 unsigned long int n));
+extern char *__dcngettext PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  unsigned long int __n, int __category));
+extern char *__dcigettext PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  int __plural, unsigned long int __n,
+                                  int __category));
+extern char *__textdomain PARAMS ((const char *__domainname));
+extern char *__bindtextdomain PARAMS ((const char *__domainname,
+                                      const char *__dirname));
+extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
+                                               const char *__codeset));
+#else
+extern char *gettext__ PARAMS ((const char *__msgid));
+extern char *dgettext__ PARAMS ((const char *__domainname,
+                                const char *__msgid));
+extern char *dcgettext__ PARAMS ((const char *__domainname,
+                                 const char *__msgid, int __category));
+extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
+                                unsigned long int __n));
+extern char *dngettext__ PARAMS ((const char *__domainname,
+                                 const char *__msgid1, const char *__msgid2,
+                                 unsigned long int __n));
+extern char *dcngettext__ PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  unsigned long int __n, int __category));
+extern char *dcigettext__ PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  int __plural, unsigned long int __n,
+                                  int __category));
+extern char *textdomain__ PARAMS ((const char *__domainname));
+extern char *bindtextdomain__ PARAMS ((const char *__domainname,
+                                      const char *__dirname));
+extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
+                                               const char *__codeset));
+#endif
+
+#ifdef _LIBC
+extern void __gettext_free_exp PARAMS ((struct expression *exp))
+     internal_function;
+extern int __gettextparse PARAMS ((void *arg));
+#else
+extern void gettext_free_exp__ PARAMS ((struct expression *exp))
+     internal_function;
+extern int gettextparse__ PARAMS ((void *arg));
+#endif
 
 /* @@ begin of epilog @@ */
 
index cacb38e..ccb7acc 100644 (file)
@@ -1,20 +1,20 @@
-/* Implements a string hashing function.
-   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+/* Description of GNU message catalog format: string hashing function.
+   Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
    You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* @@ end of prolog @@ */
 
@@ -33,9 +33,9 @@
 /* Defines the so called `hashpjw' function by P.J. Weinberger
    [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
    1986, 1987 Bell Telephone Laboratories, Inc.]  */
-static unsigned long hash_string PARAMS ((const char *__str_param));
+static unsigned long int hash_string PARAMS ((const char *__str_param));
 
-static inline unsigned long
+static inline unsigned long int
 hash_string (str_param)
      const char *str_param;
 {
@@ -47,8 +47,8 @@ hash_string (str_param)
   while (*str != '\0')
     {
       hval <<= 4;
-      hval += (unsigned long) *str++;
-      g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
+      hval += (unsigned long int) *str++;
+      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
       if (g != 0)
        {
          hval ^= g >> (HASHWORDBITS - 8);
index 503efa0..0a06ce9 100644 (file)
@@ -1,43 +1,99 @@
 /* intl-compat.c - Stub functions to call gettext functions from GNU gettext
    Library.
-   Copyright (C) 1995 Software Foundation, Inc.
+   Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#include "libgettext.h"
+#include "libgnuintl.h"
+#include "gettextP.h"
 
 /* @@ end of prolog @@ */
 
+/* This file redirects the gettext functions (without prefix or suffix) to
+   those defined in the included GNU gettext library (with "__" suffix).
+   It is compiled into libintl when the included GNU gettext library is
+   configured --with-included-gettext.
+
+   This redirection works also in the case that the system C library or
+   the system libintl library contain gettext/textdomain/... functions.
+   If it didn't, we would need to add preprocessor level redirections to
+   libgnuintl.h of the following form:
+
+#    define gettext gettext__
+#    define dgettext dgettext__
+#    define dcgettext dcgettext__
+#    define ngettext ngettext__
+#    define dngettext dngettext__
+#    define dcngettext dcngettext__
+#    define textdomain textdomain__
+#    define bindtextdomain bindtextdomain__
+#    define bind_textdomain_codeset bind_textdomain_codeset__
+
+   How does this redirection work? There are two cases.
+   A. When libintl.a is linked into an executable, it works because
+      functions defined in the executable always override functions in
+      the shared libraries.
+   B. When libintl.so is used, it works because
+      1. those systems defining gettext/textdomain/... in the C library
+         (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
+         ELF systems and define these symbols as weak, thus explicitly
+         letting other shared libraries override it.
+      2. those systems defining gettext/textdomain/... in a standalone
+         libintl.so library (namely, Solaris 2.3 and newer) have this
+         shared library in /usr/lib, and the linker will search /usr/lib
+         *after* the directory where the GNU gettext library is installed.
+
+   A third case, namely when libintl.a is linked into a shared library
+   whose name is not libintl.so, is not supported. In this case, on
+   Solaris, when -lintl precedes the linker option for the shared library
+   containing GNU gettext, the system's gettext would indeed override
+   the GNU gettext. Anyone doing this kind of stuff must be clever enough
+   to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
+   command line.  */
+
 
 #undef gettext
 #undef dgettext
 #undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
 #undef textdomain
 #undef bindtextdomain
+#undef bind_textdomain_codeset
 
 
 char *
-bindtextdomain (domainname, dirname)
+gettext (msgid)
+     const char *msgid;
+{
+  return gettext__ (msgid);
+}
+
+
+char *
+dgettext (domainname, msgid)
      const char *domainname;
-     const char *dirname;
+     const char *msgid;
 {
-  return bindtextdomain__ (domainname, dirname);
+  return dgettext__ (domainname, msgid);
 }
 
 
@@ -52,19 +108,35 @@ dcgettext (domainname, msgid, category)
 
 
 char *
-dgettext (domainname, msgid)
+ngettext (msgid1, msgid2, n)
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return ngettext__ (msgid1, msgid2, n);
+}
+
+
+char *
+dngettext (domainname, msgid1, msgid2, n)
      const char *domainname;
-     const char *msgid;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
 {
-  return dgettext__ (domainname, msgid);
+  return dngettext__ (domainname, msgid1, msgid2, n);
 }
 
 
 char *
-gettext (msgid)
-     const char *msgid;
+dcngettext (domainname, msgid1, msgid2, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+     int category;
 {
-  return gettext__ (msgid);
+  return dcngettext__ (domainname, msgid1, msgid2, n, category);
 }
 
 
@@ -74,3 +146,21 @@ textdomain (domainname)
 {
   return textdomain__ (domainname);
 }
+
+
+char *
+bindtextdomain (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  return bindtextdomain__ (domainname, dirname);
+}
+
+
+char *
+bind_textdomain_codeset (domainname, codeset)
+     const char *domainname;
+     const char *codeset;
+{
+  return bind_textdomain_codeset__ (domainname, codeset);
+}
index f02d218..533e94b 100644 (file)
@@ -1,37 +1,33 @@
-/* Handle list of needed message catalogs
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
 #ifndef _GNU_SOURCE
 # define _GNU_SOURCE   1
 #endif
 
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-# ifndef memcpy
-#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
+
+#include <string.h>
 #if !HAVE_STRCHR && !defined _LIBC
 # ifndef strchr
 #  define strchr index
 #endif
 #include <ctype.h>
 #include <sys/types.h>
-
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
 
 #include "loadinfo.h"
 
@@ -224,7 +217,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
 
   /* Construct file name.  */
   memcpy (abs_filename, dirlist, dirlist_len);
-  __argz_stringify (abs_filename, dirlist_len, ':');
+  __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
   cp = abs_filename + (dirlist_len - 1);
   *cp++ = '/';
   cp = stpcpy (cp, language);
@@ -349,10 +342,11 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
 \f
 /* Normalize codeset name.  There is no standard for the codeset
    names.  Normalization allows the user to use any of the common
-   names.  */
+   names.  The return value is dynamically allocated and has to be
+   freed by the caller.  */
 const char *
 _nl_normalize_codeset (codeset, name_len)
-     const unsigned char *codeset;
+     const char *codeset;
      size_t name_len;
 {
   int len = 0;
index 3a92960..c5be54a 100644 (file)
-/* Message catalogs for internationalization.
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
-/* Because on some systems (e.g. Solaris) we sometimes have to include
-   the systems libintl.h as well as this file we have more complex
-   include protection above.  But the systems header might perhaps also
-   define _LIBINTL_H and therefore we have to protect the definition here.  */
-
-#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
-#ifndef _LIBINTL_H
-# define _LIBINTL_H    1
-#endif
-#define _LIBGETTEXT_H  1
-
-/* We define an additional symbol to signal that we use the GNU
-   implementation of gettext.  */
-#define __USE_GNU_GETTEXT 1
-
-#include <sys/types.h>
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifndef PARAMS
-# if __STDC__ || defined __cplusplus
-#  define PARAMS(args) args
-# else
-#  define PARAMS(args) ()
-# endif
-#endif
-
-#ifndef NULL
-# if !defined __cplusplus || defined __GNUC__
-#  define NULL ((void *) 0)
-# else
-#  define NULL (0)
-# endif
-#endif
-
-#if !HAVE_LC_MESSAGES
-/* This value determines the behaviour of the gettext() and dgettext()
-   function.  But some system does not have this defined.  Define it
-   to a default value.  */
-# define LC_MESSAGES (-1)
-#endif
-
-
-/* Declarations for gettext-using-catgets interface.  Derived from
-   Jim Meyering's libintl.h.  */
-struct _msg_ent
-{
-  const char *_msg;
-  int _msg_number;
-};
-
-
-#if HAVE_CATGETS
-/* These two variables are defined in the automatically by po-to-tbl.sed
-   generated file `cat-id-tbl.c'.  */
-extern const struct _msg_ent _msg_tbl[];
-extern int _msg_tbl_length;
-#endif
-
-
-/* For automatical extraction of messages sometimes no real
-   translation is needed.  Instead the string itself is the result.  */
-#define gettext_noop(Str) (Str)
-
-/* Look up MSGID in the current default message catalog for the current
-   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
-   text).  */
-extern char *gettext PARAMS ((const char *__msgid));
-extern char *gettext__ PARAMS ((const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
-   LC_MESSAGES locale.  */
-extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
-extern char *dgettext__ PARAMS ((const char *__domainname,
-                                const char *__msgid));
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
-   locale.  */
-extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
-                               int __category));
-extern char *dcgettext__ PARAMS ((const char *__domainname,
-                                 const char *__msgid, int __category));
-
-
-/* Set the current default message catalog to DOMAINNAME.
-   If DOMAINNAME is null, return the current default.
-   If DOMAINNAME is "", reset to the default of "messages".  */
-extern char *textdomain PARAMS ((const char *__domainname));
-extern char *textdomain__ PARAMS ((const char *__domainname));
-
-/* Specify that the DOMAINNAME message catalog will be found
-   in DIRNAME rather than in the system locale data base.  */
-extern char *bindtextdomain PARAMS ((const char *__domainname,
-                                 const char *__dirname));
-extern char *bindtextdomain__ PARAMS ((const char *__domainname,
-                                   const char *__dirname));
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
 
+/* NLS can be disabled through the configure --disable-nls option.  */
 #if ENABLE_NLS
 
-/* Solaris 2.3 has the gettext function but dcgettext is missing.
-   So we omit this optimization for Solaris 2.3.  BTW, Solaris 2.4
-   has dcgettext.  */
-# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
-
-#  define gettext(Msgid)                                                     \
-     dgettext (NULL, Msgid)
-
-#  define dgettext(Domainname, Msgid)                                        \
-     dcgettext (Domainname, Msgid, LC_MESSAGES)
-
-#  if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
-/* This global variable is defined in loadmsgcat.c.  We need a sign,
-   whether a new catalog was loaded, which can be associated with all
-   translations.  */
-extern int _nl_msg_cat_cntr;
-
-#   define dcgettext(Domainname, Msgid, Category)                            \
-  (__extension__                                                             \
-   ({                                                                        \
-     char *__result;                                                         \
-     if (__builtin_constant_p (Msgid))                                       \
-       {                                                                     \
-        static char *__translation__;                                        \
-        static int __catalog_counter__;                                      \
-        if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr)    \
-          {                                                                  \
-            __translation__ =                                                \
-              dcgettext__ (Domainname, Msgid, Category);                     \
-            __catalog_counter__ = _nl_msg_cat_cntr;                          \
-          }                                                                  \
-        __result = __translation__;                                          \
-       }                                                                     \
-     else                                                                    \
-       __result = dcgettext__ (Domainname, Msgid, Category);                 \
-     __result;                                                               \
-    }))
-#  endif
-# endif
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
 
 #else
 
 # define gettext(Msgid) (Msgid)
 # define dgettext(Domainname, Msgid) (Msgid)
 # define dcgettext(Domainname, Msgid, Category) (Msgid)
-# define textdomain(Domainname) ((char *) Domainname)
-# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
+# define textdomain(Domainname) ((char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset))
 
 #endif
 
-/* @@ begin of epilog @@ */
-
-#ifdef __cplusplus
-}
-#endif
+/* For automatical extraction of messages sometimes no real
+   translation is needed.  Instead the string itself is the result.  */
+#define gettext_noop(Str) (Str)
 
-#endif
+#endif /* _LIBGETTEXT_H */
diff --git a/gcc/intl/libgnuintl.h b/gcc/intl/libgnuintl.h
new file mode 100644 (file)
index 0000000..f891deb
--- /dev/null
@@ -0,0 +1,128 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H     1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
+   On systems that don't define it, use an arbitrary value instead.
+   On Solaris, <locale.h> defines __LOCALE_H then includes <libintl.h> (i.e.
+   this file!) and then only defines LC_MESSAGES.  To avoid a redefinition
+   warning, don't define LC_MESSAGES in this case.  */
+#if !defined LC_MESSAGES && !defined __LOCALE_H
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
+   precedence over _conio_gettext.  */
+#ifdef __DJGPP__
+# undef gettext
+# define gettext gettext
+#endif
+
+#ifndef PARAMS
+# if __STDC__ || defined __cplusplus
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+extern char *gettext PARAMS ((const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
+                               int __category));
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+   number N.  */
+extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
+                              unsigned long int __n));
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1,
+                               const char *__msgid2, unsigned long int __n));
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1,
+                                const char *__msgid2, unsigned long int __n,
+                                int __category));
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+extern char *textdomain PARAMS ((const char *__domainname));
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain PARAMS ((const char *__domainname,
+                                    const char *__dirname));
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+extern char *bind_textdomain_codeset PARAMS ((const char *__domainname,
+                                             const char *__codeset));
+
+
+/* Optimized version of the functions above.  */
+#if defined __OPTIMIZED
+/* These are macros, but could also be inline functions.  */
+
+# define gettext(msgid)                                                              \
+  dgettext (NULL, msgid)
+
+# define dgettext(domainname, msgid)                                         \
+  dcgettext (domainname, msgid, LC_MESSAGES)
+
+# define ngettext(msgid1, msgid2, n)                                         \
+  dngettext (NULL, msgid1, msgid2, n)
+
+# define dngettext(domainname, msgid1, msgid2, n)                            \
+  dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
+
+#endif /* Optimizing. */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/gcc/intl/linux-msg.sed b/gcc/intl/linux-msg.sed
deleted file mode 100755 (executable)
index 5918e72..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#
-# The first directive in the .msg should be the definition of the
-# message set number.  We use always set number 1.
-#
-1 {
-  i\
-$set 1 # Automatically created by po2msg.sed
-  h
-  s/.*/0/
-  x
-}
-#
-# Mitch's old catalog format does not allow comments.
-#
-# We copy the original message as a comment into the .msg file.
-#
-/^msgid/ {
-  s/msgid[     ]*"//
-#
-# This does not work now with the new format.
-# /"$/! {
-#   s/\\$//
-#   s/$/ ... (more lines following)"/
-# }
-  x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
-  td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
-  :d
-  s/9\(_*\)$/_\1/
-  td
-# Assure at least one digit is available.
-  s/^\(_*\)$/0\1/
-# Increment the last digit.
-  s/8\(_*\)$/9\1/
-  s/7\(_*\)$/8\1/
-  s/6\(_*\)$/7\1/
-  s/5\(_*\)$/6\1/
-  s/4\(_*\)$/5\1/
-  s/3\(_*\)$/4\1/
-  s/2\(_*\)$/3\1/
-  s/1\(_*\)$/2\1/
-  s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
-  s/_/0/g
-  x
-  G
-  s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
-}
-#
-# The .msg file contains, other then the .po file, only the translations
-# but each given a unique ID.  Starting from 1 and incrementing by 1 for
-# each message we assign them to the messages.
-# It is important that the .po file used to generate the cat-id-tbl.c file
-# (with po-to-tbl) is the same as the one used here.  (At least the order
-# of declarations must not be changed.)
-#
-/^msgstr/ {
-  s/msgstr[    ]*"\(.*\)"/# \1/
-# Clear substitution flag.
-  tb
-# Append the next line.
-  :b
-  N
-# Look whether second part is continuation line.
-  s/\(.*\n\)"\(.*\)"/\1\2/
-# Yes, then branch.
-  ta
-  P
-  D
-# Note that D includes a jump to the start!!
-# We found a continuation line.  But before printing insert '\'.
-  :a
-  s/\(.*\)\(\n.*\)/\1\\\2/
-  P
-# We cannot use D here.
-  s/.*\n\(.*\)/\1/
-  tb
-}
-d
index f4ebf6d..b861260 100644 (file)
@@ -1,20 +1,24 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _LOADINFO_H
+#define _LOADINFO_H    1
 
 #ifndef PARAMS
 # if __STDC__
 # endif
 #endif
 
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+   almost always true or almost always false.  */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames.  */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+  /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
 /* Encoding of locale name parts.  */
 #define CEN_REVISION           1
 #define CEN_SPONSOR            2
@@ -50,7 +73,11 @@ struct loaded_l10nfile
 };
 
 
-extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset,
+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  The return value is dynamically allocated and has to be
+   freed by the caller.  */
+extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
                                                  size_t name_len));
 
 extern struct loaded_l10nfile *
@@ -66,6 +93,8 @@ _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
 
 extern const char *_nl_expand_alias PARAMS ((const char *name));
 
+/* normalized_codeset is dynamically allocated and has to be freed by
+   the caller.  */
 extern int _nl_explode_name PARAMS ((char *name, const char **language,
                                     const char **modifier,
                                     const char **territory,
@@ -74,3 +103,7 @@ extern int _nl_explode_name PARAMS ((char *name, const char **language,
                                     const char **special,
                                     const char **sponsor,
                                     const char **revision));
+
+extern char *_nl_find_language PARAMS ((const char *name));
+
+#endif /* loadinfo.h */
index f05946e..097624e 100644 (file)
@@ -1,43 +1,83 @@
 /* Load needed message catalogs.
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
+#include <ctype.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
 #endif
 
+#include <stdlib.h>
+#include <string.h>
+
 #if defined HAVE_UNISTD_H || defined _LIBC
 # include <unistd.h>
 #endif
 
-#if defined HAVE_MMAP_FILE || defined _LIBC
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \
+    || (defined _LIBC && defined _POSIX_MAPPED_FILES)
 # include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP     1
+#else
+# undef HAVE_MMAP
 #endif
 
 #include "gettext.h"
 #include "gettextP.h"
 
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#endif
+
 /* @@ end of prolog @@ */
 
 #ifdef _LIBC
 # define munmap __munmap
 #endif
 
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define PLURAL_PARSE __gettextparse
+#else
+# define PLURAL_PARSE gettextparse__
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+  /* For MSC-compatible compilers.  */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+  /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect.  */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default.  */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
 /* We need a sign, whether a new catalog was loaded, which can be associated
    with all translations.  This is important if the translations are
    cached by one of GCC's features.  */
-int _nl_msg_cat_cntr = 0;
+int _nl_msg_cat_cntr;
+
+#if (defined __GNUC__ && !defined __APPLE_CC__) \
+    || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+
+/* These structs are the constant expression for the germanic plural
+   form determination.  It represents the expression  "n != 1".  */
+static const struct expression plvar =
+{
+  .nargs = 0,
+  .operation = var,
+};
+static const struct expression plone =
+{
+  .nargs = 0,
+  .operation = num,
+  .val =
+  {
+    .num = 1
+  }
+};
+static struct expression germanic_plural =
+{
+  .nargs = 2,
+  .operation = not_equal,
+  .val =
+  {
+    .args =
+    {
+      [0] = (struct expression *) &plvar,
+      [1] = (struct expression *) &plone
+    }
+  }
+};
+
+# define INIT_GERMANIC_PLURAL()
+
+#else
+
+/* For compilers without support for ISO C 99 struct/union initializers:
+   Initialization at run-time.  */
+
+static struct expression plvar;
+static struct expression plone;
+static struct expression germanic_plural;
+
+static void
+init_germanic_plural ()
+{
+  if (plone.val.num == 0)
+    {
+      plvar.nargs = 0;
+      plvar.operation = var;
+
+      plone.nargs = 0;
+      plone.operation = num;
+      plone.val.num = 1;
+
+      germanic_plural.nargs = 2;
+      germanic_plural.operation = not_equal;
+      germanic_plural.val.args[0] = &plvar;
+      germanic_plural.val.args[1] = &plone;
+    }
+}
+
+# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
+
+#endif
+
+
+/* Initialize the codeset dependent parts of an opened message catalog.
+   Return the header entry.  */
+const char *
+internal_function
+_nl_init_domain_conv (domain_file, domain, domainbinding)
+     struct loaded_l10nfile *domain_file;
+     struct loaded_domain *domain;
+     struct binding *domainbinding;
+{
+  /* Find out about the character set the file is encoded with.
+     This can be found (in textual form) in the entry "".  If this
+     entry does not exist or if this does not contain the `charset='
+     information, we will assume the charset matches the one the
+     current locale and we don't have to perform any conversion.  */
+  char *nullentry;
+  size_t nullentrylen;
+
+  /* Preinitialize fields, to avoid recursion during _nl_find_msg.  */
+  domain->codeset_cntr =
+    (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+  domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+  domain->conv = (iconv_t) -1;
+# endif
+#endif
+  domain->conv_tab = NULL;
 
+  /* Get the header entry.  */
+  nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+  if (nullentry != NULL)
+    {
+#if defined _LIBC || HAVE_ICONV
+      const char *charsetstr;
+
+      charsetstr = strstr (nullentry, "charset=");
+      if (charsetstr != NULL)
+       {
+         size_t len;
+         char *charset;
+         const char *outcharset;
+
+         charsetstr += strlen ("charset=");
+         len = strcspn (charsetstr, " \t\n");
+
+         charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+         *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+         memcpy (charset, charsetstr, len);
+         charset[len] = '\0';
+# endif
+
+         /* The output charset should normally be determined by the
+            locale.  But sometimes the locale is not used or not correctly
+            set up, so we provide a possibility for the user to override
+            this.  Moreover, the value specified through
+            bind_textdomain_codeset overrides both.  */
+         if (domainbinding != NULL && domainbinding->codeset != NULL)
+           outcharset = domainbinding->codeset;
+         else
+           {
+             outcharset = getenv ("OUTPUT_CHARSET");
+             if (outcharset == NULL || outcharset[0] == '\0')
+               {
+# ifdef _LIBC
+                 outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
+# else
+#  if HAVE_ICONV
+                 extern const char *locale_charset (void);
+                 outcharset = locale_charset ();
+#  endif
+# endif
+               }
+           }
+
+# ifdef _LIBC
+         /* We always want to use transliteration.  */
+         outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+         charset = norm_add_slashes (charset, NULL);
+         if (__gconv_open (outcharset, charset, &domain->conv,
+                           GCONV_AVOID_NOCONV)
+             != __GCONV_OK)
+           domain->conv = (__gconv_t) -1;
+# else
+#  if HAVE_ICONV
+         /* When using GNU libiconv, we want to use transliteration.  */
+#   if _LIBICONV_VERSION >= 0x0105
+         len = strlen (outcharset);
+         {
+           char *tmp = (char *) alloca (len + 10 + 1);
+           memcpy (tmp, outcharset, len);
+           memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+           outcharset = tmp;
+         }
+#   endif
+         domain->conv = iconv_open (outcharset, charset);
+#   if _LIBICONV_VERSION >= 0x0105
+         freea (outcharset);
+#   endif
+#  endif
+# endif
+
+         freea (charset);
+       }
+#endif /* _LIBC || HAVE_ICONV */
+    }
+
+  return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog.  */
+void
+internal_function
+_nl_free_domain_conv (domain)
+     struct loaded_domain *domain;
+{
+  if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+    free (domain->conv_tab);
+
+#ifdef _LIBC
+  if (domain->conv != (__gconv_t) -1)
+    __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+  if (domain->conv != (iconv_t) -1)
+    iconv_close (domain->conv);
+# endif
+#endif
+}
 
 /* Load the message catalogs specified by FILENAME.  If it is no valid
    message catalog do nothing.  */
 void
 internal_function
-_nl_load_domain (domain_file)
+_nl_load_domain (domain_file, domainbinding)
      struct loaded_l10nfile *domain_file;
+     struct binding *domainbinding;
 {
   int fd;
   size_t size;
+#ifdef _LIBC
+  struct stat64 st;
+#else
   struct stat st;
+#endif
   struct mo_file_header *data = (struct mo_file_header *) -1;
-#if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \
-    || defined _LIBC
   int use_mmap = 0;
-#endif
   struct loaded_domain *domain;
+  const char *nullentry;
 
   domain_file->decided = 1;
   domain_file->data = NULL;
 
+  /* Note that it would be useless to store domainbinding in domain_file
+     because domainbinding might be == NULL now but != NULL later (after
+     a call to bind_textdomain_codeset).  */
+
   /* If the record does not represent a valid locale the FILENAME
      might be NULL.  This can happen when according to the given
      specification the locale file name is different for XPG and CEN
@@ -85,28 +368,32 @@ _nl_load_domain (domain_file)
     return;
 
   /* Try to open the addressed file.  */
-  fd = open (domain_file->filename, O_RDONLY);
+  fd = open (domain_file->filename, O_RDONLY | O_BINARY);
   if (fd == -1)
     return;
 
   /* We must know about the size of the file.  */
-  if (fstat (fd, &st) != 0
-      || (size = (size_t) st.st_size) != (size_t) st.st_size
-      || size < sizeof (struct mo_file_header))
+  if (
+#ifdef _LIBC
+      __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+      __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+      || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+      || __builtin_expect (size < sizeof (struct mo_file_header), 0))
     {
       /* Something went wrong.  */
       close (fd);
       return;
     }
 
-#if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \
-    || defined _LIBC
+#ifdef HAVE_MMAP
   /* Now we are ready to load the file.  If mmap() is available we try
      this first.  If not available or it failed we try to load it.  */
   data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
                                         MAP_PRIVATE, fd, 0);
 
-  if (data != (struct mo_file_header *) -1)
+  if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
     {
       /* mmap() call was successful.  */
       close (fd);
@@ -130,12 +417,15 @@ _nl_load_domain (domain_file)
       do
        {
          long int nb = (long int) read (fd, read_ptr, to_read);
-         if (nb == -1)
+         if (nb <= 0)
            {
+#ifdef EINTR
+             if (nb == -1 && errno == EINTR)
+               continue;
+#endif
              close (fd);
              return;
            }
-
          read_ptr += nb;
          to_read -= nb;
        }
@@ -146,11 +436,11 @@ _nl_load_domain (domain_file)
 
   /* Using the magic number we can test whether it really is a message
      catalog file.  */
-  if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
+  if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+                       0))
     {
       /* The magic number is wrong: not a message catalog file.  */
-#if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \
-    || defined _LIBC
+#ifdef HAVE_MMAP
       if (use_mmap)
        munmap ((caddr_t) data, size);
       else
@@ -159,17 +449,13 @@ _nl_load_domain (domain_file)
       return;
     }
 
-  domain_file->data
-    = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
-  if (domain_file->data == NULL)
+  domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+  if (domain == NULL)
     return;
+  domain_file->data = domain;
 
-  domain = (struct loaded_domain *) domain_file->data;
   domain->data = (char *) data;
-#if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \
-    || defined _LIBC
   domain->use_mmap = use_mmap;
-#endif
   domain->mmap_size = size;
   domain->must_swap = data->magic != _MAGIC;
 
@@ -187,9 +473,8 @@ _nl_load_domain (domain_file)
        ((char *) data + W (domain->must_swap, data->hash_tab_offset));
       break;
     default:
-      /* This is an illegal revision.  */
-#if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \
-    || defined _LIBC
+      /* This is an invalid revision.  */
+#ifdef HAVE_MMAP
       if (use_mmap)
        munmap ((caddr_t) data, size);
       else
@@ -200,9 +485,62 @@ _nl_load_domain (domain_file)
       return;
     }
 
-  /* Show that one domain is changed.  This might make some cached
-     translations invalid.  */
-  ++_nl_msg_cat_cntr;
+  /* Now initialize the character set converter from the character set
+     the file is encoded with (found in the header entry) to the domain's
+     specified character set or the locale's character set.  */
+  nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+  /* Also look for a plural specification.  */
+  if (nullentry != NULL)
+    {
+      const char *plural;
+      const char *nplurals;
+
+      plural = strstr (nullentry, "plural=");
+      nplurals = strstr (nullentry, "nplurals=");
+      if (plural == NULL || nplurals == NULL)
+       goto no_plural;
+      else
+       {
+         /* First get the number.  */
+         char *endp;
+         unsigned long int n;
+         struct parse_args args;
+
+         nplurals += 9;
+         while (*nplurals != '\0' && isspace (*nplurals))
+           ++nplurals;
+#if defined HAVE_STRTOUL || defined _LIBC
+         n = strtoul (nplurals, &endp, 10);
+#else
+         for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+           n = n * 10 + (*endp - '0');
+#endif
+         domain->nplurals = n;
+         if (nplurals == endp)
+           goto no_plural;
+
+         /* Due to the restrictions bison imposes onto the interface of the
+            scanner function we have to put the input string and the result
+            passed up from the parser into the same structure which address
+            is passed down to the parser.  */
+         plural += 7;
+         args.cp = plural;
+         if (PLURAL_PARSE (&args) != 0)
+           goto no_plural;
+         domain->plural = args.res;
+       }
+    }
+  else
+    {
+      /* By default we are using the Germanic form: singular form only
+         for `one', the plural form otherwise.  Yes, this is also what
+         English is using since English is a Germanic language.  */
+    no_plural:
+      INIT_GERMANIC_PLURAL ();
+      domain->plural = &germanic_plural;
+      domain->nplurals = 2;
+    }
 }
 
 
@@ -212,9 +550,16 @@ internal_function
 _nl_unload_domain (domain)
      struct loaded_domain *domain;
 {
+  if (domain->plural != &germanic_plural)
+    __gettext_free_exp (domain->plural);
+
+  _nl_free_domain_conv (domain);
+
+# ifdef _POSIX_MAPPED_FILES
   if (domain->use_mmap)
     munmap ((caddr_t) domain->data, domain->mmap_size);
   else
+# endif        /* _POSIX_MAPPED_FILES */
     free ((void *) domain->data);
 
   free (domain);
diff --git a/gcc/intl/localcharset.c b/gcc/intl/localcharset.c
new file mode 100644 (file)
index 0000000..61f8f3e
--- /dev/null
@@ -0,0 +1,271 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Written by Bruno Haible <haible@clisp.cons.org>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32   /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifndef WIN32
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if HAVE_SETLOCALE
+#   include <locale.h>
+#  endif
+# endif
+#else /* WIN32 */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+   possible multithread problem in the function get_charset_aliases. If we
+   are running in a threaded environment, and if two threads initialize
+   'charset_aliases' simultaneously, both will produce the same value,
+   and everything will be ok if the two assignments to 'charset_aliases'
+   are atomic. But I don't know what will happen if the two assignments mix.  */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+   read, else NULL.  Its format is:
+   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file.  */
+static const char *
+get_charset_aliases ()
+{
+  const char *cp;
+
+  cp = charset_aliases;
+  if (cp == NULL)
+    {
+#ifndef WIN32
+      FILE *fp;
+      const char *dir = LIBDIR;
+      const char *base = "charset.alias";
+      char *file_name;
+
+      /* Concatenate dir and base into freshly allocated file_name.  */
+      {
+       size_t dir_len = strlen (dir);
+       size_t base_len = strlen (base);
+       int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+       file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+       if (file_name != NULL)
+         {
+           memcpy (file_name, dir, dir_len);
+           if (add_slash)
+             file_name[dir_len] = DIRECTORY_SEPARATOR;
+           memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+         }
+      }
+
+      if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
+       /* Out of memory or file not found, treat it as empty.  */
+       cp = "";
+      else
+       {
+         /* Parse the file's contents.  */
+         int c;
+         char buf1[50+1];
+         char buf2[50+1];
+         char *res_ptr = NULL;
+         size_t res_size = 0;
+         size_t l1, l2;
+
+         for (;;)
+           {
+             c = getc (fp);
+             if (c == EOF)
+               break;
+             if (c == '\n' || c == ' ' || c == '\t')
+               continue;
+             if (c == '#')
+               {
+                 /* Skip comment, to end of line.  */
+                 do
+                   c = getc (fp);
+                 while (!(c == EOF || c == '\n'));
+                 if (c == EOF)
+                   break;
+                 continue;
+               }
+             ungetc (c, fp);
+             if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
+               break;
+             l1 = strlen (buf1);
+             l2 = strlen (buf2);
+             if (res_size == 0)
+               {
+                 res_size = l1 + 1 + l2 + 1;
+                 res_ptr = malloc (res_size + 1);
+               }
+             else
+               {
+                 res_size += l1 + 1 + l2 + 1;
+                 res_ptr = realloc (res_ptr, res_size + 1);
+               }
+             if (res_ptr == NULL)
+               {
+                 /* Out of memory. */
+                 res_size = 0;
+                 break;
+               }
+             strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+             strcpy (res_ptr + res_size - (l2 + 1), buf2);
+           }
+         fclose (fp);
+         if (res_size == 0)
+           cp = "";
+         else
+           {
+             *(res_ptr + res_size) = '\0';
+             cp = res_ptr;
+           }
+       }
+
+      if (file_name != NULL)
+       free (file_name);
+
+#else /* WIN32 */
+
+      /* To avoid the troubles of installing a separate file in the same
+        directory as the DLL and of retrieving the DLL's directory at
+        runtime, simply inline the aliases here.  */
+
+      cp = "CP936" "\0" "GBK" "\0"
+          "CP1361" "\0" "JOHAB" "\0";
+#endif
+
+      charset_aliases = cp;
+    }
+
+  return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset ()
+{
+  const char *codeset;
+  const char *aliases;
+
+#ifndef WIN32
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+# else
+
+  /* On old systems which lack it, use setlocale or getenv.  */
+  const char *locale = NULL;
+
+  /* But most old systems don't have a complete set of locales.  Some
+     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
+     use setlocale here; it would return "C" when it doesn't support the
+     locale name the user has set.  */
+#  if HAVE_SETLOCALE && 0
+  locale = setlocale (LC_CTYPE, NULL);
+#  endif
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+       {
+         locale = getenv ("LC_CTYPE");
+         if (locale == NULL || locale[0] == '\0')
+           locale = getenv ("LANG");
+       }
+    }
+
+  /* On some old systems, one used to set locale = "iso8859_1". On others,
+     you set it to "language_COUNTRY.charset". In any case, we resolve it
+     through the charset.alias file.  */
+  codeset = locale;
+
+# endif
+
+#else /* WIN32 */
+
+  static char buf[2 + 10 + 1];
+
+  /* Win32 has a function returning the locale's codepage as a number.  */
+  sprintf (buf, "CP%u", GetACP ());
+  codeset = buf;
+
+#endif
+
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
+
+  /* Resolve alias. */
+  for (aliases = get_charset_aliases ();
+       *aliases != '\0';
+       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+    if (strcmp (codeset, aliases) == 0
+       || (aliases[0] == '*' && aliases[1] == '\0'))
+      {
+       codeset = aliases + strlen (aliases) + 1;
+       break;
+      }
+
+  return codeset;
+}
diff --git a/gcc/intl/locale.alias b/gcc/intl/locale.alias
new file mode 100644 (file)
index 0000000..bd7b9b3
--- /dev/null
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+#      /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is far from being complete.  If you have a value for
+# your own site which you think might be useful for others too, share
+# it with the rest of us.  Send it using the `glibcbug' script to
+# bugs@gnu.org.
+
+# Packages using this file: 
+
+bokmal         no_NO.ISO-8859-1
+bokmÃ¥l         no_NO.ISO-8859-1
+catalan                ca_ES.ISO-8859-1
+croatian       hr_HR.ISO-8859-2
+czech          cs_CZ.ISO-8859-2
+danish          da_DK.ISO-8859-1
+dansk          da_DK.ISO-8859-1
+deutsch                de_DE.ISO-8859-1
+dutch          nl_NL.ISO-8859-1
+eesti          et_EE.ISO-8859-1
+estonian       et_EE.ISO-8859-1
+finnish         fi_FI.ISO-8859-1
+français       fr_FR.ISO-8859-1
+french         fr_FR.ISO-8859-1
+galego         gl_ES.ISO-8859-1
+galician       gl_ES.ISO-8859-1
+german         de_DE.ISO-8859-1
+greek           el_GR.ISO-8859-7
+hebrew          he_IL.ISO-8859-8
+hrvatski       hr_HR.ISO-8859-2
+hungarian       hu_HU.ISO-8859-2
+icelandic       is_IS.ISO-8859-1
+italian         it_IT.ISO-8859-1
+japanese       ja_JP.eucJP
+japanese.euc   ja_JP.eucJP
+ja_JP          ja_JP.eucJP
+ja_JP.ujis     ja_JP.eucJP
+japanese.sjis  ja_JP.SJIS
+korean         ko_KR.eucKR
+korean.euc     ko_KR.eucKR
+ko_KR          ko_KR.eucKR
+lithuanian      lt_LT.ISO-8859-13
+nb_NO          no_NO.ISO-8859-1
+nb_NO.ISO-8859-1 no_NO.ISO-8859-1
+norwegian       no_NO.ISO-8859-1
+nynorsk                nn_NO.ISO-8859-1
+polish          pl_PL.ISO-8859-2
+portuguese      pt_PT.ISO-8859-1
+romanian        ro_RO.ISO-8859-2
+russian         ru_RU.ISO-8859-5
+slovak          sk_SK.ISO-8859-2
+slovene         sl_SI.ISO-8859-2
+slovenian       sl_SI.ISO-8859-2
+spanish         es_ES.ISO-8859-1
+swedish         sv_SE.ISO-8859-1
+thai           th_TH.TIS-620
+turkish         tr_TR.ISO-8859-9
index 513cdc7..a1679bf 100644 (file)
@@ -1,29 +1,32 @@
 /* Handle aliases for locale names.
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-# ifndef _GNU_SOURCE
-#  define _GNU_SOURCE  1
-# endif
-
 #include <ctype.h>
 #include <stdio.h>
 #include <sys/types.h>
@@ -45,32 +48,15 @@ char *alloca ();
 # endif
 #endif
 
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#else
-char *getenv ();
-# ifdef HAVE_MALLOC_H
-#  include <malloc.h>
-# else
-void free ();
-# endif
-#endif
+#include <stdlib.h>
 
-#if defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-# ifndef memcpy
-#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
-#endif
+#include <string.h>
 #if !HAVE_STRCHR && !defined _LIBC
 # ifndef strchr
 #  define strchr index
 # endif
 #endif
 
-#include "gettext.h"
 #include "gettextP.h"
 
 /* @@ end of prolog @@ */
@@ -81,7 +67,9 @@ void free ();
    file and the name space must not be polluted.  */
 # define strcasecmp __strcasecmp
 
-# define mempcpy __mempcpy
+# ifndef mempcpy
+#  define mempcpy __mempcpy
+# endif
 # define HAVE_MEMPCPY  1
 
 /* We need locking here since we can be called from different places.  */
@@ -90,41 +78,27 @@ void free ();
 __libc_lock_define_initialized (static, lock);
 #endif
 
+#ifndef internal_function
+# define internal_function
+#endif
 
-/* For those loosing systems which don't have `alloca' we have to add
+/* For those losing systems which don't have `alloca' we have to add
    some additional code emulating it.  */
 #ifdef HAVE_ALLOCA
-/* Nothing has to be done.  */
-# define ADD_BLOCK(list, address) /* nothing */
-# define FREE_BLOCKS(list) /* nothing */
+# define freea(p) /* nothing */
 #else
-struct block_list
-{
-  void *address;
-  struct block_list *next;
-};
-# define ADD_BLOCK(list, addr)                                               \
-  do {                                                                       \
-    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
-    /* If we cannot get a free block we cannot add the new element to        \
-       the list.  */                                                         \
-    if (newp != NULL) {                                                              \
-      newp->address = (addr);                                                \
-      newp->next = (list);                                                   \
-      (list) = newp;                                                         \
-    }                                                                        \
-  } while (0)
-# define FREE_BLOCKS(list)                                                   \
-  do {                                                                       \
-    while (list != NULL) {                                                   \
-      struct block_list *old = list;                                         \
-      list = list->next;                                                     \
-      free (old);                                                            \
-    }                                                                        \
-  } while (0)
-# undef alloca
-# define alloca(size) (malloc (size))
-#endif /* have alloca */
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
 
 
 struct alias_map
@@ -134,18 +108,18 @@ struct alias_map
 };
 
 
-static char *string_space = NULL;
-static size_t string_space_act = 0;
-static size_t string_space_max = 0;
+static char *string_space;
+static size_t string_space_act;
+static size_t string_space_max;
 static struct alias_map *map;
-static size_t nmap = 0;
-static size_t maxmap = 0;
+static size_t nmap;
+static size_t maxmap;
 
 
 /* Prototypes for local functions.  */
 static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
      internal_function;
-static void extend_alias_table PARAMS ((void));
+static int extend_alias_table PARAMS ((void));
 static int alias_compare PARAMS ((const struct alias_map *map1,
                                  const struct alias_map *map2));
 
@@ -191,11 +165,12 @@ _nl_expand_alias (name)
        {
          const char *start;
 
-         while (locale_alias_path[0] == ':')
+         while (locale_alias_path[0] == PATH_SEPARATOR)
            ++locale_alias_path;
          start = locale_alias_path;
 
-         while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
+         while (locale_alias_path[0] != '\0'
+                && locale_alias_path[0] != PATH_SEPARATOR)
            ++locale_alias_path;
 
          if (start < locale_alias_path)
@@ -218,25 +193,24 @@ read_alias_file (fname, fname_len)
      const char *fname;
      int fname_len;
 {
-#ifndef HAVE_ALLOCA
-  struct block_list *block_list = NULL;
-#endif
   FILE *fp;
   char *full_fname;
   size_t added;
   static const char aliasfile[] = "/locale.alias";
 
   full_fname = (char *) alloca (fname_len + sizeof aliasfile);
-  ADD_BLOCK (block_list, full_fname);
+#ifdef HAVE_MEMPCPY
+  mempcpy (mempcpy (full_fname, fname, fname_len),
+          aliasfile, sizeof aliasfile);
+#else
   memcpy (full_fname, fname, fname_len);
   memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
 
   fp = fopen (full_fname, "r");
+  freea (full_fname);
   if (fp == NULL)
-    {
-      FREE_BLOCKS (block_list);
-      return 0;
-    }
+    return 0;
 
   added = 0;
   while (!feof (fp))
@@ -246,18 +220,18 @@ read_alias_file (fname, fname_len)
         b) these fields must be usable as file names and so must not
            be that long
        */
-      unsigned char buf[BUFSIZ];
-      unsigned char *alias;
-      unsigned char *value;
-      unsigned char *cp;
+      char buf[BUFSIZ];
+      char *alias;
+      char *value;
+      char *cp;
 
-      if (fgets ((char *)buf, sizeof buf, fp) == NULL)
+      if (fgets (buf, sizeof buf, fp) == NULL)
        /* EOF reached.  */
        break;
 
       /* Possibly not the whole line fits into the buffer.  Ignore
         the rest of the line.  */
-      if (strchr ((char *)buf, '\n') == NULL)
+      if (strchr (buf, '\n') == NULL)
        {
          char altbuf[BUFSIZ];
          do
@@ -308,10 +282,11 @@ read_alias_file (fname, fname_len)
                *cp++ = '\0';
 
              if (nmap >= maxmap)
-               extend_alias_table ();
+               if (__builtin_expect (extend_alias_table (), 0))
+                 return added;
 
-             alias_len = strlen ((char *)alias) + 1;
-             value_len = strlen ((char *)value) + 1;
+             alias_len = strlen (alias) + 1;
+             value_len = strlen (value) + 1;
 
              if (string_space_act + alias_len + value_len > string_space_max)
                {
@@ -321,10 +296,19 @@ read_alias_file (fname, fname_len)
                                        ? alias_len + value_len : 1024));
                  char *new_pool = (char *) realloc (string_space, new_size);
                  if (new_pool == NULL)
+                   return added;
+
+                 if (__builtin_expect (string_space != new_pool, 0))
                    {
-                     FREE_BLOCKS (block_list);
-                     return added;
+                     size_t i;
+
+                     for (i = 0; i < nmap; i++)
+                       {
+                         map[i].alias += new_pool - string_space;
+                         map[i].value += new_pool - string_space;
+                       }
                    }
+
                  string_space = new_pool;
                  string_space_max = new_size;
                }
@@ -351,12 +335,11 @@ read_alias_file (fname, fname_len)
     qsort (map, nmap, sizeof (struct alias_map),
           (int (*) PARAMS ((const void *, const void *))) alias_compare);
 
-  FREE_BLOCKS (block_list);
   return added;
 }
 
 
-static void
+static int
 extend_alias_table ()
 {
   size_t new_size;
@@ -367,10 +350,11 @@ extend_alias_table ()
                                                * sizeof (struct alias_map)));
   if (new_map == NULL)
     /* Simply don't extend: we don't have any more core.  */
-    return;
+    return -1;
 
   map = new_map;
   maxmap = new_size;
+  return 0;
 }
 
 
diff --git a/gcc/intl/ngettext.c b/gcc/intl/ngettext.c
new file mode 100644 (file)
index 0000000..fb3ec5a
--- /dev/null
@@ -0,0 +1,68 @@
+/* Implementation of ngettext(3) function.
+   Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h>           /* Just for NULL.  */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT ngettext__
+# define DCNGETTEXT dcngettext__
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+NGETTEXT (msgid1, msgid2, n)
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__ngettext, ngettext);
+#endif
diff --git a/gcc/intl/plural.c b/gcc/intl/plural.c
new file mode 100644 (file)
index 0000000..640d43c
--- /dev/null
@@ -0,0 +1,1326 @@
+
+/*  A Bison parser, made from plural.y
+    by GNU Bison version 1.28  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+#define        EQUOP2  257
+#define        CMPOP2  258
+#define        ADDOP2  259
+#define        MULOP2  260
+#define        NUMBER  261
+
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* The bison generated parser uses alloca.  AIX 3 forces us to put this
+   declaration at the beginning of the file.  The declaration in bison's
+   skeleton file comes too late.  This must come before <config.h>
+   because <config.h> may include arbitrary system headers.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include "gettextP.h"
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+#else
+# define FREE_EXPRESSION gettext_free_exp__
+# define __gettextparse gettextparse__
+#endif
+
+#define YYLEX_PARAM    &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM  arg
+
+#line 53 "plural.y"
+typedef union {
+  unsigned long int num;
+  enum operator op;
+  struct expression *exp;
+} YYSTYPE;
+#line 59 "plural.y"
+
+/* Prototypes for local functions.  */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+                                          struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+                                                  struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+                                            struct expression *left,
+                                            struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+                                                  struct expression *bexp,
+                                                  struct expression *tbranch,
+                                                  struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (nargs, op, args)
+     int nargs;
+     enum operator op;
+     struct expression * const *args;
+{
+  int i;
+  struct expression *newp;
+
+  /* If any of the argument could not be malloc'ed, just return NULL.  */
+  for (i = nargs - 1; i >= 0; i--)
+    if (args[i] == NULL)
+      goto fail;
+
+  /* Allocate a new expression.  */
+  newp = (struct expression *) malloc (sizeof (*newp));
+  if (newp != NULL)
+    {
+      newp->nargs = nargs;
+      newp->operation = op;
+      for (i = nargs - 1; i >= 0; i--)
+       newp->val.args[i] = args[i];
+      return newp;
+    }
+
+ fail:
+  for (i = nargs - 1; i >= 0; i--)
+    FREE_EXPRESSION (args[i]);
+
+  return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+     enum operator op;
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+     enum operator op;
+     struct expression *right;
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+     enum operator op;
+     struct expression *left;
+     struct expression *right;
+{
+  struct expression *args[2];
+
+  args[0] = left;
+  args[1] = right;
+  return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+     enum operator op;
+     struct expression *bexp;
+     struct expression *tbranch;
+     struct expression *fbranch;
+{
+  struct expression *args[3];
+
+  args[0] = bexp;
+  args[1] = tbranch;
+  args[2] = fbranch;
+  return new_exp (3, op, args);
+}
+
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
+#endif
+
+
+
+#define        YYFINAL         27
+#define        YYFLAG          -32768
+#define        YYNTBASE        16
+
+#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
+
+static const char yytranslate[] = {     0,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,    10,     2,     2,     2,     2,     5,     2,    14,
+    15,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,    12,     2,     2,
+     2,     2,     3,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,    13,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     4,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     1,     6,     7,     8,     9,
+    11
+};
+
+#if YYDEBUG != 0
+static const short yyprhs[] = {     0,
+     0,     2,     8,    12,    16,    20,    24,    28,    32,    35,
+    37,    39
+};
+
+static const short yyrhs[] = {    17,
+     0,    17,     3,    17,    12,    17,     0,    17,     4,    17,
+     0,    17,     5,    17,     0,    17,     6,    17,     0,    17,
+     7,    17,     0,    17,     8,    17,     0,    17,     9,    17,
+     0,    10,    17,     0,    13,     0,    11,     0,    14,    17,
+    15,     0
+};
+
+#endif
+
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+   178,   186,   190,   194,   198,   202,   206,   210,   214,   218,
+   222,   227
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","'?'","'|'",
+"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'",
+"start","exp", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+    16,    17,    17,    17,    17,    17,    17,    17,    17,    17,
+    17,    17
+};
+
+static const short yyr2[] = {     0,
+     1,     5,     3,     3,     3,     3,     3,     3,     2,     1,
+     1,     3
+};
+
+static const short yydefact[] = {     0,
+     0,    11,    10,     0,     1,     9,     0,     0,     0,     0,
+     0,     0,     0,     0,    12,     0,     3,     4,     5,     6,
+     7,     8,     0,     2,     0,     0,     0
+};
+
+static const short yydefgoto[] = {    25,
+     5
+};
+
+static const short yypact[] = {    -9,
+    -9,-32768,-32768,    -9,    34,-32768,    11,    -9,    -9,    -9,
+    -9,    -9,    -9,    -9,-32768,    24,    39,    43,    16,    26,
+    -3,-32768,    -9,    34,    21,    53,-32768
+};
+
+static const short yypgoto[] = {-32768,
+    -1
+};
+
+
+#define        YYLAST          53
+
+
+static const short yytable[] = {     6,
+     1,     2,     7,     3,     4,    14,    16,    17,    18,    19,
+    20,    21,    22,     8,     9,    10,    11,    12,    13,    14,
+    26,    24,    12,    13,    14,    15,     8,     9,    10,    11,
+    12,    13,    14,    13,    14,    23,     8,     9,    10,    11,
+    12,    13,    14,    10,    11,    12,    13,    14,    11,    12,
+    13,    14,    27
+};
+
+static const short yycheck[] = {     1,
+    10,    11,     4,    13,    14,     9,     8,     9,    10,    11,
+    12,    13,    14,     3,     4,     5,     6,     7,     8,     9,
+     0,    23,     7,     8,     9,    15,     3,     4,     5,     6,
+     7,     8,     9,     8,     9,    12,     3,     4,     5,     6,
+     7,     8,     9,     5,     6,     7,     8,     9,     6,     7,
+     8,     9,     0
+};
+#define YYPURE 1
+
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
+/* This file comes from bison-1.28.  */
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
+#ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#else /* not GNU C.  */
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
+#include <alloca.h>
+#else /* not sparc */
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+        instead, just don't use alloca.  */
+#include <malloc.h>
+#endif
+#else /* not MSDOS, or __TURBOC__ */
+#if defined(_AIX)
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
+ #pragma alloca
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
+                and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#endif /* __hpux */
+#endif
+#endif /* not _AIX */
+#endif /* not MSDOS, or __TURBOC__ */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
+
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
+#else
+#define YYSTACK_ALLOC malloc
+#endif
+
+/* Note: there must be only one dollar sign in this file.
+   It is replaced by the list of actions, each action
+   as one case of the switch.  */
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                -2
+#define YYEOF          0
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT        goto yyabortlab
+#define YYERROR                goto yyerrlab1
+/* Like YYERROR except do call yyerror.
+   This remains here temporarily to ease the
+   transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+#define YYFAIL         goto yyerrlab
+#define YYRECOVERING()  (!!yyerrstatus)
+#define YYBACKUP(token, value) \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    { yychar = (token), yylval = (value);                      \
+      yychar1 = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK;                                              \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
+while (0)
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+#ifndef YYPURE
+#define YYLEX          yylex()
+#endif
+
+#ifdef YYPURE
+#ifdef YYLSP_NEEDED
+#ifdef YYLEX_PARAM
+#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
+#else
+#define YYLEX          yylex(&yylval, &yylloc)
+#endif
+#else /* not YYLSP_NEEDED */
+#ifdef YYLEX_PARAM
+#define YYLEX          yylex(&yylval, YYLEX_PARAM)
+#else
+#define YYLEX          yylex(&yylval)
+#endif
+#endif /* not YYLSP_NEEDED */
+#endif
+
+/* If nonreentrant, generate the variables here */
+
+#ifndef YYPURE
+
+int    yychar;                 /*  the lookahead symbol                */
+YYSTYPE        yylval;                 /*  the semantic value of the           */
+                               /*  lookahead symbol                    */
+
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;                        /*  location data for the lookahead     */
+                               /*  symbol                              */
+#endif
+
+int yynerrs;                   /*  number of parse errors so far       */
+#endif  /* not YYPURE */
+
+#if YYDEBUG != 0
+int yydebug;                   /*  nonzero means print parse trace     */
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
+#endif
+
+/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
+
+#ifndef        YYINITDEPTH
+#define YYINITDEPTH 200
+#endif
+
+/*  YYMAXDEPTH is the maximum size the stacks can grow to
+    (effective only if the built-in stack extension method is used).  */
+
+#if YYMAXDEPTH == 0
+#undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 10000
+#endif
+\f
+/* Define __yy_memcpy.  Note that the size argument
+   should be passed with type unsigned int, because that is what the non-GCC
+   definitions require.  With GCC, __builtin_memcpy takes an arg
+   of type size_t, but it can handle unsigned int.  */
+
+#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
+#define __yy_memcpy(TO,FROM,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
+#else                          /* not GNU C or C++ */
+#ifndef __cplusplus
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (to, from, count)
+     char *to;
+     char *from;
+     unsigned int count;
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (char *to, char *from, unsigned int count)
+{
+  register char *t = to;
+  register char *f = from;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#endif
+#endif
+\f
+#line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+#ifdef __cplusplus
+#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* not __cplusplus */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+#endif /* not __cplusplus */
+#else /* not YYPARSE_PARAM */
+#define YYPARSE_PARAM_ARG
+#define YYPARSE_PARAM_DECL
+#endif /* not YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+#ifdef YYPARSE_PARAM
+int yyparse (void *);
+#else
+int yyparse (void);
+#endif
+#endif
+
+int
+yyparse(YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{
+  register int yystate;
+  register int yyn;
+  register short *yyssp;
+  register YYSTYPE *yyvsp;
+  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
+  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
+
+  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
+  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
+
+  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
+
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
+
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
+
+  YYSTYPE yyval;               /*  the variable used to return         */
+                               /*  semantic values from the action     */
+                               /*  routines                            */
+
+  int yylen;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss - 1;
+  yyvsp = yyvs;
+#ifdef YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+
+/* Push a new state, which is found in  yystate  .  */
+/* In all cases, when you get here, the value and location stacks
+   have just been pushed. so pushing a state here evens the stacks.  */
+yynewstate:
+
+  *++yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* Give user a chance to reallocate the stack */
+      /* Use copies of these so that the &'s don't force the real ones into memory. */
+      YYSTYPE *yyvs1 = yyvs;
+      short *yyss1 = yyss;
+#ifdef YYLSP_NEEDED
+      YYLTYPE *yyls1 = yyls;
+#endif
+
+      /* Get the current used size of the three stacks, in elements.  */
+      int size = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      /* Each stack pointer address is followed by the size of
+        the data in use in that stack, in bytes.  */
+#ifdef YYLSP_NEEDED
+      /* This used to be a conditional around just the two extra args,
+        but that might be undefined if yyoverflow is a macro.  */
+      yyoverflow("parser stack overflow",
+                &yyss1, size * sizeof (*yyssp),
+                &yyvs1, size * sizeof (*yyvsp),
+                &yyls1, size * sizeof (*yylsp),
+                &yystacksize);
+#else
+      yyoverflow("parser stack overflow",
+                &yyss1, size * sizeof (*yyssp),
+                &yyvs1, size * sizeof (*yyvsp),
+                &yystacksize);
+#endif
+
+      yyss = yyss1; yyvs = yyvs1;
+#ifdef YYLSP_NEEDED
+      yyls = yyls1;
+#endif
+#else /* no yyoverflow */
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+       {
+         yyerror("parser stack overflow");
+         if (yyfree_stacks)
+           {
+             free (yyss);
+             free (yyvs);
+#ifdef YYLSP_NEEDED
+             free (yyls);
+#endif
+           }
+         return 2;
+       }
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+       yystacksize = YYMAXDEPTH;
+#ifndef YYSTACK_USE_ALLOCA
+      yyfree_stacks = 1;
+#endif
+      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1,
+                  size * (unsigned int) sizeof (*yyssp));
+      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
+                  size * (unsigned int) sizeof (*yyvsp));
+#ifdef YYLSP_NEEDED
+      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1,
+                  size * (unsigned int) sizeof (*yylsp));
+#endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + size - 1;
+      yyvsp = yyvs + size - 1;
+#ifdef YYLSP_NEEDED
+      yylsp = yyls + size - 1;
+#endif
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
+#endif
+
+      if (yyssp >= yyss + yystacksize - 1)
+       YYABORT;
+    }
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Entering state %d\n", yystate);
+#endif
+
+  goto yybackup;
+ yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Reading a token: ");
+#endif
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)             /* This means end of input. */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;          /* Don't call YYLEX any more */
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Now at end of input.\n");
+#endif
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE(yychar);
+
+#if YYDEBUG != 0
+      if (yydebug)
+       {
+         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
+         /* Give the individual parser a way to print the precise meaning
+            of a token, for further debugging info.  */
+#ifdef YYPRINT
+         YYPRINT (stderr, yychar, yylval);
+#endif
+         fprintf (stderr, ")\n");
+       }
+#endif
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+/* Do the default action for the current state.  */
+yydefault:
+
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+
+/* Do a reduction.  yyn is the number of a rule to reduce with.  */
+yyreduce:
+  yylen = yyr2[yyn];
+  if (yylen > 0)
+    yyval = yyvsp[1-yylen]; /* implement default value of the action */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      int i;
+
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+              yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+
+  switch (yyn) {
+
+case 1:
+#line 179 "plural.y"
+{
+           if (yyvsp[0].exp == NULL)
+             YYABORT;
+           ((struct parse_args *) arg)->res = yyvsp[0].exp;
+         ;
+    break;}
+case 2:
+#line 187 "plural.y"
+{
+           yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 3:
+#line 191 "plural.y"
+{
+           yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 4:
+#line 195 "plural.y"
+{
+           yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 5:
+#line 199 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 6:
+#line 203 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 7:
+#line 207 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 8:
+#line 211 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 9:
+#line 215 "plural.y"
+{
+           yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+         ;
+    break;}
+case 10:
+#line 219 "plural.y"
+{
+           yyval.exp = new_exp_0 (var);
+         ;
+    break;}
+case 11:
+#line 223 "plural.y"
+{
+           if ((yyval.exp = new_exp_0 (num)) != NULL)
+             yyval.exp->val.num = yyvsp[0].num;
+         ;
+    break;}
+case 12:
+#line 228 "plural.y"
+{
+           yyval.exp = yyvsp[-1].exp;
+         ;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
+\f
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+       fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+
+#ifdef YYLSP_NEEDED
+  yylsp++;
+  if (yylen == 0)
+    {
+      yylsp->first_line = yylloc.first_line;
+      yylsp->first_column = yylloc.first_column;
+      yylsp->last_line = (yylsp-1)->last_line;
+      yylsp->last_column = (yylsp-1)->last_column;
+      yylsp->text = 0;
+    }
+  else
+    {
+      yylsp->last_line = (yylsp+yylen-1)->last_line;
+      yylsp->last_column = (yylsp+yylen-1)->last_column;
+    }
+#endif
+
+  /* Now "shift" the result of the reduction.
+     Determine what state that goes to,
+     based on the state we popped back to
+     and the rule number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+yyerrlab:   /* here on detecting error */
+
+  if (! yyerrstatus)
+    /* If not already recovering from an error, report this error.  */
+    {
+      ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+       {
+         int size = 0;
+         char *msg;
+         int x, count;
+
+         count = 0;
+         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
+         for (x = (yyn < 0 ? -yyn : 0);
+              x < (sizeof(yytname) / sizeof(char *)); x++)
+           if (yycheck[x + yyn] == x)
+             size += strlen(yytname[x]) + 15, count++;
+         msg = (char *) malloc(size + 15);
+         if (msg != 0)
+           {
+             strcpy(msg, "parse error");
+
+             if (count < 5)
+               {
+                 count = 0;
+                 for (x = (yyn < 0 ? -yyn : 0);
+                      x < (sizeof(yytname) / sizeof(char *)); x++)
+                   if (yycheck[x + yyn] == x)
+                     {
+                       strcat(msg, count == 0 ? ", expecting `" : " or `");
+                       strcat(msg, yytname[x]);
+                       strcat(msg, "'");
+                       count++;
+                     }
+               }
+             yyerror(msg);
+             free(msg);
+           }
+         else
+           yyerror ("parse error; also virtual memory exceeded");
+       }
+      else
+#endif /* YYERROR_VERBOSE */
+       yyerror("parse error");
+    }
+
+  goto yyerrlab1;
+yyerrlab1:   /* here on error raised explicitly by an action */
+
+  if (yyerrstatus == 3)
+    {
+      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
+       YYABORT;
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
+#endif
+
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token
+     after shifting the error token.  */
+
+  yyerrstatus = 3;             /* Each real token shifted decrements this */
+
+  goto yyerrhandle;
+
+yyerrdefault:  /* current state does not do anything special for the error token. */
+
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
+  if (yyn) goto yydefault;
+#endif
+
+yyerrpop:   /* pop the current state because it cannot handle the error token */
+
+  if (yyssp == yyss) YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#ifdef YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "Error: state stack now");
+      while (ssp1 != yyssp)
+       fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+yyerrhandle:
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting error token, ");
+#endif
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  yystate = yyn;
+  goto yynewstate;
+
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
+}
+#line 233 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+     struct expression *exp;
+{
+  if (exp == NULL)
+    return;
+
+  /* Handle the recursive case.  */
+  switch (exp->nargs)
+    {
+    case 3:
+      FREE_EXPRESSION (exp->val.args[2]);
+      /* FALLTHROUGH */
+    case 2:
+      FREE_EXPRESSION (exp->val.args[1]);
+      /* FALLTHROUGH */
+    case 1:
+      FREE_EXPRESSION (exp->val.args[0]);
+      /* FALLTHROUGH */
+    default:
+      break;
+    }
+
+  free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+     YYSTYPE *lval;
+     const char **pexp;
+{
+  const char *exp = *pexp;
+  int result;
+
+  while (1)
+    {
+      if (exp[0] == '\0')
+       {
+         *pexp = exp;
+         return YYEOF;
+       }
+
+      if (exp[0] != ' ' && exp[0] != '\t')
+       break;
+
+      ++exp;
+    }
+
+  result = *exp++;
+  switch (result)
+    {
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      {
+       unsigned long int n = result - '0';
+       while (exp[0] >= '0' && exp[0] <= '9')
+         {
+           n *= 10;
+           n += exp[0] - '0';
+           ++exp;
+         }
+       lval->num = n;
+       result = NUMBER;
+      }
+      break;
+
+    case '=':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = equal;
+         result = EQUOP2;
+       }
+      else
+       result = YYERRCODE;
+      break;
+
+    case '!':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = not_equal;
+         result = EQUOP2;
+       }
+      break;
+
+    case '&':
+    case '|':
+      if (exp[0] == result)
+       ++exp;
+      else
+       result = YYERRCODE;
+      break;
+
+    case '<':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = less_or_equal;
+       }
+      else
+       lval->op = less_than;
+      result = CMPOP2;
+      break;
+
+    case '>':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = greater_or_equal;
+       }
+      else
+       lval->op = greater_than;
+      result = CMPOP2;
+      break;
+
+    case '*':
+      lval->op = mult;
+      result = MULOP2;
+      break;
+
+    case '/':
+      lval->op = divide;
+      result = MULOP2;
+      break;
+
+    case '%':
+      lval->op = module;
+      result = MULOP2;
+      break;
+
+    case '+':
+      lval->op = plus;
+      result = ADDOP2;
+      break;
+
+    case '-':
+      lval->op = minus;
+      result = ADDOP2;
+      break;
+
+    case 'n':
+    case '?':
+    case ':':
+    case '(':
+    case ')':
+      /* Nothing, just return the character.  */
+      break;
+
+    case ';':
+    case '\n':
+    case '\0':
+      /* Be safe and let the user call this function again.  */
+      --exp;
+      result = YYEOF;
+      break;
+
+    default:
+      result = YYERRCODE;
+#if YYDEBUG != 0
+      --exp;
+#endif
+      break;
+    }
+
+  *pexp = exp;
+
+  return result;
+}
+
+
+static void
+yyerror (str)
+     const char *str;
+{
+  /* Do nothing.  We don't print error messages here.  */
+}
diff --git a/gcc/intl/plural.y b/gcc/intl/plural.y
new file mode 100644 (file)
index 0000000..be049a6
--- /dev/null
@@ -0,0 +1,413 @@
+%{
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* The bison generated parser uses alloca.  AIX 3 forces us to put this
+   declaration at the beginning of the file.  The declaration in bison's
+   skeleton file comes too late.  This must come before <config.h>
+   because <config.h> may include arbitrary system headers.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include "gettextP.h"
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+#else
+# define FREE_EXPRESSION gettext_free_exp__
+# define __gettextparse gettextparse__
+#endif
+
+#define YYLEX_PARAM    &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM  arg
+%}
+%pure_parser
+%expect 10
+
+%union {
+  unsigned long int num;
+  enum operator op;
+  struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions.  */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+                                          struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+                                                  struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+                                            struct expression *left,
+                                            struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+                                                  struct expression *bexp,
+                                                  struct expression *tbranch,
+                                                  struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (nargs, op, args)
+     int nargs;
+     enum operator op;
+     struct expression * const *args;
+{
+  int i;
+  struct expression *newp;
+
+  /* If any of the argument could not be malloc'ed, just return NULL.  */
+  for (i = nargs - 1; i >= 0; i--)
+    if (args[i] == NULL)
+      goto fail;
+
+  /* Allocate a new expression.  */
+  newp = (struct expression *) malloc (sizeof (*newp));
+  if (newp != NULL)
+    {
+      newp->nargs = nargs;
+      newp->operation = op;
+      for (i = nargs - 1; i >= 0; i--)
+       newp->val.args[i] = args[i];
+      return newp;
+    }
+
+ fail:
+  for (i = nargs - 1; i >= 0; i--)
+    FREE_EXPRESSION (args[i]);
+
+  return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+     enum operator op;
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+     enum operator op;
+     struct expression *right;
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+     enum operator op;
+     struct expression *left;
+     struct expression *right;
+{
+  struct expression *args[2];
+
+  args[0] = left;
+  args[1] = right;
+  return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+     enum operator op;
+     struct expression *bexp;
+     struct expression *tbranch;
+     struct expression *fbranch;
+{
+  struct expression *args[3];
+
+  args[0] = bexp;
+  args[1] = tbranch;
+  args[2] = fbranch;
+  return new_exp (3, op, args);
+}
+
+%}
+
+/* This declares that all operators have the same associativity and the
+   precedence order as in C.  See [Harbison, Steele: C, A Reference Manual].
+   There is no unary minus and no bitwise operators.
+   Operators with the same syntactic behaviour have been merged into a single
+   token, to save space in the array generated by bison.  */
+%right '?'             /*   ?          */
+%left '|'              /*   ||         */
+%left '&'              /*   &&         */
+%left EQUOP2           /*   == !=      */
+%left CMPOP2           /*   < > <= >=  */
+%left ADDOP2           /*   + -        */
+%left MULOP2           /*   * / %      */
+%right '!'             /*   !          */
+
+%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
+%token <num> NUMBER
+%type <exp> exp
+
+%%
+
+start:   exp
+         {
+           if ($1 == NULL)
+             YYABORT;
+           ((struct parse_args *) arg)->res = $1;
+         }
+       ;
+
+exp:     exp '?' exp ':' exp
+         {
+           $$ = new_exp_3 (qmop, $1, $3, $5);
+         }
+       | exp '|' exp
+         {
+           $$ = new_exp_2 (lor, $1, $3);
+         }
+       | exp '&' exp
+         {
+           $$ = new_exp_2 (land, $1, $3);
+         }
+       | exp EQUOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | exp CMPOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | exp ADDOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | exp MULOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | '!' exp
+         {
+           $$ = new_exp_1 (lnot, $2);
+         }
+       | 'n'
+         {
+           $$ = new_exp_0 (var);
+         }
+       | NUMBER
+         {
+           if (($$ = new_exp_0 (num)) != NULL)
+             $$->val.num = $1;
+         }
+       | '(' exp ')'
+         {
+           $$ = $2;
+         }
+       ;
+
+%%
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+     struct expression *exp;
+{
+  if (exp == NULL)
+    return;
+
+  /* Handle the recursive case.  */
+  switch (exp->nargs)
+    {
+    case 3:
+      FREE_EXPRESSION (exp->val.args[2]);
+      /* FALLTHROUGH */
+    case 2:
+      FREE_EXPRESSION (exp->val.args[1]);
+      /* FALLTHROUGH */
+    case 1:
+      FREE_EXPRESSION (exp->val.args[0]);
+      /* FALLTHROUGH */
+    default:
+      break;
+    }
+
+  free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+     YYSTYPE *lval;
+     const char **pexp;
+{
+  const char *exp = *pexp;
+  int result;
+
+  while (1)
+    {
+      if (exp[0] == '\0')
+       {
+         *pexp = exp;
+         return YYEOF;
+       }
+
+      if (exp[0] != ' ' && exp[0] != '\t')
+       break;
+
+      ++exp;
+    }
+
+  result = *exp++;
+  switch (result)
+    {
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      {
+       unsigned long int n = result - '0';
+       while (exp[0] >= '0' && exp[0] <= '9')
+         {
+           n *= 10;
+           n += exp[0] - '0';
+           ++exp;
+         }
+       lval->num = n;
+       result = NUMBER;
+      }
+      break;
+
+    case '=':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = equal;
+         result = EQUOP2;
+       }
+      else
+       result = YYERRCODE;
+      break;
+
+    case '!':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = not_equal;
+         result = EQUOP2;
+       }
+      break;
+
+    case '&':
+    case '|':
+      if (exp[0] == result)
+       ++exp;
+      else
+       result = YYERRCODE;
+      break;
+
+    case '<':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = less_or_equal;
+       }
+      else
+       lval->op = less_than;
+      result = CMPOP2;
+      break;
+
+    case '>':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = greater_or_equal;
+       }
+      else
+       lval->op = greater_than;
+      result = CMPOP2;
+      break;
+
+    case '*':
+      lval->op = mult;
+      result = MULOP2;
+      break;
+
+    case '/':
+      lval->op = divide;
+      result = MULOP2;
+      break;
+
+    case '%':
+      lval->op = module;
+      result = MULOP2;
+      break;
+
+    case '+':
+      lval->op = plus;
+      result = ADDOP2;
+      break;
+
+    case '-':
+      lval->op = minus;
+      result = ADDOP2;
+      break;
+
+    case 'n':
+    case '?':
+    case ':':
+    case '(':
+    case ')':
+      /* Nothing, just return the character.  */
+      break;
+
+    case ';':
+    case '\n':
+    case '\0':
+      /* Be safe and let the user call this function again.  */
+      --exp;
+      result = YYEOF;
+      break;
+
+    default:
+      result = YYERRCODE;
+#if YYDEBUG != 0
+      --exp;
+#endif
+      break;
+    }
+
+  *pexp = exp;
+
+  return result;
+}
+
+
+static void
+yyerror (str)
+     const char *str;
+{
+  /* Do nothing.  We don't print error messages here.  */
+}
diff --git a/gcc/intl/po2tbl.sed.in b/gcc/intl/po2tbl.sed.in
deleted file mode 100755 (executable)
index 0456286..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-1 {
-  i\
-/* Automatically generated by po2tbl.sed from @PACKAGE@.pot.  */\
-\
-#if HAVE_CONFIG_H\
-# include <config.h>\
-#endif\
-\
-#include "libgettext.h"\
-\
-const struct _msg_ent _msg_tbl[] = {
-  h
-  s/.*/0/
-  x
-}
-#
-# Write msgid entries in C array form.
-#
-/^msgid/ {
-  s/msgid[     ]*\(".*"\)/  {\1/
-  tb
-# Append the next line
-  :b
-  N
-# Look whether second part is continuation line.
-  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
-# Yes, then branch.
-  ta
-# Because we assume that the input file correctly formed the line
-# just read cannot be again be a msgid line.  So it's safe to ignore
-# it.
-  s/\(.*\)\n.*/\1/
-  bc
-# We found a continuation line.  But before printing insert '\'.
-  :a
-  s/\(.*\)\(\n.*\)/\1\\\2/
-  P
-# We cannot use D here.
-  s/.*\n\(.*\)/\1/
-# Some buggy seds do not clear the `successful substitution since last ``t'''
-# flag on `N', so we do a `t' here to clear it.
-  tb
-# Not reached
-  :c
-  x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
-  td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
-  :d
-  s/9\(_*\)$/_\1/
-  td
-# Assure at least one digit is available.
-  s/^\(_*\)$/0\1/
-# Increment the last digit.
-  s/8\(_*\)$/9\1/
-  s/7\(_*\)$/8\1/
-  s/6\(_*\)$/7\1/
-  s/5\(_*\)$/6\1/
-  s/4\(_*\)$/5\1/
-  s/3\(_*\)$/4\1/
-  s/2\(_*\)$/3\1/
-  s/1\(_*\)$/2\1/
-  s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
-  s/_/0/g
-  x
-  G
-  s/\(.*\)\n\([0-9]*\)/\1, \2},/
-  s/\(.*\)"$/\1/
-  p
-}
-#
-# Last line.
-#
-$ {
-  i\
-};\
-
-  g
-  s/0*\(.*\)/int _msg_tbl_length = \1;/p
-}
-d
diff --git a/gcc/intl/ref-add.sin b/gcc/intl/ref-add.sin
new file mode 100644 (file)
index 0000000..167374e
--- /dev/null
@@ -0,0 +1,31 @@
+# Add this package to a list of references stored in a text file.
+#
+#   Copyright (C) 2000 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, or (at your option)
+#   any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  ta
+  :a
+  s/ @PACKAGE@ / @PACKAGE@ /
+  tb
+  s/ $/ @PACKAGE@ /
+  :b
+  s/^/# Packages using this file:/
+}
diff --git a/gcc/intl/ref-del.sin b/gcc/intl/ref-del.sin
new file mode 100644 (file)
index 0000000..613cf37
--- /dev/null
@@ -0,0 +1,26 @@
+# Remove this package from a list of references stored in a text file.
+#
+#   Copyright (C) 2000 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, or (at your option)
+#   any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  s/ @PACKAGE@ / /
+  s/^/# Packages using this file:/
+}
index e25a086..2e420ad 100644 (file)
@@ -1,42 +1,43 @@
 /* Implementation of the textdomain(3) function.
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+   Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
+#include <string.h>
 
-#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
-# include <string.h>
+#ifdef _LIBC
+# include <libintl.h>
 #else
-# include <strings.h>
-# ifndef memcpy
-#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
-# endif
+# include "libgnuintl.h"
 #endif
+#include "gettextP.h"
 
 #ifdef _LIBC
-# include <libintl.h>
+/* We have to handle multi-threaded applications.  */
+# include <bits/libc-lock.h>
 #else
-# include "libgettext.h"
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
 #endif
 
 /* The internal variables in the standalone libintl.a must have different
@@ -69,6 +70,9 @@ extern const char *_nl_current_default_domain;
 # define TEXTDOMAIN textdomain__
 #endif
 
+/* Lock variable to protect the global data in the gettext implementation.  */
+__libc_rwlock_define (extern, _nl_state_lock)
+
 /* Set the current default message catalog to DOMAINNAME.
    If DOMAINNAME is null, return the current default.
    If DOMAINNAME is "", reset to the default of "messages".  */
@@ -76,38 +80,60 @@ char *
 TEXTDOMAIN (domainname)
      const char *domainname;
 {
-  char *old;
+  char *new_domain;
+  char *old_domain;
 
   /* A NULL pointer requests the current setting.  */
   if (domainname == NULL)
     return (char *) _nl_current_default_domain;
 
-  old = (char *) _nl_current_default_domain;
+  __libc_rwlock_wrlock (_nl_state_lock);
+
+  old_domain = (char *) _nl_current_default_domain;
 
   /* If domain name is the null string set to default domain "messages".  */
   if (domainname[0] == '\0'
       || strcmp (domainname, _nl_default_default_domain) == 0)
-    _nl_current_default_domain = _nl_default_default_domain;
+    {
+      _nl_current_default_domain = _nl_default_default_domain;
+      new_domain = (char *) _nl_current_default_domain;
+    }
+  else if (strcmp (domainname, old_domain) == 0)
+    /* This can happen and people will use it to signal that some
+       environment variable changed.  */
+    new_domain = old_domain;
   else
     {
       /* If the following malloc fails `_nl_current_default_domain'
         will be NULL.  This value will be returned and so signals we
         are out of core.  */
 #if defined _LIBC || defined HAVE_STRDUP
-      _nl_current_default_domain = strdup (domainname);
+      new_domain = strdup (domainname);
 #else
       size_t len = strlen (domainname) + 1;
-      char *cp = (char *) malloc (len);
-      if (cp != NULL)
-       memcpy (cp, domainname, len);
-      _nl_current_default_domain = cp;
+      new_domain = (char *) malloc (len);
+      if (new_domain != NULL)
+       memcpy (new_domain, domainname, len);
 #endif
+
+      if (new_domain != NULL)
+       _nl_current_default_domain = new_domain;
+    }
+
+  /* We use this possibility to signal a change of the loaded catalogs
+     since this is most likely the case and there is no other easy we
+     to do it.  Do it only when the call was successful.  */
+  if (new_domain != NULL)
+    {
+      ++_nl_msg_cat_cntr;
+
+      if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+       free (old_domain);
     }
 
-  if (old != _nl_default_default_domain)
-    free (old);
+  __libc_rwlock_unlock (_nl_state_lock);
 
-  return (char *) _nl_current_default_domain;
+  return new_domain;
 }
 
 #ifdef _LIBC
diff --git a/gcc/intl/xopen-msg.sed b/gcc/intl/xopen-msg.sed
deleted file mode 100755 (executable)
index b19c0bb..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#
-# The first directive in the .msg should be the definition of the
-# message set number.  We use always set number 1.
-#
-1 {
-  i\
-$set 1 # Automatically created by po2msg.sed
-  h
-  s/.*/0/
-  x
-}
-#
-# We copy all comments into the .msg file.  Perhaps they can help.
-#
-/^#/ s/^#[     ]*/$ /p
-#
-# We copy the original message as a comment into the .msg file.
-#
-/^msgid/ {
-# Does not work now
-#  /"$/! {
-#    s/\\$//
-#    s/$/ ... (more lines following)"/
-#  }
-  s/^msgid[    ]*"\(.*\)"$/$ Original Message: \1/
-  p
-}
-#
-# The .msg file contains, other then the .po file, only the translations
-# but each given a unique ID.  Starting from 1 and incrementing by 1 for
-# each message we assign them to the messages.
-# It is important that the .po file used to generate the cat-id-tbl.c file
-# (with po-to-tbl) is the same as the one used here.  (At least the order
-# of declarations must not be changed.)
-#
-/^msgstr/ {
-  s/msgstr[    ]*"\(.*\)"/\1/
-  x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
-  td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
-  :d
-  s/9\(_*\)$/_\1/
-  td
-# Assure at least one digit is available.
-  s/^\(_*\)$/0\1/
-# Increment the last digit.
-  s/8\(_*\)$/9\1/
-  s/7\(_*\)$/8\1/
-  s/6\(_*\)$/7\1/
-  s/5\(_*\)$/6\1/
-  s/4\(_*\)$/5\1/
-  s/3\(_*\)$/4\1/
-  s/2\(_*\)$/3\1/
-  s/1\(_*\)$/2\1/
-  s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
-  s/_/0/g
-  x
-# Bring the line in the format `<number> <message>'
-  G
-  s/^[^\n]*$/& /
-  s/\(.*\)\n\([0-9]*\)/\2 \1/
-# Clear flag from last substitution.
-  tb
-# Append the next line.
-  :b
-  N
-# Look whether second part is a continuation line.
-  s/\(.*\n\)"\(.*\)"/\1\2/
-# Yes, then branch.
-  ta
-  P
-  D
-# Note that `D' includes a jump to the start!!
-# We found a continuation line.  But before printing insert '\'.
-  :a
-  s/\(.*\)\(\n.*\)/\1\\\2/
-  P
-# We cannot use the sed command `D' here
-  s/.*\n\(.*\)/\1/
-  tb
-}
-d
index a902f29..3fbe7d5 100644 (file)
@@ -1,3 +1,9 @@
+2001-10-12  Zack Weinberg  <zack@codesourcery.com>
+
+       * Makefile.in.in: Upgrade to gettext-0.10.40.
+       * cat-id-tbl.c: Remove file.
+       * stamp-cat-id: Remove file.
+
 2001-10-08  Alexandre Oliva  <aoliva@redhat.com>
 
        * POTFILES.in: Add newly-added files.
index b9252d5..28726a2 100644 (file)
@@ -1,16 +1,19 @@
 # Makefile for program source directory in GNU NLS utilities package.
-# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# 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 Public License
+# 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
-STAMP = echo timestamp >
 @SET_MAKE@
 
 srcdir = @srcdir@
@@ -19,22 +22,20 @@ VPATH = @srcdir@
 
 prefix = @prefix@
 exec_prefix = @exec_prefix@
-datadir = $(prefix)/@DATADIRNAME@
+datadir = @datadir@
 localedir = $(datadir)/locale
-gnulocaledir = $(prefix)/share/locale
-gettextsrcdir = $(prefix)/share/gettext/po
-subdir = po
+gettextsrcdir = $(datadir)/gettext/po
 
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
 
 CC = @CC@
-GENCAT = @GENCAT@
-GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
+GMSGFMT = @GMSGFMT@
 MSGFMT = @MSGFMT@
-XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
-MSGMERGE = PATH=../src:$$PATH msgmerge
+XGETTEXT = @XGETTEXT@
+MSGMERGE = msgmerge
 
 DEFS = @DEFS@
 CFLAGS = @CFLAGS@
@@ -44,51 +45,43 @@ INCLUDES = -I.. -I$(top_srcdir)/intl
 
 COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
 
-SOURCES = cat-id-tbl.c
 POFILES = @POFILES@
 GMOFILES = @GMOFILES@
 DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
-stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
+$(POFILES) $(GMOFILES)
 
 POTFILES = \
 
 CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-INSTOBJEXT = @INSTOBJEXT@
 
 .SUFFIXES:
-.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+.SUFFIXES: .c .o .po .pox .gmo .mo
 
 .c.o:
        $(COMPILE) $<
 
 .po.pox:
-       $(MAKE) $(srcdir)/$(PACKAGE).pot
+       $(MAKE) $(PACKAGE).pot
        $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
 
 .po.mo:
        $(MSGFMT) -o $@ $<
 
 .po.gmo:
-       file=`echo $* | sed 's,.*/,,'`.gmo \
-         && rm -f $$file && $(GMSGFMT) -o $$file $<
-
-.po.cat:
-       sed -f ../intl/po2msg.sed < $< > $*.msg \
-         && rm -f $@ && $(GENCAT) $@ $*.msg
+       file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+         && rm -f $$file && $(GMSGFMT) --statistics -o $$file $<
 
 
 all: all-@USE_NLS@
 
-all-yes: $(CATALOGS) @MAINT@ $(srcdir)/cat-id-tbl.c 
+all-yes: $(CATALOGS)
 all-no:
 
-stamp-check-po: $(POTFILES)
-       $(STAMP) stamp-check-po
-
-check-po: stamp-check-po
+# 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)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in
        $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
          --add-comments --keyword=_ --keyword=N_ \
          --files-from=$(srcdir)/POTFILES.in \
@@ -96,78 +89,35 @@ $(srcdir)/$(PACKAGE).pot: $(POTFILES)
           || ( rm -f $(srcdir)/$(PACKAGE).pot \
                && mv $(PACKAGE).po $(srcdir)/$(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
-       if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
-         rm cat-id-tbl.tmp; \
-       else \
-         echo cat-id-tbl.c changed; \
-         rm -f $(srcdir)/cat-id-tbl.c; \
-         mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
-       fi
-       cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
-
 
 install: install-exec install-data
 install-exec:
 install-data: install-data-@USE_NLS@
-install-data-no: all
-install-data-yes: all
-       if test -r "$(MKINSTALLDIRS)"; then \
-         $(MKINSTALLDIRS) $(datadir); \
+       if test "$(PACKAGE)" = "gettext"; then \
+         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+         $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+                         $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
        else \
-         $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \
+         ; \
        fi
+install-data-no: all
+install-data-yes: all
+       $(mkinstalldirs) $(DESTDIR)$(datadir)
        @catalogs='$(CATALOGS)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
-         case "$$cat" in \
-           *.gmo) destdir=$(gnulocaledir);; \
-           *)     destdir=$(localedir);; \
-         esac; \
-         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
-         dir=$$destdir/$$lang/LC_MESSAGES; \
-         if test -r "$(MKINSTALLDIRS)"; then \
-           $(MKINSTALLDIRS) $$dir; \
-         else \
-           $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
-         fi; \
+         lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+         dir=$(localedir)/$$lang/LC_MESSAGES; \
+         $(mkinstalldirs) $(DESTDIR)$$dir; \
          if test -r $$cat; then \
-           $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
-           echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+           $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+           echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
          else \
-           $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
            echo "installing $(srcdir)/$$cat as" \
-                "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
-         fi; \
-         if test -r $$cat.m; then \
-           $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
-           echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
-         else \
-           if test -r $(srcdir)/$$cat.m ; then \
-             $(INSTALL_DATA) $(srcdir)/$$cat.m \
-               $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
-             echo "installing $(srcdir)/$$cat as" \
-                  "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
-           else \
-             true; \
-           fi; \
+                "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
          fi; \
        done
-       if test "$(PACKAGE)" = "gettext"; then \
-         if test -r "$(MKINSTALLDIRS)"; then \
-           $(MKINSTALLDIRS) $(gettextsrcdir); \
-         else \
-           $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
-         fi; \
-         $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
-                         $(gettextsrcdir)/Makefile.in.in; \
-       else \
-         : ; \
-       fi
 
 # Define this as empty until I found a useful application.
 installcheck:
@@ -176,77 +126,68 @@ uninstall:
        catalogs='$(CATALOGS)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
-         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
-         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
-         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
-         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
-         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+         lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+         rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
        done
-       rm -f $(gettextsrcdir)/po-Makefile.in.in
+       if test "$(PACKAGE)" = "gettext"; then \
+         rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+       else \
+         : ; \
+       fi
 
 check: all
 
-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:
 
 mostlyclean:
-       rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
-       rm -fr *.o stamp-check-pot
+       rm -f core core.* *.pox $(PACKAGE).po *.new.po
+       rm -fr *.o
 
 clean: mostlyclean
 
 distclean: clean
-       rm -f Makefile Makefile.in POTFILES *.mo *.gmo *.msg *.cat *.cat.m
+       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) cat-id-tbl.c stamp-cat-id
-
-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: update-po $(DISTFILES)
+       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 \
-         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
-           || cp -p $(srcdir)/$$file $(distdir); \
+         if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+         cp -p $$dir/$$file $(distdir); \
        done
 
 update-po: Makefile
-       $(MAKE) $(srcdir)/$(PACKAGE).pot
-       PATH=`pwd`/../src:$$PATH; \
+       $(MAKE) $(PACKAGE).pot
+       if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
        cd $(srcdir); \
-       catalogs='$(CATALOGS)'; \
+       catalogs='$(GMOFILES)'; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
-         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
-         mv $$lang.po $$lang.old.po; \
+         lang=`echo $$cat | sed 's/\.gmo$$//'`; \
          echo "$$lang:"; \
-         if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
-           rm -f $$lang.old.po; \
+         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.po; \
-           mv $$lang.old.po $$lang.po; \
+           rm -f $$lang.new.po; \
          fi; \
        done
+       $(MAKE) update-gmo
 
-POTFILES: POTFILES.in
-       ( if test 'x$(srcdir)' != 'x.'; then \
-           posrcprefix='$(top_srcdir)/'; \
-         else \
-           posrcprefix="../"; \
-         fi; \
-         rm -f $@-t $@ \
-           && (sed -e '/^#/d' -e '/^[  ]*$$/d' \
-                   -e "s@.*@   $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
-               | sed -e '$$s/\\$$//') > $@-t \
-           && chmod a-w $@-t \
-           && mv $@-t $@ )
-
-Makefile: Makefile.in.in ../config.status POTFILES
-       cd .. \
+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
 
diff --git a/gcc/po/cat-id-tbl.c b/gcc/po/cat-id-tbl.c
deleted file mode 100644 (file)
index 2a83d27..0000000
+++ /dev/null
@@ -1,3959 +0,0 @@
-/* Automatically generated by po2tbl.sed from @PACKAGE@.pot.  */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libgettext.h"
-
-const struct _msg_ent _msg_tbl[] = {
-  {"", 1},
-  {"offset outside bounds of constant string", 2},
-  {"__builtin_saveregs not supported by this target", 3},
-  {"argument of `__builtin_args_info' must be constant", 4},
-  {"argument of `__builtin_args_info' out of range", 5},
-  {"missing argument in `__builtin_args_info'", 6},
-  {"`va_start' used in function with fixed args", 7},
-  {"second parameter of `va_start' not last named argument", 8},
-  {"`__builtin_next_arg' called without an argument", 9},
-  {"too many arguments to function `va_start'", 10},
-  {"first argument to `va_arg' not of type `va_list'", 11},
-  {"`%s' is promoted to `%s' when passed through `...'", 12},
-  {"(so you should pass `%s' not `%s' to `va_arg')", 13},
-  {"invalid arg to `__builtin_frame_address'", 14},
-  {"invalid arg to `__builtin_return_address'", 15},
-  {"unsupported arg to `__builtin_frame_address'", 16},
-  {"unsupported arg to `__builtin_return_address'", 17},
-  {"second arg to `__builtin_expect' must be a constant", 18},
-  {"__builtin_longjmp second argument must be 1", 19},
-  {"__builtin_trap not supported by this target", 20},
-  {"built-in function `%s' not currently supported", 21},
-  {"`%s' is not defined outside of function scope", 22},
-  {"\
-string length `%d' is greater than the length `%d' ISO C%d compilers are \
-required to support", 23},
-  {"`%s' attribute directive ignored", 24},
-  {"`%s' attribute does not apply to types", 25},
-  {"wrong number of arguments specified for `%s' attribute", 26},
-  {"`%s' attribute ignored", 27},
-  {"unknown machine mode `%s'", 28},
-  {"no data type for mode `%s'", 29},
-  {"type with more precision than %s", 30},
-  {"section attribute cannot be specified for local variables", 31},
-  {"section of `%s' conflicts with previous declaration", 32},
-  {"section attribute not allowed for `%s'", 33},
-  {"section attributes are not supported for this target", 34},
-  {"requested alignment is not a constant", 35},
-  {"requested alignment is not a power of 2", 36},
-  {"requested alignment is too large", 37},
-  {"alignment may not be specified for `%s'", 38},
-  {"`%s' defined both normally and as an alias", 39},
-  {"alias arg not a string", 40},
-  {"`%s' attribute applies only to functions", 41},
-  {"can't set `%s' attribute after definition", 42},
-  {"overflow in constant expression", 43},
-  {"integer overflow in expression", 44},
-  {"floating point overflow in expression", 45},
-  {"large integer implicitly truncated to unsigned type", 46},
-  {"negative integer implicitly converted to unsigned type", 47},
-  {"overflow in implicit constant conversion", 48},
-  {"operation on `%s' may be undefined", 49},
-  {"expression statement has incomplete type", 50},
-  {"case label does not reduce to an integer constant", 51},
-  {"invalid truth-value expression", 52},
-  {"invalid operands to binary %s", 53},
-  {"comparison is always false due to limited range of data type", 54},
-  {"comparison is always true due to limited range of data type", 55},
-  {"comparison of unsigned expression >= 0 is always true", 56},
-  {"comparison of unsigned expression < 0 is always false", 57},
-  {"struct type value used where scalar is required", 58},
-  {"union type value used where scalar is required", 59},
-  {"array type value used where scalar is required", 60},
-  {"suggest parentheses around assignment used as truth value", 61},
-  {"invalid use of `restrict'", 62},
-  {"too few arguments to function `%s'", 63},
-  {"too many arguments to function `%s'", 64},
-  {"pointers are not permitted as case values", 65},
-  {"ISO C++ forbids range expressions in switch statements", 66},
-  {"ISO C forbids range expressions in switch statements", 67},
-  {"empty range specified", 68},
-  {"duplicate (or overlapping) case value", 69},
-  {"this is the first entry overlapping that value", 70},
-  {"duplicate case value", 71},
-  {"previously used here", 72},
-  {"multiple default labels in one switch", 73},
-  {"this is the first default label", 74},
-  {"ISO C++ forbids taking the address of a label", 75},
-  {"ISO C forbids taking the address of a label", 76},
-  {"-Wformat-y2k ignored without -Wformat", 77},
-  {"-Wformat-extra-args ignored without -Wformat", 78},
-  {"-Wformat-nonliteral ignored without -Wformat", 79},
-  {"-Wformat-security ignored without -Wformat", 80},
-  {"-Wmissing-format-attribute ignored without -Wformat", 81},
-  {"void value not ignored as it ought to be", 82},
-  {"conversion to non-scalar type requested", 83},
-  {"unknown C standard `%s'", 84},
-  {"array `%s' assumed to have one element", 85},
-  {"`struct %s' incomplete in scope ending here", 86},
-  {"`union %s' incomplete in scope ending here", 87},
-  {"`enum %s' incomplete in scope ending here", 88},
-  {"label `%s' used but not defined", 89},
-  {"label `%s' defined but not used", 90},
-  {"shadowing built-in function `%s'", 91},
-  {"shadowing library function `%s'", 92},
-  {"library function `%s' declared as non-function", 93},
-  {"built-in function `%s' declared as non-function", 94},
-  {"`%s' redeclared as different kind of symbol", 95},
-  {"previous declaration of `%s'", 96},
-  {"conflicting types for built-in function `%s'", 97},
-  {"conflicting types for `%s'", 98},
-  {"\
-A parameter list with an ellipsis can't match an empty parameter name list \
-declaration.", 99},
-  {"\
-An argument type that has a default promotion can't match an empty parameter \
-name list declaration.", 100},
-  {"redefinition of `%s'", 101},
-  {"redeclaration of `%s'", 102},
-  {"conflicting declarations of `%s'", 103},
-  {"`%s' previously defined here", 104},
-  {"`%s' previously declared here", 105},
-  {"prototype for `%s' follows", 106},
-  {"non-prototype definition here", 107},
-  {"prototype for `%s' follows and number of arguments doesn't match", 108},
-  {"prototype for `%s' follows and argument %d doesn't match", 109},
-  {"`%s' declared inline after being called", 110},
-  {"`%s' declared inline after its definition", 111},
-  {"static declaration for `%s' follows non-static", 112},
-  {"non-static declaration for `%s' follows static", 113},
-  {"const declaration for `%s' follows non-const", 114},
-  {"type qualifiers for `%s' conflict with previous decl", 115},
-  {"redundant redeclaration of `%s' in same scope", 116},
-  {"nested extern declaration of `%s'", 117},
-  {"`%s' used prior to declaration", 118},
-  {"`%s' was declared implicitly `extern' and later `static'", 119},
-  {"type mismatch with previous external decl", 120},
-  {"previous external decl of `%s'", 121},
-  {"type mismatch with previous implicit declaration", 122},
-  {"previous implicit declaration of `%s'", 123},
-  {"type of external `%s' is not global", 124},
-  {"`%s' was previously implicitly declared to return `int'", 125},
-  {"`%s' was declared `extern' and later `static'", 126},
-  {"extern declaration of `%s' doesn't match global one", 127},
-  {"`%s' locally external but globally static", 128},
-  {"declaration of `%s' shadows a parameter", 129},
-  {"declaration of `%s' shadows a symbol from the parameter list", 130},
-  {"declaration of `%s' shadows previous local", 131},
-  {"declaration of `%s' shadows global declaration", 132},
-  {"function `%s' was previously declared within a block", 133},
-  {"implicit declaration of function `%s'", 134},
-  {"label %s referenced outside of any function", 135},
-  {"duplicate label declaration `%s'", 136},
-  {"this is a previous declaration", 137},
-  {"unnamed struct/union that defines no instances", 138},
-  {"useless keyword or type name in empty declaration", 139},
-  {"two types specified in one empty declaration", 140},
-  {"empty declaration", 141},
-  {"\
-ISO C89 does not support `static' or type qualifiers in parameter array \
-declarators", 142},
-  {"ISO C89 does not support `[*]' array declarators", 143},
-  {"GCC does not yet properly implement `[*]' array declarators", 144},
-  {"static or type qualifiers in abstract declarator", 145},
-  {"`%s' is usually a function", 146},
-  {"typedef `%s' is initialized", 147},
-  {"function `%s' is initialized like a variable", 148},
-  {"parameter `%s' is initialized", 149},
-  {"variable-sized object may not be initialized", 150},
-  {"variable `%s' has initializer but incomplete type", 151},
-  {"elements of array `%s' have incomplete type", 152},
-  {"declaration of `%s' has `extern' and is initialized", 153},
-  {"initializer fails to determine size of `%s'", 154},
-  {"array size missing in `%s'", 155},
-  {"zero or negative size array `%s'", 156},
-  {"storage size of `%s' isn't known", 157},
-  {"storage size of `%s' isn't constant", 158},
-  {"ignoring asm-specifier for non-static local variable `%s'", 159},
-  {"ANSI C forbids parameter `%s' shadowing typedef", 160},
-  {"`long long long' is too long for GCC", 161},
-  {"ISO C89 does not support `long long'", 162},
-  {"duplicate `%s'", 163},
-  {"two or more data types in declaration of `%s'", 164},
-  {"`%s' fails to be a typedef or built in type", 165},
-  {"type defaults to `int' in declaration of `%s'", 166},
-  {"both long and short specified for `%s'", 167},
-  {"long or short specified with char for `%s'", 168},
-  {"long or short specified with floating type for `%s'", 169},
-  {"the only valid combination is `long double'", 170},
-  {"both signed and unsigned specified for `%s'", 171},
-  {"long, short, signed or unsigned invalid for `%s'", 172},
-  {"long, short, signed or unsigned used invalidly for `%s'", 173},
-  {"complex invalid for `%s'", 174},
-  {"ISO C89 does not support complex types", 175},
-  {"ISO C does not support plain `complex' meaning `double complex'", 176},
-  {"ISO C does not support complex integer types", 177},
-  {"duplicate `const'", 178},
-  {"duplicate `restrict'", 179},
-  {"duplicate `volatile'", 180},
-  {"multiple storage classes in declaration of `%s'", 181},
-  {"function definition declared `auto'", 182},
-  {"function definition declared `register'", 183},
-  {"function definition declared `typedef'", 184},
-  {"storage class specified for structure field `%s'", 185},
-  {"storage class specified for parameter `%s'", 186},
-  {"storage class specified for typename", 187},
-  {"`%s' initialized and declared `extern'", 188},
-  {"`%s' has both `extern' and initializer", 189},
-  {"nested function `%s' declared `extern'", 190},
-  {"top-level declaration of `%s' specifies `auto'", 191},
-  {"static or type qualifiers in non-parameter array declarator", 192},
-  {"declaration of `%s' as array of voids", 193},
-  {"declaration of `%s' as array of functions", 194},
-  {"size of array `%s' has non-integer type", 195},
-  {"ISO C forbids zero-size array `%s'", 196},
-  {"size of array `%s' is negative", 197},
-  {"ISO C89 forbids array `%s' whose size can't be evaluated", 198},
-  {"ISO C89 forbids variable-size array `%s'", 199},
-  {"size of array `%s' is too large", 200},
-  {"ISO C89 does not support flexible array members", 201},
-  {"array type has incomplete element type", 202},
-  {"ANSI C forbids const or volatile function types", 203},
-  {"`%s' declared as function returning a function", 204},
-  {"`%s' declared as function returning an array", 205},
-  {"ISO C forbids qualified void function return type", 206},
-  {"type qualifiers ignored on function return type", 207},
-  {"ISO C forbids qualified function types", 208},
-  {"invalid type modifier within pointer declarator", 209},
-  {"ISO C forbids const or volatile function types", 210},
-  {"variable or field `%s' declared void", 211},
-  {"attributes in parameter array declarator ignored", 212},
-  {"invalid type modifier within array declarator", 213},
-  {"field `%s' declared as a function", 214},
-  {"field `%s' has incomplete type", 215},
-  {"invalid storage class for function `%s'", 216},
-  {"`noreturn' function returns non-void value", 217},
-  {"cannot inline function `main'", 218},
-  {"variable `%s' declared `inline'", 219},
-  {"function declaration isn't a prototype", 220},
-  {"parameter names (without types) in function declaration", 221},
-  {"parameter `%s' has incomplete type", 222},
-  {"parameter has incomplete type", 223},
-  {"parameter `%s' points to incomplete type", 224},
-  {"parameter points to incomplete type", 225},
-  {"parameter `%s' has just a forward declaration", 226},
-  {"`void' in parameter list must be the entire list", 227},
-  {"`%s %s' declared inside parameter list", 228},
-  {"anonymous struct declared inside parameter list", 229},
-  {"anonymous union declared inside parameter list", 230},
-  {"anonymous enum declared inside parameter list", 231},
-  {"\
-its scope is only this definition or declaration, which is probably not what \
-you want.", 232},
-  {"redefinition of `%s %s'", 233},
-  {"%s defined inside parms", 234},
-  {"union", 235},
-  {"structure", 236},
-  {"%s has no %s", 237},
-  {"struct", 238},
-  {"named members", 239},
-  {"members", 240},
-  {"nested redefinition of `%s'", 241},
-  {"bit-field `%s' width not an integer constant", 242},
-  {"bit-field `%s' has invalid type", 243},
-  {"bit-field `%s' type invalid in ISO C", 244},
-  {"negative width in bit-field `%s'", 245},
-  {"width of `%s' exceeds its type", 246},
-  {"zero width for bit-field `%s'", 247},
-  {"`%s' is narrower than values of its type", 248},
-  {"flexible array member in union", 249},
-  {"flexible array member not at end of struct", 250},
-  {"flexible array member in otherwise empty struct", 251},
-  {"duplicate member `%s'", 252},
-  {"union cannot be made transparent", 253},
-  {"redeclaration of `enum %s'", 254},
-  {"enum defined inside parms", 255},
-  {"enumeration values exceed range of largest integer", 256},
-  {"enumerator value for `%s' not integer constant", 257},
-  {"overflow in enumeration values", 258},
-  {"ISO C restricts enumerator values to range of `int'", 259},
-  {"return type is an incomplete type", 260},
-  {"return type defaults to `int'", 261},
-  {"no previous prototype for `%s'", 262},
-  {"`%s' was used with no prototype before its definition", 263},
-  {"no previous declaration for `%s'", 264},
-  {"`%s' was used with no declaration before its definition", 265},
-  {"return type of `%s' is not `int'", 266},
-  {"first argument of `%s' should be `int'", 267},
-  {"second argument of `%s' should be `char **'", 268},
-  {"third argument of `%s' should probably be `char **'", 269},
-  {"`%s' takes only zero or two arguments", 270},
-  {"`%s' is normally a non-static function", 271},
-  {"parm types given both in parmlist and separately", 272},
-  {"parameter name omitted", 273},
-  {"parameter `%s' declared void", 274},
-  {"parameter name missing from parameter list", 275},
-  {"multiple parameters named `%s'", 276},
-  {"type of `%s' defaults to `int'", 277},
-  {"declaration for parameter `%s' but no such parameter", 278},
-  {"number of arguments doesn't match prototype", 279},
-  {"promoted argument `%s' doesn't match prototype", 280},
-  {"argument `%s' doesn't match prototype", 281},
-  {"type of parameter `%s' is not declared", 282},
-  {"this function may return with or without a value", 283},
-  {"size of return value of `%s' is %u bytes", 284},
-  {"size of return value of `%s' is larger than %d bytes", 285},
-  {"`for' loop initial declaration used outside C99 mode", 286},
-  {"`%s %s' declared in `for' loop initial declaration", 287},
-  {"declaration of non-variable `%s' in `for' loop initial declaration", 288},
-  {"declaration of static variable `%s' in `for' loop initial declaration", 289},
-  {"declaration of `extern' variable `%s' in `for' loop initial declaration", 290},
-  {"could not open dump file `%s'", 291},
-  {"ignoring `%s' at end of `-f%s'", 292},
-  {"argument format specified for non-function `%s'", 293},
-  {"unrecognized format specifier", 294},
-  {"`%s' is an unrecognized format function type", 295},
-  {"format string has invalid operand number", 296},
-  {"format string arg follows the args to be formatted", 297},
-  {"format string arg not a string type", 298},
-  {"args to be formatted is not '...'", 299},
-  {"strftime formats cannot format arguments", 300},
-  {"function does not return string type", 301},
-  {"` ' flag", 302},
-  {"the ` ' printf flag", 303},
-  {"`+' flag", 304},
-  {"the `+' printf flag", 305},
-  {"`#' flag", 306},
-  {"the `#' printf flag", 307},
-  {"`0' flag", 308},
-  {"the `0' printf flag", 309},
-  {"`-' flag", 310},
-  {"the `-' printf flag", 311},
-  {"`'' flag", 312},
-  {"the `'' printf flag", 313},
-  {"`I' flag", 314},
-  {"the `I' printf flag", 315},
-  {"field width", 316},
-  {"field width in printf format", 317},
-  {"precision", 318},
-  {"precision in printf format", 319},
-  {"length modifier", 320},
-  {"length modifier in printf format", 321},
-  {"assignment suppression", 322},
-  {"`a' flag", 323},
-  {"the `a' scanf flag", 324},
-  {"field width in scanf format", 325},
-  {"length modifier in scanf format", 326},
-  {"the `'' scanf flag", 327},
-  {"the `I' scanf flag", 328},
-  {"`_' flag", 329},
-  {"the `_' strftime flag", 330},
-  {"the `-' strftime flag", 331},
-  {"the `0' strftime flag", 332},
-  {"`^' flag", 333},
-  {"the `^' strftime flag", 334},
-  {"the `#' strftime flag", 335},
-  {"field width in strftime format", 336},
-  {"`E' modifier", 337},
-  {"the `E' strftime modifier", 338},
-  {"`O' modifier", 339},
-  {"the `O' strftime modifier", 340},
-  {"the `O' modifier", 341},
-  {"fill character", 342},
-  {"fill character in strfmon format", 343},
-  {"the `^' strfmon flag", 344},
-  {"the `+' strfmon flag", 345},
-  {"`(' flag", 346},
-  {"the `(' strfmon flag", 347},
-  {"`!' flag", 348},
-  {"the `!' strfmon flag", 349},
-  {"the `-' strfmon flag", 350},
-  {"field width in strfmon format", 351},
-  {"left precision", 352},
-  {"left precision in strfmon format", 353},
-  {"right precision", 354},
-  {"right precision in strfmon format", 355},
-  {"length modifier in strfmon format", 356},
-  {"function might be possible candidate for `%s' format attribute", 357},
-  {"missing $ operand number in format", 358},
-  {"%s does not support %%n$ operand number formats", 359},
-  {"operand number out of range in format", 360},
-  {"format argument %d used more than once in %s format", 361},
-  {"format argument %d unused before used argument %d in $-style format", 362},
-  {"format not a string literal, format string not checked", 363},
-  {"format not a string literal and no format arguments", 364},
-  {"format not a string literal, argument types not checked", 365},
-  {"too many arguments for format", 366},
-  {"unused arguments in $-style format", 367},
-  {"zero-length format string", 368},
-  {"format is a wide character string", 369},
-  {"unterminated format string", 370},
-  {"null format string", 371},
-  {"embedded `\\0' in format", 372},
-  {"spurious trailing `%%' in format", 373},
-  {"repeated %s in format", 374},
-  {"missing fill character at end of strfmon format", 375},
-  {"too few arguments for format", 376},
-  {"zero width in %s format", 377},
-  {"empty left precision in %s format", 378},
-  {"field precision", 379},
-  {"empty precision in %s format", 380},
-  {"%s does not support the `%s' %s length modifier", 381},
-  {"conversion lacks type at end of format", 382},
-  {"unknown conversion type character `%c' in format", 383},
-  {"unknown conversion type character 0x%x in format", 384},
-  {"%s does not support the `%%%c' %s format", 385},
-  {"%s used with `%%%c' %s format", 386},
-  {"%s does not support %s", 387},
-  {"%s does not support %s with the `%%%c' %s format", 388},
-  {"%s ignored with %s and `%%%c' %s format", 389},
-  {"%s ignored with %s in %s format", 390},
-  {"use of %s and %s together with `%%%c' %s format", 391},
-  {"use of %s and %s together in %s format", 392},
-  {"`%%%c' yields only last 2 digits of year in some locales", 393},
-  {"`%%%c' yields only last 2 digits of year", 394},
-  {"no closing `]' for `%%[' format", 395},
-  {"use of `%s' length modifier with `%c' type character", 396},
-  {"%s does not support the `%%%s%c' %s format", 397},
-  {"operand number specified with suppressed assignment", 398},
-  {"operand number specified for format taking no argument", 399},
-  {"writing through null pointer (arg %d)", 400},
-  {"reading through null pointer (arg %d)", 401},
-  {"writing into constant object (arg %d)", 402},
-  {"extra type qualifiers in format argument (arg %d)", 403},
-  {"format argument is not a pointer (arg %d)", 404},
-  {"format argument is not a pointer to a pointer (arg %d)", 405},
-  {"%s is not type %s (arg %d)", 406},
-  {"%s format, %s arg (arg %d)", 407},
-  {"badly nested C headers from preprocessor", 408},
-  {"leaving more files than we entered", 409},
-  {"ignoring #pragma %s %s", 410},
-  {"ignoring #pragma %s", 411},
-  {"universal-character-name '\\U%08x' not valid in identifier", 412},
-  {"universal-character-name '\\u%04x' not valid in identifier", 413},
-  {"both 'f' and 'l' suffixes on floating constant", 414},
-  {"floating point number exceeds range of '%s'", 415},
-  {"stray '%c' in program", 416},
-  {"stray '\\%o' in program", 417},
-  {"floating constant may not be in radix 16", 418},
-  {"traditional C rejects the 'f' suffix", 419},
-  {"traditional C rejects the 'l' suffix", 420},
-  {"ISO C forbids imaginary numeric constants", 421},
-  {"floating point number exceeds range of 'double'", 422},
-  {"two 'u' suffixes on integer constant", 423},
-  {"traditional C rejects the 'u' suffix", 424},
-  {"three 'l' suffixes on integer constant", 425},
-  {"'lul' is not a valid integer suffix", 426},
-  {"'Ll' and 'lL' are not valid integer suffixes", 427},
-  {"ISO C89 forbids long long integer constants", 428},
-  {"more than one 'i' or 'j' suffix on integer constant", 429},
-  {"\
-integer constant is too large for this configuration of the compiler - \
-truncated to %d bits", 430},
-  {"width of integer constant changes with -traditional", 431},
-  {"integer constant is unsigned in ISO C, signed with -traditional", 432},
-  {"width of integer constant may change on other systems with -traditional", 433},
-  {"integer constant larger than the maximum value of %s", 434},
-  {"decimal constant is so large that it is unsigned", 435},
-  {"integer constant is larger than the maximum value for its type", 436},
-  {"missing white space after number '%.*s'", 437},
-  {"Ignoring invalid multibyte character", 438},
-  {"syntax error", 439},
-  {"ISO C forbids an empty source file", 440},
-  {"argument of `asm' is not a constant string", 441},
-  {"ISO C forbids data definition with no type or storage class", 442},
-  {"data definition has no type or storage class", 443},
-  {"ISO C does not allow extra `;' outside of a function", 444},
-  {"traditional C rejects the unary plus operator", 445},
-  {"`sizeof' applied to a bit-field", 446},
-  {"ISO C forbids omitting the middle term of a ?: expression", 447},
-  {"ISO C89 forbids compound literals", 448},
-  {"ISO C forbids braced-groups within expressions", 449},
-  {"traditional C rejects string concatenation", 450},
-  {"ISO C does not permit use of `varargs.h'", 451},
-  {"`%s' is not at beginning of declaration", 452},
-  {"ISO C forbids empty initializer braces", 453},
-  {"ISO C89 forbids specifying subobject to initialize", 454},
-  {"obsolete use of designated initializer without `='", 455},
-  {"obsolete use of designated initializer with `:'", 456},
-  {"ISO C forbids specifying range of elements to initialize", 457},
-  {"ISO C forbids nested functions", 458},
-  {"ISO C forbids forward references to `enum' types", 459},
-  {"comma at end of enumerator list", 460},
-  {"no semicolon at end of struct or union", 461},
-  {"extra semicolon in struct or union specified", 462},
-  {"ISO C doesn't support unnamed structs/unions", 463},
-  {"ISO C forbids member declarations with no members", 464},
-  {"attributes on type name ignored", 465},
-  {"storage class specifier in array declarator", 466},
-  {"deprecated use of label at end of compound statement", 467},
-  {"ISO C89 forbids mixed declarations and code", 468},
-  {"ISO C forbids label declarations", 469},
-  {"braced-group within expression allowed only inside a function", 470},
-  {"empty body in an else-statement", 471},
-  {"ISO C forbids `goto *expr;'", 472},
-  {"ISO C forbids forward parameter declarations", 473},
-  {"ISO C requires a named argument before `...'", 474},
-  {"`...' in old-style identifier list", 475},
-  {"%s at end of input", 476},
-  {"%s before %s'%c'", 477},
-  {"%s before %s'\\x%x'", 478},
-  {"%s before string constant", 479},
-  {"%s before numeric constant", 480},
-  {"%s before \"%s\"", 481},
-  {"%s before '%s' token", 482},
-  {"syntax error at '%s' token", 483},
-  {"YYDEBUG not defined.", 484},
-  {"\
-#pragma pack (pop) encountered without matching #pragma pack (push, <n>)", 485},
-  {"\
-#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, \
-<n>)", 486},
-  {"junk at end of '#pragma pack'", 487},
-  {"junk at end of #pragma weak", 488},
-  {"break statement not within loop or switch", 489},
-  {"continue statement not within a loop", 490},
-  {"destructor needed for `%#D'", 491},
-  {"where case label appears here", 492},
-  {"\
-(enclose actions of previous case statements requiring destructors in their \
-own scope.)", 493},
-  {"%s qualifier ignored on asm", 494},
-  {"`%s' has an incomplete type", 495},
-  {"invalid use of void expression", 496},
-  {"invalid use of array with unspecified bounds", 497},
-  {"invalid use of undefined type `%s %s'", 498},
-  {"invalid use of incomplete typedef `%s'", 499},
-  {"function types not truly compatible in ISO C", 500},
-  {"types are not quite compatible", 501},
-  {"sizeof applied to a function type", 502},
-  {"sizeof applied to a void type", 503},
-  {"sizeof applied to an incomplete type", 504},
-  {"arithmetic on pointer to an incomplete type", 505},
-  {"__alignof__ applied to an incomplete type", 506},
-  {"`__alignof' applied to a bit-field", 507},
-  {"invalid use of non-lvalue array", 508},
-  {"%s has no member named `%s'", 509},
-  {"request for member `%s' in something not a structure or union", 510},
-  {"dereferencing pointer to incomplete type", 511},
-  {"dereferencing `void *' pointer", 512},
-  {"invalid type argument of `%s'", 513},
-  {"subscript missing in array reference", 514},
-  {"array subscript has type `char'", 515},
-  {"array subscript is not an integer", 516},
-  {"ISO C forbids subscripting `register' array", 517},
-  {"ISO C89 forbids subscripting non-lvalue array", 518},
-  {"subscript has type `char'", 519},
-  {"subscripted value is neither array nor pointer", 520},
-  {"`%s' undeclared here (not in a function)", 521},
-  {"`%s' undeclared (first use in this function)", 522},
-  {"(Each undeclared identifier is reported only once", 523},
-  {"for each function it appears in.)", 524},
-  {"local declaration of `%s' hides instance variable", 525},
-  {"called object is not a function", 526},
-  {"too many arguments to function", 527},
-  {"type of formal parameter %d is incomplete", 528},
-  {"%s as integer rather than floating due to prototype", 529},
-  {"%s as integer rather than complex due to prototype", 530},
-  {"%s as complex rather than floating due to prototype", 531},
-  {"%s as floating rather than integer due to prototype", 532},
-  {"%s as complex rather than integer due to prototype", 533},
-  {"%s as floating rather than complex due to prototype", 534},
-  {"%s as `float' rather than `double' due to prototype", 535},
-  {"%s with different width due to prototype", 536},
-  {"%s as unsigned due to prototype", 537},
-  {"%s as signed due to prototype", 538},
-  {"too few arguments to function", 539},
-  {"suggest parentheses around + or - inside shift", 540},
-  {"suggest parentheses around && within ||", 541},
-  {"suggest parentheses around arithmetic in operand of |", 542},
-  {"suggest parentheses around comparison in operand of |", 543},
-  {"suggest parentheses around arithmetic in operand of ^", 544},
-  {"suggest parentheses around comparison in operand of ^", 545},
-  {"suggest parentheses around + or - in operand of &", 546},
-  {"suggest parentheses around comparison in operand of &", 547},
-  {"comparisons like X<=Y<=Z do not have their mathematical meaning", 548},
-  {"right shift count is negative", 549},
-  {"right shift count >= width of type", 550},
-  {"left shift count is negative", 551},
-  {"left shift count >= width of type", 552},
-  {"shift count is negative", 553},
-  {"shift count >= width of type", 554},
-  {"comparing floating point with == or != is unsafe", 555},
-  {"ISO C forbids comparison of `void *' with function pointer", 556},
-  {"comparison of distinct pointer types lacks a cast", 557},
-  {"comparison between pointer and integer", 558},
-  {"ISO C forbids ordered comparisons of pointers to functions", 559},
-  {"comparison of complete and incomplete pointers", 560},
-  {"ordered comparison of pointer with integer zero", 561},
-  {"unordered comparison on non-floating point argument", 562},
-  {"comparison between signed and unsigned", 563},
-  {"comparison of promoted ~unsigned with constant", 564},
-  {"comparison of promoted ~unsigned with unsigned", 565},
-  {"pointer of type `void *' used in arithmetic", 566},
-  {"pointer to a function used in arithmetic", 567},
-  {"pointer of type `void *' used in subtraction", 568},
-  {"pointer to a function used in subtraction", 569},
-  {"wrong type argument to unary plus", 570},
-  {"wrong type argument to unary minus", 571},
-  {"ISO C does not support `~' for complex conjugation", 572},
-  {"wrong type argument to bit-complement", 573},
-  {"wrong type argument to abs", 574},
-  {"wrong type argument to conjugation", 575},
-  {"wrong type argument to unary exclamation mark", 576},
-  {"ISO C does not support `++' and `--' on complex types", 577},
-  {"wrong type argument to %s", 578},
-  {"%s of pointer to unknown structure", 579},
-  {"invalid lvalue in increment", 580},
-  {"invalid lvalue in decrement", 581},
-  {"increment", 582},
-  {"decrement", 583},
-  {"ISO C forbids the address of a cast expression", 584},
-  {"invalid lvalue in unary `&'", 585},
-  {"attempt to take address of bit-field structure member `%s'", 586},
-  {"%s", 587},
-  {"ISO C forbids use of conditional expressions as lvalues", 588},
-  {"ISO C forbids use of compound expressions as lvalues", 589},
-  {"ISO C forbids use of cast expressions as lvalues", 590},
-  {"%s of read-only member `%s'", 591},
-  {"%s of read-only variable `%s'", 592},
-  {"%s of read-only location", 593},
-  {"cannot take address of bitfield `%s'", 594},
-  {"global register variable `%s' used in nested function", 595},
-  {"register variable `%s' used in nested function", 596},
-  {"address of global register variable `%s' requested", 597},
-  {"cannot put object with volatile field into register", 598},
-  {"address of register variable `%s' requested", 599},
-  {"signed and unsigned type in conditional expression", 600},
-  {"ISO C forbids conditional expr with only one void side", 601},
-  {"ISO C forbids conditional expr between `void *' and function pointer", 602},
-  {"pointer type mismatch in conditional expression", 603},
-  {"pointer/integer type mismatch in conditional expression", 604},
-  {"type mismatch in conditional expression", 605},
-  {"left-hand operand of comma expression has no effect", 606},
-  {"cast specifies array type", 607},
-  {"cast specifies function type", 608},
-  {"ISO C forbids casting nonscalar to the same type", 609},
-  {"ISO C forbids casts to union type", 610},
-  {"cast to union type from type not present in union", 611},
-  {"cast discards qualifiers from pointer target type", 612},
-  {"cast increases required alignment of target type", 613},
-  {"cast from pointer to integer of different size", 614},
-  {"cast does not match function type", 615},
-  {"cast to pointer from integer of different size", 616},
-  {"invalid lvalue in assignment", 617},
-  {"assignment", 618},
-  {"%s makes qualified function pointer from unqualified", 619},
-  {"%s discards qualifiers from pointer target type", 620},
-  {"ISO C prohibits argument conversion to union type", 621},
-  {"ISO C forbids %s between function pointer and `void *'", 622},
-  {"pointer targets in %s differ in signedness", 623},
-  {"%s from incompatible pointer type", 624},
-  {"%s makes pointer from integer without a cast", 625},
-  {"%s makes integer from pointer without a cast", 626},
-  {"incompatible type for argument %d of `%s'", 627},
-  {"incompatible type for argument %d of indirect function call", 628},
-  {"incompatible types in %s", 629},
-  {"passing arg %d of `%s'", 630},
-  {"passing arg %d of pointer to function", 631},
-  {"initializer for static variable is not constant", 632},
-  {"initializer for static variable uses complicated arithmetic", 633},
-  {"aggregate initializer is not constant", 634},
-  {"aggregate initializer uses complicated arithmetic", 635},
-  {"traditional C rejects automatic aggregate initialization", 636},
-  {"(near initialization for `%s')", 637},
-  {"char-array initialized from wide string", 638},
-  {"int-array initialized from non-wide string", 639},
-  {"initializer-string for array of chars is too long", 640},
-  {"array initialized from non-constant array expression", 641},
-  {"initializer element is not constant", 642},
-  {"initialization", 643},
-  {"initializer element is not computable at load time", 644},
-  {"invalid initializer", 645},
-  {"extra brace group at end of initializer", 646},
-  {"missing braces around initializer", 647},
-  {"braces around scalar initializer", 648},
-  {"initialization of flexible array member in a nested context", 649},
-  {"initialization of a flexible array member", 650},
-  {"deprecated initialization of zero-length array", 651},
-  {"initialization of zero-length array before end of structure", 652},
-  {"initialization of zero-length array inside a nested context", 653},
-  {"missing initializer", 654},
-  {"empty scalar initializer", 655},
-  {"extra elements in scalar initializer", 656},
-  {"initialization designators may not nest", 657},
-  {"array index in non-array initializer", 658},
-  {"field name not in record or union initializer", 659},
-  {"nonconstant array index in initializer", 660},
-  {"array index in initializer exceeds array bounds", 661},
-  {"empty index range in initializer", 662},
-  {"array index range in initializer exceeds array bounds", 663},
-  {"unknown field `%s' specified in initializer", 664},
-  {"initialized field with side-effects overwritten", 665},
-  {"excess elements in char array initializer", 666},
-  {"excess elements in struct initializer", 667},
-  {"excess elements in union initializer", 668},
-  {"traditional C rejects initialization of unions", 669},
-  {"excess elements in array initializer", 670},
-  {"excess elements in scalar initializer", 671},
-  {"asm template is not a string constant", 672},
-  {"invalid lvalue in asm statement", 673},
-  {"modification by `asm'", 674},
-  {"function declared `noreturn' has a `return' statement", 675},
-  {"`return' with no value, in function returning non-void", 676},
-  {"`return' with a value, in function returning void", 677},
-  {"return", 678},
-  {"function returns address of local variable", 679},
-  {"switch quantity not an integer", 680},
-  {"`long' switch expression not converted to `int' in ISO C", 681},
-  {"case label not within a switch statement", 682},
-  {"`default' label not within a switch statement", 683},
-  {"inlining failed in call to `%s'", 684},
-  {"called from here", 685},
-  {"can't inline call to `%s'", 686},
-  {"function call has aggregate value", 687},
-  {"variable offset is passed paritially in stack and in reg", 688},
-  {"variable size is passed partially in stack and in reg", 689},
-  {"%d errors, %d sorries, do granting", 690},
-  {"GNU compiler does not support statically allocated objects", 691},
-  {"`%s' cannot be statically allocated", 692},
-  {"causing unhandled exception `%s' (this is flaged only once)", 693},
-  {"range failure (not inside function)", 694},
-  {"possible range failure (not inside function)", 695},
-  {"expression will always cause RANGEFAIL", 696},
-  {"right hand side of assignment is a mode", 697},
-  {"incompatible modes in %s", 698},
-  {"bad string length in %s", 699},
-  {"mode mismatch in %s expression", 700},
-  {"%s expression must be referable", 701},
-  {"%s not allowed outside a PROC", 702},
-  {"%s action in PROC with no declared RESULTS", 703},
-  {"RETURN not allowed outside PROC", 704},
-  {"RETURN with a value, in PROC returning void", 705},
-  {"RETURN with no value and no RESULT action in procedure", 706},
-  {"no label named `%s'", 707},
-  {"cannot GOTO label `%s' outside current function", 708},
-  {"no EXITable label named `%s'", 709},
-  {"cannot EXIT label `%s' outside current function", 710},
-  {"case selector not compatible with label", 711},
-  {"ELSE label not within a CASE statement", 712},
-  {"multiple default labels found in a CASE statement", 713},
-  {"this is the first ELSE label", 714},
-  {"label found outside of CASE statement", 715},
-  {"duplicate CASE value", 716},
-  {"this is the first entry for that value", 717},
-  {"CASE value out of range", 718},
-  {"empty range", 719},
-  {"label within scope of cleanup or variable array", 720},
-  {"mode in label is not discrete", 721},
-  {"label not within a CASE statement", 722},
-  {"Lower bound of range must be a discrete literal expression", 723},
-  {"Upper bound of range must be a discrete literal expression", 724},
-  {"The CASE label is not valid", 725},
-  {"\
-The number of CASE selectors does not match the number of CASE label lists", 726},
-  {"incomplete CASE - %s not handled", 727},
-  {"CASE selector with variable range", 728},
-  {"too many cases to do CASE completeness testing", 729},
-  {"type of tuple cannot be implicit in multiple assignent", 730},
-  {"conditional expression cannot be used in multiple assignent", 731},
-  {"internal error - unknown type in multiple assignment", 732},
-  {"no operator allowed in multiple assignment,", 733},
-  {"location modes in multiple assignment are not equivalent", 734},
-  {"You may not assign a value to a BUFFER or EVENT location", 735},
-  {"can't assign value to READonly location", 736},
-  {"cannot assign to location with non-value property", 737},
-  {"lefthand side of assignment is not a location", 738},
-  {"bitstring slice", 739},
-  {"LENGTH on left-hand-side is non-portable", 740},
-  {"Can only set LENGTH of array location", 741},
-  {"internal error: trying to make loc-identity with non-location", 742},
-  {"cannot convert to a boolean mode", 743},
-  {"cannot convert to a char mode", 744},
-  {"powerset tuple element out of range", 745},
-  {"incompatible member of powerset tuple (at position #%d)", 746},
-  {"no initializer value for fixed field `%s'", 747},
-  {"non-constant value for tag field `%s'", 748},
-  {"field `%s' in wrong variant", 749},
-  {"missing variant fields (at least `%s')", 750},
-  {"bad initializer for field `%s'", 751},
-  {"no initializer value for variant field `%s'", 752},
-  {"no selected variant", 753},
-  {"mixture of labelled and unlabelled tuple elements", 754},
-  {"probably not a structure tuple", 755},
-  {"excess initializer for field `%s'", 756},
-  {"excess unnamed initializers", 757},
-  {"non-constant start index for tuple", 758},
-  {"invalid array tuple label", 759},
-  {"non-constant array tuple index range", 760},
-  {"incompatible array tuple element %s", 761},
-  {"multiple (*) or (ELSE) array tuple labels", 762},
-  {"empty range in array tuple", 763},
-  {"array tuple has duplicate index %s", 764},
-  {"array tuple index out of range", 765},
-  {"too many array tuple values", 766},
-  {"dynamic array tuple without (*) or (ELSE)", 767},
-  {"missing array tuple element %s", 768},
-  {"missing array tuple elements %s : %s", 769},
-  {"initializer is not an array or string mode", 770},
-  {"destination is too small", 771},
-  {"internal error:  unknown type of expression", 772},
-  {"`%s' must not be declared readonly", 773},
-  {"declaration of readonly variable without initialization", 774},
-  {"no initialisation allowed for `%s'", 775},
-  {"value for loc-identity `%s' is not a location", 776},
-  {"location for `%s' not read-compatible", 777},
-  {"nonconstant initializer for `%s'", 778},
-  {"do_decl: internal error: don't know what to initialize", 779},
-  {"RECURSIVE PROCs", 780},
-  {"`%s' must not be READonly", 781},
-  {"POS may not be specified for a list of field declarations", 782},
-  {"(ELSE) case label as well as ELSE variant", 783},
-  {"inconsistent modes between labels and tag field", 784},
-  {"too few tag labels", 785},
-  {"too many tag labels", 786},
-  {"case label lower limit is not a discrete constant expression", 787},
-  {"case label upper limit is not a discrete constant expression", 788},
-  {"case label must be a discrete constant expression", 789},
-  {"variant label declared here...", 790},
-  {"...is duplicated here", 791},
-  {"no field (yet) for tag %s", 792},
-  {"non-value mode may only returned by LOC", 793},
-  {"mode of `%s' is not a mode", 794},
-  {"`%s' may only be passed by LOC", 795},
-  {"Nothing named `%s' to grant.", 796},
-  {"duplicate grant for `%s'", 797},
-  {"previous grant for `%s'", 798},
-  {"duplicate definition `%s'", 799},
-  {"previous definition of `%s'", 800},
-  {"ambiguous choice for seize `%s' -", 801},
-  {" - can seize this `%s' -", 802},
-  {" - or this granted decl `%s'", 803},
-  {"enumerator value for `%s' is less then 0", 804},
-  {"enumerators `%s' and `%s' have equal values", 805},
-  {"undefined value in SET mode is obsolete and deprecated.", 806},
-  {"BASE variable never declared", 807},
-  {"cannot BASE a variable on a PROC/PROCESS name", 808},
-  {"INTERNAL ERROR: handle_one_level is broken", 809},
-  {"tuple without specified mode not allowed in %s", 810},
-  {"conditional expression not allowed in %s", 811},
-  {"internal error:  unknown expression mode in %s", 812},
-  {"CASE selector is not a discrete expression", 813},
-  {"powerset is not addressable", 814},
-  {"array is not addressable", 815},
-  {"Too few arguments in call to `%s'", 816},
-  {"Too many arguments in call to `%s'", 817},
-  {"cannot dereference, not a pointer.", 818},
-  {"missing '.' operator or undefined mode name `%s'.", 819},
-  {"You have forgotten the '.' operator which must", 820},
-  {" precede a STRUCT field reference, or `%s' is an undefined mode", 821},
-  {"Can't dereference PTR value using unary `->'.", 822},
-  {"invalid type argument of `->'", 823},
-  {"operand of '.' is not a STRUCT", 824},
-  {"No field named `%s'", 825},
-  {"ABS argument must be discrete or real mode", 826},
-  {"argument %d to ABSTIME must be of integer type.", 827},
-  {"parameter 1 must be referable.", 828},
-  {"mode mismatch in parameter 1.", 829},
-  {"parameter 2 must be a positive integer.", 830},
-  {"CARD argument must be powerset mode", 831},
-  {"expression for DESCR-builtin must be referable.", 832},
-  {"argument to `%s' must be of integer type.", 833},
-  {"argument 1 to `%s' must be of floating point mode", 834},
-  {"First argument to `%s' must be a mode", 835},
-  {"READonly modes for %s must have a value", 836},
-  {"argument to TERMINATE must be a reference primitive value", 837},
-  {"argument 1 to INTTIME must be of mode TIME.", 838},
-  {"%s.", 839},
-  {"\
-LENGTH argument must be string, buffer, event mode, text location or mode", 840},
-  {"UPPER argument must have a mode, or be a mode", 841},
-  {"LOWER argument must have a mode, or be a mode", 842},
-  {"UPPER argument must be string, array, mode or integer", 843},
-  {"LOWER argument must be string, array, mode or integer", 844},
-  {"%s argument must be POWERSET mode", 845},
-  {"%s called for empty POWERSET", 846},
-  {"argument to NUM is not discrete", 847},
-  {"No integer mode which matches expression's mode", 848},
-  {"NUM's parameter is below its mode range", 849},
-  {"NUM's parameter is above its mode range", 850},
-  {"Cannot take SUCC or PRED of a numbered SET", 851},
-  {"SUCC or PRED must not be done on a PTR.", 852},
-  {"SUCC or PRED for a reference type is not standard.", 853},
-  {"SUCC or PRED argument must be a discrete mode", 854},
-  {"Taking the %s of a value already at its %s value", 855},
-  {"size applied to a function mode", 856},
-  {"sizeof applied to a void mode", 857},
-  {"sizeof applied to an incomplete mode", 858},
-  {"cannot call a PROCESS, you START a PROCESS", 859},
-  {"invalid %s", 860},
-  {"%s parameter %d must be a location", 861},
-  {"%s parameter %d is READ-only", 862},
-  {"LOC actual parameter %d is a non-referable location", 863},
-  {"mode mismatch in parameter %d", 864},
-  {"too many arguments to procedure `%s'", 865},
-  {"too many arguments to procedure", 866},
-  {"too few arguments to procedure `%s'", 867},
-  {"too few arguments to procedure", 868},
-  {"syntax error (integer used as function)", 869},
-  {"syntax error - missing operator, comma, or '('?", 870},
-  {"unimplemented builtin function `%s'", 871},
-  {"internal error - bad builtin function `%s'", 872},
-  {"empty expression in string index", 873},
-  {"only one expression allowed in string index", 874},
-  {"invalid: primval ( untyped_exprlist )", 875},
-  {"operand is variable-size bitstring/power-set", 876},
-  {"tree code `%s' unhandled in build_compare_set_expr", 877},
-  {"incompatible modes in concat expression", 878},
-  {"Invalid operation on array of chars", 879},
-  {"comparison of variant structures is unsafe", 880},
-  {"compare with variant records", 881},
-  {"incompatible operands to %s", 882},
-  {"relational operator not allowed for this mode", 883},
-  {"Cannot use %s operator on PROC mode variable", 884},
-  {"invalid left operand of %s", 885},
-  {"invalid right operand of %s", 886},
-  {"repetition expression must be constant", 887},
-  {"left argument to MOD/REM operator must be integral", 888},
-  {"right argument to MOD/REM operator must be integral", 889},
-  {"right operand of IN is not a powerset", 890},
-  {"left operand of IN incompatible with right operand", 891},
-  {"division by zero", 892},
-  {"-> operator not allow in constant expression", 893},
-  {"taking the address of a string literal is non-standard", 894},
-  {"taking the address of a function is non-standard", 895},
-  {"ADDR requires a LOCATION argument", 896},
-  {"-> expression is not addressable", 897},
-  {"ADDR parameter must be a LOCATION", 898},
-  {"possible internal error in build_chill_arrow_expr", 899},
-  {"%s is not addressable", 900},
-  {"repetition count is not an integer constant", 901},
-  {"repetition count < 0", 902},
-  {"repetition value not constant", 903},
-  {"bitstring repetition of non-constant boolean", 904},
-  {"string repetition operand is non-constant bitstring", 905},
-  {"non-char, non-bit string repetition", 906},
-  {"invalid operand of %s", 907},
-  {"right operand of %s is not array of boolean", 908},
-  {"%s operator applied to boolean variable", 909},
-  {"non-boolean mode in conditional expression", 910},
-  {"decode_constant: invalid component_ref", 911},
-  {"decode_constant: mode and value mismatch", 912},
-  {"decode_constant: cannot decode this mode", 913},
-  {"decode_constant_selective: mode and value mismatch", 914},
-  {"decode_constant_selective: cannot decode this mode", 915},
-  {"can't open %s", 916},
-  {"can't write to %s", 917},
-  {"FORBID is not yet implemented", 918},
-  {"function \"really_grant_this\" called for `%s'.", 919},
-  {"non-integral text length", 920},
-  {"non-constant text length", 921},
-  {"text length must be greater then 0", 922},
-  {"argument %d of %s must be of mode ASSOCIATION", 923},
-  {"argument %d of %s must be a location", 924},
-  {"argument 2 of ASSOCIATE must not be an empty string", 925},
-  {"argument 2 to ASSOCIATE must be a string", 926},
-  {"argument 3 to ASSOCIATE must be a string", 927},
-  {"Too many arguments in call to MODIFY", 928},
-  {"argument 2 of MODIFY must not be an empty string", 929},
-  {"argument 2 to MODIFY must be a string", 930},
-  {"argument 3 to MODIFY must be a string", 931},
-  {"argument %d of %s must be an ACCESS or TEXT mode", 932},
-  {"argument 4 of CONNECT must be of mode WHERE", 933},
-  {"index expression for ACCESS without index", 934},
-  {"incompatible index mode", 935},
-  {"argument 3 to CONNECT must be of mode USAGE", 936},
-  {"argument %d of %s must be of mode ACCESS", 937},
-  {"Too few arguments in call to `readrecord'", 938},
-  {"incompatible record mode", 939},
-  {"store location must not be READonly", 940},
-  {"Too few arguments in call to `writerecord'", 941},
-  {"transfer to ACCESS without record mode", 942},
-  {"argument %d of %s must be of mode TEXT", 943},
-  {"TEXT doesn't have a location", 944},
-  {"incompatible index mode for SETETEXTACCESS", 945},
-  {"incompatible record mode for SETTEXTACCESS", 946},
-  {"parameter 2 must be a location", 947},
-  {"incompatible modes in parameter 2", 948},
-  {"conditional expression not allowed in this context", 949},
-  {"untyped expression as argument %d", 950},
-  {"Cannot process %d bits integer for READTEXT argument %d.", 951},
-  {"Cannot process %d bits integer WRITETEXT argument %d.", 952},
-  {"argument %d is READonly", 953},
-  {"argument %d must be referable", 954},
-  {"cannot process argument %d of WRITETEXT, unknown size", 955},
-  {"cannot process mode of argument %d for %sTEXT.", 956},
-  {"too few arguments for this format string", 957},
-  {"type of argument %d invalid for conversion code at offset %d", 958},
-  {"unmatched open paren", 959},
-  {"bad format specification character (offset %d)", 960},
-  {"repetition factor overflow (offset %d)", 961},
-  {"duplicate qualifier (offset %d)", 962},
-  {"clause width overflow (offset %d)", 963},
-  {"no fraction (offset %d)", 964},
-  {"no fraction width (offset %d)", 965},
-  {"fraction width overflow (offset %d)", 966},
-  {"no exponent (offset %d)", 967},
-  {"no exponent width (offset %d)", 968},
-  {"exponent width overflow (offset %d)", 969},
-  {"internal error in check_format_string", 970},
-  {"no padding character (offset %d)", 971},
-  {"too many arguments for this format string", 972},
-  {"missing index expression", 973},
-  {"Too few arguments in call to `writetext'", 974},
-  {"argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location", 975},
-  {"`format string' for WRITETEXT must be a CHARACTER string", 976},
-  {"Too few arguments in call to `readtext'", 977},
-  {"\
-argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] \
-expression", 978},
-  {"`format string' for READTEXT must be a CHARACTER string", 979},
-  {"non-constant expression", 980},
-  {"Ignoring case upon input and", 981},
-  {"making special words uppercase wouldn't work.", 982},
-  {"Making special words uppercase and", 983},
-  {" ignoring case upon input wouldn't work.", 984},
-  {"internal error - use of undefined type", 985},
-  {"invalid C'xx' ", 986},
-  {"can't close %s", 987},
-  {"malformed exponent part of floating-point literal", 988},
-  {"real number exceeds range of REAL", 989},
-  {"end-of-file in '<>' directive", 990},
-  {"unrecognized compiler directive", 991},
-  {"unrecognized compiler directive `%s'", 992},
-  {"unterminated control sequence", 993},
-  {"invalid integer literal in control sequence", 994},
-  {"control sequence overflow", 995},
-  {"invalid control sequence", 996},
-  {"invalid base in read control sequence", 997},
-  {"invalid digit in control sequence", 998},
-  {"unterminated string literal", 999},
-  {"invalid number format `%s'", 1000},
-  {"integer literal too big", 1001},
-  {"can't find %s", 1002},
-  {"USE_SEIZE_FILE directive must be followed by string", 1003},
-  {"invalid #ident", 1004},
-  {"undefined or invalid # directive", 1005},
-  {"invalid #line", 1006},
-  {"#-lines for entering and leaving files don't match", 1007},
-  {"invalid #-line", 1008},
-  {"missing `=' in compiler directive", 1009},
-  {"invalid value follows `=' in compiler directive", 1010},
-  {"invalid `%c' character in name", 1011},
-  {"`%s' not integer constant synonym ", 1012},
-  {"value out of range in compiler directive", 1013},
-  {"can't reopen %s", 1014},
-  {"no modules seen", 1015},
-  {"modeless tuple not allowed in this context", 1016},
-  {"IN expression does not have a mode", 1017},
-  {"location enumeration for BOOLS", 1018},
-  {"location enumeration for bit-packed arrays", 1019},
-  {"Loop's IN expression is not a composite object", 1020},
-  {"start expr must have discrete mode", 1021},
-  {"DO FOR start expression is a numbered SET", 1022},
-  {"TO expression is a numbered SET", 1023},
-  {"TO expr must have discrete mode", 1024},
-  {"start expr and TO expr must be compatible", 1025},
-  {"BY expr must have discrete mode", 1026},
-  {"start expr and BY expr must be compatible", 1027},
-  {"loop identifier undeclared", 1028},
-  {"loop variable incompatible with start expression", 1029},
-  {"body of DO FOR will never execute", 1030},
-  {"BY expression is negative or zero", 1031},
-  {"Can't iterate through array of BOOL", 1032},
-  {"there was no start label to match the end label '%s'", 1033},
-  {"start label '%s' does not match end label '%s'", 1034},
-  {"`%s' not declared", 1035},
-  {"No RETURN or RESULT in procedure", 1036},
-  {"PREFIXED clause with no prelix in unlabeled module", 1037},
-  {"internal parser error - expected token %d", 1038},
-  {"'%s!' is not followed by an identifier", 1039},
-  {"expected a name here", 1040},
-  {"expected a name string here", 1041},
-  {"`%s' undeclared", 1042},
-  {"action not allowed in SPEC MODULE", 1043},
-  {"missing defining occurrence", 1044},
-  {"bad defining occurrence following ','", 1045},
-  {"missing '(' in exception list", 1046},
-  {"ON exception names must be unique", 1047},
-  {"syntax error in exception list", 1048},
-  {"empty ON-condition", 1049},
-  {"INIT not allowed at loc-identity declaration", 1050},
-  {"'=' used where ':=' is required", 1051},
-  {"initialization is not allowed in spec module", 1052},
-  {"loc-identity declaration without initialisation", 1053},
-  {"bad syntax following FORBID", 1054},
-  {"expected a postfix name here", 1055},
-  {"expected another rename clause", 1056},
-  {"syntax error in parameter name list", 1057},
-  {"NONREF specific without LOC in result attribute", 1058},
-  {"DYNAMIC specific without LOC in result attribute", 1059},
-  {"exception names must be unique", 1060},
-  {"must specify a PROCESS name", 1061},
-  {"SIGNAL must be in global reach", 1062},
-  {"syntax error while parsing signal definition statement", 1063},
-  {"case range list", 1064},
-  {"misplaced colon in case label", 1065},
-  {"unrecognized case label list after ','", 1066},
-  {"bad ASM operand", 1067},
-  {"readonly location modified by 'asm'", 1068},
-  {"expected 'TO' in step enumeration", 1069},
-  {"expected 'IN' in FOR control here", 1070},
-  {"missing DELAY CASE alternative", 1071},
-  {"non-referable location in DO WITH", 1072},
-  {"WITH element must be of STRUCT mode", 1073},
-  {"missing ')' in signal/buffer receive alternative", 1074},
-  {"misplaced 'IN' in signal/buffer receive alternative", 1075},
-  {"missing RECEIVE alternative", 1076},
-  {"PROCESS copy number must be integer", 1077},
-  {"missing parenthesis for procedure call", 1078},
-  {"expression is not an action", 1079},
-  {"syntax error in action", 1080},
-  {"no handler is permitted on this action.", 1081},
-  {"definition follows action", 1082},
-  {"bad tuple field name list", 1083},
-  {"invalid syntax for label in tuple", 1084},
-  {"bad syntax in tuple", 1085},
-  {"non-mode name before tuple", 1086},
-  {"invalid expression/location syntax", 1087},
-  {"RECEIVE expression", 1088},
-  {"there should not be a ';' here", 1089},
-  {"missing ELSE/ELSIF in IF expression", 1090},
-  {"conditional expression not allowed inside parentheses", 1091},
-  {"mode-less tuple not allowed inside parentheses", 1092},
-  {"mixed numbered and unnumbered set elements is not standard", 1093},
-  {"SET mode must define at least one named value", 1094},
-  {"POS not allowed for ARRAY", 1095},
-  {"STEP not allowed in field definition", 1096},
-  {"missing field name", 1097},
-  {"bad field name following ','", 1098},
-  {"expected ':' in structure variant alternative", 1099},
-  {"missing field", 1100},
-  {"VARYING bit-strings not implemented", 1101},
-  {"strings must be composed of chars", 1102},
-  {"BUFFER modes may not be readonly", 1103},
-  {"EVENT modes may not be readonly", 1104},
-  {"SIGNAL is not a valid mode", 1105},
-  {"syntax error - missing mode", 1106},
-  {"syntax error - expected a module or end of file", 1107},
-  {"  `%s', which depends on ...", 1108},
-  {"Cycle: `%s' depends on ...", 1109},
-  {"  `%s'", 1110},
-  {"SYN of this mode not allowed", 1111},
-  {"mode of SYN incompatible with value", 1112},
-  {"SYN value outside range of its mode", 1113},
-  {"INIT string too large for mode", 1114},
-  {"value of %s is not a valid constant", 1115},
-  {"mode with non-value property in signal definition", 1116},
-  {"undeclared identifier `%s'", 1117},
-  {"RETURNS spec with invalid mode", 1118},
-  {"operand to REF is not a mode", 1119},
-  {"field with non-value mode in variant structure not allowed", 1120},
-  {"buffer element mode must not have non-value property", 1121},
-  {"recordmode must not have the non-value property", 1122},
-  {"Tasking code %ld out of range for `%s'.", 1123},
-  {"invalid attribute for argument `%s' (only IN or LOC allowed).", 1124},
-  {"PROCESS may only be declared at module level", 1125},
-  {"process name %s never declared", 1126},
-  {"You may only START a process, not a proc", 1127},
-  {"SET expression not a location.", 1128},
-  {"SET location must be INSTANCE mode", 1129},
-  {"too many arguments to process `%s'", 1130},
-  {"too many arguments to process", 1131},
-  {"too few arguments to process `%s'", 1132},
-  {"too few arguments to process", 1133},
-  {"COPY_NUMBER argument must be INSTANCE expression", 1134},
-  {"GEN_CODE argument must be a process or signal name.", 1135},
-  {"GEN_INST parameter 2 must be an integer mode", 1136},
-  {"GEN_INST parameter 1 must be a PROCESS or an integer expression", 1137},
-  {"%s is not a declared process", 1138},
-  {"PROC_TYPE argument must be INSTANCE expression", 1139},
-  {"QUEUE_LENGTH argument must be a BUFFER/EVENT location.", 1140},
-  {"SEND requires a SIGNAL; %s is not a SIGNAL name", 1141},
-  {"too many values for SIGNAL `%s'", 1142},
-  {"too few values for SIGNAL `%s'", 1143},
-  {"Signal sent without priority", 1144},
-  {" and no default priority was set.", 1145},
-  {" PRIORITY defaulted to 0", 1146},
-  {"SEND without a destination instance", 1147},
-  {" and no destination process specified", 1148},
-  {" for the signal", 1149},
-  {"SEND to ANY copy of process `%s'.", 1150},
-  {"SEND TO must be an INSTANCE mode", 1151},
-  {"SEND WITH must have a mode", 1152},
-  {"internal error: RECEIVE CASE stack invalid.", 1153},
-  {"SET requires INSTANCE location", 1154},
-  {"SIGNAL in RECEIVE CASE alternative follows", 1155},
-  {" a BUFFER name on line %d", 1156},
-  {"SIGNAL `%s' has no data fields", 1157},
-  {"SIGNAL `%s' requires data fields", 1158},
-  {"too few data fields provided for `%s'", 1159},
-  {"too many data fields provided for `%s'", 1160},
-  {"BUFFER in RECEIVE CASE alternative follows", 1161},
-  {" a SIGNAL name on line %d", 1162},
-  {"BUFFER in RECEIVE CASE alternative must be a location.", 1163},
-  {"buffer receive alternative requires only 1 defining occurence.", 1164},
-  {"incompatible modes in receive buffer alternative.", 1165},
-  {"defining occurence in receive buffer alternative must be a location.", 1166},
-  {"buffer receive alternative without `IN location'.", 1167},
-  {"RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location.", 1168},
-  {"RECEIVE CASE without alternatives", 1169},
-  {"CONTINUE requires an event location.", 1170},
-  {"PRIORITY must be of integer type.", 1171},
-  {"delay alternative must be an EVENT location.", 1172},
-  {"DELAY CASE without alternatives", 1173},
-  {"DELAY action requires an event location.", 1174},
-  {"PRIORITY in DELAY action must be of integer type.", 1175},
-  {"DELAY action without priority.", 1176},
-  {" PRIORITY defaulted to 0.", 1177},
-  {"send buffer action requires a BUFFER location.", 1178},
-  {"there must be only 1 value for send buffer action.", 1179},
-  {"convert failed for send buffer action.", 1180},
-  {"incompatible modes in send buffer action.", 1181},
-  {"Buffer sent without priority", 1182},
-  {"WITH not allowed for send buffer action.", 1183},
-  {"TO not allowed for send buffer action.", 1184},
-  {"SEND requires a BUFFER; `%s' is not a BUFFER name", 1185},
-  {"non-integral max queue size for EVENT/BUFFER mode", 1186},
-  {"non-constant max queue size for EVENT/BUFFER mode", 1187},
-  {"max queue_size for EVENT/BUFFER is not positive", 1188},
-  {"absolute time value must be of mode TIME.", 1189},
-  {"duration primitive value must be of mode DURATION.", 1190},
-  {"string length > UPPER (UINT)", 1191},
-  {"Can only build a powerset from a discrete mode", 1192},
-  {"non-constant bitstring size invalid", 1193},
-  {"non-constant powerset size invalid", 1194},
-  {"array or string index is a mode (instead of a value)", 1195},
-  {"index is not an integer expression", 1196},
-  {"index not compatible with index mode", 1197},
-  {"index is not discrete", 1198},
-  {"\
-possible internal error - slice argument is neither referable nor constant", 1199},
-  {"bit array slice with non-constant length", 1200},
-  {"bitstring slice with non-constant length", 1201},
-  {"slice operation on non-array, non-bitstring value not supported", 1202},
-  {"can only take slice of array or string", 1203},
-  {"slice length is not an integer", 1204},
-  {"slice length out-of-range", 1205},
-  {"too many index expressions", 1206},
-  {"array index is not discrete", 1207},
-  {"invalid compound index for bitstring mode", 1208},
-  {"conversions from variable_size value", 1209},
-  {"conversions to variable_size mode", 1210},
-  {"cannot convert to float", 1211},
-  {"cannot convert float to this mode", 1212},
-  {"OVERFLOW in expression conversion", 1213},
-  {"overflow (not inside function)", 1214},
-  {"possible overflow (not inside function)", 1215},
-  {"expression will always cause OVERFLOW", 1216},
-  {"not implemented: constant conversion from that kind of expression", 1217},
-  {"not implemented: constant conversion to that kind of mode", 1218},
-  {"non-standard, non-portable value conversion", 1219},
-  {"location conversion between differently-sized modes", 1220},
-  {"unsupported value conversion", 1221},
-  {"operand to bin must be a non-negative integer literal", 1222},
-  {"size %d of BIN too big - no such integer mode", 1223},
-  {"BIN in pass 2", 1224},
-  {"mode of tuple is neither ARRAY, STRUCT, nor POWERSET", 1225},
-  {"internal error in chill_root_resulting_mode", 1226},
-  {"string lengths not equal", 1227},
-  {"can't do ARRAY assignment - too large", 1228},
-  {"rhs of array assignment is not addressable", 1229},
-  {"non-constant expression for BIN", 1230},
-  {"expression for BIN must not be negative", 1231},
-  {"cannot process BIN (>32)", 1232},
-  {"bounds of range are not compatible", 1233},
-  {"negative string length", 1234},
-  {"range's lower bound and parent mode don't match", 1235},
-  {"range's upper bound and parent mode don't match", 1236},
-  {"making range from non-mode", 1237},
-  {"floating point ranges", 1238},
-  {"range mode has non-constant limits", 1239},
-  {"range's high bound < mode's low bound", 1240},
-  {"range's high bound > mode's high bound", 1241},
-  {"range mode high bound < range mode low bound", 1242},
-  {"range's low bound < mode's low bound", 1243},
-  {"range's low bound > mode's high bound", 1244},
-  {"Stepsize in STEP must be an integer constant", 1245},
-  {"Stepsize in STEP must be > 0", 1246},
-  {"Stepsize in STEP must be the natural width of the array element mode", 1247},
-  {"Starting word in POS must be an integer constant", 1248},
-  {"Starting word in POS must be >= 0", 1249},
-  {"Starting word in POS within STEP must be 0", 1250},
-  {"Starting bit in POS must be an integer constant", 1251},
-  {"Starting bit in POS within STEP must be 0", 1252},
-  {"Starting bit in POS must be >= 0", 1253},
-  {"Starting bit in POS must be < the width of a word", 1254},
-  {"Length in POS must be an integer constant", 1255},
-  {"Length in POS must be > 0", 1256},
-  {"End bit in POS must be an integer constant", 1257},
-  {"End bit in POS must be >= the start bit", 1258},
-  {"End bit in POS must be < the width of a word", 1259},
-  {"\
-The length specified on POS within STEP must be the natural length of the \
-array element type", 1260},
-  {"Step size in STEP must be >= the length in POS", 1261},
-  {"array index must be a range, not a single integer", 1262},
-  {"array index is not a discrete mode", 1263},
-  {"\
-The length specified on POS must be the natural length of the field type", 1264},
-  {"STRUCT fields must be layed out in monotonically increasing order", 1265},
-  {"If one field has a POS layout, then all fields must have a POS layout", 1266},
-  {"parameterised structures not implemented", 1267},
-  {"invalid parameterised type", 1268},
-  {"internal error", 1269},
-  {"no arguments", 1270},
-  {"fopen %s", 1271},
-  {"fclose %s", 1272},
-  {"collect2 version %s", 1273},
-  {"%d constructor(s) found\n", 1274},
-  {"%d destructor(s)  found\n", 1275},
-  {"%d frame table(s) found\n", 1276},
-  {"%s terminated with signal %d [%s]%s", 1277},
-  {"%s returned %d exit status", 1278},
-  {"[cannot find %s]", 1279},
-  {"cannot find `%s'", 1280},
-  {"redirecting stdout: %s", 1281},
-  {"[Leaving %s]\n", 1282},
-  {"\
-\n\
-write_c_file - output name is %s, prefix is %s\n", 1283},
-  {"cannot find `nm'", 1284},
-  {"pipe", 1285},
-  {"fdopen", 1286},
-  {"dup2 %d 1", 1287},
-  {"close %d", 1288},
-  {"execvp %s", 1289},
-  {"init function found in object %s", 1290},
-  {"fini function found in object %s", 1291},
-  {"fclose", 1292},
-  {"unable to open file '%s'", 1293},
-  {"unable to stat file '%s'", 1294},
-  {"unable to mmap file '%s'", 1295},
-  {"not found\n", 1296},
-  {"dynamic dependency %s not found", 1297},
-  {"bad magic number in file '%s'", 1298},
-  {"dynamic dependencies.\n", 1299},
-  {"cannot find `ldd'", 1300},
-  {"execv %s", 1301},
-  {"\
-\n\
-ldd output with constructors/destructors.\n", 1302},
-  {"unable to open dynamic dependency '%s'", 1303},
-  {"%s: not a COFF file", 1304},
-  {"%s: cannot open as COFF file", 1305},
-  {"Library lib%s not found", 1306},
-  {"open %s", 1307},
-  {"incompatibilities between object file & expected values", 1308},
-  {"\
-\n\
-Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n", 1309},
-  {"string section missing", 1310},
-  {"section pointer missing", 1311},
-  {"no symbol table found", 1312},
-  {"no cmd_strings found", 1313},
-  {"\
-\n\
-Updating header and load commands.\n\
-\n", 1314},
-  {"load command map, %d cmds, new size %ld.\n", 1315},
-  {"\
-writing load commands.\n\
-\n", 1316},
-  {"close %s", 1317},
-  {"could not convert 0x%l.8x into a region", 1318},
-  {"%s function, region %d, offset = %ld (0x%.8lx)\n", 1319},
-  {"bad magic number", 1320},
-  {"bad header version", 1321},
-  {"bad raw header version", 1322},
-  {"raw header buffer too small", 1323},
-  {"old raw header file", 1324},
-  {"unsupported version", 1325},
-  {"unknown {de,en}code_mach_o_hdr return value %d", 1326},
-  {"fstat %s", 1327},
-  {"lseek %s 0", 1328},
-  {"read %s", 1329},
-  {"read %ld bytes, expected %ld, from %s", 1330},
-  {"msync %s", 1331},
-  {"munmap %s", 1332},
-  {"write %s", 1333},
-  {"wrote %ld bytes, expected %ld, to %s", 1334},
-  {"\
-;; Combiner statistics: %d attempts, %d substitutions (%d requiring new \
-space),\n\
-;; %d successes.\n\
-\n", 1335},
-  {"\
-\n\
-;; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n\
-;; %d successes.\n", 1336},
-  {"Use VAX-C alignment", 1337},
-  {"invalid %%Q value", 1338},
-  {"invalid %%C value", 1339},
-  {"invalid %%N value", 1340},
-  {"invalid %%M value", 1341},
-  {"invalid %%m value", 1342},
-  {"invalid %%L value", 1343},
-  {"invalid %%O value", 1344},
-  {"invalid %%P value", 1345},
-  {"invalid %%V value", 1346},
-  {"Generate code assuming DW bit is set", 1347},
-  {"Generate code assuming DW bit is not set", 1348},
-  {"Generate code using byte writes", 1349},
-  {"Do not generate byte writes", 1350},
-  {"Use small memory model", 1351},
-  {"Use normal memory model", 1352},
-  {"Use large memory model", 1353},
-  {"Generate 29050 code", 1354},
-  {"Generate 29000 code", 1355},
-  {"Use kernel global registers", 1356},
-  {"Use user global registers", 1357},
-  {"Emit stack checking code", 1358},
-  {"Do not emit stack checking code", 1359},
-  {"Work around storem hardware bug", 1360},
-  {"Do not work around storem hardware bug", 1361},
-  {"Store locals in argument registers", 1362},
-  {"Do not store locals in arg registers", 1363},
-  {"Use software floating point", 1364},
-  {"Do not generate multm instructions", 1365},
-  {"bad value `%s' for -mtrap-precision switch", 1366},
-  {"bad value `%s' for -mfp-rounding-mode switch", 1367},
-  {"bad value `%s' for -mfp-trap-mode switch", 1368},
-  {"bad value `%s' for -mcpu switch", 1369},
-  {"fp software completion requires -mtrap-precision=i", 1370},
-  {"rounding mode not supported for VAX floats", 1371},
-  {"trap mode not supported for VAX floats", 1372},
-  {"L%d cache latency unknown for %s", 1373},
-  {"bad value `%s' for -mmemory-latency", 1374},
-  {"invalid %%r value", 1375},
-  {"invalid %%R value", 1376},
-  {"invalid %%h value", 1377},
-  {"invalid %%U value", 1378},
-  {"invalid %%s value", 1379},
-  {"invalid %%E value", 1380},
-  {"invalid %%xn code", 1381},
-  {"Use hardware fp", 1382},
-  {"Do not use hardware fp", 1383},
-  {"Use fp registers", 1384},
-  {"Do not use fp registers", 1385},
-  {"Do not assume GAS", 1386},
-  {"Assume GAS", 1387},
-  {"Request IEEE-conformant math library routines (OSF/1)", 1388},
-  {"Emit IEEE-conformant code, without inexact exceptions", 1389},
-  {"Emit IEEE-conformant code, with inexact exceptions", 1390},
-  {"Do not emit complex integer constants to read-only memory", 1391},
-  {"Use VAX fp", 1392},
-  {"Do not use VAX fp", 1393},
-  {"Emit code for the byte/word ISA extension", 1394},
-  {"Emit code for the motion video ISA extension", 1395},
-  {"Emit code for the fp move and sqrt ISA extension", 1396},
-  {"Emit code for the counting ISA extension", 1397},
-  {"Use features of and schedule given CPU", 1398},
-  {"Schedule given CPU", 1399},
-  {"Control the generated fp rounding mode", 1400},
-  {"Control the IEEE trap mode", 1401},
-  {"Control the precision given to fp exceptions", 1402},
-  {"Tune expected memory latency", 1403},
-  {"%s causes a section type conflict", 1404},
-  {"bad value (%s) for -mcpu switch", 1405},
-  {"invalid operand to %R code", 1406},
-  {"invalid operand to %H/%L code", 1407},
-  {"invalid operand to %U code", 1408},
-  {"invalid operand to %V code", 1409},
-  {"invalid operand output code", 1410},
-  {"switch -mcpu=%s conflicts with -march= switch", 1411},
-  {"bad value (%s) for %s switch", 1412},
-  {"target CPU does not support APCS-32", 1413},
-  {"target CPU does not support APCS-26", 1414},
-  {"target CPU does not support interworking", 1415},
-  {"target CPU does not support THUMB instructions.", 1416},
-  {"\
-enabling backtrace support is only meaningful when compiling for the Thumb.", 1417},
-  {"\
-enabling callee interworking support is only meaningful when compiling for \
-the Thumb.", 1418},
-  {"\
-enabling caller interworking support is only meaningful when compiling for \
-the Thumb.", 1419},
-  {"interworking forces APCS-32 to be used", 1420},
-  {"-mapcs-stack-check incompatible with -mno-apcs-frame", 1421},
-  {"-fpic and -mapcs-reent are incompatible", 1422},
-  {"APCS reentrant code not supported.  Ignored", 1423},
-  {"-g with -mno-apcs-frame may not give sensible debugging", 1424},
-  {"Passing floating point arguments in fp regs not yet supported", 1425},
-  {"Invalid floating point emulation option: -mfpe-%s", 1426},
-  {"Structure size boundary can only be set to 8 or 32", 1427},
-  {"-mpic-register= is useless without -fpic", 1428},
-  {"Unable to use '%s' for PIC register", 1429},
-  {"Unable to find a temporary location for static chain register", 1430},
-  {"Unable to compute real location of stacked parameter", 1431},
-  {"no low registers available for popping high registers", 1432},
-  {"Interrupt Service Routines cannot be coded in Thumb mode.", 1433},
-  {"Generate APCS conformant stack frames", 1434},
-  {"Store function names in object code", 1435},
-  {"Use the 32-bit version of the APCS", 1436},
-  {"Use the 26-bit version of the APCS", 1437},
-  {"Pass FP arguments in FP registers", 1438},
-  {"Generate re-entrant, PIC code", 1439},
-  {"The MMU will trap on unaligned accesses", 1440},
-  {"Use library calls to perform FP operations", 1441},
-  {"Use hardware floating point instructions", 1442},
-  {"Assume target CPU is configured as big endian", 1443},
-  {"Assume target CPU is configured as little endian", 1444},
-  {"Assume big endian bytes, little endian words", 1445},
-  {"Support calls between Thumb and ARM instruction sets", 1446},
-  {"Generate a call to abort if a noreturn function returns", 1447},
-  {"Do not move instructions into a function's prologue", 1448},
-  {"Do not load the PIC register in function prologues", 1449},
-  {"Generate call insns as indirect calls, if necessary", 1450},
-  {"Compile for the Thumb not the ARM", 1451},
-  {"Thumb: Generate (non-leaf) stack frames even if not needed", 1452},
-  {"Thumb: Generate (leaf) stack frames even if not needed", 1453},
-  {"Thumb: Assume non-static functions may be called from ARM code", 1454},
-  {"Thumb: Assume function pointers may go to non-Thumb aware code", 1455},
-  {"Specify the name of the target CPU", 1456},
-  {"Specify the name of the target architecture", 1457},
-  {"Specify the version of the floating point emulator", 1458},
-  {"Specify the minimum bit alignment of structures", 1459},
-  {"Specify the register to be used for PIC addressing", 1460},
-  {"initialized variable `%s' is marked dllimport", 1461},
-  {"static variable `%s' is marked dllimport", 1462},
-  {"Ignore dllimport attribute for functions", 1463},
-  {"Do symbol renaming for BSD", 1464},
-  {"Do symbol renaming for X/OPEN", 1465},
-  {"Don't do symbol renaming", 1466},
-  {"MCU `%s' not supported", 1467},
-  {"large frame pointer change (%d) with -mtiny-stack", 1468},
-  {"Only initialized variables can be placed into program memory area.", 1469},
-  {"Assume int to be 8 bit integer", 1470},
-  {"Change the stack pointer without disabling interrupts", 1471},
-  {"Use subroutines for function prologue/epilogue", 1472},
-  {"Change only the low 8 bits of the stack pointer", 1473},
-  {"Do not generate tablejump insns", 1474},
-  {"Output instruction sizes to the asm file", 1475},
-  {"Specify the initial stack address", 1476},
-  {"Specify the MCU name", 1477},
-  {"Trampolines not supported\n", 1478},
-  {"Unknown CPU version %d, using 40.\n", 1479},
-  {"ISR %s requires %d words of local vars, max is 32767.", 1480},
-  {"junk at end of '#pragma %s'", 1481},
-  {"Small memory model", 1482},
-  {"Big memory model", 1483},
-  {"Use MPYI instruction for C3x", 1484},
-  {"Do not use MPYI instruction for C3x", 1485},
-  {"Use fast but approximate float to integer conversion", 1486},
-  {"Use slow but accurate float to integer conversion", 1487},
-  {"Enable use of RTPS instruction", 1488},
-  {"Disable use of RTPS instruction", 1489},
-  {"Enable use of RTPB instruction", 1490},
-  {"Disable use of RTPB instruction", 1491},
-  {"Generate code for C30 CPU", 1492},
-  {"Generate code for C31 CPU", 1493},
-  {"Generate code for C32 CPU", 1494},
-  {"Generate code for C33 CPU", 1495},
-  {"Generate code for C40 CPU", 1496},
-  {"Generate code for C44 CPU", 1497},
-  {"Emit code compatible with TI tools", 1498},
-  {"Emit code to use GAS extensions", 1499},
-  {"Save DP across ISR in small memory model", 1500},
-  {"Don't save DP across ISR in small memory model", 1501},
-  {"Pass arguments on the stack", 1502},
-  {"Pass arguments in registers", 1503},
-  {"Enable new features under development", 1504},
-  {"Disable new features under development", 1505},
-  {"Use the BK register as a general purpose register", 1506},
-  {"Do not allocate BK register", 1507},
-  {"Enable use of DB instruction", 1508},
-  {"Disable use of DB instruction", 1509},
-  {"Enable debugging", 1510},
-  {"Disable debugging", 1511},
-  {"Force constants into registers to improve hoisting", 1512},
-  {"Don't force constants into registers", 1513},
-  {"Force RTL generation to emit valid 3 operand insns", 1514},
-  {"Allow RTL generation to emit invalid 3 operand insns", 1515},
-  {"Allow unsigned interation counts for RPTB/DB", 1516},
-  {"Disallow unsigned iteration counts for RPTB/DB", 1517},
-  {"Preserve all 40 bits of FP reg across call", 1518},
-  {"Only preserve 32 bits of FP reg across call", 1519},
-  {"Enable parallel instructions", 1520},
-  {"Disable parallel instructions", 1521},
-  {"Enable MPY||ADD and MPY||SUB instructions", 1522},
-  {"Disable MPY||ADD and MPY||SUB instructions", 1523},
-  {"Assume that pointers may be aliased", 1524},
-  {"Assume that pointers not aliased", 1525},
-  {"Specify maximum number of iterations for RPTS", 1526},
-  {"Select CPU to generate code for", 1527},
-  {"Generate code for the C400", 1528},
-  {"Generate code for the C300", 1529},
-  {"Generate code for c1", 1530},
-  {"Generate code for c2", 1531},
-  {"Generate code for c32", 1532},
-  {"Generate code for c34", 1533},
-  {"Use standard calling sequence, with arg count word", 1534},
-  {"Place arg count in a nop instruction (faster than push)", 1535},
-  {"Don't push arg count, depend on symbol table", 1536},
-  {"Use data cache for volatile mem refs (default)", 1537},
-  {"Don't use data cache for volatile mem refs", 1538},
-  {"Bypass data cache for volatile mem refs", 1539},
-  {"Use 64-bit longs", 1540},
-  {"Use cc- and libc-compatible 32-bit longs", 1541},
-  {"Bad modes_tieable_p for register %s, mode1 %s, mode2 %s", 1542},
-  {"Enable use of conditional move instructions", 1543},
-  {"Disable use of conditional move instructions", 1544},
-  {"Debug argument support in compiler", 1545},
-  {"Debug stack support in compiler", 1546},
-  {"Debug memory address support in compiler", 1547},
-  {"Make adjacent short instructions parallel if possible.", 1548},
-  {"Do not make adjacent short instructions parallel.", 1549},
-  {"Link programs/data to be in external memory by default", 1550},
-  {"Link programs/data to be in onchip memory by default", 1551},
-  {"Change the branch costs within the compiler", 1552},
-  {"Change the threshold for conversion to conditional execution", 1553},
-  {"Stack size > 32k", 1554},
-  {"inline float constants not supported on this host", 1555},
-  {"Profiling not implemented yet.", 1556},
-  {"Trampolines not yet implemented", 1557},
-  {"Generate code the unix assembler can handle", 1558},
-  {"Generate code an embedded assembler can handle", 1559},
-  {"fr30_print_operand_address: unhandled address", 1560},
-  {"fr30_print_operand: unrecognised %p code", 1561},
-  {"fr30_print_operand: unrecognised %b code", 1562},
-  {"fr30_print_operand: unrecognised %B code", 1563},
-  {"fr30_print_operand: invalid operand to %A code", 1564},
-  {"fr30_print_operand: invalid %x code", 1565},
-  {"fr30_print_operand: invalid %F code", 1566},
-  {"fr30_print_operand: unknown code", 1567},
-  {"fr30_print_operand: unhandled MEM", 1568},
-  {"Assume small address space", 1569},
-  {"-ms2600 is used without -ms.", 1570},
-  {"Only initialized variables can be placed into the 8-bit area.", 1571},
-  {"Generate H8/S code", 1572},
-  {"Do not generate H8/S code", 1573},
-  {"Generate H8/S2600 code", 1574},
-  {"Do not generate H8/S2600 code", 1575},
-  {"Make integers 32 bits wide", 1576},
-  {"Use registers for argument passing", 1577},
-  {"Do not use registers for argument passing", 1578},
-  {"Consider access to byte sized memory slow", 1579},
-  {"Enable linker relaxing", 1580},
-  {"Generate H8/300H code", 1581},
-  {"Do not generate H8/300H code", 1582},
-  {"Use H8/300 alignment rules", 1583},
-  {"real name is too long - alias ignored", 1584},
-  {"alias name is too long - alias ignored", 1585},
-  {"junk at end of #pragma map", 1586},
-  {"malformed #pragma map, ignored", 1587},
-  {"Generate char instructions", 1588},
-  {"Do not generate char instructions", 1589},
-  {"Use the Cygwin interface", 1590},
-  {"Use the Mingw32 interface", 1591},
-  {"Create GUI application", 1592},
-  {"Don't set Windows defines", 1593},
-  {"Set Windows defines", 1594},
-  {"Create console application", 1595},
-  {"Generate code for a DLL", 1596},
-  {"Ignore dllimport for functions", 1597},
-  {"Use Mingw-specific thread support", 1598},
-  {"-f%s ignored for target (all code is position independent)", 1599},
-  {"Internal gcc abort from %s:%d", 1600},
-  {"The local variable `insn' has the value:", 1601},
-  {"Retain standard MXDB information", 1602},
-  {"Retain legend information", 1603},
-  {"Generate external legend information", 1604},
-  {"Emit identifying info in .s file", 1605},
-  {"Warn when a function arg is a structure", 1606},
-  {"argument is a structure", 1607},
-  {"-mbnu210 is ignored (option is obsolete).", 1608},
-  {"Code model %s not supported in PIC mode", 1609},
-  {"bad value (%s) for -mcmodel= switch", 1610},
-  {"Code model `%s' not supported in the %s bit mode.", 1611},
-  {"Code model `large' not supported yet.", 1612},
-  {"%i-bit mode not compiled in.", 1613},
-  {"bad value (%s) for -march= switch", 1614},
-  {"bad value (%s) for -mcpu= switch", 1615},
-  {"-mregparm=%d is not between 0 and %d", 1616},
-  {"-malign-loops is obsolete, use -falign-loops", 1617},
-  {"-malign-loops=%d is not between 0 and %d", 1618},
-  {"-malign-jumps is obsolete, use -falign-jumps", 1619},
-  {"-malign-functions is obsolete, use -falign-functions", 1620},
-  {"-mpreferred-stack-boundary=%d is not between %d and 31", 1621},
-  {"-mbranch-cost=%d is not between 0 and 5", 1622},
-  {"floating constant misused", 1623},
-  {"invalid UNSPEC as operand", 1624},
-  {"invalid expression as operand", 1625},
-  {"Extended registers have no high halves\n", 1626},
-  {"Unsupported operand size for extended register.\n", 1627},
-  {"selector must be an immediate", 1628},
-  {"mask must be an immediate", 1629},
-  {"half-pic init called on systems that don't support it.", 1630},
-  {"Same as -mcpu=i386", 1631},
-  {"Same as -mcpu=i486", 1632},
-  {"Same as -mcpu=pentium", 1633},
-  {"Same as -mcpu=pentiumpro", 1634},
-  {"Alternate calling convention", 1635},
-  {"Use normal calling convention", 1636},
-  {"Align some doubles on dword boundary", 1637},
-  {"Align doubles on word boundary", 1638},
-  {"Uninitialized locals in .bss", 1639},
-  {"Uninitialized locals in .data", 1640},
-  {"Use IEEE math for fp comparisons", 1641},
-  {"Do not use IEEE math for fp comparisons", 1642},
-  {"Return values of functions in FPU registers", 1643},
-  {"Do not return values of functions in FPU registers", 1644},
-  {"Do not generate sin, cos, sqrt for FPU", 1645},
-  {"Generate sin, cos, sqrt for FPU", 1646},
-  {"Omit the frame pointer in leaf functions", 1647},
-  {"Enable stack probing", 1648},
-  {"Emit Intel syntax assembler opcodes", 1649},
-  {"Align destination of the string operations", 1650},
-  {"Do not align destination of the string operations", 1651},
-  {"Inline all known string operations", 1652},
-  {"Do not inline all known string operations", 1653},
-  {"Use push instructions to save outgoing arguments", 1654},
-  {"Do not use push instructions to save outgoing arguments", 1655},
-  {"Support MMX builtins", 1656},
-  {"Do not support MMX builtins", 1657},
-  {"Support MMX and SSE builtins and code generation", 1658},
-  {"Do not support MMX and SSE builtins and code generation", 1659},
-  {"Support MMX, SSE and SSE2 builtins and code generation", 1660},
-  {"Do not support MMX, SSE and SSE2 builtins and code generation", 1661},
-  {"Use both SSE and i387 instruction sets for floating point arithmetics", 1662},
-  {"sizeof(long double) is 16.", 1663},
-  {"sizeof(long double) is 12.", 1664},
-  {"Generate 64bit x86-64 code", 1665},
-  {"Generate 32bit i386 code", 1666},
-  {"Use red-zone in the x86-64 code", 1667},
-  {"do not use red-zone in the x86-64 code", 1668},
-  {"Schedule code for given CPU", 1669},
-  {"Generate code for given CPU", 1670},
-  {"Number of registers used to pass integer arguments", 1671},
-  {"Loop code aligned to this power of 2", 1672},
-  {"Jump targets are aligned to this power of 2", 1673},
-  {"Function starts are aligned to this power of 2", 1674},
-  {"Attempt to keep stack aligned to this power of 2", 1675},
-  {"Branches are this expensive (1-5, arbitrary units)", 1676},
-  {"Use given x86-64 code model", 1677},
-  {"Profiling uses mcount", 1678},
-  {"Emit half-PIC code", 1679},
-  {"Emit ELF object code", 1680},
-  {"Emit ROSE object code", 1681},
-  {"Symbols have a leading underscore", 1682},
-  {"Align to >word boundaries", 1683},
-  {"Use mcount for profiling", 1684},
-  {"Use mcount_ptr for profiling", 1685},
-  {"Generate ELF output", 1686},
-  {"Use Mingw32 interface", 1687},
-  {"Use Cygwin interface", 1688},
-  {"Use bare Windows interface", 1689},
-  {"`%s' declared as both exported to and imported from a DLL.", 1690},
-  {"Environment variable DJGPP not defined.", 1691},
-  {"Environment variable DJGPP points to missing file '%s'.", 1692},
-  {"Environment variable DJGPP points to corrupt file '%s'.", 1693},
-  {"Generate code which uses the FPU", 1694},
-  {"Do not generate code which uses the FPU", 1695},
-  {"sorry, not implemented: #pragma align NAME=SIZE", 1696},
-  {"malformed #pragma align - ignored", 1697},
-  {"sorry, not implemented: #pragma noalign NAME", 1698},
-  {"stack limit expression is not supported", 1699},
-  {"Generate SA code", 1700},
-  {"Generate SB code", 1701},
-  {"Generate KA code", 1702},
-  {"Generate KB code", 1703},
-  {"Generate JA code", 1704},
-  {"Generate JD code", 1705},
-  {"Generate JF code", 1706},
-  {"generate RP code", 1707},
-  {"Generate MC code", 1708},
-  {"Generate CA code", 1709},
-  {"Generate CF code", 1710},
-  {"Use alternate leaf function entries", 1711},
-  {"Do not use alternate leaf function entries", 1712},
-  {"Perform tail call optimization", 1713},
-  {"Do not perform tail call optimization", 1714},
-  {"Use complex addressing modes", 1715},
-  {"Do not use complex addressing modes", 1716},
-  {"Align code to 8 byte boundary", 1717},
-  {"Do not align code to 8 byte boundary", 1718},
-  {"Enable compatibility with iC960 v2.0", 1719},
-  {"Enable compatibility with iC960 v3.0", 1720},
-  {"Enable compatibility with ic960 assembler", 1721},
-  {"Do not permit unaligned accesses", 1722},
-  {"Permit unaligned accesses", 1723},
-  {"Layout types like Intel's v1.3 gcc", 1724},
-  {"Do not layout types like Intel's v1.3 gcc", 1725},
-  {"Use 64 bit long doubles", 1726},
-  {"Enable linker relaxation", 1727},
-  {"Do not enable linker relaxation", 1728},
-  {"conflicting architectures defined - using C series", 1729},
-  {"conflicting architectures defined - using K series", 1730},
-  {"iC2.0 and iC3.0 are incompatible - using iC3.0", 1731},
-  {"The -mlong-double-64 option does not work yet.", 1732},
-  {"ia64_print_operand: unknown code", 1733},
-  {"value of -mfixed-range must have form REG1-REG2", 1734},
-  {"unknown register name: %s", 1735},
-  {"%s-%s is an empty range", 1736},
-  {"cannot optimize division for both latency and throughput", 1737},
-  {"Generate big endian code", 1738},
-  {"Generate little endian code", 1739},
-  {"Generate code for GNU as", 1740},
-  {"Generate code for Intel as", 1741},
-  {"Generate code for GNU ld", 1742},
-  {"Generate code for Intel ld", 1743},
-  {"Generate code without GP reg", 1744},
-  {"Emit stop bits before and after volatile extended asms", 1745},
-  {"Don't emit stop bits before and after volatile extended asms", 1746},
-  {"Emit code for Itanium (TM) processor B step", 1747},
-  {"Use in/loc/out register names", 1748},
-  {"Disable use of sdata/scommon/sbss", 1749},
-  {"Enable use of sdata/scommon/sbss", 1750},
-  {"gp is constant (but save/restore gp on indirect calls)", 1751},
-  {"Generate self-relocatable code", 1752},
-  {"Generate inline division, optimize for latency", 1753},
-  {"Generate inline division, optimize for throughput", 1754},
-  {"Enable Dwarf 2 line debug info via GNU as", 1755},
-  {"Disable Dwarf 2 line debug info via GNU as", 1756},
-  {"Specify range of registers to make fixed.", 1757},
-  {"-msystem-v and -p are incompatible", 1758},
-  {"-msystem-v and -mthreads are incompatible", 1759},
-  {"bad value (%s) for -mmodel switch", 1760},
-  {"bad value (%s) for -msdata switch", 1761},
-  {"const objects cannot go in .sdata/.sbss", 1762},
-  {"invalid operand to %s code", 1763},
-  {"invalid operand to %p code", 1764},
-  {"invalid operand to %T/%B code", 1765},
-  {"invalid operand to %N code", 1766},
-  {"Display compile time statistics", 1767},
-  {"Align all loops to 32 byte boundary", 1768},
-  {"Only issue one instruction per cycle", 1769},
-  {"Prefer branches over conditional execution", 1770},
-  {"Code size: small, medium or large", 1771},
-  {"Small data area: none, sdata, use", 1772},
-  {"-f%s ignored for 68HC11/68HC12 (not supported)", 1773},
-  {"Compile with 16-bit integer mode", 1774},
-  {"Compile with 32-bit integer mode", 1775},
-  {"Auto pre/post decrement increment allowed", 1776},
-  {"Auto pre/post decrement increment not allowed", 1777},
-  {"Compile for a 68HC11", 1778},
-  {"Compile for a 68HC12", 1779},
-  {"Specify the register allocation order", 1780},
-  {"Indicate the number of soft registers available", 1781},
-  {"-malign-loops=%d is not between 1 and %d", 1782},
-  {"-malign-jumps=%d is not between 1 and %d", 1783},
-  {"-malign-functions=%d is not between 1 and %d", 1784},
-  {"-fPIC is not currently supported on the 68000 or 68010\n", 1785},
-  {"Internal gcc monitor: short-branch(%x)", 1786},
-  {"Internal gcc error: Can't express symbolic location", 1787},
-  {"argument #%d is a structure", 1788},
-  {"%R not followed by %B/C/D/E", 1789},
-  {"invalid %x/X value", 1790},
-  {"invalid %H value", 1791},
-  {"invalid %h value", 1792},
-  {"invalid %Q value", 1793},
-  {"invalid %q value", 1794},
-  {"invalid %o value", 1795},
-  {"invalid %p value", 1796},
-  {"invalid %s/S value", 1797},
-  {"invalid %P operand", 1798},
-  {"invalid %B value", 1799},
-  {"invalid %C value", 1800},
-  {"invalid %D value", 1801},
-  {"invalid %E value", 1802},
-  {"`%d' operand isn't a register", 1803},
-  {"invalid %r value", 1804},
-  {"operand is r0", 1805},
-  {"operand is const_double", 1806},
-  {"invalid code", 1807},
-  {"-mtrap-large-shift and -mhandle-large-shift are incompatible", 1808},
-  {"Invalid option `-mshort-data-%s'", 1809},
-  {"-mshort-data-%s is too large ", 1810},
-  {"-mshort-data-%s and PIC are incompatible", 1811},
-  {"Invalid option `-mstack-increment=%s'", 1812},
-  {"Inline constants if it can be done in 2 insns or less", 1813},
-  {"inline constants if it only takes 1 instruction", 1814},
-  {"Set maximum alignment to 4", 1815},
-  {"Set maximum alignment to 8", 1816},
-  {"Do not use the divide instruction", 1817},
-  {"Do not arbitary sized immediates in bit operations", 1818},
-  {"Always treat bitfield as int-sized", 1819},
-  {"Force functions to be aligned to a 4 byte boundary", 1820},
-  {"Force functions to be aligned to a 2 byte boundary", 1821},
-  {"Emit call graph information", 1822},
-  {"Prefer word accesses over byte accesses", 1823},
-  {"Generate code for the M*Core M340", 1824},
-  {"Maximum amount for a single stack increment operation", 1825},
-  {"-mips%d not supported", 1826},
-  {"bad value (%s) for -mips switch", 1827},
-  {"bad value (%s) for -mabi= switch", 1828},
-  {"-mabi=%s does not support -mips%d", 1829},
-  {"The -mabi=32 support does not work yet.", 1830},
-  {"This target does not support the -mabi switch.", 1831},
-  {"-mcpu=%s does not support -mips%d", 1832},
-  {"-mips%d does not support 64 bit fp registers", 1833},
-  {"-mips%d does not support 64 bit gp registers", 1834},
-  {"-G is incompatible with PIC code which is the default", 1835},
-  {"-membedded-pic and -mabicalls are incompatible", 1836},
-  {"-G and -membedded-pic are incompatible", 1837},
-  {"Invalid option `entry%s'", 1838},
-  {"-mentry is only meaningful with -mips-16", 1839},
-  {"internal error: %%) found without a %%( in assembler pattern", 1840},
-  {"internal error: %%] found without a %%[ in assembler pattern", 1841},
-  {"internal error: %%> found without a %%< in assembler pattern", 1842},
-  {"internal error: %%} found without a %%{ in assembler pattern", 1843},
-  {"PRINT_OPERAND: Unknown punctuation '%c'", 1844},
-  {"PRINT_OPERAND null pointer", 1845},
-  {"invalid use of %%d, %%x, or %%X", 1846},
-  {"PRINT_OPERAND_ADDRESS, null pointer", 1847},
-  {"\
-MIPS ECOFF format does not allow changing filenames within functions with \
-#line", 1848},
-  {"can't rewind %s", 1849},
-  {"can't read from %s", 1850},
-  {"gp_offset (%ld) or end_offset (%ld) is less than zero.", 1851},
-  {"fp_offset (%ld) or end_offset (%ld) is less than zero.", 1852},
-  {"can not handle inconsistent calls to `%s'", 1853},
-  {"No default crt0.o", 1854},
-  {"Use 64-bit int type", 1855},
-  {"Use 64-bit long type", 1856},
-  {"Use 32-bit long type", 1857},
-  {"Optimize lui/addiu address loads", 1858},
-  {"Don't optimize lui/addiu address loads", 1859},
-  {"Use MIPS as", 1860},
-  {"Use GNU as", 1861},
-  {"Use symbolic register names", 1862},
-  {"Don't use symbolic register names", 1863},
-  {"Use GP relative sdata/sbss sections", 1864},
-  {"Don't use GP relative sdata/sbss sections", 1865},
-  {"Output compiler statistics", 1866},
-  {"Don't output compiler statistics", 1867},
-  {"Don't optimize block moves", 1868},
-  {"Optimize block moves", 1869},
-  {"Use mips-tfile asm postpass", 1870},
-  {"Don't use mips-tfile asm postpass", 1871},
-  {"Use hardware floating point", 1872},
-  {"Use 64-bit FP registers", 1873},
-  {"Use 32-bit FP registers", 1874},
-  {"Use 64-bit general registers", 1875},
-  {"Use 32-bit general registers", 1876},
-  {"Use Irix PIC", 1877},
-  {"Don't use Irix PIC", 1878},
-  {"Use OSF PIC", 1879},
-  {"Don't use OSF PIC", 1880},
-  {"Use indirect calls", 1881},
-  {"Don't use indirect calls", 1882},
-  {"Use embedded PIC", 1883},
-  {"Don't use embedded PIC", 1884},
-  {"Use ROM instead of RAM", 1885},
-  {"Don't use ROM instead of RAM", 1886},
-  {"Put uninitialized constants in ROM (needs -membedded-data)", 1887},
-  {"Don't put uninitialized constants in ROM", 1888},
-  {"Use big-endian byte order", 1889},
-  {"Use little-endian byte order", 1890},
-  {"Use single (32-bit) FP only", 1891},
-  {"Don't use single (32-bit) FP only", 1892},
-  {"Use multiply accumulate", 1893},
-  {"Don't use multiply accumulate", 1894},
-  {"Work around early 4300 hardware bug", 1895},
-  {"Don't work around early 4300 hardware bug", 1896},
-  {"Optimize for 4650", 1897},
-  {"Optimize for 3900", 1898},
-  {"Trap on integer divide by zero", 1899},
-  {"Don't trap on integer divide by zero", 1900},
-  {"Trap on integer divide overflow", 1901},
-  {"Don't trap on integer divide overflow", 1902},
-  {"Specify CPU for scheduling purposes", 1903},
-  {"Specify MIPS ISA", 1904},
-  {"Use mips16 entry/exit psuedo ops", 1905},
-  {"Don't use MIPS16 instructions", 1906},
-  {"mips16 function profiling", 1907},
-  {"Work around hardware multiply bug", 1908},
-  {"Do not work around hardware multiply bug", 1909},
-  {"Target the AM33 processor", 1910},
-  {"Enable linker relaxations", 1911},
-  {"optimization turned on", 1912},
-  {"optimization turned off", 1913},
-  {"optimization level restored", 1914},
-  {"Don't use hardware fp", 1915},
-  {"Alternative calling convention", 1916},
-  {"Pass some arguments in registers", 1917},
-  {"Pass all arguments on stack", 1918},
-  {"Optimize for 32532 cpu", 1919},
-  {"Optimize for 32332 cpu", 1920},
-  {"Optimize for 32032", 1921},
-  {"Register sb is zero. Use for absolute addressing", 1922},
-  {"Do not use register sb", 1923},
-  {"Do not use bitfield instructions", 1924},
-  {"Use bitfield instructions", 1925},
-  {"Generate code for high memory", 1926},
-  {"Generate code for low memory", 1927},
-  {"32381 fpu", 1928},
-  {"Use multiply-accumulate fp instructions", 1929},
-  {"Do not use multiply-accumulate fp instructions", 1930},
-  {"\"Small register classes\" kludge", 1931},
-  {"No \"Small register classes\" kludge", 1932},
-  {"\
-Unknown -mschedule= option (%s).\n\
-Valid options are 700, 7100, 7100LC, 7200, and 8000\n", 1933},
-  {"\
-Unknown -march= option (%s).\n\
-Valid options are 1.0, 1.1, and 2.0\n", 1934},
-  {"PIC code generation is not supported in the portable runtime model\n", 1935},
-  {"PIC code generation is not compatible with fast indirect calls\n", 1936},
-  {"-g is only supported when using GAS on this processor,", 1937},
-  {"-g option disabled.", 1938},
-  {"Do not use hardware floating point", 1939},
-  {"Return floating point results in ac0", 1940},
-  {"Return floating point results in memory", 1941},
-  {"Generate code for an 11/40", 1942},
-  {"Generate code for an 11/45", 1943},
-  {"Generate code for an 11/10", 1944},
-  {"Use 32 bit int", 1945},
-  {"Use 16 bit int", 1946},
-  {"Use 32 bit float", 1947},
-  {"Use 64 bit float", 1948},
-  {"Target has split I&D", 1949},
-  {"Target does not have split I&D", 1950},
-  {"Use UNIX assembler syntax", 1951},
-  {"Use DEC assembler syntax", 1952},
-  {"Generate little endian data", 1953},
-  {"Generate big endian data", 1954},
-  {"Turn on maintainer testing code", 1955},
-  {"Enable Transmeta picoJava extensions", 1956},
-  {"Disable Transmeta picoJava extensions", 1957},
-  {"Disable reorganization pass", 1958},
-  {"invalid %%B value", 1959},
-  {"invalid %%S value", 1960},
-  {"invalid %%b value", 1961},
-  {"invalid %%H value", 1962},
-  {"invalid %%z value", 1963},
-  {"invalid %%Z value", 1964},
-  {"invalid %%k value", 1965},
-  {"invalid %%j value", 1966},
-  {"can't have varargs with -mfp-arg-in-fp-regs", 1967},
-  {"Always pass floating-point arguments in memory", 1968},
-  {"Don't always pass floating-point arguments in memory", 1969},
-  {"Support message passing with the Parallel Environment", 1970},
-  {"Compile for 64-bit pointers", 1971},
-  {"Compile for 32-bit pointers", 1972},
-  {"-maix64 and POWER architecture are incompatible.", 1973},
-  {"-maix64 requires PowerPC64 architecture remain enabled.", 1974},
-  {"\
--maix64 required: 64-bit computation with 32-bit addressing not yet \
-supported.", 1975},
-  {"-mmultiple is not supported on little endian systems", 1976},
-  {"-mstring is not supported on little endian systems", 1977},
-  {"-f%s ignored for AIX (all code is position independent)", 1978},
-  {"-ffunction-sections disabled on AIX when debugging", 1979},
-  {"-fdata-sections not supported on AIX", 1980},
-  {"Unknown -mdebug-%s switch", 1981},
-  {"invalid %%f value", 1982},
-  {"invalid %%F value", 1983},
-  {"invalid %%G value", 1984},
-  {"invalid %%j code", 1985},
-  {"invalid %%J code", 1986},
-  {"invalid %%K value", 1987},
-  {"invalid %%p value", 1988},
-  {"invalid %%q value", 1989},
-  {"%%S computed all 1's mask", 1990},
-  {"%%S computed all 0's mask", 1991},
-  {"invalid %%T value", 1992},
-  {"invalid %%u value", 1993},
-  {"invalid %%v value", 1994},
-  {"invalid %%W value", 1995},
-  {"Use POWER instruction set", 1996},
-  {"Use POWER2 instruction set", 1997},
-  {"Do not use POWER2 instruction set", 1998},
-  {"Do not use POWER instruction set", 1999},
-  {"Use PowerPC instruction set", 2000},
-  {"Do not use PowerPC instruction set", 2001},
-  {"Use PowerPC General Purpose group optional instructions", 2002},
-  {"Don't use PowerPC General Purpose group optional instructions", 2003},
-  {"Use PowerPC Graphics group optional instructions", 2004},
-  {"Don't use PowerPC Graphics group optional instructions", 2005},
-  {"Use PowerPC-64 instruction set", 2006},
-  {"Don't use PowerPC-64 instruction set", 2007},
-  {"Use new mnemonics for PowerPC architecture", 2008},
-  {"Use old mnemonics for PowerPC architecture", 2009},
-  {"Put everything in the regular TOC", 2010},
-  {"Place floating point constants in TOC", 2011},
-  {"Don't place floating point constants in TOC", 2012},
-  {"Place symbol+offset constants in TOC", 2013},
-  {"Don't place symbol+offset constants in TOC", 2014},
-  {"Place variable addresses in the regular TOC", 2015},
-  {"Generate load/store multiple instructions", 2016},
-  {"Do not generate load/store multiple instructions", 2017},
-  {"Generate string instructions for block moves", 2018},
-  {"Do not generate string instructions for block moves", 2019},
-  {"Generate load/store with update instructions", 2020},
-  {"Do not generate load/store with update instructions", 2021},
-  {"Generate fused multiply/add instructions", 2022},
-  {"Don't generate fused multiply/add instructions", 2023},
-  {"Don't schedule the start and end of the procedure", 2024},
-  {"Use features of and schedule code for given CPU", 2025},
-  {"Enable debug output", 2026},
-  {"RETURN_ADDRESS_OFFSET not supported", 2027},
-  {"Select ABI calling convention.", 2028},
-  {"Select method for sdata handling.", 2029},
-  {"Align to the base type of the bitfield.", 2030},
-  {"Don't align to the base type of the bitfield.", 2031},
-  {"Don't assume that unaligned accesses are handled by the system", 2032},
-  {"Assume that unaligned accesses are handled by the system", 2033},
-  {"Produce code relocatable at runtime.", 2034},
-  {"Don't produce code relocatable at runtime.", 2035},
-  {"Produce little endian code.", 2036},
-  {"Produce big endian code.", 2037},
-  {"Use 128 bit long doubles", 2038},
-  {"no description yet", 2039},
-  {"Use EABI.", 2040},
-  {"Don't use EABI.", 2041},
-  {"Do not allow bitfields to cross word boundaries", 2042},
-  {"Use alternate register names.", 2043},
-  {"Don't use alternate register names.", 2044},
-  {"Link with libsim.a, libc.a and sim-crt0.o.", 2045},
-  {"Link with libads.a, libc.a and crt0.o.", 2046},
-  {"Link with libyk.a, libc.a and crt0.o.", 2047},
-  {"Link with libmvme.a, libc.a and crt0.o.", 2048},
-  {"Set the PPC_EMB bit in the ELF flags header", 2049},
-  {"Bad value for -mcall-%s", 2050},
-  {"Bad value for -msdata=%s", 2051},
-  {"-mrelocatable and -msdata=%s are incompatible.", 2052},
-  {"-f%s and -msdata=%s are incompatible.", 2053},
-  {"-msdata=%s and -mcall-%s are incompatible.", 2054},
-  {"-mrelocatable and -mno-minimal-toc are incompatible.", 2055},
-  {"-mrelocatable and -mcall-%s are incompatible.", 2056},
-  {"-fPIC and -mcall-%s are incompatible.", 2057},
-  {"-mcall-aixdesc must be big endian", 2058},
-  {"Generate code for big endian", 2059},
-  {"Generate code for little endian", 2060},
-  {"Use little-endian byte order for data", 2061},
-  {"%s is not supported by this configuration", 2062},
-  {"-mlong-double-64 not allowed with -m64", 2063},
-  {"-mcmodel= is not supported on 32 bit systems", 2064},
-  {"profiling does not support code models other than medlow", 2065},
-  {"Invalid %%Y operand", 2066},
-  {"Invalid %%A operand", 2067},
-  {"Invalid %%B operand", 2068},
-  {"Invalid %%c operand", 2069},
-  {"Invalid %%C operand", 2070},
-  {"Invalid %%d operand", 2071},
-  {"Invalid %%D operand", 2072},
-  {"Invalid %%f operand", 2073},
-  {"long long constant not a valid immediate operand", 2074},
-  {"floating point constant not a valid immediate operand", 2075},
-  {"%s and profiling conflict: disabling %s", 2076},
-  {"Use FUNCTION_EPILOGUE", 2077},
-  {"Do not use FUNCTION_EPILOGUE", 2078},
-  {"Assume possible double misalignment", 2079},
-  {"Assume all doubles are aligned", 2080},
-  {"Pass -assert pure-text to linker", 2081},
-  {"Do not pass -assert pure-text to linker", 2082},
-  {"Use flat register window model", 2083},
-  {"Do not use flat register window model", 2084},
-  {"Use ABI reserved registers", 2085},
-  {"Do not use ABI reserved registers", 2086},
-  {"Use hardware quad fp instructions", 2087},
-  {"Do not use hardware quad fp instructions", 2088},
-  {"Compile for v8plus ABI", 2089},
-  {"Do not compile for v8plus ABI", 2090},
-  {"Utilize Visual Instruction Set", 2091},
-  {"Do not utilize Visual Instruction Set", 2092},
-  {"Optimize for Cypress processors", 2093},
-  {"Optimize for SparcLite processors", 2094},
-  {"Optimize for F930 processors", 2095},
-  {"Optimize for F934 processors", 2096},
-  {"Use V8 Sparc ISA", 2097},
-  {"Optimize for SuperSparc processors", 2098},
-  {"Pointers are 64-bit", 2099},
-  {"Pointers are 32-bit", 2100},
-  {"Use 32-bit ABI", 2101},
-  {"Use 64-bit ABI", 2102},
-  {"Use stack bias", 2103},
-  {"Do not use stack bias", 2104},
-  {"Use structs on stronger alignment for double-word copies", 2105},
-  {"Do not use structs on stronger alignment for double-word copies", 2106},
-  {"Optimize tail call instructions in assembler and linker", 2107},
-  {"Do not optimize tail call instructions in assembler or linker", 2108},
-  {"Use given Sparc code model", 2109},
-  {"#pragma GHS endXXXX found without previous startXXX", 2110},
-  {"#pragma GHS endXXX does not match previous startXXX", 2111},
-  {"Cannot set interrupt attribute: no current function", 2112},
-  {"Cannot set interrupt attribute: no such identifier", 2113},
-  {"junk at end of #pragma ghs section", 2114},
-  {"unrecognised section name \"%s\"", 2115},
-  {"malformed #pragma ghs section", 2116},
-  {"junk at end of #pragma ghs interrupt", 2117},
-  {"junk at end of #pragma ghs starttda", 2118},
-  {"junk at end of #pragma ghs startsda", 2119},
-  {"junk at end of #pragma ghs startzda", 2120},
-  {"junk at end of #pragma ghs endtda", 2121},
-  {"junk at end of #pragma ghs endsda", 2122},
-  {"junk at end of #pragma ghs endzda", 2123},
-  {"%s=%s is not numeric.", 2124},
-  {"%s=%s is too large.", 2125},
-  {"a data area attribute cannot be specified for local variables", 2126},
-  {"data area of '%s' conflicts with previous declaration", 2127},
-  {"Bogus JR construction: %d\n", 2128},
-  {"Bad amount of stack space removal: %d", 2129},
-  {"Bogus JARL construction: %d\n", 2130},
-  {"Support Green Hills ABI", 2131},
-  {"Prohibit PC relative function calls", 2132},
-  {"Reuse r30 on a per function basis", 2133},
-  {"Use stubs for function prologues", 2134},
-  {"Same as: -mep -mprolog-function", 2135},
-  {"Enable backend debugging", 2136},
-  {"Compile for the v850 processor", 2137},
-  {"Use 4 byte entries in switch tables", 2138},
-  {"Set the max size of data eligible for the TDA area", 2139},
-  {"Set the max size of data eligible for the SDA area", 2140},
-  {"Set the max size of data eligible for the ZDA area", 2141},
-  {"cannot convert to a pointer type", 2142},
-  {"pointer value used where a floating point value was expected", 2143},
-  {"aggregate value used where a float was expected", 2144},
-  {"conversion to incomplete type", 2145},
-  {"can't convert between vector values of different size", 2146},
-  {"aggregate value used where an integer was expected", 2147},
-  {"pointer value used where a complex was expected", 2148},
-  {"aggregate value used where a complex was expected", 2149},
-  {"can't convert value to a vector", 2150},
-  {"unable to call pointer to member function here", 2151},
-  {"destructors take no parameters", 2152},
-  {"ISO C++ forbids omitting the middle term of a ?: expression", 2153},
-  {"conflicting access specifications for field `%s', ignored", 2154},
-  {"trying to finish struct, but kicked out due to previous parse errors.", 2155},
-  {"language string `\"%s\"' not recognized", 2156},
-  {"not enough type information", 2157},
-  {"invalid operation on uninstantiated type", 2158},
-  {"\
-object size exceeds built-in limit for virtual function table implementation", 2159},
-  {"\
-object size exceeds normal limit for virtual function table implementation, \
-recompile all source and use -fhuge-objects", 2160},
-  {"declaration of `%s' shadows a member of `this'", 2161},
-  {"label `%s' referenced outside of any function", 2162},
-  {"jump to case label", 2163},
-  {"  enters try block", 2164},
-  {"  enters catch block", 2165},
-  {"  from here", 2166},
-  {"the ABI requires vtable thunks", 2167},
-  {"multiple types in one declaration", 2168},
-  {"declaration does not declare anything", 2169},
-  {"Missing type-name in typedef-declaration.", 2170},
-  {"ISO C++ prohibits anonymous structs", 2171},
-  {"assignment (not initialization) in declaration", 2172},
-  {"invalid catch parameter", 2173},
-  {"cannot declare `::main' to be a template", 2174},
-  {"cannot declare `::main' to be inline", 2175},
-  {"cannot declare `::main' to be static", 2176},
-  {"`main' must return `int'", 2177},
-  {"overflow in array dimension", 2178},
-  {"destructors must be member functions", 2179},
-  {"`bool' is now a keyword", 2180},
-  {"ISO C++ does not support `long long'", 2181},
-  {"short, signed or unsigned invalid for `%s'", 2182},
-  {"long and short specified together for `%s'", 2183},
-  {"signed and unsigned given together for `%s'", 2184},
-  {"storage class specifiers invalid in parameter declarations", 2185},
-  {"typedef declaration invalid in parameter declaration", 2186},
-  {"virtual outside class declaration", 2187},
-  {"storage class specified for %s `%s'", 2188},
-  {"storage class specifiers invalid in friend function declarations", 2189},
-  {"destructor cannot be static member function", 2190},
-  {"constructor cannot be static member function", 2191},
-  {"constructors cannot be declared virtual", 2192},
-  {"return value type specifier for constructor ignored", 2193},
-  {"can't initialize friend function `%s'", 2194},
-  {"virtual functions cannot be friends", 2195},
-  {"friend declaration not in class definition", 2196},
-  {"cannot declare %s to references", 2197},
-  {"invalid type: `void &'", 2198},
-  {"discarding `const' applied to a reference", 2199},
-  {"discarding `volatile' applied to a reference", 2200},
-  {"only declarations of constructors can be `explicit'", 2201},
-  {"non-member `%s' cannot be declared `mutable'", 2202},
-  {"non-object member `%s' cannot be declared `mutable'", 2203},
-  {"function `%s' cannot be declared `mutable'", 2204},
-  {"static `%s' cannot be declared `mutable'", 2205},
-  {"const `%s' cannot be declared `mutable'", 2206},
-  {"typedef declaration includes an initializer", 2207},
-  {"unnamed variable or field declared void", 2208},
-  {"variable or field declared void", 2209},
-  {"cannot use `::' in parameter declaration", 2210},
-  {"`%s' is neither function nor member function; cannot be declared friend", 2211},
-  {"member functions are implicitly friends of their class", 2212},
-  {"storage class `auto' invalid for function `%s'", 2213},
-  {"storage class `register' invalid for function `%s'", 2214},
-  {"\
-storage class `static' invalid for function `%s' declared out of global scope", 2215},
-  {"\
-storage class `inline' invalid for function `%s' declared out of global scope", 2216},
-  {"virtual non-class function `%s'", 2217},
-  {"cannot declare static function inside another function", 2218},
-  {"\
-invalid integer constant in parameter list, did you forget to give parameter \
-name?", 2219},
-  {"conversion to %s%s will never use a type conversion operator", 2220},
-  {"return type for `main' changed to `int'", 2221},
-  {"-f%s is no longer supported", 2222},
-  {"\
--fhandle-exceptions has been renamed to -fexceptions (and is now on by \
-default)", 2223},
-  {"-fname-mangling-version is no longer supported", 2224},
-  {"-Wno-strict-prototypes is not supported in C++", 2225},
-  {"name missing for member function", 2226},
-  {"`__alignof__' applied to a bit-field", 2227},
-  {"parser may be lost: is there a '{' missing somewhere?", 2228},
-  {"ambiguous conversion for array subscript", 2229},
-  {"anachronistic use of array size in vector delete", 2230},
-  {"\
-cannot delete a function.  Only pointer-to-objects are valid arguments to \
-`delete'", 2231},
-  {"initializer invalid for static member with constructor", 2232},
-  {"(an out of class initialization is required)", 2233},
-  {"field initializer is not constant", 2234},
-  {"anonymous struct not inside named type", 2235},
-  {"namespace-scope anonymous aggregates must be static", 2236},
-  {"anonymous aggregate with no members", 2237},
-  {"too many initialization functions required", 2238},
-  {"use of old-style cast", 2239},
-  {"`%s' not supported by %s", 2240},
-  {"<anonymous %s>", 2241},
-  {"(static %s for %s)", 2242},
-  {"In %s `%s':", 2243},
-  {"%s: In instantiation of `%s':\n", 2244},
-  {"%s:%d:   instantiated from `%s'\n", 2245},
-  {"%s:%d:   instantiated from here\n", 2246},
-  {"call to Java `catch' or `throw' with `jthrowable' undefined", 2247},
-  {"mixing C++ and Java catches in a single translation unit", 2248},
-  {"  in thrown expression", 2249},
-  {"\
-(if this is not what you intended, make sure the function template has \
-already been declared and add <> after the function name here) -Wno-non-\
-template-friend disables this warning.", 2250},
-  {"argument to `%s' missing\n", 2251},
-  {"initializer list treated as compound expression", 2252},
-  {"  will be re-ordered to match declaration order", 2253},
-  {"  will be re-ordered to match inheritance order", 2254},
-  {"base class initializer specified, but no base class to initialize", 2255},
-  {"initializer for unnamed base class ambiguous", 2256},
-  {"no base class to initialize", 2257},
-  {"object missing in use of pointer-to-member construct", 2258},
-  {"at this point in file", 2259},
-  {"new of array type fails to specify size", 2260},
-  {"size in array new must have integral type", 2261},
-  {"zero size array reserves no space", 2262},
-  {"new cannot be applied to a reference type", 2263},
-  {"new cannot be applied to a function type", 2264},
-  {"call to Java constructor, while `jclass' undefined", 2265},
-  {"Can't find class$", 2266},
-  {"invalid type `void' for new", 2267},
-  {"call to Java constructor with `%s' undefined", 2268},
-  {"initializer list being treated as compound expression", 2269},
-  {"ISO C++ forbids aggregate initializer to new", 2270},
-  {"initializer ends prematurely", 2271},
-  {"cannot initialize multi-dimensional array with initializer", 2272},
-  {"unknown array size in delete", 2273},
-  {"type to vector delete is neither pointer or array type", 2274},
-  {"Do not obey access control semantics", 2275},
-  {"Change when template instances are emitted", 2276},
-  {"Check the return value of new", 2277},
-  {"Reduce size of object files", 2278},
-  {"Make string literals `char[]' instead of `const char[]'", 2279},
-  {"Dump the entire translation unit to a file", 2280},
-  {"Do not inline member functions by default", 2281},
-  {"Do not generate run time type descriptor information", 2282},
-  {"Do not generate code to check exception specifications", 2283},
-  {"Scope of for-init-statement vars extends outside", 2284},
-  {"Do not recognise GNU defined keywords", 2285},
-  {"Do not treat the namespace `std' as a normal namespace", 2286},
-  {"Enable support for huge objects", 2287},
-  {"Export functions even if they can be inlined", 2288},
-  {"Only emit explicit template instatiations", 2289},
-  {"Only emit explicit instatiations of inline templates", 2290},
-  {"Don't pedwarn about uses of Microsoft extensions", 2291},
-  {"Recognise and/bitand/bitor/compl/not/or/xor", 2292},
-  {"Disable optional diagnostics", 2293},
-  {"Downgrade conformance errors to warnings", 2294},
-  {"Enable automatic template instantiation", 2295},
-  {"Display statistics accumulated during compilation", 2296},
-  {"Specify maximum template instantiation depth", 2297},
-  {"Use __cxa_atexit to register destructors.", 2298},
-  {"Discard unused virtual functions", 2299},
-  {"Implement vtables using thunks", 2300},
-  {"Emit common-like symbols as weak symbols", 2301},
-  {"Emit cross referencing information", 2302},
-  {"Warn about inconsistent return types", 2303},
-  {"Warn about overloaded virtual function names", 2304},
-  {"Don't warn when all ctors/dtors are private", 2305},
-  {"Warn about non virtual destructors", 2306},
-  {"Warn when a function is declared extern, then inline", 2307},
-  {"Warn when the compiler reorders code", 2308},
-  {"Warn when synthesis behaviour differs from Cfront", 2309},
-  {"Don't warn when type converting pointers to member functions", 2310},
-  {"Warn about violations of Effective C++ style rules", 2311},
-  {"Warn when overload promotes from unsigned to signed", 2312},
-  {"Warn if a C style cast is used in a program", 2313},
-  {"\
-Don't warn when non-templatized friend functions are declared within a \
-template", 2314},
-  {"Don't announce deprecation of compiler features", 2315},
-  {"type name expected before `*'", 2316},
-  {"cannot declare references to references", 2317},
-  {"cannot declare pointers to references", 2318},
-  {"type name expected before `&'", 2319},
-  {"semicolon missing after %s declaration", 2320},
-  {"junk at end of #pragma %s", 2321},
-  {"invalid #pragma %s", 2322},
-  {"#pragma vtable no longer supported", 2323},
-  {"#pragma implementation for %s appears after file is included", 2324},
-  {"junk at end of #pragma GCC java_exceptions", 2325},
-  {"\
-(Each undeclared identifier is reported only once for each function it \
-appears in.)", 2326},
-  {"name lookup of `%s' changed", 2327},
-  {"name lookup of `%s' changed for new ISO `for' scoping", 2328},
-  {"real-valued template parameters when cross-compiling", 2329},
-  {"methods cannot be converted to function pointers", 2330},
-  {"ambiguous request for method pointer `%s'", 2331},
-  {"invalid default template argument", 2332},
-  {"no base or member initializers given following ':'", 2333},
-  {"base initializers not allowed for non-member functions", 2334},
-  {"only constructors take base initializers", 2335},
-  {"anachronistic old style base class initializer", 2336},
-  {"`>>' should be `> >' in template class name", 2337},
-  {"ISO C++ forbids an empty condition for `%s'", 2338},
-  {"ISO C++ forbids initialization of new expression with `='", 2339},
-  {"ISO C++ forbids compound literals", 2340},
-  {"ISO C++ forbids braced-groups within expressions", 2341},
-  {"sigof type specifier", 2342},
-  {"`sigof' applied to non-aggregate expression", 2343},
-  {"`sigof' applied to non-aggregate type", 2344},
-  {"storage class specifier `%s' not allowed after struct or class", 2345},
-  {"type specifier `%s' not allowed after struct or class", 2346},
-  {"type qualifier `%s' not allowed after struct or class", 2347},
-  {"no body nor ';' separates two class, struct or union declarations", 2348},
-  {"multiple access specifiers", 2349},
-  {"multiple `virtual' specifiers", 2350},
-  {"missing ';' before right brace", 2351},
-  {"ISO C++ forbids array dimensions with parenthesized type in new", 2352},
-  {"ISO C++ forbids label declarations", 2353},
-  {"ISO C++ forbids computed gotos", 2354},
-  {"label must be followed by statement", 2355},
-  {"ISO C++ forbids compound statements inside for initializations", 2356},
-  {"possibly missing ')'", 2357},
-  {"type specifier omitted for parameter", 2358},
-  {"creating array with size zero", 2359},
-  {"use of `%s' in template", 2360},
-  {"incomplete type unification", 2361},
-  {"use of `%s' in template type unification", 2362},
-  {"-frepo must be used with -c", 2363},
-  {"mysterious repository information in %s", 2364},
-  {"can't create repository information file `%s'", 2365},
-  {"taking dynamic typeid of object with -fno-rtti", 2366},
-  {"cannot use typeid with -fno-rtti", 2367},
-  {"must #include <typeinfo> before using typeid", 2368},
-  {"adjusting pointers for covariant returns", 2369},
-  {"recoverable compiler error, fixups for virtual function", 2370},
-  {"ISO C++ does not permit named return values", 2371},
-  {"can't redefine default return value for constructors", 2372},
-  {"   will be re-ordered to precede member initializations", 2373},
-  {"`this' is unavailable for static member functions", 2374},
-  {"invalid use of `this' in non-member function", 2375},
-  {"invalid use of `this' at top level", 2376},
-  {"template type parameters must use the keyword `class' or `typename'", 2377},
-  {"identifier name `%s' conflicts with GNU C++ internal naming strategy", 2378},
-  {"parse error", 2379},
-  {"parse error at end of saved function text", 2380},
-  {"parse error in method specification", 2381},
-  {"function body for constructor missing", 2382},
-  {"%s before `%s'", 2383},
-  {"%s before `%c'", 2384},
-  {"%s before `\\%o'", 2385},
-  {"%s before `%s' token", 2386},
-  {"non-lvalue in %s", 2387},
-  {"\
-`java_interface' attribute can only be applied to Java class definitions", 2388},
-  {"`com_interface' attribute can only be applied to class definitions", 2389},
-  {"\
-`com_interface' is obsolete; g++ vtables are now COM-compatible by default", 2390},
-  {"requested init_priority is not an integer constant", 2391},
-  {"\
-can only use init_priority attribute on file-scope definitions of objects of \
-class type", 2392},
-  {"requested init_priority is out of range", 2393},
-  {"requested init_priority is reserved for internal use", 2394},
-  {"init_priority attribute is not supported on this platform", 2395},
-  {"\
-ISO C++ forbids %s between pointer of type `void *' and pointer-to-function", 2396},
-  {"ISO C++ forbids applying `sizeof' to a function type", 2397},
-  {"ISO C++ forbids applying `sizeof' to a member function", 2398},
-  {"\
-ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type", 2399},
-  {"sizeof applied to a bit-field", 2400},
-  {"ISO C++ forbids applying `sizeof' to an expression of function type", 2401},
-  {"invalid reference to NULL ptr, use ptr-to-member instead", 2402},
-  {"invalid use of `%s' on pointer to member", 2403},
-  {"invalid type argument", 2404},
-  {"ISO C++ forbids subscripting non-lvalue array", 2405},
-  {"subscripting array declared `register'", 2406},
-  {"pointer to member function called, but not in class scope", 2407},
-  {"\
-invalid call to member function needing `this' in static member function \
-scope", 2408},
-  {"ISO C++ forbids calling `::main' from within program", 2409},
-  {"parameter type of called function is incomplete", 2410},
-  {"%s rotate count is negative", 2411},
-  {"%s rotate count >= width of type", 2412},
-  {"ISO C++ forbids comparison between pointer and integer", 2413},
-  {"comparison between signed and unsigned integer expressions", 2414},
-  {"ISO C++ forbids using pointer of type `void *' in pointer arithmetic", 2415},
-  {"ISO C++ forbids using a pointer-to-function in pointer arithmetic", 2416},
-  {"\
-ISO C++ forbids using a pointer to member function in pointer arithmetic", 2417},
-  {"ISO C++ forbids using pointer to a member in pointer arithmetic", 2418},
-  {"ISO C++ forbids using pointer of type `void *' in subtraction", 2419},
-  {"ISO C++ forbids using pointer to a function in subtraction", 2420},
-  {"ISO C++ forbids using pointer to a method in subtraction", 2421},
-  {"ISO C++ forbids using pointer to a member in subtraction", 2422},
-  {"invalid use of a pointer to an incomplete type in pointer arithmetic", 2423},
-  {"taking address of temporary", 2424},
-  {"ISO C++ forbids %sing an enum", 2425},
-  {"cast to non-reference type used as lvalue", 2426},
-  {"ISO C++ forbids taking address of function `::main'", 2427},
-  {"ISO C++ forbids taking the address of a cast to a non-lvalue expression", 2428},
-  {"unary `&'", 2429},
-  {"cannot take the address of `this', which is an rvalue expression", 2430},
-  {"\
-ISO C++ forbids casting between pointer-to-function and pointer-to-object", 2431},
-  {"ISO C++ forbids cast to non-reference type used as lvalue", 2432},
-  {"ISO C++ forbids assignment of arrays", 2433},
-  {"return value from function receives multiple initializations", 2434},
-  {"   in pointer to member function conversion", 2435},
-  {"   in pointer to member conversion", 2436},
-  {"returning reference to temporary", 2437},
-  {"reference to non-lvalue returned", 2438},
-  {"returning a value from a destructor", 2439},
-  {"cannot return from a handler of a function-try-block of a constructor", 2440},
-  {"returning a value from a constructor", 2441},
-  {"\
-return-statement with no value, in function declared with a non-void return \
-type", 2442},
-  {"\
-return-statement with a value, in function declared with a void return type", 2443},
-  {"  because the following virtual functions are abstract:", 2444},
-  {"Internal error #%d.", 2445},
-  {"due to the presence of a constructor", 2446},
-  {"comma expression used to initialize return value", 2447},
-  {"cannot initialize arrays using this syntax", 2448},
-  {"ANSI C++ forbids non-constant aggregate initializer expressions", 2449},
-  {"initializing array with parameter list", 2450},
-  {"initializer for scalar variable requires one element", 2451},
-  {"aggregate has a partly bracketed initializer", 2452},
-  {"non-trivial labeled initializers", 2453},
-  {"non-empty initializer for array of empty elements", 2454},
-  {"initializer list for object of class with virtual base classes", 2455},
-  {"initializer list for object of class with base classes", 2456},
-  {"initializer list for object using virtual functions", 2457},
-  {"index value instead of field name in union initializer", 2458},
-  {"excess elements in aggregate initializer", 2459},
-  {"circular pointer delegation detected", 2460},
-  {"result of `operator->()' yields non-pointer result", 2461},
-  {"base operand of `->' is not a pointer", 2462},
-  {"ISO C++ forbids defining types within %s", 2463},
-  {"Can't create cross-reference file `%s'", 2464},
-  {"In file included from %s:%u", 2465},
-  {"\
-,\n\
-                 from %s:%u", 2466},
-  {"internal error: ", 2467},
-  {"warning: ", 2468},
-  {"%s: %s", 2469},
-  {"traditional C rejects the `U' suffix", 2470},
-  {"too many 'l' suffixes in integer constant", 2471},
-  {"integer constant contains digits beyond the radix", 2472},
-  {"integer constant out of range", 2473},
-  {"integer constant is so large that it is unsigned", 2474},
-  {"invalid suffix '%.*s' on integer constant", 2475},
-  {"missing ')' after \"defined\"", 2476},
-  {"operator \"defined\" requires an identifier", 2477},
-  {"(\"%s\" is an alternative token for \"%s\" in C++)", 2478},
-  {"\"defined\" operator appears during macro expansion", 2479},
-  {"ISO C++ does not permit \"%s\" in #if", 2480},
-  {"\"%s\" is not defined", 2481},
-  {"integer overflow in preprocessor expression", 2482},
-  {"impossible operator '%s'", 2483},
-  {"comma operator in operand of #if", 2484},
-  {"%s is too large", 2485},
-  {"%s is shorter than expected", 2486},
-  {"%s is a block device", 2487},
-  {"No include path in which to find %s", 2488},
-  {"Multiple include guards may be useful for:\n", 2489},
-  {"absolute file name in remap_filename", 2490},
-  {"ignoring nonexistent directory \"%s\"\n", 2491},
-  {"%s: Not a directory", 2492},
-  {"ignoring duplicate directory \"%s\"\n", 2493},
-  {"-include and -imacros cannot be used with -fpreprocessed", 2494},
-  {"#include \"...\" search starts here:\n", 2495},
-  {"#include <...> search starts here:\n", 2496},
-  {"End of search list.\n", 2497},
-  {"I/O error on output", 2498},
-  {"buffers still stacked in cpp_finish", 2499},
-  {"Argument missing after %s", 2500},
-  {"Assertion missing after %s", 2501},
-  {"Directory name missing after %s", 2502},
-  {"File name missing after %s", 2503},
-  {"Macro name missing after %s", 2504},
-  {"Path name missing after %s", 2505},
-  {"Number missing after %s", 2506},
-  {"Target missing after %s", 2507},
-  {"Too many filenames. Type %s --help for usage info", 2508},
-  {"Output filename specified twice", 2509},
-  {"-I- specified twice", 2510},
-  {"GNU CPP version %s (cpplib)", 2511},
-  {"you must additionally specify either -M or -MM", 2512},
-  {"Usage: %s [switches] input output\n", 2513},
-  {"\
-Switches:\n\
-  -include <file>           Include the contents of <file> before other \
-files\n\
-  -imacros <file>           Accept definition of macros in <file>\n\
-  -iprefix <path>           Specify <path> as a prefix for next two options\n\
-  -iwithprefix <dir>        Add <dir> to the end of the system include path\n\
-  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n\
-  -isystem <dir>            Add <dir> to the start of the system include \
-path\n", 2514},
-  {"\
-  -idirafter <dir>          Add <dir> to the end of the system include path\n\
-  -I <dir>                  Add <dir> to the end of the main include path\n\
-  -I-                       Fine-grained include path control; see info \
-docs\n\
-  -nostdinc                 Do not search system include directories\n\
-                             (dirs specified with -isystem will still be \
-used)\n\
-  -nostdinc++               Do not search system include directories for C+\
-+\n\
-  -o <file>                 Put output into <file>\n", 2515},
-  {"\
-  -pedantic                 Issue all warnings demanded by strict ISO C\n\
-  -pedantic-errors          Issue -pedantic warnings as errors instead\n\
-  -trigraphs                Support ISO C trigraphs\n\
-  -lang-c                   Assume that the input sources are in C\n\
-  -lang-c89                 Assume that the input sources are in C89\n", 2516},
-  {"\
-  -lang-c++                 Assume that the input sources are in C++\n\
-  -lang-objc                Assume that the input sources are in ObjectiveC\n\
-  -lang-objc++              Assume that the input sources are in ObjectiveC+\
-+\n\
-  -lang-asm                 Assume that the input sources are in assembler\n", 2517},
-  {"\
-  -std=<std name>           Specify the conformance standard; one of:\n\
-                            gnu89, gnu99, c89, c99, iso9899:1990,\n\
-                            iso9899:199409, iso9899:1999\n\
-  -+                        Allow parsing of C++ style features\n\
-  -w                        Inhibit warning messages\n\
-  -Wtrigraphs               Warn if trigraphs are encountered\n\
-  -Wno-trigraphs            Do not warn about trigraphs\n\
-  -Wcomment{s}              Warn if one comment starts inside another\n", 2518},
-  {"\
-  -Wno-comment{s}           Do not warn about comments\n\
-  -Wtraditional             Warn about features not present in traditional \
-C\n\
-  -Wno-traditional          Do not warn about traditional C\n\
-  -Wundef                   Warn if an undefined macro is used by #if\n\
-  -Wno-undef                Do not warn about testing undefined macros\n\
-  -Wimport                  Warn about the use of the #import directive\n", 2519},
-  {"\
-  -Wno-import               Do not warn about the use of #import\n\
-  -Werror                   Treat all warnings as errors\n\
-  -Wno-error                Do not treat warnings as errors\n\
-  -Wsystem-headers          Do not suppress warnings from system headers\n\
-  -Wno-system-headers       Suppress warnings from system headers\n\
-  -Wall                     Enable all preprocessor warnings\n", 2520},
-  {"\
-  -M                        Generate make dependencies\n\
-  -MM                       As -M, but ignore system header files\n\
-  -MF <file>                Write dependency output to the given file\n\
-  -MG                       Treat missing header file as generated files\n", 2521},
-  {"\
-  -MP\t\t\t    Generate phony targets for all headers\n\
-  -MQ <target>              Add a MAKE-quoted target\n\
-  -MT <target>              Add an unquoted target\n", 2522},
-  {"\
-  -D<macro>                 Define a <macro> with string '1' as its value\n\
-  -D<macro>=<val>           Define a <macro> with <val> as its value\n\
-  -A<question> (<answer>)   Assert the <answer> to <question>\n\
-  -A-<question> (<answer>)  Disable the <answer> to <question>\n\
-  -U<macro>                 Undefine <macro> \n\
-  -v                        Display the version number\n", 2523},
-  {"\
-  -H                        Print the name of header files as they are used\n\
-  -C                        Do not discard comments\n\
-  -dM                       Display a list of macro definitions active at \
-end\n\
-  -dD                       Preserve macro definitions in output\n\
-  -dN                       As -dD except that only the names are preserved\n\
-  -dI                       Include #include directives in the output\n", 2524},
-  {"\
-  -fpreprocessed            Treat the input file as already preprocessed\n\
-  -ftabstop=<number>        Distance between tab stops for column reporting\n\
-  -P                        Do not generate #line directives\n\
-  -$                        Do not allow '$' in identifiers\n\
-  -remap                    Remap file names when including files.\n\
-  --version                 Display version information\n\
-  -h or --help              Display this information\n", 2525},
-  {"trigraph ??%c converted to %c", 2526},
-  {"trigraph ??%c ignored", 2527},
-  {"backslash and newline separated by space", 2528},
-  {"backslash-newline at end of file", 2529},
-  {"\"/*\" within comment", 2530},
-  {"null character(s) ignored", 2531},
-  {"%s in preprocessing directive", 2532},
-  {"'$' character(s) in identifier", 2533},
-  {"attempt to use poisoned \"%s\"", 2534},
-  {"__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", 2535},
-  {"missing terminating %c character", 2536},
-  {"possible start of unterminated string literal", 2537},
-  {"multi-line string literals are deprecated", 2538},
-  {"null character(s) preserved in literal", 2539},
-  {"no newline at end of file", 2540},
-  {"unterminated comment", 2541},
-  {"C++ style comments are not allowed in ISO C89", 2542},
-  {"(this will be reported only once per input file)", 2543},
-  {"multi-line comment", 2544},
-  {"directives may not be used inside a macro argument", 2545},
-  {"Unspellable token %s", 2546},
-  {"the meaning of '\\%c' varies with -traditional", 2547},
-  {"incomplete universal-character-name", 2548},
-  {"non-hex digit '%c' in universal-character-name", 2549},
-  {"universal-character-name on EBCDIC target", 2550},
-  {"universal-character-name out of range", 2551},
-  {"the meaning of '\\a' varies with -traditional", 2552},
-  {"non-ISO-standard escape sequence, '\\%c'", 2553},
-  {"the meaning of '\\x' varies with -traditional", 2554},
-  {"\\x used with no following hex digits", 2555},
-  {"hex escape sequence out of range", 2556},
-  {"octal escape sequence out of range", 2557},
-  {"unknown escape sequence '\\%c'", 2558},
-  {"unknown escape sequence: '\\%03o'", 2559},
-  {"escape sequence out of range for character", 2560},
-  {"ignoring invalid multibyte character", 2561},
-  {"empty character constant", 2562},
-  {"character constant too long", 2563},
-  {"multi-character character constant", 2564},
-  {"extra tokens at end of #%s directive", 2565},
-  {"# followed by integer", 2566},
-  {"suggest not using #elif in traditional C", 2567},
-  {"traditional C ignores #%s with the # indented", 2568},
-  {"suggest hiding #%s from traditional C with an indented #", 2569},
-  {"#%s is a GCC extension", 2570},
-  {"invalid preprocessing directive #%s", 2571},
-  {"no macro name given in #%s directive", 2572},
-  {"\"%s\" cannot be used as a macro name as it is an operator in C++", 2573},
-  {"macro names must be identifiers", 2574},
-  {"\"%s\" cannot be used as a macro name", 2575},
-  {"undefining \"%s\"", 2576},
-  {"missing terminating > character", 2577},
-  {"#%s expects \"FILENAME\" or <FILENAME>", 2578},
-  {"empty file name in #%s", 2579},
-  {"#include nested too deeply", 2580},
-  {"attempt to push file buffer with contexts stacked", 2581},
-  {"#include_next in primary source file", 2582},
-  {"#import is obsolete, use an #ifndef wrapper in the header file", 2583},
-  {"invalid flag \"%s\" in line directive", 2584},
-  {"\"%s\" after #line is not a positive integer", 2585},
-  {"line number out of range", 2586},
-  {"file \"%s\" left but not entered", 2587},
-  {"expected to return to file \"%s\"", 2588},
-  {"expected to return to line number %u", 2589},
-  {"header flags for \"%s\" have changed", 2590},
-  {"\"%s\" is not a valid filename", 2591},
-  {"unknown #pragma namespace %s", 2592},
-  {"#pragma once is obsolete", 2593},
-  {"#pragma once in main file", 2594},
-  {"invalid #pragma GCC poison directive", 2595},
-  {"poisoning existing macro \"%s\"", 2596},
-  {"#pragma system_header ignored outside include file", 2597},
-  {"cannot find source %s", 2598},
-  {"current file is older than %s", 2599},
-  {"_Pragma takes a parenthesized string literal", 2600},
-  {"#else without #if", 2601},
-  {"#else after #else", 2602},
-  {"the conditional began here", 2603},
-  {"#elif without #if", 2604},
-  {"#elif after #else", 2605},
-  {"#endif without #if", 2606},
-  {"missing '(' after predicate", 2607},
-  {"missing ')' to complete answer", 2608},
-  {"predicate's answer is empty", 2609},
-  {"assertion without predicate", 2610},
-  {"predicate must be an identifier", 2611},
-  {"\"%s\" re-asserted", 2612},
-  {"<builtin>", 2613},
-  {"<command line>", 2614},
-  {"<stdin>", 2615},
-  {"unterminated #%s", 2616},
-  {"file \"%s\" entered but not left", 2617},
-  {"invalid builtin macro \"%s\"", 2618},
-  {"invalid string literal, ignoring final '\\'", 2619},
-  {"pasting \"%s\" and \"%s\" does not give a valid preprocessing token", 2620},
-  {"unterminated argument list invoking macro \"%s\"", 2621},
-  {"ISO C99 requires rest arguments to be used", 2622},
-  {"macro \"%s\" requires %u arguments, but only %u given", 2623},
-  {"macro \"%s\" passed %u arguments, but takes just %u", 2624},
-  {"function-like macro \"%s\" must be used with arguments in traditional C", 2625},
-  {"duplicate macro parameter \"%s\"", 2626},
-  {"\"%s\" may not appear in macro parameter list", 2627},
-  {"macro parameters must be comma-separated", 2628},
-  {"parameter name missing", 2629},
-  {"anonymous variadic macros were introduced in C99", 2630},
-  {"ISO C does not permit named variadic macros", 2631},
-  {"missing ')' in macro parameter list", 2632},
-  {"ISO C requires whitespace after the macro name", 2633},
-  {"'#' is not followed by a macro parameter", 2634},
-  {"'##' cannot appear at either end of a macro expansion", 2635},
-  {"\"%s\" redefined", 2636},
-  {"this is the location of the previous definition", 2637},
-  {"macro argument \"%s\" would be stringified with -traditional.", 2638},
-  {"invalid hash type %d in dump_definition", 2639},
-  {"Invalid option %s", 2640},
-  {"\"%s\" is not a valid option to the preprocessor", 2641},
-  {"too many input files", 2642},
-  {";; Processing block from %d to %d, %d sets.\n", 2643},
-  {"%s:%d: warning: ", 2644},
-  {"%s: warning: ", 2645},
-  {"((anonymous))", 2646},
-  {"%s: warnings being treated as errors\n", 2647},
-  {"%s: %s: ", 2648},
-  {"sorry, not implemented: ", 2649},
-  {"%s ", 2650},
-  {" %s", 2651},
-  {"At top level:", 2652},
-  {"In method `%s':", 2653},
-  {"In function `%s':", 2654},
-  {"compilation terminated.\n", 2655},
-  {"%s:%d: confused by earlier errors, bailing out\n", 2656},
-  {"\
-Please submit a full bug report,\n\
-with preprocessed source if appropriate.\n\
-See %s for instructions.\n", 2657},
-  {"Unrecognizable insn:", 2658},
-  {"Insn does not satisfy its constraints:", 2659},
-  {"Internal compiler error: Error reporting routines re-entered.\n", 2660},
-  {"Internal compiler error in %s, at %s:%d", 2661},
-  {"In file included from %s:%d", 2662},
-  {"\
-,\n\
-                 from %s:%d", 2663},
-  {":\n", 2664},
-  {"DW_LOC_OP %s not implememnted\n", 2665},
-  {"internal regno botch: regno = %d\n", 2666},
-  {"can't get current directory", 2667},
-  {"Can't access real part of complex value in hard register", 2668},
-  {"can't access imaginary part of complex value in hard register", 2669},
-  {"ICE: emit_insn used where emit_jump_insn needed:\n", 2670},
-  {"abort in %s, at %s:%d", 2671},
-  {"exception handling disabled, use -fexceptions to enable", 2672},
-  {"argument of `__builtin_eh_return_regno' must be constant", 2673},
-  {"__builtin_eh_return not supported on this target", 2674},
-  {"stack limits not supported on this target", 2675},
-  {"function using short complex types cannot be inline", 2676},
-  {"unsupported wide integer operation", 2677},
-  {"prior parameter's size depends on `%s'", 2678},
-  {"returned value in block_exit_expr", 2679},
-  {"no INTEGER type can hold a pointer on this configuration", 2680},
-  {"configuration: REAL, INTEGER, and LOGICAL are %d bits wide,", 2681},
-  {"and pointers are %d bits wide, but g77 doesn't yet work", 2682},
-  {"properly unless they all are 32 bits wide.", 2683},
-  {"Please keep this in mind before you report bugs.  g77 should", 2684},
-  {"support non-32-bit machines better as of version 0.6.", 2685},
-  {"configuration: char * holds %d bits, but ftnlen only %d", 2686},
-  {"\
-configuration: char * holds %d bits, but INTEGER only %d --\n\
- ASSIGN statement might fail", 2687},
-  {"Directory name must immediately follow -I", 2688},
-  {"overflowed output arg list for `%s'", 2689},
-  {"--driver no longer supported", 2690},
-  {"argument to `%s' missing", 2691},
-  {"No input files; unwilling to write output files", 2692},
-  {"Print g77-specific compiler version info, run internal tests", 2693},
-  {"Program is written in typical FORTRAN 66 dialect", 2694},
-  {"Program is written in typical Unix f77 dialect", 2695},
-  {"Program does not use Unix-f77 dialectal features", 2696},
-  {"Program is written in Fortran-90-ish dialect", 2697},
-  {"\
-Treat local vars and COMMON blocks as if they were named in SAVE statements", 2698},
-  {"Allow $ in symbol names", 2699},
-  {"f2c-compatible code need not be generated", 2700},
-  {"Unsupported; do not generate libf2c-calling code", 2701},
-  {"Unsupported; affects code-generation of arrays", 2702},
-  {"Program is written in Fortran-90-ish free form", 2703},
-  {"Warn about use of (only a few for now) Fortran extensions", 2704},
-  {"Program is written in VXT (Digital-like) FORTRAN", 2705},
-  {"Disallow all ugly features", 2706},
-  {"Hollerith and typeless constants not passed as arguments", 2707},
-  {"Allow ordinary copying of ASSIGN'ed vars", 2708},
-  {"Dummy array dimensioned to (1) is assumed-size", 2709},
-  {"Trailing comma in procedure call denotes null argument", 2710},
-  {"Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z", 2711},
-  {"Initialization via DATA and PARAMETER is type-compatible", 2712},
-  {"Allow INTEGER and LOGICAL interchangeability", 2713},
-  {"Print internal debugging-related info", 2714},
-  {"Initialize local vars and arrays to zero", 2715},
-  {"Backslashes in character/hollerith constants not special (C-style)", 2716},
-  {"Have front end emulate COMPLEX arithmetic to avoid bugs", 2717},
-  {"Disable the appending of underscores to externals", 2718},
-  {"Never append a second underscore to externals", 2719},
-  {"Intrinsics spelled as e.g. SqRt", 2720},
-  {"Intrinsics in uppercase", 2721},
-  {"Intrinsics letters in arbitrary cases", 2722},
-  {"Language keywords spelled as e.g. IOStat", 2723},
-  {"Language keywords in uppercase", 2724},
-  {"Language keyword letters in arbitrary cases", 2725},
-  {"Internally convert most source to uppercase", 2726},
-  {"Internally preserve source case", 2727},
-  {"Symbol names spelled in mixed case", 2728},
-  {"Symbol names in uppercase", 2729},
-  {"Symbol names in lowercase", 2730},
-  {"Program written in uppercase", 2731},
-  {"Program written in lowercase", 2732},
-  {"Program written in strict mixed-case", 2733},
-  {"Compile as if program written in uppercase", 2734},
-  {"Compile as if program written in lowercase", 2735},
-  {"Preserve all spelling (case) used in program", 2736},
-  {"Delete libU77 intrinsics with bad interfaces", 2737},
-  {"Disable libU77 intrinsics with bad interfaces", 2738},
-  {"Hide libU77 intrinsics with bad interfaces", 2739},
-  {"Delete non-FORTRAN-77 intrinsics f2c supports", 2740},
-  {"Disable non-FORTRAN-77 intrinsics f2c supports", 2741},
-  {"Hide non-FORTRAN-77 intrinsics f2c supports", 2742},
-  {"Delete non-FORTRAN-77 intrinsics F90 supports", 2743},
-  {"Disable non-FORTRAN-77 intrinsics F90 supports", 2744},
-  {"Hide non-FORTRAN-77 intrinsics F90 supports", 2745},
-  {"Delete non-FORTRAN-77 intrinsics g77 supports", 2746},
-  {"Disable non-FORTRAN 77 intrinsics F90 supports", 2747},
-  {"Hide non-FORTRAN 77 intrinsics F90 supports", 2748},
-  {"Delete MIL-STD 1753 intrinsics", 2749},
-  {"Disable MIL-STD 1753 intrinsics", 2750},
-  {"Hide MIL-STD 1753 intrinsics", 2751},
-  {"Delete libU77 intrinsics", 2752},
-  {"Disable libU77 intrinsics", 2753},
-  {"Hide libU77 intrinsics", 2754},
-  {"Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports", 2755},
-  {"Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports", 2756},
-  {"Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports", 2757},
-  {"Treat initial values of 0 like non-zero values", 2758},
-  {"\
-Emit special debugging information for COMMON and EQUIVALENCE (disabled)", 2759},
-  {"Take at least one trip through each iterative DO loop", 2760},
-  {"Print names of program units as they are compiled", 2761},
-  {"Disable fatal diagnostics about inter-procedural problems", 2762},
-  {"Make prefix-radix non-decimal constants be typeless", 2763},
-  {"Generate code to check subscript and substring bounds", 2764},
-  {"Fortran-specific form of -fbounds-check", 2765},
-  {"Disable warnings about inter-procedural problems", 2766},
-  {"Warn about constructs with surprising meanings", 2767},
-  {"Add a directory for INCLUDE searching", 2768},
-  {"Set the maximum line length", 2769},
-  {"the meaning of `\\x' varies with -traditional", 2770},
-  {"hex escape out of range", 2771},
-  {"the meaning of `\\a' varies with -traditional", 2772},
-  {"non-ANSI-standard escape sequence, `\\%c'", 2773},
-  {"non-ANSI escape sequence `\\%c'", 2774},
-  {"unknown escape sequence `\\%c'", 2775},
-  {"unknown escape sequence: `\\' followed by char code 0x%x", 2776},
-  {"Badly formed directive -- no closing quote", 2777},
-  {"Bad directive -- missing close-quote", 2778},
-  {"ignoring pragma: %s", 2779},
-  {"Use `#line ...' instead of `# ...' in first line", 2780},
-  {"ASSIGNed FORMAT specifier is too small", 2781},
-  {"ASSIGN to variable that is too small", 2782},
-  {"ASSIGNed GOTO target variable is too small", 2783},
-  {"%s no longer supported -- try -fvxt", 2784},
-  {"%s no longer supported -- try -fno-vxt -ff90", 2785},
-  {"%s disabled, use normal debugging flags", 2786},
-  {"invalid `asm': %s", 2787},
-  {"output_operand: %s", 2788},
-  {"operand number missing after %-letter", 2789},
-  {"operand number out of range", 2790},
-  {"invalid %%-code", 2791},
-  {"`%l' operand isn't a label", 2792},
-  {"function might be possible candidate for attribute `noreturn'", 2793},
-  {"`noreturn' function does return", 2794},
-  {"control reaches end of non-void function", 2795},
-  {"End insn %d for block %d not found in the insn stream.", 2796},
-  {"Insn %d is in multiple basic blocks (%d and %d)", 2797},
-  {"Head insn %d for block %d not found in the insn stream.", 2798},
-  {"Basic block %i edge lists are corrupted", 2799},
-  {"Basic block %d pred edge is corrupted", 2800},
-  {"NOTE_INSN_BASIC_BLOCK is missing for block %d", 2801},
-  {"NOTE_INSN_BASIC_BLOCK is missing for block %d\n", 2802},
-  {"NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d", 2803},
-  {"In basic block %d:", 2804},
-  {"number of bb notes in insn chain (%d) != n_basic_blocks (%d)", 2805},
-  {"comparison is always %d due to width of bitfield", 2806},
-  {"comparison is always %d", 2807},
-  {"`or' of unmatched not-equal tests is always 1", 2808},
-  {"`and' of mutually exclusive equal-tests is always 0", 2809},
-  {"`%s' might be used uninitialized in this function", 2810},
-  {"variable `%s' might be clobbered by `longjmp' or `vfork'", 2811},
-  {"argument `%s' might be clobbered by `longjmp' or `vfork'", 2812},
-  {"function returns an aggregate", 2813},
-  {"unused parameter `%s'", 2814},
-  {"Ambiguous abbreviation %s", 2815},
-  {"Incomplete `%s' option", 2816},
-  {"Missing argument to `%s' option", 2817},
-  {"Extraneous argument to `%s' option", 2818},
-  {"Using builtin specs.\n", 2819},
-  {"\
-Setting spec %s to '%s'\n\
-\n", 2820},
-  {"Reading specs from %s\n", 2821},
-  {"specs %%include syntax malformed after %ld characters", 2822},
-  {"Could not find specs file %s\n", 2823},
-  {"specs %%rename syntax malformed after %ld characters", 2824},
-  {"specs %s spec was not found to be renamed", 2825},
-  {"rename spec %s to %s\n", 2826},
-  {"\
-spec is '%s'\n\
-\n", 2827},
-  {"specs unknown %% command after %ld characters", 2828},
-  {"specs file malformed after %ld characters", 2829},
-  {"spec file has no spec for linking", 2830},
-  {"-pipe not supported", 2831},
-  {"\
-\n\
-Go ahead? (y or n) ", 2832},
-  {"\
-Internal error: %s (program %s)\n\
-Please submit a full bug report.\n\
-See %s for instructions.", 2833},
-  {"# %s %.2f %.2f\n", 2834},
-  {"Usage: %s [options] file...\n", 2835},
-  {"Options:\n", 2836},
-  {"  -pass-exit-codes         Exit with highest error code from a phase\n", 2837},
-  {"  --help                   Display this information\n", 2838},
-  {"\
-  --target-help            Display target specific command line options\n", 2839},
-  {"  (Use '-v --help' to display command line options of sub-processes)\n", 2840},
-  {"  -dumpspecs               Display all of the built in spec strings\n", 2841},
-  {"  -dumpversion             Display the version of the compiler\n", 2842},
-  {"  -dumpmachine             Display the compiler's target processor\n", 2843},
-  {"\
-  -print-search-dirs       Display the directories in the compiler's search \
-path\n", 2844},
-  {"\
-  -print-libgcc-file-name  Display the name of the compiler's companion \
-library\n", 2845},
-  {"  -print-file-name=<lib>   Display the full path to library <lib>\n", 2846},
-  {"\
-  -print-prog-name=<prog>  Display the full path to compiler component \
-<prog>\n", 2847},
-  {"\
-  -print-multi-directory   Display the root directory for versions of \
-libgcc\n", 2848},
-  {"\
-  -print-multi-lib         Display the mapping between command line options \
-and\n\
-                           multiple library search directories\n", 2849},
-  {"\
-  -Wa,<options>            Pass comma-separated <options> on to the \
-assembler\n", 2850},
-  {"\
-  -Wp,<options>            Pass comma-separated <options> on to the \
-preprocessor\n", 2851},
-  {"\
-  -Wl,<options>            Pass comma-separated <options> on to the linker\n", 2852},
-  {"  -Xlinker <arg>           Pass <arg> on to the linker\n", 2853},
-  {"  -save-temps              Do not delete intermediate files\n", 2854},
-  {"  -pipe                    Use pipes rather than intermediate files\n", 2855},
-  {"  -time                    Time the execution of each subprocess\n", 2856},
-  {"\
-  -specs=<file>            Override builtin specs with the contents of \
-<file>\n", 2857},
-  {"\
-  -std=<standard>          Assume that the input sources are for <standard>\n", 2858},
-  {"\
-  -B <directory>           Add <directory> to the compiler's search paths\n", 2859},
-  {"  -b <machine>             Run gcc for target <machine>, if installed\n", 2860},
-  {"\
-  -V <version>             Run gcc version number <version>, if installed\n", 2861},
-  {"\
-  -v                       Display the programs invoked by the compiler\n", 2862},
-  {"\
-  -E                       Preprocess only; do not compile, assemble or \
-link\n", 2863},
-  {"  -S                       Compile only; do not assemble or link\n", 2864},
-  {"  -c                       Compile and assemble, but do not link\n", 2865},
-  {"  -o <file>                Place the output into <file>\n", 2866},
-  {"\
-  -x <language>            Specify the language of the following input \
-files\n\
-                           Permissable languages include: c c++ assembler \
-none\n\
-                           'none' means revert to the default behaviour of\n\
-                           guessing the language based on the file's \
-extension\n", 2867},
-  {"\
-\n\
-Options starting with -g, -f, -m, -O, -W, or --param are automatically\n\
- passed on to the various sub-processes invoked by %s.  In order to pass\n\
- other options on to these processes the -W<letter> options must be used.\n", 2868},
-  {"argument to `-Xlinker' is missing", 2869},
-  {"argument to `-l' is missing", 2870},
-  {"argument to `-specs' is missing", 2871},
-  {"argument to `-specs=' is missing", 2872},
-  {"argument to `-b' is missing", 2873},
-  {"argument to `-B' is missing", 2874},
-  {"argument to `-V' is missing", 2875},
-  {"invalid version number format", 2876},
-  {"cannot specify -o with -c or -S and multiple compilations", 2877},
-  {"Warning: -pipe ignored because -save-temps specified", 2878},
-  {"Warning: -pipe ignored because -time specified", 2879},
-  {"argument to `-x' is missing", 2880},
-  {"argument to `-%s' is missing", 2881},
-  {"Warning: `-x %s' after last input file has no effect", 2882},
-  {"Invalid specification!  Bug in cc.", 2883},
-  {"%s\n", 2884},
-  {"Spec failure: '%%*' has not been initialised by pattern match", 2885},
-  {"Warning: use of obsolete %%[ operator in specs", 2886},
-  {"Processing spec %c%s%c, which is '%s'\n", 2887},
-  {"Spec failure: Unrecognised spec option '%c'", 2888},
-  {"unrecognized option `-%s'", 2889},
-  {"install: %s%s\n", 2890},
-  {"programs: %s\n", 2891},
-  {"libraries: %s\n", 2892},
-  {"\
-\n\
-For bug reporting instructions, please see:\n", 2893},
-  {"Configured with: %s\n", 2894},
-  {"Thread model: %s\n", 2895},
-  {"gcc version %s\n", 2896},
-  {"gcc driver version %s executing gcc version %s\n", 2897},
-  {"No input files", 2898},
-  {"%s: %s compiler not installed on this system", 2899},
-  {"%s: linker input file unused because linking not done", 2900},
-  {"language %s not recognized", 2901},
-  {"Internal gcc abort.", 2902},
-  {"Internal gcov abort.\n", 2903},
-  {"gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n", 2904},
-  {"Could not open basic block file %s.\n", 2905},
-  {"Could not open data file %s.\n", 2906},
-  {"Assuming that all execution counts are zero.\n", 2907},
-  {"Could not open program flow graph file %s.\n", 2908},
-  {"No executable code associated with file %s.\n", 2909},
-  {".da file contents exhausted too early\n", 2910},
-  {".da file contents not exhausted\n", 2911},
-  {"%6.2f%% of %d source lines executed in function %s\n", 2912},
-  {"No executable source lines in function %s\n", 2913},
-  {"%6.2f%% of %d branches executed in function %s\n", 2914},
-  {"%6.2f%% of %d branches taken at least once in function %s\n", 2915},
-  {"No branches in function %s\n", 2916},
-  {"%6.2f%% of %d calls executed in function %s\n", 2917},
-  {"No calls in function %s\n", 2918},
-  {"didn't use all bb entries of graph, function %s\n", 2919},
-  {"block_num = %ld, num_blocks = %d\n", 2920},
-  {"ERROR: too many basic blocks in .bb file %s\n", 2921},
-  {"%6.2f%% of %d source lines executed in file %s\n", 2922},
-  {"No executable source lines in file %s\n", 2923},
-  {"%6.2f%% of %d branches executed in file %s\n", 2924},
-  {"%6.2f%% of %d branches taken at least once in file %s\n", 2925},
-  {"No branches in file %s\n", 2926},
-  {"%6.2f%% of %d calls executed in file %s\n", 2927},
-  {"No calls in file %s\n", 2928},
-  {"Could not open source file %s.\n", 2929},
-  {"Could not open output file %s.\n", 2930},
-  {"Creating %s.\n", 2931},
-  {"call %d never executed\n", 2932},
-  {"call %d returns = %d\n", 2933},
-  {"call %d returns = %d%%\n", 2934},
-  {"branch %d never executed\n", 2935},
-  {"branch %d taken = %d\n", 2936},
-  {"branch %d taken = %d%%\n", 2937},
-  {"Unexpected EOF while reading source file %s.\n", 2938},
-  {"GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block", 2939},
-  {"GCSE disabled: %d basic blocks and %d registers", 2940},
-  {"fix_sched_param: unknown param: %s", 2941},
-  {"function cannot be inline", 2942},
-  {"varargs function cannot be inline", 2943},
-  {"function using alloca cannot be inline", 2944},
-  {"function using setjmp cannot be inline", 2945},
-  {"function uses __builtin_eh_return", 2946},
-  {"function with nested functions cannot be inline", 2947},
-  {"function with label addresses used in initializers cannot inline", 2948},
-  {"function too large to be inline", 2949},
-  {"no prototype, and parameter address used; cannot be inline", 2950},
-  {"inline functions not supported for this return value type", 2951},
-  {"function with varying-size return value cannot be inline", 2952},
-  {"function with varying-size parameter cannot be inline", 2953},
-  {"function with transparent unit parameter cannot be inline", 2954},
-  {"function with computed jump cannot inline", 2955},
-  {"function with nonlocal goto cannot be inline", 2956},
-  {"function with target specific attribute(s) cannot be inlined", 2957},
-  {"internal error in check-init: tree code not implemented: %s", 2958},
-  {"internal error - too many interface type", 2959},
-  {"bad method signature", 2960},
-  {"misplaced ConstantValue attribute (not in any field)", 2961},
-  {"duplicate ConstanValue atribute for field '%s'", 2962},
-  {"field '%s' not found in class", 2963},
-  {"abstract method in non-abstract class", 2964},
-  {"non-static method '%s' overrides static method", 2965},
-  {"In %s: overlapped variable and exception ranges at %d", 2966},
-  {"bad type in parameter debug info", 2967},
-  {"bad PC range for debug info for local `%s'", 2968},
-  {"stack underflow - dup* operation", 2969},
-  {"\
-reference `%s' is ambiguous: appears in interface `%s' and interface `%s'", 2970},
-  {"field `%s' not found", 2971},
-  {"ret instruction not implemented", 2972},
-  {"method '%s' not found in class", 2973},
-  {"failed to find class '%s'", 2974},
-  {"Class '%s' has no method named '%s' matching signature '%s'", 2975},
-  {"invokestatic on non static method", 2976},
-  {"invokestatic on abstract method", 2977},
-  {"invoke[non-static] on static method", 2978},
-  {"Missing field '%s' in '%s'", 2979},
-  {"Mismatching signature for field '%s' in '%s'", 2980},
-  {"assignment to final field `%s' not in field's class", 2981},
-  {"assignment to final static field `%s' not in class initializer", 2982},
-  {"assignment to final field `%s' not in constructor", 2983},
-  {"Can't expand %s", 2984},
-  {"invalid PC in line number table", 2985},
-  {"Unreachable bytecode from %d to before %d.", 2986},
-  {"Unreachable bytecode from %d to the end of the method.", 2987},
-  {"unrecogized wide sub-instruction", 2988},
-  {"\
-Source file for class `%s' is newer than its matching class file. Source \
-file used instead", 2989},
-  {"bad string constant", 2990},
-  {"bad value constant type %d, index %d", 2991},
-  {"Cannot find file for class %s.", 2992},
-  {"not a valid Java .class file", 2993},
-  {"error while parsing constant pool", 2994},
-  {"error in constant pool entry #%d\n", 2995},
-  {"reading class %s for the second time from %s", 2996},
-  {"error while parsing fields", 2997},
-  {"error while parsing methods", 2998},
-  {"error while parsing final attributes", 2999},
-  {"\
-The `java.lang.Object' that was found in `%s' didn't have the special zero-\
-length `gnu.gcj.gcj-compiled' attribute. This generally means that your \
-classpath is incorrect set. Use `info gcj \"Input Options\"' to see the info \
-page describing how to set the classpath.", 3000},
-  {"missing Code attribute", 3001},
-  {"error closing %s", 3002},
-  {"source file seen twice on command line and will be compiled only once.", 3003},
-  {"no input file specified", 3004},
-  {"can't close input file %s", 3005},
-  {"Premature end of input file %s", 3006},
-  {"bad zip/jar file %s", 3007},
-  {"\
-internal error in generate_bytecode_insn - tree code not implemented: %s", 3008},
-  {"can't create directory %s", 3009},
-  {"can't to open %s", 3010},
-  {"Only one of `--print-main', `--list-class', and `--complexity' allowed", 3011},
-  {"Can't open output file `%s'", 3012},
-  {"File not found `%s'", 3013},
-  {"can't specify `-D' without `--main'\n", 3014},
-  {"Warning: already-compiled .class files ignored with -C", 3015},
-  {"cannot specify both -C and -o", 3016},
-  {"cannot create temporary file", 3017},
-  {"using both @FILE with multiple files not implemented", 3018},
-  {"cannot specify `main' class when not linking", 3019},
-  {"Disable automatic array bounds checking", 3020},
-  {"Make is_compiled_class return 1", 3021},
-  {"Dump class files to <name>.class", 3022},
-  {"input file is list of file names to compile", 3023},
-  {"Generate code for Boehm GC", 3024},
-  {"Don't put synchronization structure in each object", 3025},
-  {"Assume native functions are implemented using JNI", 3026},
-  {"Set class path and suppress system path", 3027},
-  {"Set class path", 3028},
-  {"Choose class whose main method should be used", 3029},
-  {"Choose input encoding (default is UTF-8)", 3030},
-  {"Add directory to class path", 3031},
-  {"Directory where class files should be written", 3032},
-  {"Use built-in instructions for division", 3033},
-  {"Generate null pointer checks inline", 3034},
-  {"Warn if modifiers are specified when not necessary", 3035},
-  {"Warn if deprecated empty statements are found", 3036},
-  {"Warn if .class files are out of date", 3037},
-  {"Always check for non gcj generated classes archives", 3038},
-  {"can't do dependency tracking with input from stdin", 3039},
-  {"couldn't determine target name for dependency tracking", 3040},
-  {"\
-unknown encoding: `%s'\n\
-This might mean that your locale's encoding is not supported\n\
-by your system's iconv(3) implementation.  If you aren't trying\n\
-to use a particular encoding for your input file, try the\n\
-`--encoding=UTF-8' option.", 3041},
-  {"Can't mangle %s", 3042},
-  {"internal error - invalid Utf8 name", 3043},
-  {"Missing name", 3044},
-  {"';' expected", 3045},
-  {"'*' expected", 3046},
-  {"Class or interface declaration expected", 3047},
-  {"Missing class name", 3048},
-  {"'{' expected", 3049},
-  {"Missing super class name", 3050},
-  {"Missing interface name", 3051},
-  {"Missing term", 3052},
-  {"Missing variable initializer", 3053},
-  {"Invalid declaration", 3054},
-  {"Can't specify array dimension in a declaration", 3055},
-  {"']' expected", 3056},
-  {"Unbalanced ']'", 3057},
-  {"Invalid method declaration, method name required", 3058},
-  {"Identifier expected", 3059},
-  {"Invalid method declaration, return type required", 3060},
-  {"')' expected", 3061},
-  {"Missing formal parameter term", 3062},
-  {"Missing identifier", 3063},
-  {"Missing class type term", 3064},
-  {"Invalid interface type", 3065},
-  {"':' expected", 3066},
-  {"Invalid expression statement", 3067},
-  {"'(' expected", 3068},
-  {"Missing term or ')'", 3069},
-  {"Missing or invalid constant expression", 3070},
-  {"Missing term and ')' expected", 3071},
-  {"Invalid control expression", 3072},
-  {"Invalid update expression", 3073},
-  {"Invalid init statement", 3074},
-  {"Missing term or ')' expected", 3075},
-  {"'class' or 'this' expected", 3076},
-  {"'class' expected", 3077},
-  {"')' or term expected", 3078},
-  {"'[' expected", 3079},
-  {"Field expected", 3080},
-  {"Missing term and ']' expected", 3081},
-  {"']' expected, invalid type expression", 3082},
-  {"Invalid type expression", 3083},
-  {"Invalid reference type", 3084},
-  {"Constructor invocation must be first thing in a constructor", 3085},
-  {"Only constructors can invoke constructors", 3086},
-  {": `%s' JDK1.1(TM) feature", 3087},
-  {"\
-%s.\n\
-%s", 3088},
-  {"Can't use '$' as a separator for inner classes", 3089},
-  {"malformed .zip archive in CLASSPATH: %s", 3090},
-  {"\
-Can't find default package `%s'. Check the CLASSPATH environment variable \
-and the access to the archives.", 3091},
-  {"missing static field `%s'", 3092},
-  {"not a static field `%s'", 3093},
-  {"No case for %s", 3094},
-  {"unregistered operator %s", 3095},
-  {"junk at end of signature string", 3096},
-  {"bad pc in exception_table", 3097},
-  {"unknown opcode %d@pc=%d during verification", 3098},
-  {"verification error at PC=%d", 3099},
-  {"Dump decls to a .decl file", 3100},
-  {"Generate code for GNU runtime environment", 3101},
-  {"Generate code for NeXT runtime environment", 3102},
-  {"Warn if a selector has multiple methods", 3103},
-  {"Do not warn if inherited methods are unimplemented", 3104},
-  {"Generate C header of platform specific features", 3105},
-  {"Specify the name of the class for constant strings", 3106},
-  {"no class name specified as argument to -fconstant-string-class", 3107},
-  {"object does not conform to the `%s' protocol", 3108},
-  {"class `%s' does not implement the `%s' protocol", 3109},
-  {"Unexpected type for `id' (%s)", 3110},
-  {"Undefined type `id', please import <objc/objc.h>", 3111},
-  {"Cannot find protocol declaration for `%s'", 3112},
-  {"Cannot find interface declaration for `%s'", 3113},
-  {"Cannot find reference tag for class `%s'", 3114},
-  {"Cannot find class `%s'", 3115},
-  {"Class `%s' already exists", 3116},
-  {"Cannot find interface declaration for `%s', superclass of `%s'", 3117},
-  {"Circular inheritance in interface declaration for `%s'", 3118},
-  {"inconsistent instance variable specification", 3119},
-  {"multiple declarations for method `%s'", 3120},
-  {"invalid receiver type `%s'", 3121},
-  {"`%s' does not respond to `%s'", 3122},
-  {"no super class declared in interface for `%s'", 3123},
-  {"cannot find class (factory) method.", 3124},
-  {"return type for `%s' defaults to id", 3125},
-  {"method `%s' not implemented by protocol.", 3126},
-  {"return type defaults to id", 3127},
-  {"cannot find method.", 3128},
-  {"instance variable `%s' accessed in class method", 3129},
-  {"duplicate definition of class method `%s'.", 3130},
-  {"duplicate declaration of class method `%s'.", 3131},
-  {"duplicate definition of instance method `%s'.", 3132},
-  {"duplicate declaration of instance method `%s'.", 3133},
-  {"duplicate interface declaration for category `%s(%s)'", 3134},
-  {"instance variable `%s' is declared private", 3135},
-  {"instance variable `%s' is declared %s", 3136},
-  {"static access to object of type `id'", 3137},
-  {"incomplete implementation of class `%s'", 3138},
-  {"incomplete implementation of category `%s'", 3139},
-  {"method definition for `%c%s' not found", 3140},
-  {"%s `%s' does not fully implement the `%s' protocol", 3141},
-  {"`@end' missing in implementation context", 3142},
-  {"reimplementation of class `%s'", 3143},
-  {"conflicting super class name `%s'", 3144},
-  {"duplicate interface declaration for class `%s'", 3145},
-  {"duplicate declaration for protocol `%s'", 3146},
-  {"[super ...] must appear in a method context", 3147},
-  {"potential selector conflict for method `%s'", 3148},
-  {"`@end' must appear in an implementation context", 3149},
-  {"method definition not in class context", 3150},
-  {"syntax error at '@' token", 3151},
-  {"invalid parameter `%s'", 3152},
-  {"Arc profiling: some edge counts were bad.", 3153},
-  {"file %s not found, execution counts assumed to be zero.", 3154},
-  {"%s: internal abort\n", 3155},
-  {"%s: error writing file `%s': %s\n", 3156},
-  {"%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n", 3157},
-  {"%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n", 3158},
-  {"%s: warning: no read access for file `%s'\n", 3159},
-  {"%s: warning: no write access for file `%s'\n", 3160},
-  {"%s: warning: no write access for dir containing `%s'\n", 3161},
-  {"%s: invalid file name: %s\n", 3162},
-  {"%s: %s: can't get status: %s\n", 3163},
-  {"\
-\n\
-%s: fatal error: aux info file corrupted at line %d\n", 3164},
-  {"%s:%d: declaration of function `%s' takes different forms\n", 3165},
-  {"%s: compiling `%s'\n", 3166},
-  {"%s: wait: %s\n", 3167},
-  {"%s: subprocess got fatal signal %d\n", 3168},
-  {"%s: %s exited with status %d\n", 3169},
-  {"%s: warning: missing SYSCALLS file `%s'\n", 3170},
-  {"%s: can't read aux info file `%s': %s\n", 3171},
-  {"%s: can't get status of aux info file `%s': %s\n", 3172},
-  {"%s: can't open aux info file `%s' for reading: %s\n", 3173},
-  {"%s: error reading aux info file `%s': %s\n", 3174},
-  {"%s: error closing aux info file `%s': %s\n", 3175},
-  {"%s: can't delete aux info file `%s': %s\n", 3176},
-  {"%s: can't delete file `%s': %s\n", 3177},
-  {"%s: warning: can't rename file `%s' to `%s': %s\n", 3178},
-  {"%s: conflicting extern definitions of '%s'\n", 3179},
-  {"%s: declarations of '%s' will not be converted\n", 3180},
-  {"%s: conflict list for '%s' follows:\n", 3181},
-  {"%s: warning: using formals list from %s(%d) for function `%s'\n", 3182},
-  {"%s: %d: `%s' used but missing from SYSCALLS\n", 3183},
-  {"%s: %d: warning: no extern definition for `%s'\n", 3184},
-  {"%s: warning: no static definition for `%s' in file `%s'\n", 3185},
-  {"%s: multiple static defs of `%s' in file `%s'\n", 3186},
-  {"%s: %d: warning: source too confusing\n", 3187},
-  {"%s: %d: warning: varargs function declaration not converted\n", 3188},
-  {"%s: declaration of function `%s' not converted\n", 3189},
-  {"%s: warning: too many parameter lists in declaration of `%s'\n", 3190},
-  {"\
-\n\
-%s: warning: too few parameter lists in declaration of `%s'\n", 3191},
-  {"%s: %d: warning: found `%s' but expected `%s'\n", 3192},
-  {"%s: local declaration for function `%s' not inserted\n", 3193},
-  {"\
-\n\
-%s: %d: warning: can't add declaration of `%s' into macro call\n", 3194},
-  {"%s: global declarations for file `%s' not inserted\n", 3195},
-  {"%s: definition of function `%s' not converted\n", 3196},
-  {"%s: %d: warning: definition of %s not converted\n", 3197},
-  {"%s: found definition of `%s' at %s(%d)\n", 3198},
-  {"%s: %d: warning: `%s' excluded by preprocessing\n", 3199},
-  {"%s: function definition not converted\n", 3200},
-  {"%s: `%s' not converted\n", 3201},
-  {"%s: would convert file `%s'\n", 3202},
-  {"%s: converting file `%s'\n", 3203},
-  {"%s: can't get status for file `%s': %s\n", 3204},
-  {"%s: can't open file `%s' for reading: %s\n", 3205},
-  {"\
-\n\
-%s: error reading input file `%s': %s\n", 3206},
-  {"%s: can't create/open clean file `%s': %s\n", 3207},
-  {"%s: warning: file `%s' already saved in `%s'\n", 3208},
-  {"%s: can't link file `%s' to `%s': %s\n", 3209},
-  {"%s: can't create/open output file `%s': %s\n", 3210},
-  {"%s: can't change mode of file `%s': %s\n", 3211},
-  {"%s: cannot get working directory: %s\n", 3212},
-  {"%s: input file names must have .c suffixes: %s\n", 3213},
-  {"conversion from NaN to int", 3214},
-  {"conversion from NaN to unsigned int", 3215},
-  {"floating point overflow", 3216},
-  {"overflow on truncation to integer", 3217},
-  {"overflow on truncation to unsigned integer", 3218},
-  {"%s: argument domain error", 3219},
-  {"%s: function singularity", 3220},
-  {"%s: overflow range error", 3221},
-  {"%s: underflow range error", 3222},
-  {"%s: total loss of precision", 3223},
-  {"%s: partial loss of precision", 3224},
-  {"%s: NaN - producing operation", 3225},
-  {"Output constraint %d must specify a single register", 3226},
-  {"Output constraint %d cannot be specified together with \"%s\" clobber", 3227},
-  {"Output regs must be grouped at top of stack", 3228},
-  {"Implicitly popped regs must be grouped at top of stack", 3229},
-  {"Output operand %d must use `&' constraint", 3230},
-  {"can't use '%s' as a %s register", 3231},
-  {"global register variable follows a function definition", 3232},
-  {"register used for two global register variables", 3233},
-  {"call-clobbered register used for global register variable", 3234},
-  {"cannot reload integer constant operand in `asm'", 3235},
-  {"impossible register constraint in `asm'", 3236},
-  {"`&' constraint used with no register class", 3237},
-  {"inconsistent operand constraints in an `asm'", 3238},
-  {"frame size too large for reliable stack checking", 3239},
-  {"try reducing the number of local variables", 3240},
-  {"Can't find a register in class `%s' while reloading `asm'.", 3241},
-  {"Unable to find a register to spill in class `%s'.", 3242},
-  {"`asm' operand requires impossible reload", 3243},
-  {"`asm' operand constraint incompatible with operand size", 3244},
-  {"output operand is constant in `asm'", 3245},
-  {"RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d", 3246},
-  {"\
-RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d", 3247},
-  {"\
-RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %\
-s:%d", 3248},
-  {"RTL check: expected code `%s', have `%s' in %s, at %s:%d", 3249},
-  {"RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d", 3250},
-  {"RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d", 3251},
-  {"jump to `%s' invalidly jumps into binding contour", 3252},
-  {"label `%s' used before containing binding contour", 3253},
-  {"`asm' cannot be used in function where memory usage is checked", 3254},
-  {"`asm' cannot be used with `-fcheck-memory-usage'", 3255},
-  {"unknown register name `%s' in `asm'", 3256},
-  {"too many alternatives in `asm'", 3257},
-  {"operand constraints for `asm' differ in number of alternatives", 3258},
-  {"output operand constraint lacks `='", 3259},
-  {"output constraint `%c' for operand %d is not at the beginning", 3260},
-  {"output operand constraint %d contains `+'", 3261},
-  {"operand constraint contains '+' or '=' at illegal position.", 3262},
-  {"`%%' constraint used with last operand", 3263},
-  {"matching constraint not valid in output operand", 3264},
-  {"invalid punctuation `%c' in constraint", 3265},
-  {"output number %d not directly addressable", 3266},
-  {"more than %d operands in `asm'", 3267},
-  {"hard register `%s' listed as input operand to `asm'", 3268},
-  {"input operand constraint contains `%c'", 3269},
-  {"matching constraint references invalid operand number", 3270},
-  {"asm operand %d probably doesn't match constraints", 3271},
-  {"unused variable `%s'", 3272},
-  {"enumeration value `%s' not handled in switch", 3273},
-  {"case value `%ld' not in enumerated type", 3274},
-  {"case value `%ld' not in enumerated type `%s'", 3275},
-  {"type size can't be explicitly evaluated", 3276},
-  {"variable-size type declared outside of any function", 3277},
-  {"size of `%s' is %d bytes", 3278},
-  {"size of `%s' is larger than %d bytes", 3279},
-  {"packed attribute causes inefficient alignment for `%s'", 3280},
-  {"packed attribute is unnecessary for `%s'", 3281},
-  {"padding struct to align `%s'", 3282},
-  {"padding struct size to alignment boundary", 3283},
-  {"packed attribute causes inefficient alignment", 3284},
-  {"packed attribute is unnecessary", 3285},
-  {"\
-\n\
-Execution times (seconds)\n", 3286},
-  {" TOTAL                 :", 3287},
-  {"time in %s: %ld.%06ld (%ld%%)\n", 3288},
-  {"collect: reading %s\n", 3289},
-  {"collect: recompiling %s\n", 3290},
-  {"collect: tweaking %s in %s\n", 3291},
-  {"collect: relinking\n", 3292},
-  {"ld returned %d exit status", 3293},
-  {"Generate debugging info in default format", 3294},
-  {"Generate debugging info in default extended format", 3295},
-  {"Generate STABS format debug info", 3296},
-  {"Generate extended STABS format debug info", 3297},
-  {"Generate DWARF-1 format debug info", 3298},
-  {"Generate extended DWARF-1 format debug info", 3299},
-  {"Generate DWARF-2 debug info", 3300},
-  {"Generate XCOFF format debug info", 3301},
-  {"Generate extended XCOFF format debug info", 3302},
-  {"Generate COFF format debug info", 3303},
-  {"Perform DWARF2 duplicate elimination", 3304},
-  {"Do not store floats in registers", 3305},
-  {"Consider all mem refs through pointers as volatile", 3306},
-  {"Consider all mem refs to global data to be volatile", 3307},
-  {"Consider all mem refs to static data to be volatile", 3308},
-  {"Defer popping functions args from stack until later", 3309},
-  {"When possible do not generate stack frames", 3310},
-  {"Optimize sibling and tail recursive calls", 3311},
-  {"When running CSE, follow jumps to their targets", 3312},
-  {"When running CSE, follow conditional jumps", 3313},
-  {"Perform a number of minor, expensive optimisations", 3314},
-  {"Perform jump threading optimisations", 3315},
-  {"Perform strength reduction optimisations", 3316},
-  {"Perform loop unrolling when iteration count is known", 3317},
-  {"Perform loop unrolling for all loops", 3318},
-  {"Force all loop invariant computations out of loops", 3319},
-  {"Strength reduce all loop general induction variables", 3320},
-  {"Store strings in writable data section", 3321},
-  {"Enable machine specific peephole optimisations", 3322},
-  {"Copy memory operands into registers before using", 3323},
-  {"Copy memory address constants into regs before using", 3324},
-  {"Allow function addresses to be held in registers", 3325},
-  {"Integrate simple functions into their callers", 3326},
-  {"Generate code for funcs even if they are fully inlined", 3327},
-  {"Pay attention to the 'inline' keyword", 3328},
-  {"Emit static const variables even if they are not used", 3329},
-  {"Check for syntax errors, then stop", 3330},
-  {"Mark data as shared rather than private", 3331},
-  {"Enable saving registers around function calls", 3332},
-  {"Return 'short' aggregates in memory, not registers", 3333},
-  {"Return 'short' aggregates in registers", 3334},
-  {"Attempt to fill delay slots of branch instructions", 3335},
-  {"Perform the global common subexpression elimination", 3336},
-  {"Perform enhanced load motion during global subexpression elimination", 3337},
-  {"Perform store motion after global subexpression elimination", 3338},
-  {"Run CSE pass after loop optimisations", 3339},
-  {"Run the loop optimiser twice", 3340},
-  {"Delete useless null pointer checks", 3341},
-  {"Pretend that host and target use the same FP format", 3342},
-  {"Reschedule instructions before register allocation", 3343},
-  {"Reschedule instructions after register allocation", 3344},
-  {"Enable scheduling across basic blocks", 3345},
-  {"Allow speculative motion of non-loads", 3346},
-  {"Allow speculative motion of some loads", 3347},
-  {"Allow speculative motion of more loads", 3348},
-  {"Replace add,compare,branch with branch on count reg", 3349},
-  {"Generate position independent code, if possible", 3350},
-  {"Enable exception handling", 3351},
-  {"Just generate unwind tables for exception handling", 3352},
-  {"Support synchronous non-call exceptions", 3353},
-  {"Insert arc based program profiling code", 3354},
-  {"Create data files needed by gcov", 3355},
-  {"Use profiling information for branch probabilities", 3356},
-  {"Reorder basic blocks to improve code placement", 3357},
-  {"Do the register renaming optimization pass", 3358},
-  {"Do not put unitialised globals in the common section", 3359},
-  {"Do not generate .size directives", 3360},
-  {"place each function into its own section", 3361},
-  {"place data items into their own section", 3362},
-  {"Add extra commentry to assembler output", 3363},
-  {"Output GNU ld formatted global initialisers", 3364},
-  {"Enables a register move optimisation", 3365},
-  {"Do the full regmove optimization pass", 3366},
-  {"Pack structure members together without holes", 3367},
-  {"Insert stack checking code into the program", 3368},
-  {"Specify that arguments may alias each other & globals", 3369},
-  {"Assume arguments may alias globals but not each other", 3370},
-  {"Assume arguments do not alias each other or globals", 3371},
-  {"Assume strict aliasing rules apply", 3372},
-  {"Align the start of loops", 3373},
-  {"Align labels which are only reached by jumping", 3374},
-  {"Align all labels", 3375},
-  {"Align the start of functions", 3376},
-  {"Generate code to check every memory access", 3377},
-  {"Add a prefix to all function names", 3378},
-  {"\
-Suppress output of instruction numbers and line number notes in debugging \
-dumps", 3379},
-  {"Instrument function entry/exit with profiling calls", 3380},
-  {"Enable SSA optimizations", 3381},
-  {"Enable dead code elimination", 3382},
-  {"External symbols have a leading underscore", 3383},
-  {"Process #ident directives", 3384},
-  {"Enables an rtl peephole pass run before sched2", 3385},
-  {"Enables guessing of branch probabilities", 3386},
-  {"Set errno after built-in math functions", 3387},
-  {"Floating-point operations can trap", 3388},
-  {"Allow math optimizations that may violate IEEE or ANSI standards", 3389},
-  {"Compile pointers as triples: value, base & end", 3390},
-  {"Generate code to check bounds before dereferencing pointers and arrays", 3391},
-  {"Convert floating point constant to single precision constant", 3392},
-  {"Report time taken by each compiler pass at end of run", 3393},
-  {"Report on permanent memory allocation at end of run", 3394},
-  {"Trap for signed overflow in addition / subtraction / multiplication.", 3395},
-  {"Compile just for ISO C89", 3396},
-  {"Do not promote floats to double if using -traditional", 3397},
-  {"Determine language standard", 3398},
-  {"Make bitfields by unsigned by default", 3399},
-  {"Make 'char' be signed by default", 3400},
-  {"Make 'char' be unsigned by default", 3401},
-  {"Attempt to support traditional K&R style C", 3402},
-  {"Do not recognise the 'asm' keyword", 3403},
-  {"Do not recognise any built in functions", 3404},
-  {"Assume normal C execution environment", 3405},
-  {"Assume that standard libraries & main might not exist", 3406},
-  {"Allow different types as args of ? operator", 3407},
-  {"Allow the use of $ inside identifiers", 3408},
-  {"Use the same size for double as for float", 3409},
-  {"Use the smallest fitting integer to hold enums", 3410},
-  {"Override the underlying type for wchar_t to `unsigned short'", 3411},
-  {"Enable most warning messages", 3412},
-  {"Warn about casting functions to incompatible types", 3413},
-  {"Warn about functions which might be candidates for format attributes", 3414},
-  {"Warn about casts which discard qualifiers", 3415},
-  {"Warn about subscripts whose type is 'char'", 3416},
-  {"Warn if nested comments are detected", 3417},
-  {"Warn about possibly confusing type conversions", 3418},
-  {"Warn about printf/scanf/strftime/strfmon format anomalies", 3419},
-  {"Don't warn about strftime formats yielding 2 digit years", 3420},
-  {"Don't warn about too many arguments to format functions", 3421},
-  {"Warn about non-string-literal format strings", 3422},
-  {"Warn about possible security problems with format functions", 3423},
-  {"Warn about implicit function declarations", 3424},
-  {"Warn when a declaration does not specify a type", 3425},
-  {"Warn about the use of the #import directive", 3426},
-  {"Do not warn about using 'long long' when -pedantic", 3427},
-  {"Warn about suspicious declarations of main", 3428},
-  {"Warn about possibly missing braces around initialisers", 3429},
-  {"Warn about global funcs without previous declarations", 3430},
-  {"Warn about global funcs without prototypes", 3431},
-  {"Warn about use of multicharacter literals", 3432},
-  {"Warn about externs not at file scope level", 3433},
-  {"Warn about possible missing parentheses", 3434},
-  {"Warn about possible violations of sequence point rules", 3435},
-  {"Warn about function pointer arithmetic", 3436},
-  {"Warn about multiple declarations of the same object", 3437},
-  {"Warn about signed/unsigned comparisons", 3438},
-  {"Warn about testing equality of floating point numbers", 3439},
-  {"Warn about unrecognized pragmas", 3440},
-  {"Warn about non-prototyped function decls", 3441},
-  {"Warn about constructs whose meaning change in ISO C", 3442},
-  {"Warn when trigraphs are encountered", 3443},
-  {"Mark strings as 'const char *'", 3444},
-  {"Warn when a function is unused", 3445},
-  {"Warn when a label is unused", 3446},
-  {"Warn when a function parameter is unused", 3447},
-  {"Warn when a variable is unused", 3448},
-  {"Warn when an expression value is unused", 3449},
-  {"Do not suppress warnings from system headers", 3450},
-  {"Treat all warnings as errors", 3451},
-  {"Warn when one local variable shadows another", 3452},
-  {"Warn about enumerated switches missing a specific case", 3453},
-  {"Warn about returning structures, unions or arrays", 3454},
-  {"Warn about pointer casts which increase alignment", 3455},
-  {"Warn about code that will never be executed", 3456},
-  {"Warn about unitialized automatic variables", 3457},
-  {"Warn when an inlined function cannot be inlined", 3458},
-  {"Warn when the packed attribute has no effect on struct layout", 3459},
-  {"Warn when padding is required to align struct members", 3460},
-  {"Warn when an optimization pass is disabled", 3461},
-  {"Warn about functions which might be candidates for attribute noreturn", 3462},
-  {"Invalid option `%s'", 3463},
-  {"Internal error: %s", 3464},
-  {"`%s' used but never defined", 3465},
-  {"`%s' declared `static' but never defined", 3466},
-  {"`%s' defined but not used", 3467},
-  {"can't open %s for writing", 3468},
-  {"-ffunction-sections not supported for this target.", 3469},
-  {"-fdata-sections not supported for this target.", 3470},
-  {"-ffunction-sections disabled; it makes profiling impossible.", 3471},
-  {"-ffunction-sections may affect debugging on some targets.", 3472},
-  {"Errors detected in input file (your bison.simple is out of date)\n", 3473},
-  {"error writing to %s", 3474},
-  {"invalid register name `%s' for register variable", 3475},
-  {"\
-  -ffixed-<register>      Mark <register> as being unavailable to the \
-compiler\n", 3476},
-  {"\
-  -fcall-used-<register>  Mark <register> as being corrupted by function \
-calls\n", 3477},
-  {"\
-  -fcall-saved-<register> Mark <register> as being preserved across \
-functions\n", 3478},
-  {"\
-  -finline-limit=<number> Limits the size of inlined functions to <number>\n", 3479},
-  {"\
-  -fmessage-length=<number> Limits diagnostics messages lengths to <number> \
-characters per line.  0 suppresses line-wrapping\n", 3480},
-  {"\
-  -fdiagnostics-show-location=[once | every-line] Indicates how often source \
-location information should be emitted, as prefix, at the beginning of \
-diagnostics when line-wrapping\n", 3481},
-  {"  -O[number]              Set optimisation level to [number]\n", 3482},
-  {"  -Os                     Optimise for space rather than speed\n", 3483},
-  {"\
-  -pedantic               Issue warnings needed by strict compliance to ISO \
-C\n", 3484},
-  {"\
-  -pedantic-errors        Like -pedantic except that errors are produced\n", 3485},
-  {"  -w                      Suppress warnings\n", 3486},
-  {"  -W                      Enable extra warnings\n", 3487},
-  {"  -Wunused                Enable unused warnings\n", 3488},
-  {"\
-  -Wlarger-than-<number>  Warn if an object is larger than <number> bytes\n", 3489},
-  {"  -p                      Enable function profiling\n", 3490},
-  {"  -a                      Enable block profiling \n", 3491},
-  {"  -ax                     Enable jump profiling \n", 3492},
-  {"  -o <file>               Place output into <file> \n", 3493},
-  {"\
-  -G <number>             Put global and static data smaller than <number>\n\
-                          bytes into a special section (on some targets)\n", 3494},
-  {"  -aux-info <file>        Emit declaration info into <file>\n", 3495},
-  {"\
-  -quiet                  Do not display functions compiled or elapsed time\n", 3496},
-  {"  -version                Display the compiler's version\n", 3497},
-  {"\
-  -d[letters]             Enable dumps from specific passes of the compiler\n", 3498},
-  {"\
-  -dumpbase <file>        Base name to be used for dumps from specific \
-passes\n", 3499},
-  {"  -fsched-verbose=<number> Set the verbosity level of the scheduler\n", 3500},
-  {"  --help                  Display this information\n", 3501},
-  {"\
-\n\
-Language specific options:\n", 3502},
-  {"  %-23.23s [undocumented]\n", 3503},
-  {"\
-\n\
-There are undocumented %s specific options as well.\n", 3504},
-  {"\
-\n\
- Options for %s:\n", 3505},
-  {"\
-\n\
-Target specific options:\n", 3506},
-  {"  -m%-23.23s [undocumented]\n", 3507},
-  {"\
-\n\
-There are undocumented target specific options as well.\n", 3508},
-  {"  They exist, but they are not documented.\n", 3509},
-  {"unrecognized gcc debugging option: %c", 3510},
-  {"unrecognized register name `%s'", 3511},
-  {"Unrecognized option `%s'", 3512},
-  {"-Wid-clash-LEN is no longer supported", 3513},
-  {"use -gdwarf -g%d for DWARF v1, level %d", 3514},
-  {"use -gdwarf-2   for DWARF v2", 3515},
-  {"ignoring option `%s' due to invalid debug level specification", 3516},
-  {"`%s': unknown or unsupported -g option", 3517},
-  {"`%s' ignored, conflicts with `-g%s'", 3518},
-  {"-param option missing argument", 3519},
-  {"invalid --param option: %s", 3520},
-  {"invalid parameter value `%s'", 3521},
-  {"`-a' option (basic block profile) not supported", 3522},
-  {"`-ax' option (jump profiling) not supported", 3523},
-  {"Ignoring command line option '%s'", 3524},
-  {"(It is valid for %s but not the selected language)", 3525},
-  {"-Wuninitialized is not supported without -O", 3526},
-  {"`-ax' and `-a' are conflicting options. `-a' ignored.", 3527},
-  {"instruction scheduling not supported on this target machine", 3528},
-  {"this target machine does not have delayed branches", 3529},
-  {"profiling does not work without a frame pointer", 3530},
-  {"-f%sleading-underscore not supported on this target machine", 3531},
-  {"\
-%s%s%s version %s (%s)\n\
-%s\tcompiled by GNU C version %s.\n\
-%s%s%s version %s (%s) compiled by CC.\n", 3532},
-  {"options passed: ", 3533},
-  {"options enabled: ", 3534},
-  {"division by zero in #if", 3535},
-  {"floating point numbers not allowed in #if expressions", 3536},
-  {"Invalid number in #if expression", 3537},
-  {"Invalid character constant in #if", 3538},
-  {"double quoted strings not allowed in #if expressions", 3539},
-  {"Invalid token in expression", 3540},
-  {"octal character constant does not fit in a byte", 3541},
-  {"hex character constant does not fit in a byte", 3542},
-  {"empty #if expression", 3543},
-  {"Junk after end of expression.", 3544},
-  {"macro or #include recursion too deep", 3545},
-  {"Usage: %s [switches] input output", 3546},
-  {"-traditional is not supported in C++", 3547},
-  {"-traditional and -ansi are mutually exclusive", 3548},
-  {"Filename missing after -i option", 3549},
-  {"Filename missing after -o option", 3550},
-  {"Target missing after %s option", 3551},
-  {"Filename missing after %s option", 3552},
-  {"Macro name missing after -%c option", 3553},
-  {"-pedantic and -traditional are mutually exclusive", 3554},
-  {"-trigraphs and -traditional are mutually exclusive", 3555},
-  {"Directory name missing after -I option", 3556},
-  {"`/*' within comment", 3557},
-  {"unterminated #%s conditional", 3558},
-  {"not in any file?!", 3559},
-  {"`defined' must be followed by ident or (ident)", 3560},
-  {"cccp error: invalid special hash type", 3561},
-  {"#include expects \"fname\" or <fname>", 3562},
-  {"No include path in which to find %.*s", 3563},
-  {"invalid macro name", 3564},
-  {"invalid macro name `%s'", 3565},
-  {"\"defined\" cannot be used as a macro name", 3566},
-  {"parameter name starts with a digit in #define", 3567},
-  {"badly punctuated parameter list in #define", 3568},
-  {"unterminated parameter list in #define", 3569},
-  {"\"%.*s\" redefined", 3570},
-  {"# operator should be followed by a macro argument name", 3571},
-  {"invalid format #line command", 3572},
-  {"undefining `defined'", 3573},
-  {"undefining `%s'", 3574},
-  {"extra text at end of directive", 3575},
-  {"#error%.*s", 3576},
-  {"#warning%.*s", 3577},
-  {"#elif not within a conditional", 3578},
-  {"#%s not within a conditional", 3579},
-  {"#else or #elif after #else", 3580},
-  {"#else not within a conditional", 3581},
-  {"unbalanced #endif", 3582},
-  {"unterminated string or character constant", 3583},
-  {"arguments given to macro `%s'", 3584},
-  {"no args to macro `%s'", 3585},
-  {"only 1 arg to macro `%s'", 3586},
-  {"only %d args to macro `%s'", 3587},
-  {"too many (%d) args to macro `%s'", 3588},
-  {"\
-Internal error in %s, at tradcpp.c:%d\n\
-Please submit a full bug report.\n\
-See %s for instructions.", 3589},
-  {"arrays of functions are not meaningful", 3590},
-  {"function return type cannot be function", 3591},
-  {"invalid initializer for bit string", 3592},
-  {"Tree check: expected %s, have %s in %s, at %s:%d", 3593},
-  {"Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d", 3594},
-  {"register name not specified for `%s'", 3595},
-  {"invalid register name for `%s'", 3596},
-  {"data type of `%s' isn't suitable for a register", 3597},
-  {"register specified for `%s' isn't suitable for data type", 3598},
-  {"global register variable has initial value", 3599},
-  {"volatile register variables don't work as you might wish", 3600},
-  {"register name given for non-register variable `%s'", 3601},
-  {"size of variable `%s' is too large", 3602},
-  {"\
-alignment of `%s' is greater than maximum object file alignment. Using %d.", 3603},
-  {"requested alignment for %s is greater than implemented alignment of %d.", 3604},
-  {"floating point trap outputting a constant", 3605},
-  {"initializer for integer value is too complicated", 3606},
-  {"initializer for floating value is not a floating constant", 3607},
-  {"unknown set constructor type", 3608},
-  {"invalid initial value for member `%s'", 3609},
-  {"weak declaration of `%s' must be public", 3610},
-  {"weak declaration of `%s' must precede definition", 3611},
-  {"only weak aliases are supported in this configuration", 3612},
-  {"alias definitions not supported in this configuration; ignored", 3613},
-  {"Virtual array %s[%lu]: element %lu out of bounds", 3614},
-  {"No sclass for %s stab (0x%x)\n", 3615},
-  {"`-p' not supported; use `-pg' and gprof(1)", 3616},
-  {"may not use both -EB and -EL", 3617},
-  {"-mapcs-26 and -mapcs-32 may not be used together", 3618},
-  {"-msoft-float and -mhard_float may not be used together", 3619},
-  {"-mbig-endian and -mlittle-endian may not be used together", 3620},
-  {"Incompatible interworking options", 3621},
-  {"-mbsd and -pedantic incompatible", 3622},
-  {"-mbsd and -mxopen incompatible", 3623},
-  {"-mxopen and -pedantic incompatible", 3624},
-  {"A -ifile option requires a -map option", 3625},
-  {"mno-cygwin and mno-win32 are not compatible", 3626},
-  {"shared and mdll are not compatible", 3627},
-  {"-static not valid with -mcoff", 3628},
-  {"-shared not valid with -mcoff", 3629},
-  {"-symbolic not valid with -mcoff", 3630},
-  {"-fpic is not valid with -mcoff", 3631},
-  {"-fPIC is not valid with -mcoff", 3632},
-  {"-fpic not valid with -mcoff", 3633},
-  {"-fPIC not valid with -mcoff", 3634},
-  {"bx]", 3635},
-  {"bx", 3636},
-  {"cx", 3637},
-  {"-p option not supported: use -pg instead", 3638},
-  {"choose either big or little endian, not both", 3639},
-  {"choose either m340 or m210 not both", 3640},
-  {"the m210 does not have little endian support", 3641},
-  {"-pipe is not supported.", 3642},
-  {"may not use both -mfp64 and -msingle-float", 3643},
-  {"may not use both -mfp64 and -m4650", 3644},
-  {"-mhard-float not supported.", 3645},
-  {"-msingle-float and -msoft-float can not both be specified.", 3646},
-  {"-p profiling is no longer supported.  Use -pg instead.", 3647},
-  {"profiling not supported with -mg\n", 3648},
-  {"GNU C does not support -C without using -E", 3649},
-  {"-pg and -fomit-frame-pointer are incompatible", 3650},
-  {"-E required when input is from standard input", 3651},
-  {"Compilation of header file requested", 3652},
-  {"-fjni and -femit-class-files are incompatible", 3653},
-  {"-fjni and -femit-class-file are incompatible", 3654},
-};
-
-int _msg_tbl_length = 3654;
diff --git a/gcc/po/stamp-cat-id b/gcc/po/stamp-cat-id
deleted file mode 100644 (file)
index 9788f70..0000000
+++ /dev/null
@@ -1 +0,0 @@
-timestamp