[oe-commits] [meta-openembedded] 03/16: gtkperf: Fix build with latest gettext 0.20.x

git at git.openembedded.org git at git.openembedded.org
Thu Jan 2 06:15:24 UTC 2020


This is an automated email from the git hooks/post-receive script.

khem pushed a commit to branch master-next
in repository meta-openembedded.

commit c56a896cb70be26fc377309355bec14a8428d8f8
Author: Khem Raj <raj.khem at gmail.com>
AuthorDate: Tue Dec 31 19:27:33 2019 -0800

    gtkperf: Fix build with latest gettext 0.20.x
    
    Signed-off-by: Khem Raj <raj.khem at gmail.com>
---
 .../recipes-graphics/gtkperf/gtkperf/gettext.patch | 7801 ++++++++++++++++++++
 meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb   |    1 +
 2 files changed, 7802 insertions(+)

diff --git a/meta-oe/recipes-graphics/gtkperf/gtkperf/gettext.patch b/meta-oe/recipes-graphics/gtkperf/gtkperf/gettext.patch
new file mode 100644
index 0000000..cde5621
--- /dev/null
+++ b/meta-oe/recipes-graphics/gtkperf/gtkperf/gettext.patch
@@ -0,0 +1,7801 @@
+Fix build with gettext 0.20.x
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem at gmail.com>
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -3,7 +3,7 @@
+ ## If you don't want it to overwrite it,
+ ## 	Please disable it in the Anjuta project configuration
+ 
+-SUBDIRS = intl po src pixmaps
++SUBDIRS = po src pixmaps
+ 
+ gtkperfdocdir = ${prefix}/doc/gtkperf
+ gtkperfdoc_DATA = \
+--- a/configure.in
++++ b/configure.in
+@@ -31,8 +31,7 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+ dnl Languages which your application supports
+ ALL_LINGUAS=""
+-AM_GNU_GETTEXT
+-AM_GNU_GETTEXT_VERSION(0.10.40)
++AM_GNU_GETTEXT([external])
+ 
+ dnl Set PACKAGE_LOCALE_DIR in config.h.
+ if test "x${prefix}" = "xNONE"; then
+@@ -100,7 +99,6 @@ AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "
+ 
+ AC_OUTPUT([
+ Makefile
+-intl/Makefile
+ po/Makefile.in
+ src/Makefile
+ pixmaps/Makefile
+--- a/intl/ChangeLog
++++ /dev/null
+@@ -1,4 +0,0 @@
+-2001-09-13  GNU  <bug-gnu-utils at gnu.org>
+-
+-	* Version 0.10.40 released.
+-
+--- a/intl/Makefile.in
++++ /dev/null
+@@ -1,313 +0,0 @@
+-# Makefile for directory with message catalog handling in GNU NLS Utilities.
+-# 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 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.
+-
+-PACKAGE = @PACKAGE@
+-VERSION = @VERSION@
+-
+-SHELL = /bin/sh
+-
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+-top_builddir = ..
+-VPATH = @srcdir@
+-
+-prefix = @prefix@
+-exec_prefix = @exec_prefix@
+-transform = @program_transform_name@
+-libdir = @libdir@
+-includedir = @includedir@
+-datadir = @datadir@
+-localedir = $(datadir)/locale
+-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 = @INTL_LIBTOOL_SUFFIX_PREFIX@
+-
+-AR = ar
+-CC = @CC@
+-LIBTOOL = @LIBTOOL@
+-RANLIB = @RANLIB@
+-YACC = @INTLBISON@ -y -d
+-YFLAGS = --name-prefix=__gettext
+-
+-DEFS = -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) libgnuintl.h libgettext.h loadinfo.h
+-COMHDRS = gettext.h gettextP.h hash-string.h
+-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 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 dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
+-plural.$lo localcharset.$lo
+-GETTOBJS = intl-compat.$lo
+-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 = 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 .y .o .lo .sin .sed
+-.c.o:
+-	$(COMPILE) $<
+-.c.lo:
+-	$(LIBTOOL) --mode=compile $(COMPILE) $<
+-
+-.y.c:
+-	$(YACC) $(YFLAGS) --output $@ $<
+-	rm -f $*.h
+-
+-.sin.sed:
+-	sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
+-	mv t-$@ $@
+-
+-INCLUDES = -I.. -I. -I$(top_srcdir)/intl
+-
+-all: all- at USE_INCLUDED_LIBINTL@
+-all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
+-all-no: all-no- at BUILD_INCLUDED_LIBINTL@
+-all-no-yes: libgnuintl.$la
+-all-no-no:
+-
+-libintl.a libgnuintl.a: $(OBJECTS)
+-	rm -f $@
+-	$(AR) cru $@ $(OBJECTS)
+-	$(RANLIB) $@
+-
+-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
+-
+-charset.alias: config.charset
+-	$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+-	mv t-$@ $@
+-
+-check: all
+-
+-# This installation goal is only used in GNU gettext.  Packages which
+-# 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 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 \
+-	  $(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 \
+-	    if test @GLIBC21@ = no; then \
+-	      orig=charset.alias; \
+-	      sed -f ref-add.sed $$orig > $$temp; \
+-	      $(INSTALL_DATA) $$temp $$dest; \
+-	      rm -f $$temp; \
+-	    fi; \
+-	  fi; \
+-	  $(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 \
+-	  $(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 \
+-	    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 \
+-	  : ; \
+-	fi
+-
+-# Define this as empty until I found a useful application.
+-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 \
+-	  for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
+-	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+-	  done; \
+-	else \
+-	  : ; \
+-	fi
+-
+-info dvi:
+-
+-$(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
+-
+-tags: TAGS
+-
+-TAGS: $(HEADERS) $(SOURCES)
+-	here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+-
+-id: ID
+-
+-ID: $(HEADERS) $(SOURCES)
+-	here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+-
+-
+-mostlyclean:
+-	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
+-	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;"
+-	@echo "it deletes files that may require special tools to rebuild."
+-
+-
+-# 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
+-	if test "$(PACKAGE)" = gettext; then \
+-	  additional="$(DISTFILES.gettext)"; \
+-	else \
+-	  additional="$(DISTFILES.normal)"; \
+-	fi; \
+-	$(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
+-
+-Makefile: Makefile.in ../config.status
+-	cd .. \
+-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+-
+-# Tell versions [3.59,3.63) of GNU make not to export all variables.
+-# Otherwise a system limit (for SysV at least) may be exceeded.
+-.NOEXPORT:
+--- a/intl/VERSION
++++ /dev/null
+@@ -1 +0,0 @@
+-GNU gettext library from gettext-0.10.40
+--- a/intl/bindtextdom.c
++++ /dev/null
+@@ -1,369 +0,0 @@
+-/* Implementation of the bindtextdomain(3) function
+-   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 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 <stddef.h>
+-#include <stdlib.h>
+-#include <string.h>
+-
+-#ifdef _LIBC
+-# include <libintl.h>
+-#else
+-# include "libgnuintl.h"
+-#endif
+-#include "gettextP.h"
+-
+-#ifdef _LIBC
+-/* We have to handle multi-threaded applications.  */
+-# include <bits/libc-lock.h>
+-#else
+-/* 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
+-   names than the internal variables in GNU libc, otherwise programs
+-   using libintl.a cannot be linked statically.  */
+-#if !defined _LIBC
+-# 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 @@ */
+-
+-/* Contains the default location of the message catalogs.  */
+-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
+-   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 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
+-
+-/* 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 **dirnamep;
+-     const char **codesetp;
+-{
+-  struct binding *binding;
+-  int modified;
+-
+-  /* Some sanity checks.  */
+-  if (domainname == NULL || domainname[0] == '\0')
+-    {
+-      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)
+-    {
+-      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)
+-    {
+-      if (dirnamep)
+-	{
+-	  const char *dirname = *dirnamep;
+-
+-	  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
+-		      result = strdup (dirname);
+-#else
+-		      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 (codesetp)
+-	{
+-	  const char *codeset = *codesetp;
+-
+-	  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.  */
+-      size_t len = strlen (domainname) + 1;
+-      struct binding *new_binding =
+-	(struct binding *) malloc (offsetof (struct binding, domainname) + len);
+-
+-      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
+-		  result = strdup (dirname);
+-		  if (__builtin_expect (result == NULL, 0))
+-		    goto failed_dirname;
+-#else
+-		  size_t len = strlen (dirname) + 1;
+-		  result = (char *) malloc (len);
+-		  if (__builtin_expect (result == NULL, 0))
+-		    goto failed_dirname;
+-		  memcpy (result, dirname, len);
+-#endif
+-		  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
+-	      result = strdup (codeset);
+-	      if (__builtin_expect (result == NULL, 0))
+-		goto failed_codeset;
+-#else
+-	      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
+-	  || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+-	{
+-	  new_binding->next = _nl_domain_bindings;
+-	  _nl_domain_bindings = new_binding;
+-	}
+-      else
+-	{
+-	  binding = _nl_domain_bindings;
+-	  while (binding->next != NULL
+-		 && strcmp (domainname, binding->next->domainname) > 0)
+-	    binding = binding->next;
+-
+-	  new_binding->next = binding->next;
+-	  binding->next = 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;
+-	}
+-    }
+-
+-  /* 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
+-/* Aliases for function names in GNU C Library.  */
+-weak_alias (__bindtextdomain, bindtextdomain);
+-weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+-#endif
+--- a/intl/config.charset
++++ /dev/null
+@@ -1,438 +0,0 @@
+-#! /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 at hrz1.hrz.tu-darmstadt.de>"
+-	echo "# and Bruno Haible <haible at 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
+--- a/intl/dcgettext.c
++++ /dev/null
+@@ -1,58 +0,0 @@
+-/* Implementation of the dcgettext(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 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
+-   locale.  */
+-char *
+-DCGETTEXT (domainname, msgid, category)
+-     const char *domainname;
+-     const char *msgid;
+-     int category;
+-{
+-  return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+-}
+-
+-#ifdef _LIBC
+-/* Alias for function name in GNU C Library.  */
+-weak_alias (__dcgettext, dcgettext);
+-#endif
+--- a/intl/dcigettext.c
++++ /dev/null
+@@ -1,1259 +0,0 @@
+-/* 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 findex
+-# 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)
+-# else
+-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;
+-      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;
+-
+-  /* 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
+--- a/intl/dcngettext.c
++++ /dev/null
+@@ -1,60 +0,0 @@
+-/* 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
+--- a/intl/dgettext.c
++++ /dev/null
+@@ -1,59 +0,0 @@
+-/* 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 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 DGETTEXT __dgettext
+-# define DCGETTEXT __dcgettext
+-#else
+-# define DGETTEXT dgettext__
+-# define DCGETTEXT dcgettext__
+-#endif
+-
+-/* Look up MSGID in the DOMAINNAME message catalog of the current
+-   LC_MESSAGES locale.  */
+-char *
+-DGETTEXT (domainname, msgid)
+-     const char *domainname;
+-     const char *msgid;
+-{
+-  return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+-}
+-
+-#ifdef _LIBC
+-/* Alias for function name in GNU C Library.  */
+-weak_alias (__dgettext, dgettext);
+-#endif
+--- a/intl/dngettext.c
++++ /dev/null
+@@ -1,61 +0,0 @@
+-/* 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
+--- a/intl/explodename.c
++++ /dev/null
+@@ -1,192 +0,0 @@
+-/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+-   Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
+-
+-   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 <stdlib.h>
+-#include <string.h>
+-#include <sys/types.h>
+-
+-#include "loadinfo.h"
+-
+-/* On some strange systems still no definition of NULL is found.  Sigh!  */
+-#ifndef NULL
+-# if defined __STDC__ && __STDC__
+-#  define NULL ((void *) 0)
+-# else
+-#  define NULL 0
+-# endif
+-#endif
+-
+-/* @@ 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)
+-     char *name;
+-     const char **language;
+-     const char **modifier;
+-     const char **territory;
+-     const char **codeset;
+-     const char **normalized_codeset;
+-     const char **special;
+-     const char **sponsor;
+-     const char **revision;
+-{
+-  enum { undecided, xpg, cen } syntax;
+-  char *cp;
+-  int mask;
+-
+-  *modifier = NULL;
+-  *territory = NULL;
+-  *codeset = NULL;
+-  *normalized_codeset = NULL;
+-  *special = NULL;
+-  *sponsor = NULL;
+-  *revision = NULL;
+-
+-  /* Now we determine the single parts of the locale name.  First
+-     look for the language.  Termination symbols are `_' and `@' if
+-     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+-  mask = 0;
+-  syntax = undecided;
+-  *language = cp = name;
+-  cp = _nl_find_language (*language);
+-
+-  if (*language == cp)
+-    /* This does not make sense: language has to be specified.  Use
+-       this entry as it is without exploding.  Perhaps it is an alias.  */
+-    cp = strchr (*language, '\0');
+-  else if (cp[0] == '_')
+-    {
+-      /* Next is the territory.  */
+-      cp[0] = '\0';
+-      *territory = ++cp;
+-
+-      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+-	     && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+-	++cp;
+-
+-      mask |= TERRITORY;
+-
+-      if (cp[0] == '.')
+-	{
+-	  /* Next is the codeset.  */
+-	  syntax = xpg;
+-	  cp[0] = '\0';
+-	  *codeset = ++cp;
+-
+-	  while (cp[0] != '\0' && cp[0] != '@')
+-	    ++cp;
+-
+-	  mask |= XPG_CODESET;
+-
+-	  if (*codeset != cp && (*codeset)[0] != '\0')
+-	    {
+-	      *normalized_codeset = _nl_normalize_codeset (*codeset,
+-							   cp - *codeset);
+-	      if (strcmp (*codeset, *normalized_codeset) == 0)
+-		free ((char *) *normalized_codeset);
+-	      else
+-		mask |= XPG_NORM_CODESET;
+-	    }
+-	}
+-    }
+-
+-  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+-    {
+-      /* Next is the modifier.  */
+-      syntax = cp[0] == '@' ? xpg : cen;
+-      cp[0] = '\0';
+-      *modifier = ++cp;
+-
+-      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+-	     && cp[0] != ',' && cp[0] != '_')
+-	++cp;
+-
+-      mask |= XPG_MODIFIER | CEN_AUDIENCE;
+-    }
+-
+-  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+-    {
+-      syntax = cen;
+-
+-      if (cp[0] == '+')
+-	{
+- 	  /* Next is special application (CEN syntax).  */
+-	  cp[0] = '\0';
+-	  *special = ++cp;
+-
+-	  while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+-	    ++cp;
+-
+-	  mask |= CEN_SPECIAL;
+-	}
+-
+-      if (cp[0] == ',')
+-	{
+- 	  /* Next is sponsor (CEN syntax).  */
+-	  cp[0] = '\0';
+-	  *sponsor = ++cp;
+-
+-	  while (cp[0] != '\0' && cp[0] != '_')
+-	    ++cp;
+-
+-	  mask |= CEN_SPONSOR;
+-	}
+-
+-      if (cp[0] == '_')
+-	{
+- 	  /* Next is revision (CEN syntax).  */
+-	  cp[0] = '\0';
+-	  *revision = ++cp;
+-
+-	  mask |= CEN_REVISION;
+-	}
+-    }
+-
+-  /* For CEN syntax values it might be important to have the
+-     separator character in the file name, not for XPG syntax.  */
+-  if (syntax == xpg)
+-    {
+-      if (*territory != NULL && (*territory)[0] == '\0')
+-	mask &= ~TERRITORY;
+-
+-      if (*codeset != NULL && (*codeset)[0] == '\0')
+-	mask &= ~XPG_CODESET;
+-
+-      if (*modifier != NULL && (*modifier)[0] == '\0')
+-	mask &= ~XPG_MODIFIER;
+-    }
+-
+-  return mask;
+-}
+--- a/intl/finddomain.c
++++ /dev/null
+@@ -1,198 +0,0 @@
+-/* Handle list of needed message catalogs
+-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+-   Written by Ulrich Drepper <drepper at gnu.org>, 1995.
+-
+-   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 <stdio.h>
+-#include <sys/types.h>
+-#include <stdlib.h>
+-#include <string.h>
+-
+-#if defined HAVE_UNISTD_H || defined _LIBC
+-# include <unistd.h>
+-#endif
+-
+-#include "gettextP.h"
+-#ifdef _LIBC
+-# include <libintl.h>
+-#else
+-# include "libgnuintl.h"
+-#endif
+-
+-/* @@ end of prolog @@ */
+-/* List of already loaded domains.  */
+-static struct loaded_l10nfile *_nl_loaded_domains;
+-
+-
+-/* Return a data structure describing the message catalog described by
+-   the DOMAINNAME and CATEGORY parameters with respect to the currently
+-   established bindings.  */
+-struct loaded_l10nfile *
+-internal_function
+-_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;
+-  const char *modifier;
+-  const char *territory;
+-  const char *codeset;
+-  const char *normalized_codeset;
+-  const char *special;
+-  const char *sponsor;
+-  const char *revision;
+-  const char *alias_value;
+-  int mask;
+-
+-  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+-
+-		language[_territory[.codeset]][@modifier]
+-
+-     and six parts for the CEN syntax:
+-
+-	language[_territory][+audience][+special][,[sponsor][_revision]]
+-
+-     Beside the first part all of them are allowed to be missing.  If
+-     the full specified locale is not found, the less specific one are
+-     looked for.  The various parts will be stripped off according to
+-     the following order:
+-		(1) revision
+-		(2) sponsor
+-		(3) special
+-		(4) codeset
+-		(5) normalized codeset
+-		(6) territory
+-		(7) audience/modifier
+-   */
+-
+-  /* If we have already tested for this locale entry there has to
+-     be one data set in the list of loaded domains.  */
+-  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+-			       strlen (dirname) + 1, 0, locale, NULL, NULL,
+-			       NULL, NULL, NULL, NULL, NULL, domainname, 0);
+-  if (retval != NULL)
+-    {
+-      /* We know something about this locale.  */
+-      int cnt;
+-
+-      if (retval->decided == 0)
+-	_nl_load_domain (retval, domainbinding);
+-
+-      if (retval->data != NULL)
+-	return retval;
+-
+-      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+-	{
+-	  if (retval->successor[cnt]->decided == 0)
+-	    _nl_load_domain (retval->successor[cnt], domainbinding);
+-
+-	  if (retval->successor[cnt]->data != NULL)
+-	    break;
+-	}
+-      return cnt >= 0 ? retval : NULL;
+-      /* NOTREACHED */
+-    }
+-
+-  /* See whether the locale value is an alias.  If yes its value
+-     *overwrites* the alias name.  No test for the original value is
+-     done.  */
+-  alias_value = _nl_expand_alias (locale);
+-  if (alias_value != NULL)
+-    {
+-#if defined _LIBC || defined HAVE_STRDUP
+-      locale = strdup (alias_value);
+-      if (locale == NULL)
+-	return NULL;
+-#else
+-      size_t len = strlen (alias_value) + 1;
+-      locale = (char *) malloc (len);
+-      if (locale == NULL)
+-	return NULL;
+-
+-      memcpy (locale, alias_value, len);
+-#endif
+-    }
+-
+-  /* Now we determine the single parts of the locale name.  First
+-     look for the language.  Termination symbols are `_' and `@' if
+-     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+-  mask = _nl_explode_name (locale, &language, &modifier, &territory,
+-			   &codeset, &normalized_codeset, &special,
+-			   &sponsor, &revision);
+-
+-  /* Create all possible locale entries which might be interested in
+-     generalization.  */
+-  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+-			       strlen (dirname) + 1, mask, language, territory,
+-			       codeset, normalized_codeset, modifier, special,
+-			       sponsor, revision, domainname, 1);
+-  if (retval == NULL)
+-    /* This means we are out of core.  */
+-    return NULL;
+-
+-  if (retval->decided == 0)
+-    _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], domainbinding);
+-	  if (retval->successor[cnt]->data != NULL)
+-	    break;
+-	}
+-    }
+-
+-  /* The room for an alias was dynamically allocated.  Free it now.  */
+-  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;
+-}
+-
+-
+-#ifdef _LIBC
+-static void __attribute__ ((unused))
+-free_mem (void)
+-{
+-  struct loaded_l10nfile *runp = _nl_loaded_domains;
+-
+-  while (runp != NULL)
+-    {
+-      struct loaded_l10nfile *here = runp;
+-      if (runp->data != NULL)
+-	_nl_unload_domain ((struct loaded_domain *) runp->data);
+-      runp = runp->next;
+-      free ((char *) here->filename);
+-      free (here);
+-    }
+-}
+-
+-text_set_element (__libc_subfreeres, free_mem);
+-#endif
+--- a/intl/gettext.c
++++ /dev/null
+@@ -1,64 +0,0 @@
+-/* Implementation of gettext(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
+-
+-/* @@ 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 GETTEXT __gettext
+-# define DCGETTEXT __dcgettext
+-#else
+-# define GETTEXT gettext__
+-# define DCGETTEXT dcgettext__
+-#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 *
+-GETTEXT (msgid)
+-     const char *msgid;
+-{
+-  return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+-}
+-
+-#ifdef _LIBC
+-/* Alias for function name in GNU C Library.  */
+-weak_alias (__gettext, gettext);
+-#endif
+--- a/intl/gettext.h
++++ /dev/null
+@@ -1,102 +0,0 @@
+-/* 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 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 _GETTEXT_H
+-#define _GETTEXT_H 1
+-
+-#if HAVE_LIMITS_H || _LIBC
+-# include <limits.h>
+-#endif
+-
+-/* @@ end of prolog @@ */
+-
+-/* The magic number of the GNU message catalog format.  */
+-#define _MAGIC 0x950412de
+-#define _MAGIC_SWAPPED 0xde120495
+-
+-/* Revision number of the currently used .mo (binary) file format.  */
+-#define MO_REVISION_NUMBER 0
+-
+-/* 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
+-   as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+-   when cross-compiling.  */
+-
+-#if __STDC__
+-# define UINT_MAX_32_BITS 4294967295U
+-#else
+-# define UINT_MAX_32_BITS 0xFFFFFFFF
+-#endif
+-
+-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+-   This should be valid for all systems GNU cares about because
+-   that doesn't include 16-bit systems, and only modern systems
+-   (that certainly have <limits.h>) have 64+-bit integral types.  */
+-
+-#ifndef UINT_MAX
+-# define UINT_MAX UINT_MAX_32_BITS
+-#endif
+-
+-#if UINT_MAX == UINT_MAX_32_BITS
+-typedef unsigned nls_uint32;
+-#else
+-# if USHRT_MAX == UINT_MAX_32_BITS
+-typedef unsigned short nls_uint32;
+-# else
+-#  if ULONG_MAX == UINT_MAX_32_BITS
+-typedef unsigned long nls_uint32;
+-#  else
+-  /* The following line is intended to throw an error.  Using #error is
+-     not portable enough.  */
+-  "Cannot determine unsigned 32-bit data type."
+-#  endif
+-# endif
+-#endif
+-
+-
+-/* Header for binary .mo file format.  */
+-struct mo_file_header
+-{
+-  /* The magic number.  */
+-  nls_uint32 magic;
+-  /* The revision number of the file format.  */
+-  nls_uint32 revision;
+-  /* The number of strings pairs.  */
+-  nls_uint32 nstrings;
+-  /* Offset of table with start offsets of original strings.  */
+-  nls_uint32 orig_tab_offset;
+-  /* Offset of table with start offsets of translation strings.  */
+-  nls_uint32 trans_tab_offset;
+-  /* Size of hashing table.  */
+-  nls_uint32 hash_tab_size;
+-  /* Offset of first hashing entry.  */
+-  nls_uint32 hash_tab_offset;
+-};
+-
+-struct string_desc
+-{
+-  /* Length of addressed string.  */
+-  nls_uint32 length;
+-  /* Offset of string in file.  */
+-  nls_uint32 offset;
+-};
+-
+-/* @@ begin of epilog @@ */
+-
+-#endif	/* gettext.h  */
+--- a/intl/gettextP.h
++++ /dev/null
+@@ -1,252 +0,0 @@
+-/* Header describing internals of libintl library.
+-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+-   Written by Ulrich Drepper <drepper at cygnus.com>, 1995.
+-
+-   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 _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
+-# if __STDC__
+-#  define PARAMS(args) args
+-# else
+-#  define PARAMS(args) ()
+-# 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
+-
+-#ifndef W
+-# define W(flag, data) ((flag) ? SWAP (data) : (data))
+-#endif
+-
+-
+-#ifdef _LIBC
+-# include <byteswap.h>
+-# define SWAP(i) bswap_32 (i)
+-#else
+-static inline nls_uint32
+-SWAP (i)
+-     nls_uint32 i;
+-{
+-  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;
+-  int use_mmap;
+-  size_t mmap_size;
+-  int must_swap;
+-  nls_uint32 nstrings;
+-  struct string_desc *orig_tab;
+-  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 *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,
+-					      struct binding *__domainbinding))
+-     internal_function;
+-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 @@ */
+-
+-#endif /* gettextP.h  */
+--- a/intl/hash-string.h
++++ /dev/null
+@@ -1,59 +0,0 @@
+-/* 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 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.  */
+-
+-/* @@ end of prolog @@ */
+-
+-#ifndef PARAMS
+-# if __STDC__
+-#  define PARAMS(Args) Args
+-# else
+-#  define PARAMS(Args) ()
+-# endif
+-#endif
+-
+-/* We assume to have `unsigned long int' value with at least 32 bits.  */
+-#define HASHWORDBITS 32
+-
+-
+-/* 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 int hash_string PARAMS ((const char *__str_param));
+-
+-static inline unsigned long int
+-hash_string (str_param)
+-     const char *str_param;
+-{
+-  unsigned long int hval, g;
+-  const char *str = str_param;
+-
+-  /* Compute the hash value for the given string.  */
+-  hval = 0;
+-  while (*str != '\0')
+-    {
+-      hval <<= 4;
+-      hval += (unsigned long int) *str++;
+-      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+-      if (g != 0)
+-	{
+-	  hval ^= g >> (HASHWORDBITS - 8);
+-	  hval ^= g;
+-	}
+-    }
+-  return hval;
+-}
+--- a/intl/intl-compat.c
++++ /dev/null
+@@ -1,166 +0,0 @@
+-/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+-   Library.
+-   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 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 "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 *
+-gettext (msgid)
+-     const char *msgid;
+-{
+-  return gettext__ (msgid);
+-}
+-
+-
+-char *
+-dgettext (domainname, msgid)
+-     const char *domainname;
+-     const char *msgid;
+-{
+-  return dgettext__ (domainname, msgid);
+-}
+-
+-
+-char *
+-dcgettext (domainname, msgid, category)
+-     const char *domainname;
+-     const char *msgid;
+-     int category;
+-{
+-  return dcgettext__ (domainname, msgid, category);
+-}
+-
+-
+-char *
+-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 *msgid1;
+-     const char *msgid2;
+-     unsigned long int n;
+-{
+-  return dngettext__ (domainname, msgid1, msgid2, n);
+-}
+-
+-
+-char *
+-dcngettext (domainname, msgid1, msgid2, n, category)
+-     const char *domainname;
+-     const char *msgid1;
+-     const char *msgid2;
+-     unsigned long int n;
+-     int category;
+-{
+-  return dcngettext__ (domainname, msgid1, msgid2, n, category);
+-}
+-
+-
+-char *
+-textdomain (domainname)
+-     const char *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);
+-}
+--- a/intl/l10nflist.c
++++ /dev/null
+@@ -1,405 +0,0 @@
+-/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+-   Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
+-
+-   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 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
+-
+-#ifdef HAVE_CONFIG_H
+-# include <config.h>
+-#endif
+-
+-#include <string.h>
+-#if !HAVE_STRCHR && !defined _LIBC
+-# ifndef strchr
+-#  define strchr index
+-# endif
+-#endif
+-
+-#if defined _LIBC || defined HAVE_ARGZ_H
+-# include <argz.h>
+-#endif
+-#include <ctype.h>
+-#include <sys/types.h>
+-#include <stdlib.h>
+-
+-#include "loadinfo.h"
+-
+-/* On some strange systems still no definition of NULL is found.  Sigh!  */
+-#ifndef NULL
+-# if defined __STDC__ && __STDC__
+-#  define NULL ((void *) 0)
+-# else
+-#  define NULL 0
+-# endif
+-#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.  */
+-# ifndef stpcpy
+-#  define stpcpy(dest, src) __stpcpy(dest, src)
+-# endif
+-#else
+-# ifndef HAVE_STPCPY
+-static char *stpcpy PARAMS ((char *dest, const char *src));
+-# endif
+-#endif
+-
+-/* Define function which are usually not available.  */
+-
+-#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+-/* Returns the number of strings in ARGZ.  */
+-static size_t argz_count__ PARAMS ((const char *argz, size_t len));
+-
+-static size_t
+-argz_count__ (argz, len)
+-     const char *argz;
+-     size_t len;
+-{
+-  size_t count = 0;
+-  while (len > 0)
+-    {
+-      size_t part_len = strlen (argz);
+-      argz += part_len + 1;
+-      len -= part_len + 1;
+-      count++;
+-    }
+-  return count;
+-}
+-# undef __argz_count
+-# define __argz_count(argz, len) argz_count__ (argz, len)
+-#endif	/* !_LIBC && !HAVE___ARGZ_COUNT */
+-
+-#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+-/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+-   except the last into the character SEP.  */
+-static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
+-
+-static void
+-argz_stringify__ (argz, len, sep)
+-     char *argz;
+-     size_t len;
+-     int sep;
+-{
+-  while (len > 0)
+-    {
+-      size_t part_len = strlen (argz);
+-      argz += part_len;
+-      len -= part_len + 1;
+-      if (len > 0)
+-	*argz++ = sep;
+-    }
+-}
+-# undef __argz_stringify
+-# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+-#endif	/* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+-
+-#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+-static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
+-				  const char *entry));
+-
+-static char *
+-argz_next__ (argz, argz_len, entry)
+-     char *argz;
+-     size_t argz_len;
+-     const char *entry;
+-{
+-  if (entry)
+-    {
+-      if (entry < argz + argz_len)
+-        entry = strchr (entry, '\0') + 1;
+-
+-      return entry >= argz + argz_len ? NULL : (char *) entry;
+-    }
+-  else
+-    if (argz_len > 0)
+-      return argz;
+-    else
+-      return 0;
+-}
+-# undef __argz_next
+-# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+-#endif	/* !_LIBC && !HAVE___ARGZ_NEXT */
+-
+-
+-/* Return number of bits set in X.  */
+-static int pop PARAMS ((int x));
+-
+-static inline int
+-pop (x)
+-     int x;
+-{
+-  /* We assume that no more than 16 bits are used.  */
+-  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+-  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+-  x = ((x >> 4) + x) & 0x0f0f;
+-  x = ((x >> 8) + x) & 0xff;
+-
+-  return x;
+-}
+-
+-
+-struct loaded_l10nfile *
+-_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
+-		    territory, codeset, normalized_codeset, modifier, special,
+-		    sponsor, revision, filename, do_allocate)
+-     struct loaded_l10nfile **l10nfile_list;
+-     const char *dirlist;
+-     size_t dirlist_len;
+-     int mask;
+-     const char *language;
+-     const char *territory;
+-     const char *codeset;
+-     const char *normalized_codeset;
+-     const char *modifier;
+-     const char *special;
+-     const char *sponsor;
+-     const char *revision;
+-     const char *filename;
+-     int do_allocate;
+-{
+-  char *abs_filename;
+-  struct loaded_l10nfile *last = NULL;
+-  struct loaded_l10nfile *retval;
+-  char *cp;
+-  size_t entries;
+-  int cnt;
+-
+-  /* Allocate room for the full file name.  */
+-  abs_filename = (char *) malloc (dirlist_len
+-				  + strlen (language)
+-				  + ((mask & TERRITORY) != 0
+-				     ? strlen (territory) + 1 : 0)
+-				  + ((mask & XPG_CODESET) != 0
+-				     ? strlen (codeset) + 1 : 0)
+-				  + ((mask & XPG_NORM_CODESET) != 0
+-				     ? strlen (normalized_codeset) + 1 : 0)
+-				  + (((mask & XPG_MODIFIER) != 0
+-				      || (mask & CEN_AUDIENCE) != 0)
+-				     ? strlen (modifier) + 1 : 0)
+-				  + ((mask & CEN_SPECIAL) != 0
+-				     ? strlen (special) + 1 : 0)
+-				  + (((mask & CEN_SPONSOR) != 0
+-				      || (mask & CEN_REVISION) != 0)
+-				     ? (1 + ((mask & CEN_SPONSOR) != 0
+-					     ? strlen (sponsor) + 1 : 0)
+-					+ ((mask & CEN_REVISION) != 0
+-					   ? strlen (revision) + 1 : 0)) : 0)
+-				  + 1 + strlen (filename) + 1);
+-
+-  if (abs_filename == NULL)
+-    return NULL;
+-
+-  retval = NULL;
+-  last = NULL;
+-
+-  /* Construct file name.  */
+-  memcpy (abs_filename, dirlist, dirlist_len);
+-  __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
+-  cp = abs_filename + (dirlist_len - 1);
+-  *cp++ = '/';
+-  cp = stpcpy (cp, language);
+-
+-  if ((mask & TERRITORY) != 0)
+-    {
+-      *cp++ = '_';
+-      cp = stpcpy (cp, territory);
+-    }
+-  if ((mask & XPG_CODESET) != 0)
+-    {
+-      *cp++ = '.';
+-      cp = stpcpy (cp, codeset);
+-    }
+-  if ((mask & XPG_NORM_CODESET) != 0)
+-    {
+-      *cp++ = '.';
+-      cp = stpcpy (cp, normalized_codeset);
+-    }
+-  if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+-    {
+-      /* This component can be part of both syntaces but has different
+-	 leading characters.  For CEN we use `+', else `@'.  */
+-      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+-      cp = stpcpy (cp, modifier);
+-    }
+-  if ((mask & CEN_SPECIAL) != 0)
+-    {
+-      *cp++ = '+';
+-      cp = stpcpy (cp, special);
+-    }
+-  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+-    {
+-      *cp++ = ',';
+-      if ((mask & CEN_SPONSOR) != 0)
+-	cp = stpcpy (cp, sponsor);
+-      if ((mask & CEN_REVISION) != 0)
+-	{
+-	  *cp++ = '_';
+-	  cp = stpcpy (cp, revision);
+-	}
+-    }
+-
+-  *cp++ = '/';
+-  stpcpy (cp, filename);
+-
+-  /* Look in list of already loaded domains whether it is already
+-     available.  */
+-  last = NULL;
+-  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+-    if (retval->filename != NULL)
+-      {
+-	int compare = strcmp (retval->filename, abs_filename);
+-	if (compare == 0)
+-	  /* We found it!  */
+-	  break;
+-	if (compare < 0)
+-	  {
+-	    /* It's not in the list.  */
+-	    retval = NULL;
+-	    break;
+-	  }
+-
+-	last = retval;
+-      }
+-
+-  if (retval != NULL || do_allocate == 0)
+-    {
+-      free (abs_filename);
+-      return retval;
+-    }
+-
+-  retval = (struct loaded_l10nfile *)
+-    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
+-				* (1 << pop (mask))
+-				* sizeof (struct loaded_l10nfile *)));
+-  if (retval == NULL)
+-    return NULL;
+-
+-  retval->filename = abs_filename;
+-  retval->decided = (__argz_count (dirlist, dirlist_len) != 1
+-		     || ((mask & XPG_CODESET) != 0
+-			 && (mask & XPG_NORM_CODESET) != 0));
+-  retval->data = NULL;
+-
+-  if (last == NULL)
+-    {
+-      retval->next = *l10nfile_list;
+-      *l10nfile_list = retval;
+-    }
+-  else
+-    {
+-      retval->next = last->next;
+-      last->next = retval;
+-    }
+-
+-  entries = 0;
+-  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
+-     a real file.  So we have to use the DIRLIST separation mechanism
+-     of the inner loop.  */
+-  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
+-  for (; cnt >= 0; --cnt)
+-    if ((cnt & ~mask) == 0
+-	&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+-	&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+-      {
+-	/* Iterate over all elements of the DIRLIST.  */
+-	char *dir = NULL;
+-
+-	while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+-	       != NULL)
+-	  retval->successor[entries++]
+-	    = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
+-				  language, territory, codeset,
+-				  normalized_codeset, modifier, special,
+-				  sponsor, revision, filename, 1);
+-      }
+-  retval->successor[entries] = NULL;
+-
+-  return retval;
+-}
+-
+-/* 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.  */
+-const char *
+-_nl_normalize_codeset (codeset, name_len)
+-     const char *codeset;
+-     size_t name_len;
+-{
+-  int len = 0;
+-  int only_digit = 1;
+-  char *retval;
+-  char *wp;
+-  size_t cnt;
+-
+-  for (cnt = 0; cnt < name_len; ++cnt)
+-    if (isalnum (codeset[cnt]))
+-      {
+-	++len;
+-
+-	if (isalpha (codeset[cnt]))
+-	  only_digit = 0;
+-      }
+-
+-  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+-
+-  if (retval != NULL)
+-    {
+-      if (only_digit)
+-	wp = stpcpy (retval, "iso");
+-      else
+-	wp = retval;
+-
+-      for (cnt = 0; cnt < name_len; ++cnt)
+-	if (isalpha (codeset[cnt]))
+-	  *wp++ = tolower (codeset[cnt]);
+-	else if (isdigit (codeset[cnt]))
+-	  *wp++ = codeset[cnt];
+-
+-      *wp = '\0';
+-    }
+-
+-  return (const char *) 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
+--- a/intl/libgettext.h
++++ /dev/null
+@@ -1,49 +0,0 @@
+-/* 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 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 _LIBGETTEXT_H
+-#define _LIBGETTEXT_H 1
+-
+-/* NLS can be disabled through the configure --disable-nls option.  */
+-#if ENABLE_NLS
+-
+-/* 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 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
+-
+-/* For automatical extraction of messages sometimes no real
+-   translation is needed.  Instead the string itself is the result.  */
+-#define gettext_noop(Str) (Str)
+-
+-#endif /* _LIBGETTEXT_H */
+--- a/intl/libgnuintl.h
++++ /dev/null
+@@ -1,128 +0,0 @@
+-/* 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 */
+--- a/intl/loadinfo.h
++++ /dev/null
+@@ -1,109 +0,0 @@
+-/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper at cygnus.com>, 1996.
+-
+-   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 _LOADINFO_H
+-#define _LOADINFO_H	1
+-
+-#ifndef PARAMS
+-# if __STDC__
+-#  define PARAMS(args) args
+-# else
+-#  define PARAMS(args) ()
+-# 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
+-#define CEN_SPECIAL		4
+-#define XPG_NORM_CODESET	8
+-#define XPG_CODESET		16
+-#define TERRITORY		32
+-#define CEN_AUDIENCE		64
+-#define XPG_MODIFIER		128
+-
+-#define CEN_SPECIFIC	(CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+-#define XPG_SPECIFIC	(XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+-
+-
+-struct loaded_l10nfile
+-{
+-  const char *filename;
+-  int decided;
+-
+-  const void *data;
+-
+-  struct loaded_l10nfile *next;
+-  struct loaded_l10nfile *successor[1];
+-};
+-
+-
+-/* 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 *
+-_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
+-			    const char *dirlist, size_t dirlist_len, int mask,
+-			    const char *language, const char *territory,
+-			    const char *codeset,
+-			    const char *normalized_codeset,
+-			    const char *modifier, const char *special,
+-			    const char *sponsor, const char *revision,
+-			    const char *filename, int do_allocate));
+-
+-
+-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,
+-				     const char **codeset,
+-				     const char **normalized_codeset,
+-				     const char **special,
+-				     const char **sponsor,
+-				     const char **revision));
+-
+-extern char *_nl_find_language PARAMS ((const char *name));
+-
+-#endif	/* loadinfo.h */
+--- a/intl/loadmsgcat.c
++++ /dev/null
+@@ -1,567 +0,0 @@
+-/* Load needed message catalogs.
+-   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 <ctype.h>
+-#include <errno.h>
+-#include <fcntl.h>
+-#include <sys/types.h>
+-#include <sys/stat.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
+-
+-#ifdef _LIBC
+-# include <langinfo.h>
+-# include <locale.h>
+-#endif
+-
+-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !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
+-/* Rename the non ISO C functions.  This is required by the standard
+-   because some ISO C functions will require linking with this object
+-   file and the name space must not be polluted.  */
+-# define open   __open
+-# define close  __close
+-# define read   __read
+-# define mmap   __mmap
+-# 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;
+-
+-#if (defined  __GNUC__ && !defined __APPLE_CC__ ) \
+-    || (!defined __sun &&  __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, 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;
+-  int use_mmap = 0;
+-  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
+-     syntax.  */
+-  if (domain_file->filename == NULL)
+-    return;
+-
+-  /* Try to open the addressed file.  */
+-  fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+-  if (fd == -1)
+-    return;
+-
+-  /* We must know about the size of the file.  */
+-  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;
+-    }
+-
+-#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 (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+-    {
+-      /* mmap() call was successful.  */
+-      close (fd);
+-      use_mmap = 1;
+-    }
+-#endif
+-
+-  /* If the data is not yet available (i.e. mmap'ed) we try to load
+-     it manually.  */
+-  if (data == (struct mo_file_header *) -1)
+-    {
+-      size_t to_read;
+-      char *read_ptr;
+-
+-      data = (struct mo_file_header *) malloc (size);
+-      if (data == NULL)
+-	return;
+-
+-      to_read = size;
+-      read_ptr = (char *) data;
+-      do
+-	{
+-	  long int nb = (long int) read (fd, read_ptr, to_read);
+-	  if (nb <= 0)
+-	    {
+-#ifdef EINTR
+-	      if (nb == -1 && errno == EINTR)
+-		continue;
+-#endif
+-	      close (fd);
+-	      return;
+-	    }
+-	  read_ptr += nb;
+-	  to_read -= nb;
+-	}
+-      while (to_read > 0);
+-
+-      close (fd);
+-    }
+-
+-  /* Using the magic number we can test whether it really is a message
+-     catalog file.  */
+-  if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+-			0))
+-    {
+-      /* The magic number is wrong: not a message catalog file.  */
+-#ifdef HAVE_MMAP
+-      if (use_mmap)
+-	munmap ((caddr_t) data, size);
+-      else
+-#endif
+-	free (data);
+-      return;
+-    }
+-
+-  domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+-  if (domain == NULL)
+-    return;
+-  domain_file->data = domain;
+-
+-  domain->data = (char *) data;
+-  domain->use_mmap = use_mmap;
+-  domain->mmap_size = size;
+-  domain->must_swap = data->magic != _MAGIC;
+-
+-  /* Fill in the information about the available tables.  */
+-  switch (W (domain->must_swap, data->revision))
+-    {
+-    case 0:
+-      domain->nstrings = W (domain->must_swap, data->nstrings);
+-      domain->orig_tab = (struct string_desc *)
+-	((char *) data + W (domain->must_swap, data->orig_tab_offset));
+-      domain->trans_tab = (struct string_desc *)
+-	((char *) data + W (domain->must_swap, data->trans_tab_offset));
+-      domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+-      domain->hash_tab = (nls_uint32 *)
+-	((char *) data + W (domain->must_swap, data->hash_tab_offset));
+-      break;
+-    default:
+-      /* This is an invalid revision.  */
+-#ifdef HAVE_MMAP
+-      if (use_mmap)
+-	munmap ((caddr_t) data, size);
+-      else
+-#endif
+-	free (data);
+-      free (domain);
+-      domain_file->data = NULL;
+-      return;
+-    }
+-
+-  /* 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;
+-    }
+-}
+-
+-
+-#ifdef _LIBC
+-void
+-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);
+-}
+-#endif
+--- a/intl/localcharset.c
++++ /dev/null
+@@ -1,271 +0,0 @@
+-/* 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 at 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;
+-}
+--- a/intl/locale.alias
++++ /dev/null
+@@ -1,78 +0,0 @@
+-# 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 at 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
+--- a/intl/localealias.c
++++ /dev/null
+@@ -1,404 +0,0 @@
+-/* Handle aliases for locale names.
+-   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 <ctype.h>
+-#include <stdio.h>
+-#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 <stdlib.h>
+-
+-#include <string.h>
+-#if !HAVE_STRCHR && !defined _LIBC
+-# ifndef strchr
+-#  define strchr index
+-# endif
+-#endif
+-
+-#include "gettextP.h"
+-
+-/* @@ 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 strcasecmp __strcasecmp
+-
+-# ifndef mempcpy
+-#  define mempcpy __mempcpy
+-# endif
+-# define HAVE_MEMPCPY	1
+-
+-/* We need locking here since we can be called from different places.  */
+-# include <bits/libc-lock.h>
+-
+-__libc_lock_define_initialized (static, lock);
+-#endif
+-
+-#ifndef internal_function
+-# define internal_function
+-#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
+-
+-#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
+-{
+-  const char *alias;
+-  const char *value;
+-};
+-
+-
+-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;
+-static size_t maxmap;
+-
+-
+-/* Prototypes for local functions.  */
+-static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+-     internal_function;
+-static int extend_alias_table PARAMS ((void));
+-static int alias_compare PARAMS ((const struct alias_map *map1,
+-				  const struct alias_map *map2));
+-
+-
+-const char *
+-_nl_expand_alias (name)
+-    const char *name;
+-{
+-  static const char *locale_alias_path = LOCALE_ALIAS_PATH;
+-  struct alias_map *retval;
+-  const char *result = NULL;
+-  size_t added;
+-
+-#ifdef _LIBC
+-  __libc_lock_lock (lock);
+-#endif
+-
+-  do
+-    {
+-      struct alias_map item;
+-
+-      item.alias = name;
+-
+-      if (nmap > 0)
+-	retval = (struct alias_map *) bsearch (&item, map, nmap,
+-					       sizeof (struct alias_map),
+-					       (int (*) PARAMS ((const void *,
+-								 const void *))
+-						) alias_compare);
+-      else
+-	retval = NULL;
+-
+-      /* We really found an alias.  Return the value.  */
+-      if (retval != NULL)
+-	{
+-	  result = retval->value;
+-	  break;
+-	}
+-
+-      /* Perhaps we can find another alias file.  */
+-      added = 0;
+-      while (added == 0 && locale_alias_path[0] != '\0')
+-	{
+-	  const char *start;
+-
+-	  while (locale_alias_path[0] == PATH_SEPARATOR)
+-	    ++locale_alias_path;
+-	  start = locale_alias_path;
+-
+-	  while (locale_alias_path[0] != '\0'
+-		 && locale_alias_path[0] != PATH_SEPARATOR)
+-	    ++locale_alias_path;
+-
+-	  if (start < locale_alias_path)
+-	    added = read_alias_file (start, locale_alias_path - start);
+-	}
+-    }
+-  while (added != 0);
+-
+-#ifdef _LIBC
+-  __libc_lock_unlock (lock);
+-#endif
+-
+-  return result;
+-}
+-
+-
+-static size_t
+-internal_function
+-read_alias_file (fname, fname_len)
+-     const char *fname;
+-     int fname_len;
+-{
+-  FILE *fp;
+-  char *full_fname;
+-  size_t added;
+-  static const char aliasfile[] = "/locale.alias";
+-
+-  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+-#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)
+-    return 0;
+-
+-  added = 0;
+-  while (!feof (fp))
+-    {
+-      /* It is a reasonable approach to use a fix buffer here because
+-	 a) we are only interested in the first two fields
+-	 b) these fields must be usable as file names and so must not
+-	    be that long
+-       */
+-      char buf[BUFSIZ];
+-      char *alias;
+-      char *value;
+-      char *cp;
+-
+-      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 (buf, '\n') == NULL)
+-	{
+-	  char altbuf[BUFSIZ];
+-	  do
+-	    if (fgets (altbuf, sizeof altbuf, fp) == NULL)
+-	      /* Make sure the inner loop will be left.  The outer loop
+-		 will exit at the `feof' test.  */
+-	      break;
+-	  while (strchr (altbuf, '\n') == NULL);
+-	}
+-
+-      cp = buf;
+-      /* Ignore leading white space.  */
+-      while (isspace (cp[0]))
+-	++cp;
+-
+-      /* A leading '#' signals a comment line.  */
+-      if (cp[0] != '\0' && cp[0] != '#')
+-	{
+-	  alias = cp++;
+-	  while (cp[0] != '\0' && !isspace (cp[0]))
+-	    ++cp;
+-	  /* Terminate alias name.  */
+-	  if (cp[0] != '\0')
+-	    *cp++ = '\0';
+-
+-	  /* Now look for the beginning of the value.  */
+-	  while (isspace (cp[0]))
+-	    ++cp;
+-
+-	  if (cp[0] != '\0')
+-	    {
+-	      size_t alias_len;
+-	      size_t value_len;
+-
+-	      value = cp++;
+-	      while (cp[0] != '\0' && !isspace (cp[0]))
+-		++cp;
+-	      /* Terminate value.  */
+-	      if (cp[0] == '\n')
+-		{
+-		  /* This has to be done to make the following test
+-		     for the end of line possible.  We are looking for
+-		     the terminating '\n' which do not overwrite here.  */
+-		  *cp++ = '\0';
+-		  *cp = '\n';
+-		}
+-	      else if (cp[0] != '\0')
+-		*cp++ = '\0';
+-
+-	      if (nmap >= maxmap)
+-		if (__builtin_expect (extend_alias_table (), 0))
+-		  return added;
+-
+-	      alias_len = strlen (alias) + 1;
+-	      value_len = strlen (value) + 1;
+-
+-	      if (string_space_act + alias_len + value_len > string_space_max)
+-		{
+-		  /* Increase size of memory pool.  */
+-		  size_t new_size = (string_space_max
+-				     + (alias_len + value_len > 1024
+-					? 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))
+-		    {
+-		      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;
+-		}
+-
+-	      map[nmap].alias = memcpy (&string_space[string_space_act],
+-					alias, alias_len);
+-	      string_space_act += alias_len;
+-
+-	      map[nmap].value = memcpy (&string_space[string_space_act],
+-					value, value_len);
+-	      string_space_act += value_len;
+-
+-	      ++nmap;
+-	      ++added;
+-	    }
+-	}
+-    }
+-
+-  /* Should we test for ferror()?  I think we have to silently ignore
+-     errors.  --drepper  */
+-  fclose (fp);
+-
+-  if (added > 0)
+-    qsort (map, nmap, sizeof (struct alias_map),
+-	   (int (*) PARAMS ((const void *, const void *))) alias_compare);
+-
+-  return added;
+-}
+-
+-
+-static int
+-extend_alias_table ()
+-{
+-  size_t new_size;
+-  struct alias_map *new_map;
+-
+-  new_size = maxmap == 0 ? 100 : 2 * maxmap;
+-  new_map = (struct alias_map *) realloc (map, (new_size
+-						* sizeof (struct alias_map)));
+-  if (new_map == NULL)
+-    /* Simply don't extend: we don't have any more core.  */
+-    return -1;
+-
+-  map = new_map;
+-  maxmap = new_size;
+-  return 0;
+-}
+-
+-
+-#ifdef _LIBC
+-static void __attribute__ ((unused))
+-free_mem (void)
+-{
+-  if (string_space != NULL)
+-    free (string_space);
+-  if (map != NULL)
+-    free (map);
+-}
+-text_set_element (__libc_subfreeres, free_mem);
+-#endif
+-
+-
+-static int
+-alias_compare (map1, map2)
+-     const struct alias_map *map1;
+-     const struct alias_map *map2;
+-{
+-#if defined _LIBC || defined HAVE_STRCASECMP
+-  return strcasecmp (map1->alias, map2->alias);
+-#else
+-  const unsigned char *p1 = (const unsigned char *) map1->alias;
+-  const unsigned char *p2 = (const unsigned char *) map2->alias;
+-  unsigned char c1, c2;
+-
+-  if (p1 == p2)
+-    return 0;
+-
+-  do
+-    {
+-      /* I know this seems to be odd but the tolower() function in
+-	 some systems libc cannot handle nonalpha characters.  */
+-      c1 = isupper (*p1) ? tolower (*p1) : *p1;
+-      c2 = isupper (*p2) ? tolower (*p2) : *p2;
+-      if (c1 == '\0')
+-	break;
+-      ++p1;
+-      ++p2;
+-    }
+-  while (c1 == c2);
+-
+-  return c1 - c2;
+-#endif
+-}
+--- a/intl/ngettext.c
++++ /dev/null
+@@ -1,68 +0,0 @@
+-/* 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
+--- a/intl/plural.c
++++ /dev/null
+@@ -1,1326 +0,0 @@
+-
+-/*  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 at 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 at 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
+-
+-/* 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
+-
+-#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"
+-
+-  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.  */
+-}
+--- a/intl/plural.y
++++ /dev/null
+@@ -1,413 +0,0 @@
+-%{
+-/* Expression parsing for plural form selection.
+-   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+-   Written by Ulrich Drepper <drepper at 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.  */
+-}
+--- a/intl/ref-add.sin
++++ /dev/null
+@@ -1,31 +0,0 @@
+-# 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 at 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:/
+-}
+--- a/intl/ref-del.sin
++++ /dev/null
+@@ -1,26 +0,0 @@
+-# 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 at clisp.cons.org>.
+-#
+-/^# Packages using this file: / {
+-  s/# Packages using this file://
+-  s/ @PACKAGE@ / /
+-  s/^/# Packages using this file:/
+-}
+--- a/intl/textdomain.c
++++ /dev/null
+@@ -1,142 +0,0 @@
+-/* Implementation of the textdomain(3) function.
+-   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 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 <stdlib.h>
+-#include <string.h>
+-
+-#ifdef _LIBC
+-# include <libintl.h>
+-#else
+-# include "libgnuintl.h"
+-#endif
+-#include "gettextP.h"
+-
+-#ifdef _LIBC
+-/* We have to handle multi-threaded applications.  */
+-# include <bits/libc-lock.h>
+-#else
+-/* 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
+-   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__
+-#endif
+-
+-/* @@ end of prolog @@ */
+-
+-/* Name of the default text domain.  */
+-extern const char _nl_default_default_domain[];
+-
+-/* Default text domain in which entries for gettext(3) are to be found.  */
+-extern const char *_nl_current_default_domain;
+-
+-
+-/* 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 TEXTDOMAIN __textdomain
+-# ifndef strdup
+-#  define strdup(str) __strdup (str)
+-# endif
+-#else
+-# 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".  */
+-char *
+-TEXTDOMAIN (domainname)
+-     const char *domainname;
+-{
+-  char *new_domain;
+-  char *old_domain;
+-
+-  /* A NULL pointer requests the current setting.  */
+-  if (domainname == NULL)
+-    return (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;
+-      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
+-      new_domain = strdup (domainname);
+-#else
+-      size_t len = strlen (domainname) + 1;
+-      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);
+-    }
+-
+-  __libc_rwlock_unlock (_nl_state_lock);
+-
+-  return new_domain;
+-}
+-
+-#ifdef _LIBC
+-/* Alias for function name in GNU C Library.  */
+-weak_alias (__textdomain, textdomain);
+-#endif
diff --git a/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb b/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb
index 6fe2582..b4d94ff 100644
--- a/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb
+++ b/meta-oe/recipes-graphics/gtkperf/gtkperf_0.40.bb
@@ -7,6 +7,7 @@ SRC_URI = "http://prdownloads.sourceforge.net/${BPN}/${BPN}_${PV}.tar.gz \
            file://Makevars \
            file://0001-Include-stdlib.h-for-exit-API.patch \
            file://0002-timing.c-Fix-format-security-errors.patch \
+           file://gettext.patch \
            "
 
 SRC_URI[md5sum] = "4331dde4bb83865e15482885fcb0cc53"

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list