diff --git a/meta/recipes-support/libiconv/libiconv-1.11.1/autoconf.patch b/meta/recipes-support/libiconv/libiconv-1.11.1/autoconf.patch
new file mode 100644
index 0000000..3cbf549
--- /dev/null
+++ b/meta/recipes-support/libiconv/libiconv-1.11.1/autoconf.patch
@@ -0,0 +1,50 @@
+It adds the variables that are needed
+for autoconf 2.65 to reconfigure libiconv and defines the m4 macros 
+directory. Its imported from OE.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: libiconv-1.11.1/configure.ac
+===================================================================
+--- libiconv-1.11.1.orig/configure.ac
++++ libiconv-1.11.1/configure.ac
+@@ -23,7 +23,7 @@ AC_CONFIG_AUX_DIR(build-aux)
+ AM_INIT_AUTOMAKE(libiconv, 1.11)
+ AC_CONFIG_HEADERS(config.h lib/config.h)
+ AC_PROG_MAKE_SET
+-
++AC_CONFIG_MACRO_DIR([m4])
+ dnl           checks for basic programs
+ 
+ AC_PROG_CC
+Index: libiconv-1.11.1/libcharset/configure.ac
+===================================================================
+--- libiconv-1.11.1.orig/libcharset/configure.ac
++++ libiconv-1.11.1/libcharset/configure.ac
+@@ -16,17 +16,17 @@ dnl along with the GNU CHARSET Library;
+ dnl write to the Free Software Foundation, Inc., 51 Franklin Street,
+ dnl Fifth Floor, Boston, MA 02110-1301, USA.
+ 
+-AC_PREREQ(2.13)
++AC_PREREQ(2.61)
++AC_INIT([libcharset],[1.4] )
++AC_CONFIG_SRCDIR([lib/localcharset.c])
+ 
+-PACKAGE=libcharset
+-VERSION=1.4
+-
+-AC_INIT(lib/localcharset.c)
+ AC_CONFIG_AUX_DIR(build-aux)
+ AC_CONFIG_HEADER(config.h)
+ AC_PROG_MAKE_SET
+-AC_SUBST(PACKAGE)
+-AC_SUBST(VERSION)
++dnl AC_SUBST(PACKAGE)
++dnl AC_SUBST(VERSION)
++
++AC_CONFIG_MACRO_DIR([m4])
+ 
+ dnl           checks for basic programs
+ 
diff --git a/meta/recipes-support/libiconv/libiconv-1.11.1/shared_preloadable_libiconv_linux.patch b/meta/recipes-support/libiconv/libiconv-1.11.1/shared_preloadable_libiconv_linux.patch
new file mode 100644
index 0000000..fb07f73
--- /dev/null
+++ b/meta/recipes-support/libiconv/libiconv-1.11.1/shared_preloadable_libiconv_linux.patch
@@ -0,0 +1,26 @@
+With libtool generating shared and static version of libraries needs -fPIC flags
+without this it will not generate the commands to create shared linked library
+Its more enforced by libtool 2.4. I have not checked it with older libtool
+libiconv 1.11.x is relatively old release and libtool 2.4 did not exist when it
+was released these kind of problem are more likely
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: libiconv-1.11.1/lib/Makefile.in
+===================================================================
+--- libiconv-1.11.1.orig/lib/Makefile.in
++++ libiconv-1.11.1/lib/Makefile.in
+@@ -70,9 +70,9 @@ preloadable_libiconv.so : preloadable_li
+ 
+ preloadable_libiconv_linux.so : $(SOURCES)
+ 	if test -n "@GCC@"; then \
+-	  $(LIBTOOL_LINK) $(CC) $(LDFLAGS) $(INCLUDES) $(CFLAGS) $(CPPFLAGS) $(DEFS) -fPIC -DPIC -DLIBICONV_PLUG $(SOURCES) -shared -o preloadable_libiconv_linux.so; \
++	  $(LIBTOOL_LINK) $(CC) $(LDFLAGS) $(INCLUDES) $(CFLAGS) $(CPPFLAGS) $(DEFS) -fPIC -DPIC -DLIBICONV_PLUG $(SOURCES) -rpath $(libdir) -o libpreload_iconv.la && cp .libs/libpreload_iconv.so preloadable_libiconv_linux.so; \
+ 	else \
+-	  $(LIBTOOL_LINK) $(CC) $(LDFLAGS) $(INCLUDES) $(CFLAGS) $(CPPFLAGS) $(DEFS) -KPIC -DPIC -DLIBICONV_PLUG $(SOURCES) -shared -o preloadable_libiconv_linux.so; \
++	  $(LIBTOOL_LINK) $(CC) $(LDFLAGS) $(INCLUDES) $(CFLAGS) $(CPPFLAGS) $(DEFS) -KPIC -DPIC -DLIBICONV_PLUG $(SOURCES) -rpath $(libdir) -o libpreload_iconv.la && cp .libs/libpreload_iconv.so preloadable_libiconv_linux.so; \
+ 	fi
+ 
+ preloadable_libiconv_solaris.so : $(SOURCES)
diff --git a/meta/recipes-support/libiconv/libiconv-1.14/add-relocatable-module.patch b/meta/recipes-support/libiconv/libiconv-1.14/add-relocatable-module.patch
new file mode 100644
index 0000000..6af377b
--- /dev/null
+++ b/meta/recipes-support/libiconv/libiconv-1.14/add-relocatable-module.patch
@@ -0,0 +1,5008 @@
+This patch is needed to solve issues like
+| iconv.o: In function `main':
+| /home/james/stuff/beagle/tmp-eglibc/work/armv7a-vfp-neon-oe-linux-gnueabi/libiconv-1.14-r0/libiconv-1.14/src/./iconv.c:861: undefined reference to `relocate'
+| ../srclib/libicrt.a(progreloc.o): In function `prepare_relocate':
+| /home/james/stuff/beagle/tmp-eglibc/work/armv7a-vfp-neon-oe-linux-gnueabi/libiconv-1.14-r0/libiconv-1.14/srclib/progreloc.c:297: undefined reference to `compute_curr_prefix'
+| /home/james/stuff/beagle/tmp-eglibc/work/armv7a-vfp-neon-oe-linux-gnueabi/libiconv-1.14-r0/libiconv-1.14/srclib/progreloc.c:302: undefined reference to `set_relocation_prefix'
+| collect2: ld returned 1 exit status
+| make[1]: *** [install] Error 1
+
+Upstream-Status: Inappropriate [OE config specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+diff -Naurp libiconv-1.14.org//build-aux/arg-nonnull.h libiconv-1.14/build-aux/arg-nonnull.h
+--- libiconv-1.14.org//build-aux/arg-nonnull.h	1969-12-31 16:00:00.000000000 -0800
++++ libiconv-1.14/build-aux/arg-nonnull.h	2012-01-08 02:07:39.930484438 -0800
+@@ -0,0 +1,26 @@
++/* A C macro for declaring that specific arguments must not be NULL.
++   Copyright (C) 2009-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
++
++/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
++   that the values passed as arguments n, ..., m must be non-NULL pointers.
++   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
++#ifndef _GL_ARG_NONNULL
++# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
++#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
++# else
++#  define _GL_ARG_NONNULL(params)
++# endif
++#endif
+diff -Naurp libiconv-1.14.org//build-aux/c++defs.h libiconv-1.14/build-aux/c++defs.h
+--- libiconv-1.14.org//build-aux/c++defs.h	1969-12-31 16:00:00.000000000 -0800
++++ libiconv-1.14/build-aux/c++defs.h	2012-01-08 02:07:39.942484438 -0800
+@@ -0,0 +1,271 @@
++/* C++ compatible function declaration macros.
++   Copyright (C) 2010-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
++
++#ifndef _GL_CXXDEFS_H
++#define _GL_CXXDEFS_H
++
++/* The three most frequent use cases of these macros are:
++
++   * For providing a substitute for a function that is missing on some
++     platforms, but is declared and works fine on the platforms on which
++     it exists:
++
++       #if @GNULIB_FOO@
++       # if !@HAVE_FOO@
++       _GL_FUNCDECL_SYS (foo, ...);
++       # endif
++       _GL_CXXALIAS_SYS (foo, ...);
++       _GL_CXXALIASWARN (foo);
++       #elif defined GNULIB_POSIXCHECK
++       ...
++       #endif
++
++   * For providing a replacement for a function that exists on all platforms,
++     but is broken/insufficient and needs to be replaced on some platforms:
++
++       #if @GNULIB_FOO@
++       # if @REPLACE_FOO@
++       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++       #   undef foo
++       #   define foo rpl_foo
++       #  endif
++       _GL_FUNCDECL_RPL (foo, ...);
++       _GL_CXXALIAS_RPL (foo, ...);
++       # else
++       _GL_CXXALIAS_SYS (foo, ...);
++       # endif
++       _GL_CXXALIASWARN (foo);
++       #elif defined GNULIB_POSIXCHECK
++       ...
++       #endif
++
++   * For providing a replacement for a function that exists on some platforms
++     but is broken/insufficient and needs to be replaced on some of them and
++     is additionally either missing or undeclared on some other platforms:
++
++       #if @GNULIB_FOO@
++       # if @REPLACE_FOO@
++       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++       #   undef foo
++       #   define foo rpl_foo
++       #  endif
++       _GL_FUNCDECL_RPL (foo, ...);
++       _GL_CXXALIAS_RPL (foo, ...);
++       # else
++       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
++       _GL_FUNCDECL_SYS (foo, ...);
++       #  endif
++       _GL_CXXALIAS_SYS (foo, ...);
++       # endif
++       _GL_CXXALIASWARN (foo);
++       #elif defined GNULIB_POSIXCHECK
++       ...
++       #endif
++*/
++
++/* _GL_EXTERN_C declaration;
++   performs the declaration with C linkage.  */
++#if defined __cplusplus
++# define _GL_EXTERN_C extern "C"
++#else
++# define _GL_EXTERN_C extern
++#endif
++
++/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
++   declares a replacement function, named rpl_func, with the given prototype,
++   consisting of return type, parameters, and attributes.
++   Example:
++     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
++                                  _GL_ARG_NONNULL ((1)));
++ */
++#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
++  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
++#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
++  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
++
++/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
++   declares the system function, named func, with the given prototype,
++   consisting of return type, parameters, and attributes.
++   Example:
++     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
++                                  _GL_ARG_NONNULL ((1)));
++ */
++#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
++  _GL_EXTERN_C rettype func parameters_and_attributes
++
++/* _GL_CXXALIAS_RPL (func, rettype, parameters);
++   declares a C++ alias called GNULIB_NAMESPACE::func
++   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
++   Example:
++     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
++ */
++#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
++  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
++#if defined __cplusplus && defined GNULIB_NAMESPACE
++# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
++    namespace GNULIB_NAMESPACE                                \
++    {                                                         \
++      rettype (*const func) parameters = ::rpl_func;          \
++    }                                                         \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#else
++# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#endif
++
++/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
++   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
++   except that the C function rpl_func may have a slightly different
++   declaration.  A cast is used to silence the "invalid conversion" error
++   that would otherwise occur.  */
++#if defined __cplusplus && defined GNULIB_NAMESPACE
++# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
++    namespace GNULIB_NAMESPACE                                     \
++    {                                                              \
++      rettype (*const func) parameters =                           \
++        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
++    }                                                              \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#else
++# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#endif
++
++/* _GL_CXXALIAS_SYS (func, rettype, parameters);
++   declares a C++ alias called GNULIB_NAMESPACE::func
++   that redirects to the system provided function func, if GNULIB_NAMESPACE
++   is defined.
++   Example:
++     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
++ */
++#if defined __cplusplus && defined GNULIB_NAMESPACE
++  /* If we were to write
++       rettype (*const func) parameters = ::func;
++     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
++     better (remove an indirection through a 'static' pointer variable),
++     but then the _GL_CXXALIASWARN macro below would cause a warning not only
++     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
++# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
++    namespace GNULIB_NAMESPACE                     \
++    {                                              \
++      static rettype (*func) parameters = ::func;  \
++    }                                              \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#else
++# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#endif
++
++/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
++   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
++   except that the C function func may have a slightly different declaration.
++   A cast is used to silence the "invalid conversion" error that would
++   otherwise occur.  */
++#if defined __cplusplus && defined GNULIB_NAMESPACE
++# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
++    namespace GNULIB_NAMESPACE                          \
++    {                                                   \
++      static rettype (*func) parameters =               \
++        reinterpret_cast<rettype(*)parameters>(::func); \
++    }                                                   \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#else
++# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#endif
++
++/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
++   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
++   except that the C function is picked among a set of overloaded functions,
++   namely the one with rettype2 and parameters2.  Two consecutive casts
++   are used to silence the "cannot find a match" and "invalid conversion"
++   errors that would otherwise occur.  */
++#if defined __cplusplus && defined GNULIB_NAMESPACE
++  /* The outer cast must be a reinterpret_cast.
++     The inner cast: When the function is defined as a set of overloaded
++     functions, it works as a static_cast<>, choosing the designated variant.
++     When the function is defined as a single variant, it works as a
++     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
++# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
++    namespace GNULIB_NAMESPACE                                                \
++    {                                                                         \
++      static rettype (*func) parameters =                                     \
++        reinterpret_cast<rettype(*)parameters>(                               \
++          (rettype2(*)parameters2)(::func));                                  \
++    }                                                                         \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#else
++# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#endif
++
++/* _GL_CXXALIASWARN (func);
++   causes a warning to be emitted when ::func is used but not when
++   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
++   variants.  */
++#if defined __cplusplus && defined GNULIB_NAMESPACE
++# define _GL_CXXALIASWARN(func) \
++   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
++# define _GL_CXXALIASWARN_1(func,namespace) \
++   _GL_CXXALIASWARN_2 (func, namespace)
++/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
++   we enable the warning only when not optimizing.  */
++# if !__OPTIMIZE__
++#  define _GL_CXXALIASWARN_2(func,namespace) \
++    _GL_WARN_ON_USE (func, \
++                     "The symbol ::" #func " refers to the system function. " \
++                     "Use " #namespace "::" #func " instead.")
++# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
++#  define _GL_CXXALIASWARN_2(func,namespace) \
++     extern __typeof__ (func) func
++# else
++#  define _GL_CXXALIASWARN_2(func,namespace) \
++     _GL_EXTERN_C int _gl_cxxalias_dummy
++# endif
++#else
++# define _GL_CXXALIASWARN(func) \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#endif
++
++/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
++   causes a warning to be emitted when the given overloaded variant of ::func
++   is used but not when GNULIB_NAMESPACE::func is used.  */
++#if defined __cplusplus && defined GNULIB_NAMESPACE
++# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
++   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
++                        GNULIB_NAMESPACE)
++# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
++   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
++/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
++   we enable the warning only when not optimizing.  */
++# if !__OPTIMIZE__
++#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
++    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
++                         "The symbol ::" #func " refers to the system function. " \
++                         "Use " #namespace "::" #func " instead.")
++# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
++#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
++     extern __typeof__ (func) func
++# else
++#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
++     _GL_EXTERN_C int _gl_cxxalias_dummy
++# endif
++#else
++# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
++    _GL_EXTERN_C int _gl_cxxalias_dummy
++#endif
++
++#endif /* _GL_CXXDEFS_H */
+diff -Naurp libiconv-1.14.org//build-aux/snippet/arg-nonnull.h libiconv-1.14/build-aux/snippet/arg-nonnull.h
+--- libiconv-1.14.org//build-aux/snippet/arg-nonnull.h	2011-08-07 06:22:07.000000000 -0700
++++ libiconv-1.14/build-aux/snippet/arg-nonnull.h	1969-12-31 16:00:00.000000000 -0800
+@@ -1,26 +0,0 @@
+-/* A C macro for declaring that specific arguments must not be NULL.
+-   Copyright (C) 2009-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+-
+-/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+-   that the values passed as arguments n, ..., m must be non-NULL pointers.
+-   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+-#ifndef _GL_ARG_NONNULL
+-# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+-#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+-# else
+-#  define _GL_ARG_NONNULL(params)
+-# endif
+-#endif
+diff -Naurp libiconv-1.14.org//build-aux/snippet/c++defs.h libiconv-1.14/build-aux/snippet/c++defs.h
+--- libiconv-1.14.org//build-aux/snippet/c++defs.h	2011-08-07 06:22:07.000000000 -0700
++++ libiconv-1.14/build-aux/snippet/c++defs.h	1969-12-31 16:00:00.000000000 -0800
+@@ -1,271 +0,0 @@
+-/* C++ compatible function declaration macros.
+-   Copyright (C) 2010-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _GL_CXXDEFS_H
+-#define _GL_CXXDEFS_H
+-
+-/* The three most frequent use cases of these macros are:
+-
+-   * For providing a substitute for a function that is missing on some
+-     platforms, but is declared and works fine on the platforms on which
+-     it exists:
+-
+-       #if @GNULIB_FOO@
+-       # if !@HAVE_FOO@
+-       _GL_FUNCDECL_SYS (foo, ...);
+-       # endif
+-       _GL_CXXALIAS_SYS (foo, ...);
+-       _GL_CXXALIASWARN (foo);
+-       #elif defined GNULIB_POSIXCHECK
+-       ...
+-       #endif
+-
+-   * For providing a replacement for a function that exists on all platforms,
+-     but is broken/insufficient and needs to be replaced on some platforms:
+-
+-       #if @GNULIB_FOO@
+-       # if @REPLACE_FOO@
+-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-       #   undef foo
+-       #   define foo rpl_foo
+-       #  endif
+-       _GL_FUNCDECL_RPL (foo, ...);
+-       _GL_CXXALIAS_RPL (foo, ...);
+-       # else
+-       _GL_CXXALIAS_SYS (foo, ...);
+-       # endif
+-       _GL_CXXALIASWARN (foo);
+-       #elif defined GNULIB_POSIXCHECK
+-       ...
+-       #endif
+-
+-   * For providing a replacement for a function that exists on some platforms
+-     but is broken/insufficient and needs to be replaced on some of them and
+-     is additionally either missing or undeclared on some other platforms:
+-
+-       #if @GNULIB_FOO@
+-       # if @REPLACE_FOO@
+-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-       #   undef foo
+-       #   define foo rpl_foo
+-       #  endif
+-       _GL_FUNCDECL_RPL (foo, ...);
+-       _GL_CXXALIAS_RPL (foo, ...);
+-       # else
+-       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+-       _GL_FUNCDECL_SYS (foo, ...);
+-       #  endif
+-       _GL_CXXALIAS_SYS (foo, ...);
+-       # endif
+-       _GL_CXXALIASWARN (foo);
+-       #elif defined GNULIB_POSIXCHECK
+-       ...
+-       #endif
+-*/
+-
+-/* _GL_EXTERN_C declaration;
+-   performs the declaration with C linkage.  */
+-#if defined __cplusplus
+-# define _GL_EXTERN_C extern "C"
+-#else
+-# define _GL_EXTERN_C extern
+-#endif
+-
+-/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+-   declares a replacement function, named rpl_func, with the given prototype,
+-   consisting of return type, parameters, and attributes.
+-   Example:
+-     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+-                                  _GL_ARG_NONNULL ((1)));
+- */
+-#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+-  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+-#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+-  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+-
+-/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+-   declares the system function, named func, with the given prototype,
+-   consisting of return type, parameters, and attributes.
+-   Example:
+-     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+-                                  _GL_ARG_NONNULL ((1)));
+- */
+-#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+-  _GL_EXTERN_C rettype func parameters_and_attributes
+-
+-/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+-   declares a C++ alias called GNULIB_NAMESPACE::func
+-   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+-   Example:
+-     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+- */
+-#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+-  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+-#if defined __cplusplus && defined GNULIB_NAMESPACE
+-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+-    namespace GNULIB_NAMESPACE                                \
+-    {                                                         \
+-      rettype (*const func) parameters = ::rpl_func;          \
+-    }                                                         \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#else
+-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#endif
+-
+-/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+-   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+-   except that the C function rpl_func may have a slightly different
+-   declaration.  A cast is used to silence the "invalid conversion" error
+-   that would otherwise occur.  */
+-#if defined __cplusplus && defined GNULIB_NAMESPACE
+-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+-    namespace GNULIB_NAMESPACE                                     \
+-    {                                                              \
+-      rettype (*const func) parameters =                           \
+-        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+-    }                                                              \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#else
+-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#endif
+-
+-/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+-   declares a C++ alias called GNULIB_NAMESPACE::func
+-   that redirects to the system provided function func, if GNULIB_NAMESPACE
+-   is defined.
+-   Example:
+-     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+- */
+-#if defined __cplusplus && defined GNULIB_NAMESPACE
+-  /* If we were to write
+-       rettype (*const func) parameters = ::func;
+-     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+-     better (remove an indirection through a 'static' pointer variable),
+-     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+-     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+-    namespace GNULIB_NAMESPACE                     \
+-    {                                              \
+-      static rettype (*func) parameters = ::func;  \
+-    }                                              \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#else
+-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#endif
+-
+-/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+-   except that the C function func may have a slightly different declaration.
+-   A cast is used to silence the "invalid conversion" error that would
+-   otherwise occur.  */
+-#if defined __cplusplus && defined GNULIB_NAMESPACE
+-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+-    namespace GNULIB_NAMESPACE                          \
+-    {                                                   \
+-      static rettype (*func) parameters =               \
+-        reinterpret_cast<rettype(*)parameters>(::func); \
+-    }                                                   \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#else
+-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#endif
+-
+-/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+-   except that the C function is picked among a set of overloaded functions,
+-   namely the one with rettype2 and parameters2.  Two consecutive casts
+-   are used to silence the "cannot find a match" and "invalid conversion"
+-   errors that would otherwise occur.  */
+-#if defined __cplusplus && defined GNULIB_NAMESPACE
+-  /* The outer cast must be a reinterpret_cast.
+-     The inner cast: When the function is defined as a set of overloaded
+-     functions, it works as a static_cast<>, choosing the designated variant.
+-     When the function is defined as a single variant, it works as a
+-     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+-    namespace GNULIB_NAMESPACE                                                \
+-    {                                                                         \
+-      static rettype (*func) parameters =                                     \
+-        reinterpret_cast<rettype(*)parameters>(                               \
+-          (rettype2(*)parameters2)(::func));                                  \
+-    }                                                                         \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#else
+-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#endif
+-
+-/* _GL_CXXALIASWARN (func);
+-   causes a warning to be emitted when ::func is used but not when
+-   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+-   variants.  */
+-#if defined __cplusplus && defined GNULIB_NAMESPACE
+-# define _GL_CXXALIASWARN(func) \
+-   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+-# define _GL_CXXALIASWARN_1(func,namespace) \
+-   _GL_CXXALIASWARN_2 (func, namespace)
+-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+-   we enable the warning only when not optimizing.  */
+-# if !__OPTIMIZE__
+-#  define _GL_CXXALIASWARN_2(func,namespace) \
+-    _GL_WARN_ON_USE (func, \
+-                     "The symbol ::" #func " refers to the system function. " \
+-                     "Use " #namespace "::" #func " instead.")
+-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+-#  define _GL_CXXALIASWARN_2(func,namespace) \
+-     extern __typeof__ (func) func
+-# else
+-#  define _GL_CXXALIASWARN_2(func,namespace) \
+-     _GL_EXTERN_C int _gl_cxxalias_dummy
+-# endif
+-#else
+-# define _GL_CXXALIASWARN(func) \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#endif
+-
+-/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+-   causes a warning to be emitted when the given overloaded variant of ::func
+-   is used but not when GNULIB_NAMESPACE::func is used.  */
+-#if defined __cplusplus && defined GNULIB_NAMESPACE
+-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+-   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+-                        GNULIB_NAMESPACE)
+-# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+-   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+-   we enable the warning only when not optimizing.  */
+-# if !__OPTIMIZE__
+-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+-    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+-                         "The symbol ::" #func " refers to the system function. " \
+-                         "Use " #namespace "::" #func " instead.")
+-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+-     extern __typeof__ (func) func
+-# else
+-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+-     _GL_EXTERN_C int _gl_cxxalias_dummy
+-# endif
+-#else
+-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+-    _GL_EXTERN_C int _gl_cxxalias_dummy
+-#endif
+-
+-#endif /* _GL_CXXDEFS_H */
+diff -Naurp libiconv-1.14.org//build-aux/snippet/_Noreturn.h libiconv-1.14/build-aux/snippet/_Noreturn.h
+--- libiconv-1.14.org//build-aux/snippet/_Noreturn.h	2011-08-07 06:22:07.000000000 -0700
++++ libiconv-1.14/build-aux/snippet/_Noreturn.h	1969-12-31 16:00:00.000000000 -0800
+@@ -1,10 +0,0 @@
+-#ifndef _Noreturn
+-# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+-      || 0x5110 <= __SUNPRO_C)
+-#  define _Noreturn __attribute__ ((__noreturn__))
+-# elif 1200 <= _MSC_VER
+-#  define _Noreturn __declspec (noreturn)
+-# else
+-#  define _Noreturn
+-# endif
+-#endif
+diff -Naurp libiconv-1.14.org//build-aux/snippet/warn-on-use.h libiconv-1.14/build-aux/snippet/warn-on-use.h
+--- libiconv-1.14.org//build-aux/snippet/warn-on-use.h	2011-08-07 06:22:07.000000000 -0700
++++ libiconv-1.14/build-aux/snippet/warn-on-use.h	1969-12-31 16:00:00.000000000 -0800
+@@ -1,109 +0,0 @@
+-/* A C macro for emitting warnings if a function is used.
+-   Copyright (C) 2010-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+-
+-/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
+-   for FUNCTION which will then trigger a compiler warning containing
+-   the text of "literal string" anywhere that function is called, if
+-   supported by the compiler.  If the compiler does not support this
+-   feature, the macro expands to an unused extern declaration.
+-
+-   This macro is useful for marking a function as a potential
+-   portability trap, with the intent that "literal string" include
+-   instructions on the replacement function that should be used
+-   instead.  However, one of the reasons that a function is a
+-   portability trap is if it has the wrong signature.  Declaring
+-   FUNCTION with a different signature in C is a compilation error, so
+-   this macro must use the same type as any existing declaration so
+-   that programs that avoid the problematic FUNCTION do not fail to
+-   compile merely because they included a header that poisoned the
+-   function.  But this implies that _GL_WARN_ON_USE is only safe to
+-   use if FUNCTION is known to already have a declaration.  Use of
+-   this macro implies that there must not be any other macro hiding
+-   the declaration of FUNCTION; but undefining FUNCTION first is part
+-   of the poisoning process anyway (although for symbols that are
+-   provided only via a macro, the result is a compilation error rather
+-   than a warning containing "literal string").  Also note that in
+-   C++, it is only safe to use if FUNCTION has no overloads.
+-
+-   For an example, it is possible to poison 'getline' by:
+-   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+-     [getline]) in configure.ac, which potentially defines
+-     HAVE_RAW_DECL_GETLINE
+-   - adding this code to a header that wraps the system <stdio.h>:
+-     #undef getline
+-     #if HAVE_RAW_DECL_GETLINE
+-     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+-       "not universally present; use the gnulib module getline");
+-     #endif
+-
+-   It is not possible to directly poison global variables.  But it is
+-   possible to write a wrapper accessor function, and poison that
+-   (less common usage, like &environ, will cause a compilation error
+-   rather than issue the nice warning, but the end result of informing
+-   the developer about their portability problem is still achieved):
+-   #if HAVE_RAW_DECL_ENVIRON
+-   static inline char ***rpl_environ (void) { return &environ; }
+-   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+-   # undef environ
+-   # define environ (*rpl_environ ())
+-   #endif
+-   */
+-#ifndef _GL_WARN_ON_USE
+-
+-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+-/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+-#  define _GL_WARN_ON_USE(function, message) \
+-extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+-/* Verify the existence of the function.  */
+-#  define _GL_WARN_ON_USE(function, message) \
+-extern __typeof__ (function) function
+-# else /* Unsupported.  */
+-#  define _GL_WARN_ON_USE(function, message) \
+-_GL_WARN_EXTERN_C int _gl_warn_on_use
+-# endif
+-#endif
+-
+-/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+-   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+-   declared with the given prototype, consisting of return type, parameters,
+-   and attributes.
+-   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+-   not work in this case.  */
+-#ifndef _GL_WARN_ON_USE_CXX
+-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+-extern rettype function parameters_and_attributes \
+-     __attribute__ ((__warning__ (msg)))
+-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+-/* Verify the existence of the function.  */
+-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+-extern rettype function parameters_and_attributes
+-# else /* Unsupported.  */
+-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+-_GL_WARN_EXTERN_C int _gl_warn_on_use
+-# endif
+-#endif
+-
+-/* _GL_WARN_EXTERN_C declaration;
+-   performs the declaration with C linkage.  */
+-#ifndef _GL_WARN_EXTERN_C
+-# if defined __cplusplus
+-#  define _GL_WARN_EXTERN_C extern "C"
+-# else
+-#  define _GL_WARN_EXTERN_C extern
+-# endif
+-#endif
+diff -Naurp libiconv-1.14.org//build-aux/warn-on-use.h libiconv-1.14/build-aux/warn-on-use.h
+--- libiconv-1.14.org//build-aux/warn-on-use.h	1969-12-31 16:00:00.000000000 -0800
++++ libiconv-1.14/build-aux/warn-on-use.h	2012-01-08 02:07:39.950484439 -0800
+@@ -0,0 +1,109 @@
++/* A C macro for emitting warnings if a function is used.
++   Copyright (C) 2010-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
++
++/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
++   for FUNCTION which will then trigger a compiler warning containing
++   the text of "literal string" anywhere that function is called, if
++   supported by the compiler.  If the compiler does not support this
++   feature, the macro expands to an unused extern declaration.
++
++   This macro is useful for marking a function as a potential
++   portability trap, with the intent that "literal string" include
++   instructions on the replacement function that should be used
++   instead.  However, one of the reasons that a function is a
++   portability trap is if it has the wrong signature.  Declaring
++   FUNCTION with a different signature in C is a compilation error, so
++   this macro must use the same type as any existing declaration so
++   that programs that avoid the problematic FUNCTION do not fail to
++   compile merely because they included a header that poisoned the
++   function.  But this implies that _GL_WARN_ON_USE is only safe to
++   use if FUNCTION is known to already have a declaration.  Use of
++   this macro implies that there must not be any other macro hiding
++   the declaration of FUNCTION; but undefining FUNCTION first is part
++   of the poisoning process anyway (although for symbols that are
++   provided only via a macro, the result is a compilation error rather
++   than a warning containing "literal string").  Also note that in
++   C++, it is only safe to use if FUNCTION has no overloads.
++
++   For an example, it is possible to poison 'getline' by:
++   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
++     [getline]) in configure.ac, which potentially defines
++     HAVE_RAW_DECL_GETLINE
++   - adding this code to a header that wraps the system <stdio.h>:
++     #undef getline
++     #if HAVE_RAW_DECL_GETLINE
++     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
++       "not universally present; use the gnulib module getline");
++     #endif
++
++   It is not possible to directly poison global variables.  But it is
++   possible to write a wrapper accessor function, and poison that
++   (less common usage, like &environ, will cause a compilation error
++   rather than issue the nice warning, but the end result of informing
++   the developer about their portability problem is still achieved):
++   #if HAVE_RAW_DECL_ENVIRON
++   static inline char ***rpl_environ (void) { return &environ; }
++   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
++   # undef environ
++   # define environ (*rpl_environ ())
++   #endif
++   */
++#ifndef _GL_WARN_ON_USE
++
++# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
++/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
++#  define _GL_WARN_ON_USE(function, message) \
++extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
++# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
++/* Verify the existence of the function.  */
++#  define _GL_WARN_ON_USE(function, message) \
++extern __typeof__ (function) function
++# else /* Unsupported.  */
++#  define _GL_WARN_ON_USE(function, message) \
++_GL_WARN_EXTERN_C int _gl_warn_on_use
++# endif
++#endif
++
++/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
++   is like _GL_WARN_ON_USE (function, "string"), except that the function is
++   declared with the given prototype, consisting of return type, parameters,
++   and attributes.
++   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
++   not work in this case.  */
++#ifndef _GL_WARN_ON_USE_CXX
++# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
++#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
++extern rettype function parameters_and_attributes \
++     __attribute__ ((__warning__ (msg)))
++# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
++/* Verify the existence of the function.  */
++#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
++extern rettype function parameters_and_attributes
++# else /* Unsupported.  */
++#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
++_GL_WARN_EXTERN_C int _gl_warn_on_use
++# endif
++#endif
++
++/* _GL_WARN_EXTERN_C declaration;
++   performs the declaration with C linkage.  */
++#ifndef _GL_WARN_EXTERN_C
++# if defined __cplusplus
++#  define _GL_WARN_EXTERN_C extern "C"
++# else
++#  define _GL_WARN_EXTERN_C extern
++# endif
++#endif
+diff -Naurp libiconv-1.14.org//srclib/allocator.h libiconv-1.14/srclib/allocator.h
+--- libiconv-1.14.org//srclib/allocator.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/allocator.h	2012-01-08 02:07:40.050484444 -0800
+@@ -45,11 +45,10 @@ struct allocator
+   /* Call FREE to free memory, like 'free'.  */
+   void (*free) (void *);
+ 
+-  /* If nonnull, call DIE (SIZE) if MALLOC (SIZE) or REALLOC (...,
+-     SIZE) fails.  DIE should not return.  SIZE should equal SIZE_MAX
+-     if size_t overflow was detected while calculating sizes to be
+-     passed to MALLOC or REALLOC.  */
+-  void (*die) (size_t);
++  /* If nonnull, call DIE if MALLOC or REALLOC fails.  DIE should not
++     return.  DIE can be used by code that detects memory overflow
++     while calculating sizes to be passed to MALLOC or REALLOC.  */
++  void (*die) (void);
+ };
+ 
+ /* An allocator using the stdlib functions and a null DIE function.  */
+diff -Naurp libiconv-1.14.org//srclib/canonicalize-lgpl.c libiconv-1.14/srclib/canonicalize-lgpl.c
+--- libiconv-1.14.org//srclib/canonicalize-lgpl.c	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/canonicalize-lgpl.c	2012-01-08 02:07:40.094484446 -0800
+@@ -125,7 +125,7 @@ __realpath (const char *name, char *reso
+ #else
+   path_max = pathconf (name, _PC_PATH_MAX);
+   if (path_max <= 0)
+-    path_max = 8192;
++    path_max = 1024;
+ #endif
+ 
+   if (resolved == NULL)
+diff -Naurp libiconv-1.14.org//srclib/careadlinkat.c libiconv-1.14/srclib/careadlinkat.c
+--- libiconv-1.14.org//srclib/careadlinkat.c	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/careadlinkat.c	2012-01-08 02:07:40.102484445 -0800
+@@ -133,7 +133,6 @@ careadlinkat (int fd, char const *filena
+           if (buf == stack_buf)
+             {
+               char *b = (char *) alloc->allocate (link_size);
+-              buf_size = link_size;
+               if (! b)
+                 break;
+               memcpy (b, buf, link_size);
+@@ -157,11 +156,6 @@ careadlinkat (int fd, char const *filena
+         buf_size *= 2;
+       else if (buf_size < buf_size_max)
+         buf_size = buf_size_max;
+-      else if (buf_size_max < SIZE_MAX)
+-        {
+-          errno = ENAMETOOLONG;
+-          return NULL;
+-        }
+       else
+         break;
+       buf = (char *) alloc->allocate (buf_size);
+@@ -169,7 +163,7 @@ careadlinkat (int fd, char const *filena
+   while (buf);
+ 
+   if (alloc->die)
+-    alloc->die (buf_size);
++    alloc->die ();
+   errno = ENOMEM;
+   return NULL;
+ }
+diff -Naurp libiconv-1.14.org//srclib/errno.in.h libiconv-1.14/srclib/errno.in.h
+--- libiconv-1.14.org//srclib/errno.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/errno.in.h	2012-01-08 02:07:40.122484446 -0800
+@@ -16,7 +16,7 @@
+    along with this program; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+ 
+-#ifndef _@GUARD_PREFIX@_ERRNO_H
++#ifndef _GL_ERRNO_H
+ 
+ #if __GNUC__ >= 3
+ @PRAGMA_SYSTEM_HEADER@
+@@ -26,8 +26,8 @@
+ /* The include_next requires a split double-inclusion guard.  */
+ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@
+ 
+-#ifndef _@GUARD_PREFIX@_ERRNO_H
+-#define _@GUARD_PREFIX@_ERRNO_H
++#ifndef _GL_ERRNO_H
++#define _GL_ERRNO_H
+ 
+ 
+ /* On native Windows platforms, many macros are not defined.  */
+@@ -147,16 +147,6 @@
+ #  define GNULIB_defined_ENOTSUP 1
+ # endif
+ 
+-# ifndef ENETRESET
+-#  define ENETRESET 2011
+-#  define GNULIB_defined_ENETRESET 1
+-# endif
+-
+-# ifndef ECONNABORTED
+-#  define ECONNABORTED 2012
+-#  define GNULIB_defined_ECONNABORTED 1
+-# endif
+-
+ # ifndef ESTALE
+ #  define ESTALE    2009
+ #  define GNULIB_defined_ESTALE 1
+@@ -173,5 +163,5 @@
+ # endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_ERRNO_H */
+-#endif /* _@GUARD_PREFIX@_ERRNO_H */
++#endif /* _GL_ERRNO_H */
++#endif /* _GL_ERRNO_H */
+diff -Naurp libiconv-1.14.org//srclib/error.c libiconv-1.14/srclib/error.c
+--- libiconv-1.14.org//srclib/error.c	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/error.c	2012-01-08 02:07:40.134484448 -0800
+@@ -97,15 +97,11 @@ extern void __error_at_line (int status,
+ /* The gnulib override of fcntl is not needed in this file.  */
+ # undef fcntl
+ 
+-# if !HAVE_DECL_STRERROR_R
++# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
+ #  ifndef HAVE_DECL_STRERROR_R
+ "this configure-time declaration test was not run"
+ #  endif
+-#  if STRERROR_R_CHAR_P
+ char *strerror_r ();
+-#  else
+-int strerror_r ();
+-#  endif
+ # endif
+ 
+ /* The calling program should define program_name and set it to the
+diff -Naurp libiconv-1.14.org//srclib/fcntl.in.h libiconv-1.14/srclib/fcntl.in.h
+--- libiconv-1.14.org//srclib/fcntl.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/fcntl.in.h	2012-01-08 02:07:40.154484449 -0800
+@@ -40,7 +40,7 @@
+ #else
+ /* Normal invocation convention.  */
+ 
+-#ifndef _@GUARD_PREFIX@_FCNTL_H
++#ifndef _GL_FCNTL_H
+ 
+ #include <sys/types.h>
+ /* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+@@ -55,8 +55,8 @@
+ /* The include_next requires a split double-inclusion guard.  */
+ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@
+ 
+-#ifndef _@GUARD_PREFIX@_FCNTL_H
+-#define _@GUARD_PREFIX@_FCNTL_H
++#ifndef _GL_FCNTL_H
++#define _GL_FCNTL_H
+ 
+ #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
+ # include <unistd.h>
+@@ -320,6 +320,6 @@ _GL_WARN_ON_USE (openat, "openat is not
+ #endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_FCNTL_H */
+-#endif /* _@GUARD_PREFIX@_FCNTL_H */
++#endif /* _GL_FCNTL_H */
++#endif /* _GL_FCNTL_H */
+ #endif
+diff -Naurp libiconv-1.14.org//srclib/intprops.h libiconv-1.14/srclib/intprops.h
+--- libiconv-1.14.org//srclib/intprops.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/intprops.h	2012-01-08 02:07:40.174484450 -0800
+@@ -22,13 +22,14 @@
+ 
+ #include <limits.h>
+ 
+-/* Return an integer value, converted to the same type as the integer
+-   expression E after integer type promotion.  V is the unconverted value.  */
+-#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
++/* Return a integer value, converted to the same type as the integer
++   expression E after integer type promotion.  V is the unconverted value.
++   E should not have side effects.  */
++#define _GL_INT_CONVERT(e, v) ((e) - (e) + (v))
+ 
+ /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
+    <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>.  */
+-#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v))
++#define _GL_INT_NEGATE_CONVERT(e, v) ((e) - (e) - (v))
+ 
+ /* The extra casts in the following macros work around compiler bugs,
+    e.g., in Cray C 5.0.3.0.  */
+@@ -52,7 +53,7 @@
+ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+ 
+ /* Return 1 if the integer expression E, after integer promotion, has
+-   a signed type.  */
++   a signed type.  E should not have side effects.  */
+ #define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
+ 
+ 
+@@ -310,10 +311,13 @@
+ /* Return 1 if the expression A <op> B would overflow,
+    where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
+    assuming MIN and MAX are the minimum and maximum for the result type.
+-   Arguments should be free of side effects.  */
++
++   This macro assumes that A | B is a valid integer if both A and B are,
++   which is true of all known practical hosts.  If this is a problem
++   for you, please let us know how to fix it for your host.  */
+ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow)        \
+   op_result_overflow (a, b,                                     \
+-                      _GL_INT_MINIMUM (0 * (b) + (a)),          \
+-                      _GL_INT_MAXIMUM (0 * (b) + (a)))
++                      _GL_INT_MINIMUM ((a) | (b)),              \
++                      _GL_INT_MAXIMUM ((a) | (b)))
+ 
+ #endif /* _GL_INTPROPS_H */
+diff -Naurp libiconv-1.14.org//srclib/Makefile.gnulib libiconv-1.14/srclib/Makefile.gnulib
+--- libiconv-1.14.org//srclib/Makefile.gnulib	2012-01-08 02:05:18.754477606 -0800
++++ libiconv-1.14/srclib/Makefile.gnulib	2012-01-08 02:07:43.138484592 -0800
+@@ -9,7 +9,7 @@
+ # the same distribution terms as the rest of that program.
+ #
+ # Generated by gnulib-tool.
+-# Reproduce by: gnulib-tool --import --dir=. --local-dir=gnulib-local --lib=libicrt --source-base=srclib --m4-base=srcm4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --makefile-name=Makefile.gnulib --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files binary-io error gettext gettext-h libiconv-misc mbstate memmove progname relocatable-prog safe-read sigpipe stdio stdlib strerror unistd uniwidth/width unlocked-io xalloc
++# Reproduce by: gnulib-tool --import --dir=. --local-dir=gnulib-local --lib=libicrt --source-base=srclib --m4-base=srcm4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --makefile-name=Makefile.gnulib --no-libtool --macro-prefix=gl --no-vc-files binary-io error gettext gettext-h libiconv-misc mbstate memmove progname relocatable relocatable-prog safe-read sigpipe stdio stdlib strerror unistd uniwidth/width unlocked-io xalloc
+ 
+ 
+ MOSTLYCLEANFILES += core *.stackdump
+@@ -60,12 +60,60 @@ EXTRA_DIST += areadlink.h
+ 
+ ## end   gnulib module areadlink
+ 
++## begin gnulib module arg-nonnull
++
++# The BUILT_SOURCES created by this Makefile snippet are not used via #include
++# statements but through direct file reference. Therefore this snippet must be
++# present in all Makefile.am that need it. This is ensured by the applicability
++# 'all' defined above.
++
++BUILT_SOURCES += arg-nonnull.h
++# The arg-nonnull.h that gets inserted into generated .h files is the same as
++# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
++arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h
++	$(AM_V_GEN)rm -f $@-t $@ && \
++	sed -n -e '/GL_ARG_NONNULL/,$$p' \
++	  < $(top_srcdir)/build-aux/arg-nonnull.h \
++	  > $@-t && \
++	mv $@-t $@
++MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
++
++ARG_NONNULL_H=arg-nonnull.h
++
++EXTRA_DIST += $(top_srcdir)/build-aux/arg-nonnull.h
++
++## end   gnulib module arg-nonnull
++
+ ## begin gnulib module binary-io
+ 
+ libicrt_a_SOURCES += binary-io.h
+ 
+ ## end   gnulib module binary-io
+ 
++## begin gnulib module c++defs
++
++# The BUILT_SOURCES created by this Makefile snippet are not used via #include
++# statements but through direct file reference. Therefore this snippet must be
++# present in all Makefile.am that need it. This is ensured by the applicability
++# 'all' defined above.
++
++BUILT_SOURCES += c++defs.h
++# The c++defs.h that gets inserted into generated .h files is the same as
++# build-aux/c++defs.h, except that it has the copyright header cut off.
++c++defs.h: $(top_srcdir)/build-aux/c++defs.h
++	$(AM_V_GEN)rm -f $@-t $@ && \
++	sed -n -e '/_GL_CXXDEFS/,$$p' \
++	  < $(top_srcdir)/build-aux/c++defs.h \
++	  > $@-t && \
++	mv $@-t $@
++MOSTLYCLEANFILES += c++defs.h c++defs.h-t
++
++CXXDEFS_H=c++defs.h
++
++EXTRA_DIST += $(top_srcdir)/build-aux/c++defs.h
++
++## end   gnulib module c++defs
++
+ ## begin gnulib module canonicalize-lgpl
+ 
+ 
+@@ -100,8 +148,7 @@ if GL_GENERATE_ERRNO_H
+ errno.h: errno.in.h $(top_builddir)/config.status
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+@@ -142,15 +189,14 @@ BUILT_SOURCES += fcntl.h
+ fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+-	      -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \
+-	      -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \
+-	      -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \
+-	      -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \
++	      -e 's|@''GNULIB_FCNTL''@|$(GNULIB_FCNTL)|g' \
++	      -e 's|@''GNULIB_NONBLOCKING''@|$(GNULIB_NONBLOCKING)|g' \
++	      -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \
++	      -e 's|@''GNULIB_OPENAT''@|$(GNULIB_OPENAT)|g' \
+ 	      -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+ 	      -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+ 	      -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+@@ -297,7 +343,7 @@ EXTRA_DIST += $(top_srcdir)/build-aux/co
+ ## begin gnulib module relocatable-prog-wrapper
+ 
+ 
+-EXTRA_DIST += allocator.c allocator.h areadlink.c areadlink.h c-ctype.c c-ctype.h canonicalize-lgpl.c careadlinkat.c careadlinkat.h malloca.c malloca.h progname.c progname.h progreloc.c readlink.c relocatable.c relocatable.h relocwrapper.c setenv.c
++EXTRA_DIST += allocator.c allocator.h areadlink.c areadlink.h c-ctype.c c-ctype.h canonicalize-lgpl.c careadlinkat.c careadlinkat.h malloca.c malloca.h progname.c progname.h progreloc.c readlink.c relocatable.c relocatable.h relocwrapper.c setenv.c strerror.c
+ 
+ EXTRA_DIST += $(top_srcdir)/build-aux/install-reloc
+ 
+@@ -305,9 +351,10 @@ EXTRA_DIST += $(top_srcdir)/build-aux/in
+ 
+ ## begin gnulib module safe-read
+ 
+-libicrt_a_SOURCES += safe-read.c
+ 
+-EXTRA_DIST += safe-read.h
++EXTRA_DIST += safe-read.c safe-read.h
++
++EXTRA_libicrt_a_SOURCES += safe-read.c
+ 
+ ## end   gnulib module safe-read
+ 
+@@ -320,24 +367,20 @@ BUILT_SOURCES += signal.h
+ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \
+-	      -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \
+-	      -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \
+-	      -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
+-	      -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
++	      -e 's|@''GNULIB_SIGNAL_H_SIGPIPE''@|$(GNULIB_SIGNAL_H_SIGPIPE)|g' \
++	      -e 's|@''GNULIB_SIGPROCMASK''@|$(GNULIB_SIGPROCMASK)|g' \
++	      -e 's|@''GNULIB_SIGACTION''@|$(GNULIB_SIGACTION)|g' \
+ 	      -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
+-	      -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \
+ 	      -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \
+ 	      -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \
+ 	      -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \
+ 	      -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \
+ 	      -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \
+ 	      -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \
+-	      -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \
+ 	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ 	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ 	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+@@ -368,87 +411,6 @@ EXTRA_libicrt_a_SOURCES += sigprocmask.c
+ 
+ ## end   gnulib module sigprocmask
+ 
+-## begin gnulib module snippet/_Noreturn
+-
+-# Because this Makefile snippet defines a variable used by other
+-# gnulib Makefile snippets, it must be present in all Makefile.am that
+-# need it. This is ensured by the applicability 'all' defined above.
+-
+-_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h
+-
+-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h
+-
+-## end   gnulib module snippet/_Noreturn
+-
+-## begin gnulib module snippet/arg-nonnull
+-
+-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+-# statements but through direct file reference. Therefore this snippet must be
+-# present in all Makefile.am that need it. This is ensured by the applicability
+-# 'all' defined above.
+-
+-BUILT_SOURCES += arg-nonnull.h
+-# The arg-nonnull.h that gets inserted into generated .h files is the same as
+-# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
+-# off.
+-arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+-	$(AM_V_GEN)rm -f $@-t $@ && \
+-	sed -n -e '/GL_ARG_NONNULL/,$$p' \
+-	  < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
+-	  > $@-t && \
+-	mv $@-t $@
+-MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
+-
+-ARG_NONNULL_H=arg-nonnull.h
+-
+-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+-
+-## end   gnulib module snippet/arg-nonnull
+-
+-## begin gnulib module snippet/c++defs
+-
+-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+-# statements but through direct file reference. Therefore this snippet must be
+-# present in all Makefile.am that need it. This is ensured by the applicability
+-# 'all' defined above.
+-
+-BUILT_SOURCES += c++defs.h
+-# The c++defs.h that gets inserted into generated .h files is the same as
+-# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
+-c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
+-	$(AM_V_GEN)rm -f $@-t $@ && \
+-	sed -n -e '/_GL_CXXDEFS/,$$p' \
+-	  < $(top_srcdir)/build-aux/snippet/c++defs.h \
+-	  > $@-t && \
+-	mv $@-t $@
+-MOSTLYCLEANFILES += c++defs.h c++defs.h-t
+-
+-CXXDEFS_H=c++defs.h
+-
+-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h
+-
+-## end   gnulib module snippet/c++defs
+-
+-## begin gnulib module snippet/warn-on-use
+-
+-BUILT_SOURCES += warn-on-use.h
+-# The warn-on-use.h that gets inserted into generated .h files is the same as
+-# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
+-# off.
+-warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
+-	$(AM_V_GEN)rm -f $@-t $@ && \
+-	sed -n -e '/^.ifndef/,$$p' \
+-	  < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
+-	  > $@-t && \
+-	mv $@-t $@
+-MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
+-
+-WARN_ON_USE_H=warn-on-use.h
+-
+-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h
+-
+-## end   gnulib module snippet/warn-on-use
+-
+ ## begin gnulib module stat
+ 
+ 
+@@ -491,8 +453,7 @@ if GL_GENERATE_STDDEF_H
+ stddef.h: stddef.in.h $(top_builddir)/config.status
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+@@ -521,8 +482,7 @@ if GL_GENERATE_STDINT_H
+ stdint.h: stdint.in.h $(top_builddir)/config.status
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
++	  sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+ 	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@@ -570,63 +530,62 @@ BUILT_SOURCES += stdio.h
+ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+-	      -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
+-	      -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
+-	      -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
+-	      -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
+-	      -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
+-	      -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
+-	      -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
+-	      -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
+-	      -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
+-	      -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
+-	      -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
+-	      -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
+-	      -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
+-	      -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
+-	      -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
+-	      -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
+-	      -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
+-	      -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
+-	      -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
+-	      -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
+-	      -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
+-	      -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
+-	      -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
+-	      -e 's/@''GNULIB_GETS''@/$(GNULIB_GETS)/g' \
+-	      -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
+-	      -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+-	      -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
+-	      -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
+-	      -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
+-	      -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
+-	      -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
+-	      -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
+-	      -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
+-	      -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
+-	      -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
+-	      -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
+-	      -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
+-	      -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
+-	      -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
+-	      -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
+-	      -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
+-	      -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
+-	      -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
+-	      -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
+-	      -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
+-	      -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
+-	      -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
+-	      -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
+-	      -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
+-	      -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
+-	      -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
+-	      -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
++	      -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \
++	      -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \
++	      -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \
++	      -e 's|@''GNULIB_FGETC''@|$(GNULIB_FGETC)|g' \
++	      -e 's|@''GNULIB_FGETS''@|$(GNULIB_FGETS)|g' \
++	      -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \
++	      -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \
++	      -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \
++	      -e 's|@''GNULIB_FPURGE''@|$(GNULIB_FPURGE)|g' \
++	      -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \
++	      -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \
++	      -e 's|@''GNULIB_FREAD''@|$(GNULIB_FREAD)|g' \
++	      -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \
++	      -e 's|@''GNULIB_FSCANF''@|$(GNULIB_FSCANF)|g' \
++	      -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \
++	      -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \
++	      -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \
++	      -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \
++	      -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \
++	      -e 's|@''GNULIB_GETC''@|$(GNULIB_GETC)|g' \
++	      -e 's|@''GNULIB_GETCHAR''@|$(GNULIB_GETCHAR)|g' \
++	      -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
++	      -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \
++	      -e 's|@''GNULIB_GETS''@|$(GNULIB_GETS)|g' \
++	      -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \
++	      -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \
++	      -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \
++	      -e 's|@''GNULIB_POPEN''@|$(GNULIB_POPEN)|g' \
++	      -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \
++	      -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \
++	      -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \
++	      -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \
++	      -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \
++	      -e 's|@''GNULIB_REMOVE''@|$(GNULIB_REMOVE)|g' \
++	      -e 's|@''GNULIB_RENAME''@|$(GNULIB_RENAME)|g' \
++	      -e 's|@''GNULIB_RENAMEAT''@|$(GNULIB_RENAMEAT)|g' \
++	      -e 's|@''GNULIB_SCANF''@|$(GNULIB_SCANF)|g' \
++	      -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
++	      -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \
++	      -e 's|@''GNULIB_STDIO_H_NONBLOCKING''@|$(GNULIB_STDIO_H_NONBLOCKING)|g' \
++	      -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \
++	      -e 's|@''GNULIB_TMPFILE''@|$(GNULIB_TMPFILE)|g' \
++	      -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \
++	      -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \
++	      -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \
++	      -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
++	      -e 's|@''GNULIB_VFSCANF''@|$(GNULIB_VFSCANF)|g' \
++	      -e 's|@''GNULIB_VSCANF''@|$(GNULIB_VSCANF)|g' \
++	      -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
++	      -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
++	      -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
++	      -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \
+ 	      < $(srcdir)/stdio.in.h | \
+ 	  sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+ 	      -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+@@ -691,43 +650,41 @@ BUILT_SOURCES += stdlib.h
+ 
+ # We need the following in order to create <stdlib.h> when the system
+ # doesn't have one that works with the given compiler.
+-stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
+-  $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
++stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+-	      -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \
+-	      -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \
+-	      -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \
+-	      -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \
+-	      -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \
+-	      -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \
+-	      -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \
+-	      -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \
+-	      -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \
+-	      -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \
+-	      -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \
+-	      -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \
+-	      -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \
+-	      -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \
+-	      -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
+-	      -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
+-	      -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
+-	      -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
+-	      -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
+-	      -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
+-	      -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
+-	      -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
+-	      -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \
+-	      -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \
+-	      -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \
+-	      -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \
+-	      -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \
+-	      -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \
++	      -e 's|@''GNULIB__EXIT''@|$(GNULIB__EXIT)|g' \
++	      -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
++	      -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
++	      -e 's|@''GNULIB_CANONICALIZE_FILE_NAME''@|$(GNULIB_CANONICALIZE_FILE_NAME)|g' \
++	      -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
++	      -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
++	      -e 's|@''GNULIB_GRANTPT''@|$(GNULIB_GRANTPT)|g' \
++	      -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
++	      -e 's|@''GNULIB_MBTOWC''@|$(GNULIB_MBTOWC)|g' \
++	      -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
++	      -e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
++	      -e 's|@''GNULIB_MKOSTEMPS''@|$(GNULIB_MKOSTEMPS)|g' \
++	      -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
++	      -e 's|@''GNULIB_MKSTEMPS''@|$(GNULIB_MKSTEMPS)|g' \
++	      -e 's|@''GNULIB_PTSNAME''@|$(GNULIB_PTSNAME)|g' \
++	      -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
++	      -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
++	      -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
++	      -e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \
++	      -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
++	      -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
++	      -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
++	      -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
++	      -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
++	      -e 's|@''GNULIB_SYSTEM_POSIX''@|$(GNULIB_SYSTEM_POSIX)|g' \
++	      -e 's|@''GNULIB_UNLOCKPT''@|$(GNULIB_UNLOCKPT)|g' \
++	      -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
++	      -e 's|@''GNULIB_WCTOMB''@|$(GNULIB_WCTOMB)|g' \
+ 	      < $(srcdir)/stdlib.in.h | \
+ 	  sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
+ 	      -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+@@ -766,7 +723,6 @@ stdlib.h: stdlib.in.h $(top_builddir)/co
+ 	      -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+ 	      -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
+ 	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+-	      -e '/definition of _Noreturn/r $(_NORETURN_H)' \
+ 	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ 	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+ 	} > $@-t && \
+@@ -793,15 +749,6 @@ EXTRA_libicrt_a_SOURCES += strerror.c
+ 
+ ## end   gnulib module strerror
+ 
+-## begin gnulib module strerror-override
+-
+-
+-EXTRA_DIST += strerror-override.c strerror-override.h
+-
+-EXTRA_libicrt_a_SOURCES += strerror-override.c
+-
+-## end   gnulib module strerror-override
+-
+ ## begin gnulib module string
+ 
+ BUILT_SOURCES += string.h
+@@ -811,52 +758,47 @@ BUILT_SOURCES += string.h
+ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+-	      -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+-	      -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+-	      -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+-	      -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+-	      -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+-	      -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+-	      -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+-	      -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+-	      -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+-	      -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+-	      -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+-	      -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+-	      -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+-	      -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+-	      -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+-	      -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+-	      -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+-	      -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+-	      -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+-	      -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+-	      -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+-	      -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+-	      -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+-	      -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+-	      -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+-	      -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+-	      -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+-	      -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+-	      -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+-	      -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+-	      -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+-	      -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+-	      -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+-	      -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+-	      -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+-	      -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+-	      -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
++	      -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
++	      -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
++	      -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
++	      -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
++	      -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
++	      -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
++	      -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
++	      -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
++	      -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
++	      -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
++	      -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
++	      -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
++	      -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
++	      -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
++	      -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \
++	      -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
++	      -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
++	      -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
++	      -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
++	      -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
++	      -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
++	      -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
++	      -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
++	      -e 's|@''GNULIB_STRNCAT''@|$(GNULIB_STRNCAT)|g' \
++	      -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
++	      -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
++	      -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
++	      -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
++	      -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
++	      -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
++	      -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
++	      -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
++	      -e 's|@''GNULIB_STRERROR_R''@|$(GNULIB_STRERROR_R)|g' \
++	      -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
++	      -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
+ 	      < $(srcdir)/string.in.h | \
+-	  sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+-	      -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+-	      -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
++	  sed -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+ 	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+ 	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+ 	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+@@ -912,23 +854,22 @@ sys/stat.h: sys_stat.in.h $(top_builddir
+ 	$(AM_V_at)$(MKDIR_P) sys
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+-	      -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
+-	      -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
+-	      -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \
+-	      -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \
+-	      -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \
+-	      -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \
+-	      -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \
+-	      -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \
+-	      -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \
+-	      -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
+-	      -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
+-	      -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
++	      -e 's|@''GNULIB_FCHMODAT''@|$(GNULIB_FCHMODAT)|g' \
++	      -e 's|@''GNULIB_FSTATAT''@|$(GNULIB_FSTATAT)|g' \
++	      -e 's|@''GNULIB_FUTIMENS''@|$(GNULIB_FUTIMENS)|g' \
++	      -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
++	      -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
++	      -e 's|@''GNULIB_MKDIRAT''@|$(GNULIB_MKDIRAT)|g' \
++	      -e 's|@''GNULIB_MKFIFO''@|$(GNULIB_MKFIFO)|g' \
++	      -e 's|@''GNULIB_MKFIFOAT''@|$(GNULIB_MKFIFOAT)|g' \
++	      -e 's|@''GNULIB_MKNOD''@|$(GNULIB_MKNOD)|g' \
++	      -e 's|@''GNULIB_MKNODAT''@|$(GNULIB_MKNODAT)|g' \
++	      -e 's|@''GNULIB_STAT''@|$(GNULIB_STAT)|g' \
++	      -e 's|@''GNULIB_UTIMENSAT''@|$(GNULIB_UTIMENSAT)|g' \
+ 	      -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+ 	      -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+ 	      -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+@@ -971,16 +912,15 @@ BUILT_SOURCES += time.h
+ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
++	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+-	      -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
+-	      -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
+-	      -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
+-	      -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
+-	      -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
++	      -e 's|@''GNULIB_MKTIME''@|$(GNULIB_MKTIME)|g' \
++	      -e 's|@''GNULIB_NANOSLEEP''@|$(GNULIB_NANOSLEEP)|g' \
++	      -e 's|@''GNULIB_STRPTIME''@|$(GNULIB_STRPTIME)|g' \
++	      -e 's|@''GNULIB_TIMEGM''@|$(GNULIB_TIMEGM)|g' \
++	      -e 's|@''GNULIB_TIME_R''@|$(GNULIB_TIME_R)|g' \
+ 	      -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
+ 	      -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
+ 	      -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
+@@ -1013,56 +953,55 @@ BUILT_SOURCES += unistd.h
+ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ 	$(AM_V_GEN)rm -f $@-t $@ && \
+ 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+-	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+-	      -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
++	  sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+ 	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ 	      -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+-	      -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
+-	      -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
+-	      -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
+-	      -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
+-	      -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
+-	      -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
+-	      -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
+-	      -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
+-	      -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
+-	      -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
+-	      -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
+-	      -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
+-	      -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
+-	      -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
+-	      -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
+-	      -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
+-	      -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
+-	      -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
+-	      -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
+-	      -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
+-	      -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
+-	      -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
+-	      -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
+-	      -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
+-	      -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
+-	      -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
+-	      -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
+-	      -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
+-	      -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
+-	      -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
+-	      -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
+-	      -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
+-	      -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
+-	      -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
+-	      -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
+-	      -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
+-	      -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
+-	      -e 's/@''GNULIB_UNISTD_H_GETOPT''@/$(GNULIB_UNISTD_H_GETOPT)/g' \
+-	      -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
+-	      -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
+-	      -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
+-	      -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
+-	      -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
+-	      -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
++	      -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
++	      -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
++	      -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
++	      -e 's|@''GNULIB_DUP3''@|$(GNULIB_DUP3)|g' \
++	      -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
++	      -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
++	      -e 's|@''GNULIB_FACCESSAT''@|$(GNULIB_FACCESSAT)|g' \
++	      -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
++	      -e 's|@''GNULIB_FCHOWNAT''@|$(GNULIB_FCHOWNAT)|g' \
++	      -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
++	      -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
++	      -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
++	      -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
++	      -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
++	      -e 's|@''GNULIB_GETGROUPS''@|$(GNULIB_GETGROUPS)|g' \
++	      -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
++	      -e 's|@''GNULIB_GETLOGIN''@|$(GNULIB_GETLOGIN)|g' \
++	      -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
++	      -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
++	      -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
++	      -e 's|@''GNULIB_GROUP_MEMBER''@|$(GNULIB_GROUP_MEMBER)|g' \
++	      -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
++	      -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
++	      -e 's|@''GNULIB_LINKAT''@|$(GNULIB_LINKAT)|g' \
++	      -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
++	      -e 's|@''GNULIB_PIPE''@|$(GNULIB_PIPE)|g' \
++	      -e 's|@''GNULIB_PIPE2''@|$(GNULIB_PIPE2)|g' \
++	      -e 's|@''GNULIB_PREAD''@|$(GNULIB_PREAD)|g' \
++	      -e 's|@''GNULIB_PWRITE''@|$(GNULIB_PWRITE)|g' \
++	      -e 's|@''GNULIB_READ''@|$(GNULIB_READ)|g' \
++	      -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
++	      -e 's|@''GNULIB_READLINKAT''@|$(GNULIB_READLINKAT)|g' \
++	      -e 's|@''GNULIB_RMDIR''@|$(GNULIB_RMDIR)|g' \
++	      -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
++	      -e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \
++	      -e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \
++	      -e 's|@''GNULIB_TTYNAME_R''@|$(GNULIB_TTYNAME_R)|g' \
++	      -e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|g' \
++	      -e 's|@''GNULIB_UNISTD_H_NONBLOCKING''@|$(GNULIB_UNISTD_H_NONBLOCKING)|g' \
++	      -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
++	      -e 's|@''GNULIB_UNLINK''@|$(GNULIB_UNLINK)|g' \
++	      -e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
++	      -e 's|@''GNULIB_USLEEP''@|$(GNULIB_USLEEP)|g' \
++	      -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
+ 	      < $(srcdir)/unistd.in.h | \
+ 	  sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+ 	      -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+@@ -1198,6 +1137,25 @@ EXTRA_DIST += verify.h
+ 
+ ## end   gnulib module verify
+ 
++## begin gnulib module warn-on-use
++
++BUILT_SOURCES += warn-on-use.h
++# The warn-on-use.h that gets inserted into generated .h files is the same as
++# build-aux/warn-on-use.h, except that it has the copyright header cut off.
++warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h
++	$(AM_V_GEN)rm -f $@-t $@ && \
++	sed -n -e '/^.ifndef/,$$p' \
++	  < $(top_srcdir)/build-aux/warn-on-use.h \
++	  > $@-t && \
++	mv $@-t $@
++MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
++
++WARN_ON_USE_H=warn-on-use.h
++
++EXTRA_DIST += $(top_srcdir)/build-aux/warn-on-use.h
++
++## end   gnulib module warn-on-use
++
+ ## begin gnulib module xalloc
+ 
+ libicrt_a_SOURCES += xalloc.h xmalloc.c xstrdup.c
+diff -Naurp libiconv-1.14.org//srclib/pathmax.h libiconv-1.14/srclib/pathmax.h
+--- libiconv-1.14.org//srclib/pathmax.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/pathmax.h	2012-01-08 02:07:40.218484451 -0800
+@@ -19,27 +19,6 @@
+ #ifndef _PATHMAX_H
+ # define _PATHMAX_H
+ 
+-/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename,
+-   including the terminating NUL byte.
+-   <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html>
+-   PATH_MAX is not defined on systems which have no limit on filename length,
+-   such as GNU/Hurd.
+-
+-   This file does *not* define PATH_MAX always.  Programs that use this file
+-   can handle the GNU/Hurd case in several ways:
+-     - Either with a package-wide handling, or with a per-file handling,
+-     - Either through a
+-         #ifdef PATH_MAX
+-       or through a fallback like
+-         #ifndef PATH_MAX
+-         # define PATH_MAX 8192
+-         #endif
+-       or through a fallback like
+-         #ifndef PATH_MAX
+-         # define PATH_MAX pathconf ("/", _PC_PATH_MAX)
+-         #endif
+- */
+-
+ # include <unistd.h>
+ 
+ # include <limits.h>
+@@ -48,6 +27,11 @@
+ #  define _POSIX_PATH_MAX 256
+ # endif
+ 
++# if !defined PATH_MAX && defined _PC_PATH_MAX && defined HAVE_PATHCONF
++#  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>
+@@ -57,13 +41,8 @@
+ #  define PATH_MAX MAXPATHLEN
+ # endif
+ 
+-# ifdef __hpux
+-/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename,
+-   *not* including the terminating NUL byte, and is set to 1023.
+-   Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is
+-   not defined at all any more.  */
+-#  undef PATH_MAX
+-#  define PATH_MAX 1024
++# ifndef PATH_MAX
++#  define PATH_MAX _POSIX_PATH_MAX
+ # endif
+ 
+ #endif /* _PATHMAX_H */
+diff -Naurp libiconv-1.14.org//srclib/relocwrapper.c libiconv-1.14/srclib/relocwrapper.c
+--- libiconv-1.14.org//srclib/relocwrapper.c	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/relocwrapper.c	2012-01-08 02:07:40.282484455 -0800
+@@ -29,6 +29,7 @@
+     -> relocatable
+     -> setenv
+        -> malloca
++    -> strerror
+     -> c-ctype
+ 
+    Macros that need to be set while compiling this file:
+diff -Naurp libiconv-1.14.org//srclib/safe-read.h libiconv-1.14/srclib/safe-read.h
+--- libiconv-1.14.org//srclib/safe-read.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/safe-read.h	2012-01-08 02:07:40.298484455 -0800
+@@ -14,19 +14,6 @@
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+ 
+-/* Some system calls may be interrupted and fail with errno = EINTR in the
+-   following situations:
+-     - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user
+-       types Ctrl-Z) on some platforms: MacOS X.
+-     - The process receives a signal for which a signal handler was installed
+-       with sigaction() with an sa_flags field that does not contain
+-       SA_RESTART.
+-     - The process receives a signal for which a signal handler was installed
+-       with signal() and for which no call to siginterrupt(sig,0) was done,
+-       on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris.
+-
+-   This module provides a wrapper around read() that handles EINTR.  */
+-
+ #include <stddef.h>
+ 
+ #ifdef __cplusplus
+diff -Naurp libiconv-1.14.org//srclib/signal.in.h libiconv-1.14/srclib/signal.in.h
+--- libiconv-1.14.org//srclib/signal.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/signal.in.h	2012-01-08 02:07:40.314484456 -0800
+@@ -20,49 +20,21 @@
+ #endif
+ @PRAGMA_COLUMNS@
+ 
+-#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
+-/* Special invocation convention:
+-   - Inside glibc header files.
+-   - On glibc systems we have a sequence of nested includes
+-     <signal.h> -> <ucontext.h> -> <signal.h>.
+-     In this situation, the functions are not yet declared, therefore we cannot
+-     provide the C++ aliases.
+-   - On glibc systems with GCC 4.3 we have a sequence of nested includes
+-     <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>.
+-     In this situation, some of the functions are not yet declared, therefore
+-     we cannot provide the C++ aliases.  */
++#if defined __need_sig_atomic_t || defined __need_sigset_t
++/* Special invocation convention inside glibc header files.  */
+ 
+ # @INCLUDE_NEXT@ @NEXT_SIGNAL_H@
+ 
+ #else
+ /* Normal invocation convention.  */
+ 
+-#ifndef _@GUARD_PREFIX@_SIGNAL_H
+-
+-#define _GL_ALREADY_INCLUDING_SIGNAL_H
+-
+-/* Define pid_t, uid_t.
+-   Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
+-   On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes
+-   us; so include <sys/types.h> now, before the second inclusion guard.  */
+-#include <sys/types.h>
++#ifndef _GL_SIGNAL_H
+ 
+ /* The include_next requires a split double-inclusion guard.  */
+ #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@
+ 
+-#undef _GL_ALREADY_INCLUDING_SIGNAL_H
+-
+-#ifndef _@GUARD_PREFIX@_SIGNAL_H
+-#define _@GUARD_PREFIX@_SIGNAL_H
+-
+-/* MacOS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare
+-   pthread_sigmask in <pthread.h>, not in <signal.h>.
+-   But avoid namespace pollution on glibc systems.*/
+-#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \
+-    && ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ || defined __sun) \
+-    && ! defined __GLIBC__
+-# include <pthread.h>
+-#endif
++#ifndef _GL_SIGNAL_H
++#define _GL_SIGNAL_H
+ 
+ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+ 
+@@ -70,6 +42,10 @@
+ 
+ /* The definition of _GL_WARN_ON_USE is copied here.  */
+ 
++/* Define pid_t, uid_t.
++   Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.  */
++#include <sys/types.h>
++
+ /* On AIX, sig_atomic_t already includes volatile.  C99 requires that
+    'volatile sig_atomic_t' ignore the extra modifier, but C89 did not.
+    Hence, redefine this to a non-volatile type as needed.  */
+@@ -124,34 +100,6 @@ typedef void (*sighandler_t) (int);
+ #endif
+ 
+ 
+-#if @GNULIB_PTHREAD_SIGMASK@
+-# if @REPLACE_PTHREAD_SIGMASK@
+-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-#   undef pthread_sigmask
+-#   define pthread_sigmask rpl_pthread_sigmask
+-#  endif
+-_GL_FUNCDECL_RPL (pthread_sigmask, int,
+-                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+-_GL_CXXALIAS_RPL (pthread_sigmask, int,
+-                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+-# else
+-#  if !@HAVE_PTHREAD_SIGMASK@
+-_GL_FUNCDECL_SYS (pthread_sigmask, int,
+-                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+-#  endif
+-_GL_CXXALIAS_SYS (pthread_sigmask, int,
+-                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+-# endif
+-_GL_CXXALIASWARN (pthread_sigmask);
+-#elif defined GNULIB_POSIXCHECK
+-# undef pthread_sigmask
+-# if HAVE_RAW_DECL_PTHREAD_SIGMASK
+-_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - "
+-                 "use gnulib module pthread_sigmask for portability");
+-# endif
+-#endif
+-
+-
+ #if @GNULIB_SIGPROCMASK@
+ # if !@HAVE_POSIX_SIGNALBLOCKING@
+ 
+@@ -423,6 +371,6 @@ _GL_WARN_ON_USE (sigaction, "sigaction i
+ #endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_SIGNAL_H */
+-#endif /* _@GUARD_PREFIX@_SIGNAL_H */
++#endif /* _GL_SIGNAL_H */
++#endif /* _GL_SIGNAL_H */
+ #endif
+diff -Naurp libiconv-1.14.org//srclib/stat.c libiconv-1.14/srclib/stat.c
+--- libiconv-1.14.org//srclib/stat.c	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/stat.c	2012-01-08 02:07:40.330484457 -0800
+@@ -38,7 +38,6 @@ orig_stat (const char *filename, struct
+ #include <stdbool.h>
+ #include <string.h>
+ #include "dosname.h"
+-#include "verify.h"
+ 
+ /* Store information about NAME into ST.  Work around bugs with
+    trailing slashes.  Mingw has other bugs (such as st_ino always
+@@ -64,12 +63,6 @@ rpl_stat (char const *name, struct stat
+     }
+ #endif /* REPLACE_FUNC_STAT_FILE */
+ #if REPLACE_FUNC_STAT_DIR
+-  /* The only known systems where REPLACE_FUNC_STAT_DIR is needed also
+-     have a constant PATH_MAX.  */
+-# ifndef PATH_MAX
+-#  error "Please port this replacement to your platform"
+-# endif
+-
+   if (result == -1 && errno == ENOENT)
+     {
+       /* Due to mingw's oddities, there are some directories (like
+@@ -84,7 +77,6 @@ rpl_stat (char const *name, struct stat
+       char fixed_name[PATH_MAX + 1] = {0};
+       size_t len = strlen (name);
+       bool check_dir = false;
+-      verify (PATH_MAX <= 4096);
+       if (PATH_MAX <= len)
+         errno = ENAMETOOLONG;
+       else if (len)
+diff -Naurp libiconv-1.14.org//srclib/stddef.in.h libiconv-1.14/srclib/stddef.in.h
+--- libiconv-1.14.org//srclib/stddef.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/stddef.in.h	2012-01-08 02:07:40.346484458 -0800
+@@ -38,9 +38,9 @@
+    remember if special invocation has ever been used to obtain wint_t,
+    in which case we need to clean up NULL yet again.  */
+ 
+-# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
++# if !(defined _GL_STDDEF_H && defined _GL_STDDEF_WINT_T)
+ #  ifdef __need_wint_t
+-#   undef _@GUARD_PREFIX@_STDDEF_H
++#   undef _GL_STDDEF_H
+ #   define _GL_STDDEF_WINT_T
+ #  endif
+ #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+@@ -49,14 +49,14 @@
+ #else
+ /* Normal invocation convention.  */
+ 
+-# ifndef _@GUARD_PREFIX@_STDDEF_H
++# ifndef _GL_STDDEF_H
+ 
+ /* The include_next requires a split double-inclusion guard.  */
+ 
+ #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+ 
+-#  ifndef _@GUARD_PREFIX@_STDDEF_H
+-#   define _@GUARD_PREFIX@_STDDEF_H
++#  ifndef _GL_STDDEF_H
++#   define _GL_STDDEF_H
+ 
+ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
+ #if @REPLACE_NULL@
+@@ -82,6 +82,6 @@
+ # define wchar_t int
+ #endif
+ 
+-#  endif /* _@GUARD_PREFIX@_STDDEF_H */
+-# endif /* _@GUARD_PREFIX@_STDDEF_H */
++#  endif /* _GL_STDDEF_H */
++# endif /* _GL_STDDEF_H */
+ #endif /* __need_XXX */
+diff -Naurp libiconv-1.14.org//srclib/stdint.in.h libiconv-1.14/srclib/stdint.in.h
+--- libiconv-1.14.org//srclib/stdint.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/stdint.in.h	2012-01-08 02:07:40.358484458 -0800
+@@ -21,7 +21,7 @@
+  * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+  */
+ 
+-#ifndef _@GUARD_PREFIX@_STDINT_H
++#ifndef _GL_STDINT_H
+ 
+ #if __GNUC__ >= 3
+ @PRAGMA_SYSTEM_HEADER@
+@@ -52,13 +52,13 @@
+   /* Other systems may have an incomplete or buggy <stdint.h>.
+      Include it before <inttypes.h>, since any "#include <stdint.h>"
+      in <inttypes.h> would reinclude us, skipping our contents because
+-     _@GUARD_PREFIX@_STDINT_H is defined.
++     _GL_STDINT_H is defined.
+      The include_next requires a split double-inclusion guard.  */
+ # @INCLUDE_NEXT@ @NEXT_STDINT_H@
+ #endif
+ 
+-#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+-#define _@GUARD_PREFIX@_STDINT_H
++#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
++#define _GL_STDINT_H
+ 
+ /* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+    IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+@@ -270,36 +270,26 @@ typedef unsigned long int gl_uintptr_t;
+ /* Note: These types are compiler dependent. It may be unwise to use them in
+    public header files. */
+ 
+-/* If the system defines INTMAX_MAX, assume that intmax_t works, and
+-   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
+-   assuming one type where another is used by the system.  */
+-
+-#ifndef INTMAX_MAX
+-# undef INTMAX_C
+-# undef intmax_t
+-# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
++#undef intmax_t
++#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+ typedef long long int gl_intmax_t;
+-#  define intmax_t gl_intmax_t
+-# elif defined GL_INT64_T
+-#  define intmax_t int64_t
+-# else
++# define intmax_t gl_intmax_t
++#elif defined GL_INT64_T
++# define intmax_t int64_t
++#else
+ typedef long int gl_intmax_t;
+-#  define intmax_t gl_intmax_t
+-# endif
++# define intmax_t gl_intmax_t
+ #endif
+ 
+-#ifndef UINTMAX_MAX
+-# undef UINTMAX_C
+-# undef uintmax_t
+-# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
++#undef uintmax_t
++#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+ typedef unsigned long long int gl_uintmax_t;
+-#  define uintmax_t gl_uintmax_t
+-# elif defined GL_UINT64_T
+-#  define uintmax_t uint64_t
+-# else
++# define uintmax_t gl_uintmax_t
++#elif defined GL_UINT64_T
++# define uintmax_t uint64_t
++#else
+ typedef unsigned long int gl_uintmax_t;
+-#  define uintmax_t gl_uintmax_t
+-# endif
++# define uintmax_t gl_uintmax_t
+ #endif
+ 
+ /* Verify that intmax_t and uintmax_t have the same size.  Too much code
+@@ -441,23 +431,21 @@ typedef int _verify_intmax_size[sizeof (
+ 
+ /* 7.18.2.5. Limits of greatest-width integer types */
+ 
+-#ifndef INTMAX_MAX
+-# undef INTMAX_MIN
+-# ifdef INT64_MAX
+-#  define INTMAX_MIN  INT64_MIN
+-#  define INTMAX_MAX  INT64_MAX
+-# else
+-#  define INTMAX_MIN  INT32_MIN
+-#  define INTMAX_MAX  INT32_MAX
+-# endif
++#undef INTMAX_MIN
++#undef INTMAX_MAX
++#ifdef INT64_MAX
++# define INTMAX_MIN  INT64_MIN
++# define INTMAX_MAX  INT64_MAX
++#else
++# define INTMAX_MIN  INT32_MIN
++# define INTMAX_MAX  INT32_MAX
+ #endif
+ 
+-#ifndef UINTMAX_MAX
+-# ifdef UINT64_MAX
+-#  define UINTMAX_MAX  UINT64_MAX
+-# else
+-#  define UINTMAX_MAX  UINT32_MAX
+-# endif
++#undef UINTMAX_MAX
++#ifdef UINT64_MAX
++# define UINTMAX_MAX  UINT64_MAX
++#else
++# define UINTMAX_MAX  UINT32_MAX
+ #endif
+ 
+ /* 7.18.3. Limits of other integer types */
+@@ -580,27 +568,25 @@ typedef int _verify_intmax_size[sizeof (
+ 
+ /* 7.18.4.2. Macros for greatest-width integer constants */
+ 
+-#ifndef INTMAX_C
+-# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+-#  define INTMAX_C(x)   x##LL
+-# elif defined GL_INT64_T
+-#  define INTMAX_C(x)   INT64_C(x)
+-# else
+-#  define INTMAX_C(x)   x##L
+-# endif
++#undef INTMAX_C
++#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
++# define INTMAX_C(x)   x##LL
++#elif defined GL_INT64_T
++# define INTMAX_C(x)   INT64_C(x)
++#else
++# define INTMAX_C(x)   x##L
+ #endif
+ 
+-#ifndef UINTMAX_C
+-# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+-#  define UINTMAX_C(x)  x##ULL
+-# elif defined GL_UINT64_T
+-#  define UINTMAX_C(x)  UINT64_C(x)
+-# else
+-#  define UINTMAX_C(x)  x##UL
+-# endif
++#undef UINTMAX_C
++#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
++# define UINTMAX_C(x)  x##ULL
++#elif defined GL_UINT64_T
++# define UINTMAX_C(x)  UINT64_C(x)
++#else
++# define UINTMAX_C(x)  x##UL
+ #endif
+ 
+ #endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
+ 
+-#endif /* _@GUARD_PREFIX@_STDINT_H */
+-#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
++#endif /* _GL_STDINT_H */
++#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
+diff -Naurp libiconv-1.14.org//srclib/stdio.in.h libiconv-1.14/srclib/stdio.in.h
+--- libiconv-1.14.org//srclib/stdio.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/stdio.in.h	2012-01-08 02:07:40.378484459 -0800
+@@ -35,7 +35,7 @@
+ #else
+ /* Normal invocation convention.  */
+ 
+-#ifndef _@GUARD_PREFIX@_STDIO_H
++#ifndef _GL_STDIO_H
+ 
+ #define _GL_ALREADY_INCLUDING_STDIO_H
+ 
+@@ -44,8 +44,8 @@
+ 
+ #undef _GL_ALREADY_INCLUDING_STDIO_H
+ 
+-#ifndef _@GUARD_PREFIX@_STDIO_H
+-#define _@GUARD_PREFIX@_STDIO_H
++#ifndef _GL_STDIO_H
++#define _GL_STDIO_H
+ 
+ /* Get va_list.  Needed on many systems, including glibc 2.8.  */
+ #include <stdarg.h>
+@@ -461,6 +461,25 @@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp
+ _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
+ # endif
+ _GL_CXXALIASWARN (fseeko);
++# if (@REPLACE_FSEEKO@ || !@HAVE_FSEEKO@) && !@GNULIB_FSEEK@
++   /* Provide an fseek function that is consistent with fseeko.  */
++   /* In order to avoid that fseek gets defined as a macro here, the
++      developer can request the 'fseek' module.  */
++#  if !GNULIB_defined_fseek_function
++#   undef fseek
++#   define fseek rpl_fseek
++static inline int _GL_ARG_NONNULL ((1))
++rpl_fseek (FILE *fp, long offset, int whence)
++{
++#   if @REPLACE_FSEEKO@
++  return rpl_fseeko (fp, offset, whence);
++#   else
++  return fseeko (fp, offset, whence);
++#   endif
++}
++#   define GNULIB_defined_fseek_function 1
++#  endif
++# endif
+ #elif defined GNULIB_POSIXCHECK
+ # define _GL_FSEEK_WARN /* Category 1, above.  */
+ # undef fseek
+@@ -520,6 +539,25 @@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *
+ _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
+ # endif
+ _GL_CXXALIASWARN (ftello);
++# if (@REPLACE_FTELLO@ || !@HAVE_FTELLO@) && !@GNULIB_FTELL@
++   /* Provide an ftell function that is consistent with ftello.  */
++   /* In order to avoid that ftell gets defined as a macro here, the
++      developer can request the 'ftell' module.  */
++#  if !GNULIB_defined_ftell_function
++#   undef ftell
++#   define ftell rpl_ftell
++static inline long _GL_ARG_NONNULL ((1))
++rpl_ftell (FILE *f)
++{
++#   if @REPLACE_FTELLO@
++  return rpl_ftello (f);
++#   else
++  return ftello (f);
++#   endif
++}
++#   define GNULIB_defined_ftell_function 1
++#  endif
++# endif
+ #elif defined GNULIB_POSIXCHECK
+ # define _GL_FTELL_WARN /* Category 1, above.  */
+ # undef ftell
+@@ -1307,6 +1345,6 @@ _GL_WARN_ON_USE (vsprintf, "vsprintf is
+ #endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_STDIO_H */
+-#endif /* _@GUARD_PREFIX@_STDIO_H */
++#endif /* _GL_STDIO_H */
++#endif /* _GL_STDIO_H */
+ #endif
+diff -Naurp libiconv-1.14.org//srclib/stdlib.in.h libiconv-1.14/srclib/stdlib.in.h
+--- libiconv-1.14.org//srclib/stdlib.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/stdlib.in.h	2012-01-08 02:07:40.390484459 -0800
+@@ -28,13 +28,13 @@
+ #else
+ /* Normal invocation convention.  */
+ 
+-#ifndef _@GUARD_PREFIX@_STDLIB_H
++#ifndef _GL_STDLIB_H
+ 
+ /* The include_next requires a split double-inclusion guard.  */
+ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+ 
+-#ifndef _@GUARD_PREFIX@_STDLIB_H
+-#define _@GUARD_PREFIX@_STDLIB_H
++#ifndef _GL_STDLIB_H
++#define _GL_STDLIB_H
+ 
+ /* NetBSD 5.0 mis-defines NULL.  */
+ #include <stddef.h>
+@@ -89,7 +89,11 @@ struct random_data
+ # include <unistd.h>
+ #endif
+ 
+-/* The definition of _Noreturn is copied here.  */
++#if 3 <= __GNUC__ || __GNUC__ == 2 && 8 <= __GNUC_MINOR__
++# define _GL_ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
++#else
++# define _GL_ATTRIBUTE_NORETURN
++#endif
+ 
+ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+ 
+@@ -116,7 +120,7 @@ struct random_data
+ /* Terminate the current process with the given return code, without running
+    the 'atexit' handlers.  */
+ # if !@HAVE__EXIT@
+-_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status));
++_GL_FUNCDECL_SYS (_Exit, void, (int status) _GL_ATTRIBUTE_NORETURN);
+ # endif
+ _GL_CXXALIAS_SYS (_Exit, void, (int status));
+ _GL_CXXALIASWARN (_Exit);
+@@ -757,6 +761,6 @@ _GL_CXXALIASWARN (wctomb);
+ #endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_STDLIB_H */
+-#endif /* _@GUARD_PREFIX@_STDLIB_H */
++#endif /* _GL_STDLIB_H */
++#endif /* _GL_STDLIB_H */
+ #endif
+diff -Naurp libiconv-1.14.org//srclib/strerror.c libiconv-1.14/srclib/strerror.c
+--- libiconv-1.14.org//srclib/strerror.c	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/strerror.c	2012-01-08 02:07:40.406484461 -0800
+@@ -17,54 +17,340 @@
+ 
+ #include <config.h>
+ 
+-/* Specification.  */
+ #include <string.h>
+ 
+-#include <errno.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
++#if REPLACE_STRERROR
++
++# include <errno.h>
++# include <stdio.h>
++
++# if GNULIB_defined_ESOCK /* native Windows platforms */
++#  if HAVE_WINSOCK2_H
++#   include <winsock2.h>
++#  endif
++# endif
+ 
+-#include "intprops.h"
+-#include "strerror-override.h"
+-#include "verify.h"
++# include "intprops.h"
+ 
+ /* Use the system functions, not the gnulib overrides in this file.  */
+-#undef sprintf
++# undef sprintf
++
++# undef strerror
++# if ! HAVE_DECL_STRERROR
++#  define strerror(n) NULL
++# endif
+ 
+ char *
+-strerror (int n)
+-#undef strerror
++rpl_strerror (int n)
+ {
+-  static char buf[STACKBUF_LEN];
+-  size_t len;
++  char const *msg = NULL;
++  /* These error messages are taken from glibc/sysdeps/gnu/errlist.c.  */
++  switch (n)
++    {
++# if GNULIB_defined_ETXTBSY
++    case ETXTBSY:
++      msg = "Text file busy";
++      break;
++# endif
++
++# if GNULIB_defined_ESOCK /* native Windows platforms */
++    /* EWOULDBLOCK is the same as EAGAIN.  */
++    case EINPROGRESS:
++      msg = "Operation now in progress";
++      break;
++    case EALREADY:
++      msg = "Operation already in progress";
++      break;
++    case ENOTSOCK:
++      msg = "Socket operation on non-socket";
++      break;
++    case EDESTADDRREQ:
++      msg = "Destination address required";
++      break;
++    case EMSGSIZE:
++      msg = "Message too long";
++      break;
++    case EPROTOTYPE:
++      msg = "Protocol wrong type for socket";
++      break;
++    case ENOPROTOOPT:
++      msg = "Protocol not available";
++      break;
++    case EPROTONOSUPPORT:
++      msg = "Protocol not supported";
++      break;
++    case ESOCKTNOSUPPORT:
++      msg = "Socket type not supported";
++      break;
++    case EOPNOTSUPP:
++      msg = "Operation not supported";
++      break;
++    case EPFNOSUPPORT:
++      msg = "Protocol family not supported";
++      break;
++    case EAFNOSUPPORT:
++      msg = "Address family not supported by protocol";
++      break;
++    case EADDRINUSE:
++      msg = "Address already in use";
++      break;
++    case EADDRNOTAVAIL:
++      msg = "Cannot assign requested address";
++      break;
++    case ENETDOWN:
++      msg = "Network is down";
++      break;
++    case ENETUNREACH:
++      msg = "Network is unreachable";
++      break;
++    case ENETRESET:
++      msg = "Network dropped connection on reset";
++      break;
++    case ECONNABORTED:
++      msg = "Software caused connection abort";
++      break;
++    case ECONNRESET:
++      msg = "Connection reset by peer";
++      break;
++    case ENOBUFS:
++      msg = "No buffer space available";
++      break;
++    case EISCONN:
++      msg = "Transport endpoint is already connected";
++      break;
++    case ENOTCONN:
++      msg = "Transport endpoint is not connected";
++      break;
++    case ESHUTDOWN:
++      msg = "Cannot send after transport endpoint shutdown";
++      break;
++    case ETOOMANYREFS:
++      msg = "Too many references: cannot splice";
++      break;
++    case ETIMEDOUT:
++      msg = "Connection timed out";
++      break;
++    case ECONNREFUSED:
++      msg = "Connection refused";
++      break;
++    case ELOOP:
++      msg = "Too many levels of symbolic links";
++      break;
++    case EHOSTDOWN:
++      msg = "Host is down";
++      break;
++    case EHOSTUNREACH:
++      msg = "No route to host";
++      break;
++    case EPROCLIM:
++      msg = "Too many processes";
++      break;
++    case EUSERS:
++      msg = "Too many users";
++      break;
++    case EDQUOT:
++      msg = "Disk quota exceeded";
++      break;
++    case ESTALE:
++      msg = "Stale NFS file handle";
++      break;
++    case EREMOTE:
++      msg = "Object is remote";
++      break;
++#  if HAVE_WINSOCK2_H
++    /* WSA_INVALID_HANDLE maps to EBADF */
++    /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
++    /* WSA_INVALID_PARAMETER maps to EINVAL */
++    case WSA_OPERATION_ABORTED:
++      msg = "Overlapped operation aborted";
++      break;
++    case WSA_IO_INCOMPLETE:
++      msg = "Overlapped I/O event object not in signaled state";
++      break;
++    case WSA_IO_PENDING:
++      msg = "Overlapped operations will complete later";
++      break;
++    /* WSAEINTR maps to EINTR */
++    /* WSAEBADF maps to EBADF */
++    /* WSAEACCES maps to EACCES */
++    /* WSAEFAULT maps to EFAULT */
++    /* WSAEINVAL maps to EINVAL */
++    /* WSAEMFILE maps to EMFILE */
++    /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
++    /* WSAEINPROGRESS is EINPROGRESS */
++    /* WSAEALREADY is EALREADY */
++    /* WSAENOTSOCK is ENOTSOCK */
++    /* WSAEDESTADDRREQ is EDESTADDRREQ */
++    /* WSAEMSGSIZE is EMSGSIZE */
++    /* WSAEPROTOTYPE is EPROTOTYPE */
++    /* WSAENOPROTOOPT is ENOPROTOOPT */
++    /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */
++    /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
++    /* WSAEOPNOTSUPP is EOPNOTSUPP */
++    /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
++    /* WSAEAFNOSUPPORT is EAFNOSUPPORT */
++    /* WSAEADDRINUSE is EADDRINUSE */
++    /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */
++    /* WSAENETDOWN is ENETDOWN */
++    /* WSAENETUNREACH is ENETUNREACH */
++    /* WSAENETRESET is ENETRESET */
++    /* WSAECONNABORTED is ECONNABORTED */
++    /* WSAECONNRESET is ECONNRESET */
++    /* WSAENOBUFS is ENOBUFS */
++    /* WSAEISCONN is EISCONN */
++    /* WSAENOTCONN is ENOTCONN */
++    /* WSAESHUTDOWN is ESHUTDOWN */
++    /* WSAETOOMANYREFS is ETOOMANYREFS */
++    /* WSAETIMEDOUT is ETIMEDOUT */
++    /* WSAECONNREFUSED is ECONNREFUSED */
++    /* WSAELOOP is ELOOP */
++    /* WSAENAMETOOLONG maps to ENAMETOOLONG */
++    /* WSAEHOSTDOWN is EHOSTDOWN */
++    /* WSAEHOSTUNREACH is EHOSTUNREACH */
++    /* WSAENOTEMPTY maps to ENOTEMPTY */
++    /* WSAEPROCLIM is EPROCLIM */
++    /* WSAEUSERS is EUSERS */
++    /* WSAEDQUOT is EDQUOT */
++    /* WSAESTALE is ESTALE */
++    /* WSAEREMOTE is EREMOTE */
++    case WSASYSNOTREADY:
++      msg = "Network subsystem is unavailable";
++      break;
++    case WSAVERNOTSUPPORTED:
++      msg = "Winsock.dll version out of range";
++      break;
++    case WSANOTINITIALISED:
++      msg = "Successful WSAStartup not yet performed";
++      break;
++    case WSAEDISCON:
++      msg = "Graceful shutdown in progress";
++      break;
++    case WSAENOMORE: case WSA_E_NO_MORE:
++      msg = "No more results";
++      break;
++    case WSAECANCELLED: case WSA_E_CANCELLED:
++      msg = "Call was canceled";
++      break;
++    case WSAEINVALIDPROCTABLE:
++      msg = "Procedure call table is invalid";
++      break;
++    case WSAEINVALIDPROVIDER:
++      msg = "Service provider is invalid";
++      break;
++    case WSAEPROVIDERFAILEDINIT:
++      msg = "Service provider failed to initialize";
++      break;
++    case WSASYSCALLFAILURE:
++      msg = "System call failure";
++      break;
++    case WSASERVICE_NOT_FOUND:
++      msg = "Service not found";
++      break;
++    case WSATYPE_NOT_FOUND:
++      msg = "Class type not found";
++      break;
++    case WSAEREFUSED:
++      msg = "Database query was refused";
++      break;
++    case WSAHOST_NOT_FOUND:
++      msg = "Host not found";
++      break;
++    case WSATRY_AGAIN:
++      msg = "Nonauthoritative host not found";
++      break;
++    case WSANO_RECOVERY:
++      msg = "Nonrecoverable error";
++      break;
++    case WSANO_DATA:
++      msg = "Valid name, no data record of requested type";
++      break;
++    /* WSA_QOS_* omitted */
++#  endif
++# endif
++
++# if GNULIB_defined_ENOMSG
++    case ENOMSG:
++      msg = "No message of desired type";
++      break;
++# endif
++
++# if GNULIB_defined_EIDRM
++    case EIDRM:
++      msg = "Identifier removed";
++      break;
++# endif
++
++# if GNULIB_defined_ENOLINK
++    case ENOLINK:
++      msg = "Link has been severed";
++      break;
++# endif
++
++# if GNULIB_defined_EPROTO
++    case EPROTO:
++      msg = "Protocol error";
++      break;
++# endif
++
++# if GNULIB_defined_EMULTIHOP
++    case EMULTIHOP:
++      msg = "Multihop attempted";
++      break;
++# endif
++
++# if GNULIB_defined_EBADMSG
++    case EBADMSG:
++      msg = "Bad message";
++      break;
++# endif
++
++# if GNULIB_defined_EOVERFLOW
++    case EOVERFLOW:
++      msg = "Value too large for defined data type";
++      break;
++# endif
++
++# if GNULIB_defined_ENOTSUP
++    case ENOTSUP:
++      msg = "Not supported";
++      break;
++# endif
++
++# if GNULIB_defined_ESTALE
++    case ESTALE:
++      msg = "Stale NFS file handle";
++      break;
++# endif
++
++# if GNULIB_defined_EDQUOT
++    case EDQUOT:
++      msg = "Disk quota exceeded";
++      break;
++# endif
++
++# if GNULIB_defined_ECANCELED
++    case ECANCELED:
++      msg = "Operation canceled";
++      break;
++# endif
++    }
+ 
+-  /* Cast away const, due to the historical signature of strerror;
+-     callers should not be modifying the string.  */
+-  const char *msg = strerror_override (n);
+   if (msg)
+     return (char *) msg;
+ 
+-  msg = strerror (n);
++  {
++    char *result = strerror (n);
+ 
+-  /* Our strerror_r implementation might use the system's strerror
+-     buffer, so all other clients of strerror have to see the error
+-     copied into a buffer that we manage.  This is not thread-safe,
+-     even if the system strerror is, but portable programs shouldn't
+-     be using strerror if they care about thread-safety.  */
+-  if (!msg || !*msg)
+-    {
+-      static char const fmt[] = "Unknown error %d";
+-      verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n));
+-      sprintf (buf, fmt, n);
+-      errno = EINVAL;
+-      return buf;
+-    }
++    if (result == NULL || result[0] == '\0')
++      {
++        static char const fmt[] = "Unknown error (%d)";
++        static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)];
++        sprintf (msg_buf, fmt, n);
++        return msg_buf;
++      }
+ 
+-  /* Fix STACKBUF_LEN if this ever aborts.  */
+-  len = strlen (msg);
+-  if (sizeof buf <= len)
+-    abort ();
+-
+-  return memcpy (buf, msg, len + 1);
++    return result;
++  }
+ }
++
++#endif
+diff -Naurp libiconv-1.14.org//srclib/strerror-override.c libiconv-1.14/srclib/strerror-override.c
+--- libiconv-1.14.org//srclib/strerror-override.c	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/strerror-override.c	1969-12-31 16:00:00.000000000 -0800
+@@ -1,279 +0,0 @@
+-/* strerror-override.c --- POSIX compatible system error routine
+-
+-   Copyright (C) 2010-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+-
+-/* Written by Bruno Haible <bruno@clisp.org>, 2010.  */
+-
+-#include <config.h>
+-
+-#include "strerror-override.h"
+-
+-#include <errno.h>
+-
+-#if GNULIB_defined_ESOCK /* native Windows platforms */
+-# if HAVE_WINSOCK2_H
+-#  include <winsock2.h>
+-# endif
+-#endif
+-
+-/* If ERRNUM maps to an errno value defined by gnulib, return a string
+-   describing the error.  Otherwise return NULL.  */
+-const char *
+-strerror_override (int errnum)
+-{
+-  /* These error messages are taken from glibc/sysdeps/gnu/errlist.c.  */
+-  switch (errnum)
+-    {
+-#if REPLACE_STRERROR_0
+-    case 0:
+-      return "Success";
+-#endif
+-
+-#if GNULIB_defined_ETXTBSY
+-    case ETXTBSY:
+-      return "Text file busy";
+-#endif
+-
+-#if GNULIB_defined_ESOCK /* native Windows platforms */
+-      /* EWOULDBLOCK is the same as EAGAIN.  */
+-    case EINPROGRESS:
+-      return "Operation now in progress";
+-    case EALREADY:
+-      return "Operation already in progress";
+-    case ENOTSOCK:
+-      return "Socket operation on non-socket";
+-    case EDESTADDRREQ:
+-      return "Destination address required";
+-    case EMSGSIZE:
+-      return "Message too long";
+-    case EPROTOTYPE:
+-      return "Protocol wrong type for socket";
+-    case ENOPROTOOPT:
+-      return "Protocol not available";
+-    case EPROTONOSUPPORT:
+-      return "Protocol not supported";
+-    case ESOCKTNOSUPPORT:
+-      return "Socket type not supported";
+-    case EOPNOTSUPP:
+-      return "Operation not supported";
+-    case EPFNOSUPPORT:
+-      return "Protocol family not supported";
+-    case EAFNOSUPPORT:
+-      return "Address family not supported by protocol";
+-    case EADDRINUSE:
+-      return "Address already in use";
+-    case EADDRNOTAVAIL:
+-      return "Cannot assign requested address";
+-    case ENETDOWN:
+-      return "Network is down";
+-    case ENETUNREACH:
+-      return "Network is unreachable";
+-    case ENETRESET:
+-      return "Network dropped connection on reset";
+-    case ECONNABORTED:
+-      return "Software caused connection abort";
+-    case ECONNRESET:
+-      return "Connection reset by peer";
+-    case ENOBUFS:
+-      return "No buffer space available";
+-    case EISCONN:
+-      return "Transport endpoint is already connected";
+-    case ENOTCONN:
+-      return "Transport endpoint is not connected";
+-    case ESHUTDOWN:
+-      return "Cannot send after transport endpoint shutdown";
+-    case ETOOMANYREFS:
+-      return "Too many references: cannot splice";
+-    case ETIMEDOUT:
+-      return "Connection timed out";
+-    case ECONNREFUSED:
+-      return "Connection refused";
+-    case ELOOP:
+-      return "Too many levels of symbolic links";
+-    case EHOSTDOWN:
+-      return "Host is down";
+-    case EHOSTUNREACH:
+-      return "No route to host";
+-    case EPROCLIM:
+-      return "Too many processes";
+-    case EUSERS:
+-      return "Too many users";
+-    case EDQUOT:
+-      return "Disk quota exceeded";
+-    case ESTALE:
+-      return "Stale NFS file handle";
+-    case EREMOTE:
+-      return "Object is remote";
+-# if HAVE_WINSOCK2_H
+-      /* WSA_INVALID_HANDLE maps to EBADF */
+-      /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
+-      /* WSA_INVALID_PARAMETER maps to EINVAL */
+-    case WSA_OPERATION_ABORTED:
+-      return "Overlapped operation aborted";
+-    case WSA_IO_INCOMPLETE:
+-      return "Overlapped I/O event object not in signaled state";
+-    case WSA_IO_PENDING:
+-      return "Overlapped operations will complete later";
+-      /* WSAEINTR maps to EINTR */
+-      /* WSAEBADF maps to EBADF */
+-      /* WSAEACCES maps to EACCES */
+-      /* WSAEFAULT maps to EFAULT */
+-      /* WSAEINVAL maps to EINVAL */
+-      /* WSAEMFILE maps to EMFILE */
+-      /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
+-      /* WSAEINPROGRESS is EINPROGRESS */
+-      /* WSAEALREADY is EALREADY */
+-      /* WSAENOTSOCK is ENOTSOCK */
+-      /* WSAEDESTADDRREQ is EDESTADDRREQ */
+-      /* WSAEMSGSIZE is EMSGSIZE */
+-      /* WSAEPROTOTYPE is EPROTOTYPE */
+-      /* WSAENOPROTOOPT is ENOPROTOOPT */
+-      /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */
+-      /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
+-      /* WSAEOPNOTSUPP is EOPNOTSUPP */
+-      /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
+-      /* WSAEAFNOSUPPORT is EAFNOSUPPORT */
+-      /* WSAEADDRINUSE is EADDRINUSE */
+-      /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */
+-      /* WSAENETDOWN is ENETDOWN */
+-      /* WSAENETUNREACH is ENETUNREACH */
+-      /* WSAENETRESET is ENETRESET */
+-      /* WSAECONNABORTED is ECONNABORTED */
+-      /* WSAECONNRESET is ECONNRESET */
+-      /* WSAENOBUFS is ENOBUFS */
+-      /* WSAEISCONN is EISCONN */
+-      /* WSAENOTCONN is ENOTCONN */
+-      /* WSAESHUTDOWN is ESHUTDOWN */
+-      /* WSAETOOMANYREFS is ETOOMANYREFS */
+-      /* WSAETIMEDOUT is ETIMEDOUT */
+-      /* WSAECONNREFUSED is ECONNREFUSED */
+-      /* WSAELOOP is ELOOP */
+-      /* WSAENAMETOOLONG maps to ENAMETOOLONG */
+-      /* WSAEHOSTDOWN is EHOSTDOWN */
+-      /* WSAEHOSTUNREACH is EHOSTUNREACH */
+-      /* WSAENOTEMPTY maps to ENOTEMPTY */
+-      /* WSAEPROCLIM is EPROCLIM */
+-      /* WSAEUSERS is EUSERS */
+-      /* WSAEDQUOT is EDQUOT */
+-      /* WSAESTALE is ESTALE */
+-      /* WSAEREMOTE is EREMOTE */
+-    case WSASYSNOTREADY:
+-      return "Network subsystem is unavailable";
+-    case WSAVERNOTSUPPORTED:
+-      return "Winsock.dll version out of range";
+-    case WSANOTINITIALISED:
+-      return "Successful WSAStartup not yet performed";
+-    case WSAEDISCON:
+-      return "Graceful shutdown in progress";
+-    case WSAENOMORE: case WSA_E_NO_MORE:
+-      return "No more results";
+-    case WSAECANCELLED: case WSA_E_CANCELLED:
+-      return "Call was canceled";
+-    case WSAEINVALIDPROCTABLE:
+-      return "Procedure call table is invalid";
+-    case WSAEINVALIDPROVIDER:
+-      return "Service provider is invalid";
+-    case WSAEPROVIDERFAILEDINIT:
+-      return "Service provider failed to initialize";
+-    case WSASYSCALLFAILURE:
+-      return "System call failure";
+-    case WSASERVICE_NOT_FOUND:
+-      return "Service not found";
+-    case WSATYPE_NOT_FOUND:
+-      return "Class type not found";
+-    case WSAEREFUSED:
+-      return "Database query was refused";
+-    case WSAHOST_NOT_FOUND:
+-      return "Host not found";
+-    case WSATRY_AGAIN:
+-      return "Nonauthoritative host not found";
+-    case WSANO_RECOVERY:
+-      return "Nonrecoverable error";
+-    case WSANO_DATA:
+-      return "Valid name, no data record of requested type";
+-      /* WSA_QOS_* omitted */
+-# endif
+-#endif
+-
+-#if GNULIB_defined_ENOMSG
+-    case ENOMSG:
+-      return "No message of desired type";
+-#endif
+-
+-#if GNULIB_defined_EIDRM
+-    case EIDRM:
+-      return "Identifier removed";
+-#endif
+-
+-#if GNULIB_defined_ENOLINK
+-    case ENOLINK:
+-      return "Link has been severed";
+-#endif
+-
+-#if GNULIB_defined_EPROTO
+-    case EPROTO:
+-      return "Protocol error";
+-#endif
+-
+-#if GNULIB_defined_EMULTIHOP
+-    case EMULTIHOP:
+-      return "Multihop attempted";
+-#endif
+-
+-#if GNULIB_defined_EBADMSG
+-    case EBADMSG:
+-      return "Bad message";
+-#endif
+-
+-#if GNULIB_defined_EOVERFLOW
+-    case EOVERFLOW:
+-      return "Value too large for defined data type";
+-#endif
+-
+-#if GNULIB_defined_ENOTSUP
+-    case ENOTSUP:
+-      return "Not supported";
+-#endif
+-
+-#if GNULIB_defined_ENETRESET
+-    case ENETRESET:
+-      return "Network dropped connection on reset";
+-#endif
+-
+-#if GNULIB_defined_ECONNABORTED
+-    case ECONNABORTED:
+-      return "Software caused connection abort";
+-#endif
+-
+-#if GNULIB_defined_ESTALE
+-    case ESTALE:
+-      return "Stale NFS file handle";
+-#endif
+-
+-#if GNULIB_defined_EDQUOT
+-    case EDQUOT:
+-      return "Disk quota exceeded";
+-#endif
+-
+-#if GNULIB_defined_ECANCELED
+-    case ECANCELED:
+-      return "Operation canceled";
+-#endif
+-
+-    default:
+-      return NULL;
+-    }
+-}
+diff -Naurp libiconv-1.14.org//srclib/strerror-override.h libiconv-1.14/srclib/strerror-override.h
+--- libiconv-1.14.org//srclib/strerror-override.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/strerror-override.h	1969-12-31 16:00:00.000000000 -0800
+@@ -1,52 +0,0 @@
+-/* strerror-override.h --- POSIX compatible system error routine
+-
+-   Copyright (C) 2010-2011 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _GL_STRERROR_OVERRIDE_H
+-# define _GL_STRERROR_OVERRIDE_H
+-
+-# include <errno.h>
+-# include <stddef.h>
+-
+-/* Reasonable buffer size that should never trigger ERANGE; if this
+-   proves too small, we intentionally abort(), to remind us to fix
+-   this value.  */
+-# define STACKBUF_LEN 256
+-
+-/* If ERRNUM maps to an errno value defined by gnulib, return a string
+-   describing the error.  Otherwise return NULL.  */
+-# if REPLACE_STRERROR_0 \
+-     || GNULIB_defined_ETXTBSY \
+-     || GNULIB_defined_ESOCK \
+-     || GNULIB_defined_ENOMSG \
+-     || GNULIB_defined_EIDRM \
+-     || GNULIB_defined_ENOLINK \
+-     || GNULIB_defined_EPROTO \
+-     || GNULIB_defined_EMULTIHOP \
+-     || GNULIB_defined_EBADMSG \
+-     || GNULIB_defined_EOVERFLOW \
+-     || GNULIB_defined_ENOTSUP \
+-     || GNULIB_defined_ENETRESET \
+-     || GNULIB_defined_ECONNABORTED \
+-     || GNULIB_defined_ESTALE \
+-     || GNULIB_defined_EDQUOT \
+-     || GNULIB_defined_ECANCELED
+-extern const char *strerror_override (int errnum);
+-# else
+-#  define strerror_override(ignored) NULL
+-# endif
+-
+-#endif /* _GL_STRERROR_OVERRIDE_H */
+diff -Naurp libiconv-1.14.org//srclib/string.in.h libiconv-1.14/srclib/string.in.h
+--- libiconv-1.14.org//srclib/string.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/string.in.h	2012-01-08 02:07:40.418484461 -0800
+@@ -16,7 +16,7 @@
+    along with this program; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+ 
+-#ifndef _@GUARD_PREFIX@_STRING_H
++#ifndef _GL_STRING_H
+ 
+ #if __GNUC__ >= 3
+ @PRAGMA_SYSTEM_HEADER@
+@@ -26,8 +26,8 @@
+ /* The include_next requires a split double-inclusion guard.  */
+ #@INCLUDE_NEXT@ @NEXT_STRING_H@
+ 
+-#ifndef _@GUARD_PREFIX@_STRING_H
+-#define _@GUARD_PREFIX@_STRING_H
++#ifndef _GL_STRING_H
++#define _GL_STRING_H
+ 
+ /* NetBSD 5.0 mis-defines NULL.  */
+ #include <stddef.h>
+@@ -59,36 +59,6 @@
+ /* The definition of _GL_WARN_ON_USE is copied here.  */
+ 
+ 
+-/* Find the index of the least-significant set bit.  */
+-#if @GNULIB_FFSL@
+-# if !@HAVE_FFSL@
+-_GL_FUNCDECL_SYS (ffsl, int, (long int i));
+-# endif
+-_GL_CXXALIAS_SYS (ffsl, int, (long int i));
+-_GL_CXXALIASWARN (ffsl);
+-#elif defined GNULIB_POSIXCHECK
+-# undef ffsl
+-# if HAVE_RAW_DECL_FFSL
+-_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
+-# endif
+-#endif
+-
+-
+-/* Find the index of the least-significant set bit.  */
+-#if @GNULIB_FFSLL@
+-# if !@HAVE_FFSLL@
+-_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
+-# endif
+-_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
+-_GL_CXXALIASWARN (ffsll);
+-#elif defined GNULIB_POSIXCHECK
+-# undef ffsll
+-# if HAVE_RAW_DECL_FFSLL
+-_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
+-# endif
+-#endif
+-
+-
+ /* Return the first instance of C within N bytes of S, or NULL.  */
+ #if @GNULIB_MEMCHR@
+ # if @REPLACE_MEMCHR@
+@@ -1007,5 +977,5 @@ _GL_WARN_ON_USE (strverscmp, "strverscmp
+ #endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_STRING_H */
+-#endif /* _@GUARD_PREFIX@_STRING_H */
++#endif /* _GL_STRING_H */
++#endif /* _GL_STRING_H */
+diff -Naurp libiconv-1.14.org//srclib/sys_stat.in.h libiconv-1.14/srclib/sys_stat.in.h
+--- libiconv-1.14.org//srclib/sys_stat.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/sys_stat.in.h	2012-01-08 02:07:40.430484461 -0800
+@@ -34,7 +34,7 @@
+ #else
+ /* Normal invocation convention.  */
+ 
+-#ifndef _@GUARD_PREFIX@_SYS_STAT_H
++#ifndef _GL_SYS_STAT_H
+ 
+ /* Get nlink_t.  */
+ #include <sys/types.h>
+@@ -45,8 +45,8 @@
+ /* The include_next requires a split double-inclusion guard.  */
+ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+ 
+-#ifndef _@GUARD_PREFIX@_SYS_STAT_H
+-#define _@GUARD_PREFIX@_SYS_STAT_H
++#ifndef _GL_SYS_STAT_H
++#define _GL_SYS_STAT_H
+ 
+ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+ 
+@@ -653,6 +653,6 @@ _GL_WARN_ON_USE (utimensat, "utimensat i
+ #endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
+-#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
++#endif /* _GL_SYS_STAT_H */
++#endif /* _GL_SYS_STAT_H */
+ #endif
+diff -Naurp libiconv-1.14.org//srclib/time.in.h libiconv-1.14/srclib/time.in.h
+--- libiconv-1.14.org//srclib/time.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/time.in.h	2012-01-08 02:07:40.438484462 -0800
+@@ -28,13 +28,13 @@
+    without adding our own declarations.  */
+ #if (defined __need_time_t || defined __need_clock_t \
+      || defined __need_timespec \
+-     || defined _@GUARD_PREFIX@_TIME_H)
++     || defined _GL_TIME_H)
+ 
+ # @INCLUDE_NEXT@ @NEXT_TIME_H@
+ 
+ #else
+ 
+-# define _@GUARD_PREFIX@_TIME_H
++# define _GL_TIME_H
+ 
+ # @INCLUDE_NEXT@ @NEXT_TIME_H@
+ 
+diff -Naurp libiconv-1.14.org//srclib/unistd.in.h libiconv-1.14/srclib/unistd.in.h
+--- libiconv-1.14.org//srclib/unistd.in.h	2011-08-07 06:42:06.000000000 -0700
++++ libiconv-1.14/srclib/unistd.in.h	2012-01-08 02:07:40.450484462 -0800
+@@ -36,7 +36,7 @@
+ # define _GL_WINSOCK2_H_WITNESS
+ 
+ /* Normal invocation.  */
+-#elif !defined _@GUARD_PREFIX@_UNISTD_H
++#elif !defined _GL_UNISTD_H
+ 
+ /* The include_next requires a split double-inclusion guard.  */
+ #if @HAVE_UNISTD_H@
+@@ -51,8 +51,8 @@
+ # undef _GL_INCLUDING_WINSOCK2_H
+ #endif
+ 
+-#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
+-#define _@GUARD_PREFIX@_UNISTD_H
++#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
++#define _GL_UNISTD_H
+ 
+ /* NetBSD 5.0 mis-defines NULL.  Also get size_t.  */
+ #include <stddef.h>
+@@ -117,77 +117,78 @@
+ /* The definition of _GL_WARN_ON_USE is copied here.  */
+ 
+ 
+-/* Hide some function declarations from <winsock2.h>.  */
+-
+-#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
+-# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
+-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-#   undef socket
+-#   define socket              socket_used_without_including_sys_socket_h
+-#   undef connect
+-#   define connect             connect_used_without_including_sys_socket_h
+-#   undef accept
+-#   define accept              accept_used_without_including_sys_socket_h
+-#   undef bind
+-#   define bind                bind_used_without_including_sys_socket_h
+-#   undef getpeername
+-#   define getpeername         getpeername_used_without_including_sys_socket_h
+-#   undef getsockname
+-#   define getsockname         getsockname_used_without_including_sys_socket_h
+-#   undef getsockopt
+-#   define getsockopt          getsockopt_used_without_including_sys_socket_h
+-#   undef listen
+-#   define listen              listen_used_without_including_sys_socket_h
+-#   undef recv
+-#   define recv                recv_used_without_including_sys_socket_h
+-#   undef send
+-#   define send                send_used_without_including_sys_socket_h
+-#   undef recvfrom
+-#   define recvfrom            recvfrom_used_without_including_sys_socket_h
+-#   undef sendto
+-#   define sendto              sendto_used_without_including_sys_socket_h
+-#   undef setsockopt
+-#   define setsockopt          setsockopt_used_without_including_sys_socket_h
+-#   undef shutdown
+-#   define shutdown            shutdown_used_without_including_sys_socket_h
+-#  else
+-    _GL_WARN_ON_USE (socket,
+-                     "socket() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (connect,
+-                     "connect() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (accept,
+-                     "accept() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (bind,
+-                     "bind() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (getpeername,
+-                     "getpeername() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (getsockname,
+-                     "getsockname() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (getsockopt,
+-                     "getsockopt() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (listen,
+-                     "listen() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (recv,
+-                     "recv() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (send,
+-                     "send() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (recvfrom,
+-                     "recvfrom() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (sendto,
+-                     "sendto() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (setsockopt,
+-                     "setsockopt() used without including <sys/socket.h>");
+-    _GL_WARN_ON_USE (shutdown,
+-                     "shutdown() used without including <sys/socket.h>");
++#if @GNULIB_GETHOSTNAME@
++/* Get all possible declarations of gethostname().  */
++# if @UNISTD_H_HAVE_WINSOCK2_H@
++#  if !defined _GL_SYS_SOCKET_H
++#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++#    undef socket
++#    define socket              socket_used_without_including_sys_socket_h
++#    undef connect
++#    define connect             connect_used_without_including_sys_socket_h
++#    undef accept
++#    define accept              accept_used_without_including_sys_socket_h
++#    undef bind
++#    define bind                bind_used_without_including_sys_socket_h
++#    undef getpeername
++#    define getpeername         getpeername_used_without_including_sys_socket_h
++#    undef getsockname
++#    define getsockname         getsockname_used_without_including_sys_socket_h
++#    undef getsockopt
++#    define getsockopt          getsockopt_used_without_including_sys_socket_h
++#    undef listen
++#    define listen              listen_used_without_including_sys_socket_h
++#    undef recv
++#    define recv                recv_used_without_including_sys_socket_h
++#    undef send
++#    define send                send_used_without_including_sys_socket_h
++#    undef recvfrom
++#    define recvfrom            recvfrom_used_without_including_sys_socket_h
++#    undef sendto
++#    define sendto              sendto_used_without_including_sys_socket_h
++#    undef setsockopt
++#    define setsockopt          setsockopt_used_without_including_sys_socket_h
++#    undef shutdown
++#    define shutdown            shutdown_used_without_including_sys_socket_h
++#   else
++     _GL_WARN_ON_USE (socket,
++                      "socket() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (connect,
++                      "connect() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (accept,
++                      "accept() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (bind,
++                      "bind() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (getpeername,
++                      "getpeername() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (getsockname,
++                      "getsockname() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (getsockopt,
++                      "getsockopt() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (listen,
++                      "listen() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (recv,
++                      "recv() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (send,
++                      "send() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (recvfrom,
++                      "recvfrom() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (sendto,
++                      "sendto() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (setsockopt,
++                      "setsockopt() used without including <sys/socket.h>");
++     _GL_WARN_ON_USE (shutdown,
++                      "shutdown() used without including <sys/socket.h>");
++#   endif
+ #  endif
+-# endif
+-# if !defined _@GUARD_PREFIX@_SYS_SELECT_H
+-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-#   undef select
+-#   define select              select_used_without_including_sys_select_h
+-#  else
+-    _GL_WARN_ON_USE (select,
+-                     "select() used without including <sys/select.h>");
++#  if !defined _GL_SYS_SELECT_H
++#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++#    undef select
++#    define select              select_used_without_including_sys_select_h
++#   else
++     _GL_WARN_ON_USE (select,
++                      "select() used without including <sys/select.h>");
++#   endif
+ #  endif
+ # endif
+ #endif
+@@ -1061,7 +1062,6 @@ _GL_WARN_ON_USE (pipe2, "pipe2 is unport
+    specification <http://www.opengroup.org/susv3xsh/pread.html>.  */
+ # if @REPLACE_PREAD@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-#   undef pread
+ #   define pread rpl_pread
+ #  endif
+ _GL_FUNCDECL_RPL (pread, ssize_t,
+@@ -1096,7 +1096,6 @@ _GL_WARN_ON_USE (pread, "pread is unport
+    <http://www.opengroup.org/susv3xsh/pwrite.html>.  */
+ # if @REPLACE_PWRITE@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-#   undef pwrite
+ #   define pwrite rpl_pwrite
+ #  endif
+ _GL_FUNCDECL_RPL (pwrite, ssize_t,
+@@ -1417,5 +1416,5 @@ _GL_CXXALIASWARN (write);
+ #endif
+ 
+ 
+-#endif /* _@GUARD_PREFIX@_UNISTD_H */
+-#endif /* _@GUARD_PREFIX@_UNISTD_H */
++#endif /* _GL_UNISTD_H */
++#endif /* _GL_UNISTD_H */
+diff -Naurp libiconv-1.14.org//srclib/verify.h libiconv-1.14/srclib/verify.h
+--- libiconv-1.14.org//srclib/verify.h	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srclib/verify.h	2012-01-08 02:07:40.494484464 -0800
+@@ -164,13 +164,10 @@
+     (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
+ 
+ # ifdef __cplusplus
+-#  if !GNULIB_defined_struct__gl_verify_type
+ template <int w>
+   struct _gl_verify_type {
+     unsigned int _gl_verify_error_if_negative: w;
+   };
+-#   define GNULIB_defined_struct__gl_verify_type 1
+-#  endif
+ #  define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+     _gl_verify_type<(R) ? 1 : -1>
+ # elif defined _GL_HAVE__STATIC_ASSERT
+@@ -209,7 +206,7 @@ template <int w>
+ #  endif
+ # endif
+ 
+-/* @assert.h omit start@  */
++# ifdef _GL_VERIFY_H
+ 
+ /* Each of these macros verifies that its argument R is nonzero.  To
+    be portable, R should be an integer constant expression.  Unlike
+@@ -221,23 +218,15 @@ template <int w>
+    contexts, e.g., the top level.  */
+ 
+ /* Verify requirement R at compile-time, as an integer constant expression.
+-   Return 1.  This is equivalent to verify_expr (R, 1).
+-
+-   verify_true is obsolescent; please use verify_expr instead.  */
+-
+-# define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")")
++   Return 1.  */
+ 
+-/* Verify requirement R at compile-time.  Return the value of the
+-   expression E.  */
+-
+-# define verify_expr(R, E) \
+-    (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E))
++#  define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")")
+ 
+ /* Verify requirement R at compile-time, as a declaration without a
+    trailing ';'.  */
+ 
+-# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
++#  define verify(R) _GL_VERIFY (R, "verify (" #R ")")
+ 
+-/* @assert.h omit end@  */
++# endif
+ 
+ #endif
+diff -Naurp libiconv-1.14.org//srcm4/canonicalize.m4 libiconv-1.14/srcm4/canonicalize.m4
+--- libiconv-1.14.org//srcm4/canonicalize.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/canonicalize.m4	2012-01-08 02:07:40.566484469 -0800
+@@ -1,4 +1,4 @@
+-# canonicalize.m4 serial 23
++# canonicalize.m4 serial 21
+ 
+ dnl Copyright (C) 2003-2007, 2009-2011 Free Software Foundation, Inc.
+ 
+@@ -10,6 +10,8 @@ dnl with or without modifications, as lo
+ # not provide or fix realpath.
+ AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE],
+ [
++  AC_LIBOBJ([canonicalize])
++
+   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+   AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
+   AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
+@@ -28,14 +30,16 @@ AC_DEFUN([gl_CANONICALIZE_LGPL],
+   AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE])
+   if test $ac_cv_func_canonicalize_file_name = no; then
+     HAVE_CANONICALIZE_FILE_NAME=0
++    AC_LIBOBJ([canonicalize-lgpl])
+     if test $ac_cv_func_realpath = no; then
+       HAVE_REALPATH=0
+     elif test "$gl_cv_func_realpath_works" != yes; then
+       REPLACE_REALPATH=1
+     fi
+   elif test "$gl_cv_func_realpath_works" != yes; then
+-    REPLACE_CANONICALIZE_FILE_NAME=1
++    AC_LIBOBJ([canonicalize-lgpl])
+     REPLACE_REALPATH=1
++    REPLACE_CANONICALIZE_FILE_NAME=1
+   fi
+ ])
+ 
+diff -Naurp libiconv-1.14.org//srcm4/errno_h.m4 libiconv-1.14/srcm4/errno_h.m4
+--- libiconv-1.14.org//srcm4/errno_h.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/errno_h.m4	2012-01-08 02:07:40.590484469 -0800
+@@ -1,4 +1,4 @@
+-# errno_h.m4 serial 10
++# errno_h.m4 serial 9
+ dnl Copyright (C) 2004, 2006, 2008-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -34,12 +34,6 @@ booboo
+ #if !defined ENOTSUP
+ booboo
+ #endif
+-#if !defined ENETRESET
+-booboo
+-#endif
+-#if !defined ECONNABORTED
+-booboo
+-#endif
+ #if !defined ESTALE
+ booboo
+ #endif
+diff -Naurp libiconv-1.14.org//srcm4/error.m4 libiconv-1.14/srcm4/error.m4
+--- libiconv-1.14.org//srcm4/error.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/error.m4	2012-01-08 02:07:40.598484470 -0800
+@@ -1,4 +1,4 @@
+-#serial 14
++#serial 13
+ 
+ # Copyright (C) 1996-1998, 2001-2004, 2009-2011 Free Software Foundation, Inc.
+ #
+@@ -8,8 +8,16 @@
+ 
+ AC_DEFUN([gl_ERROR],
+ [
+-  dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer
+-  dnl maintained in Autoconf and because it invokes AC_LIBOBJ.
++  AC_FUNC_ERROR_AT_LINE
++  dnl Note: AC_FUNC_ERROR_AT_LINE does AC_LIBSOURCES([error.h, error.c]).
++  gl_PREREQ_ERROR
++])
++
++# Redefine AC_FUNC_ERROR_AT_LINE, because it is no longer maintained in
++# Autoconf.
++AC_DEFUN([AC_FUNC_ERROR_AT_LINE],
++[
++  AC_LIBSOURCES([error.h, error.c])dnl
+   AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line],
+     [AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+@@ -17,6 +25,9 @@ AC_DEFUN([gl_ERROR],
+           [[error_at_line (0, 0, "", 0, "an error occurred");]])],
+        [ac_cv_lib_error_at_line=yes],
+        [ac_cv_lib_error_at_line=no])])
++  if test $ac_cv_lib_error_at_line = no; then
++    AC_LIBOBJ([error])
++  fi
+ ])
+ 
+ # Prerequisites of lib/error.c.
+diff -Naurp libiconv-1.14.org//srcm4/extensions.m4 libiconv-1.14/srcm4/extensions.m4
+--- libiconv-1.14.org//srcm4/extensions.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/extensions.m4	2012-01-08 02:07:40.606484471 -0800
+@@ -1,4 +1,4 @@
+-# serial 10  -*- Autoconf -*-
++# serial 9  -*- Autoconf -*-
+ # Enable extensions on systems that normally disable them.
+ 
+ # Copyright (C) 2003, 2006-2011 Free Software Foundation, Inc.
+@@ -67,10 +67,6 @@ AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+ #ifndef _ALL_SOURCE
+ # undef _ALL_SOURCE
+ #endif
+-/* Enable general extensions on MacOS X.  */
+-#ifndef _DARWIN_C_SOURCE
+-# undef _DARWIN_C_SOURCE
+-#endif
+ /* Enable GNU extensions on systems that have them.  */
+ #ifndef _GNU_SOURCE
+ # undef _GNU_SOURCE
+@@ -99,7 +95,6 @@ AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+   test $ac_cv_safe_to_define___extensions__ = yes &&
+     AC_DEFINE([__EXTENSIONS__])
+   AC_DEFINE([_ALL_SOURCE])
+-  AC_DEFINE([_DARWIN_C_SOURCE])
+   AC_DEFINE([_GNU_SOURCE])
+   AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+   AC_DEFINE([_TANDEM_SOURCE])
+diff -Naurp libiconv-1.14.org//srcm4/gnulib-cache.m4 libiconv-1.14/srcm4/gnulib-cache.m4
+--- libiconv-1.14.org//srcm4/gnulib-cache.m4	2011-08-07 06:42:11.000000000 -0700
++++ libiconv-1.14/srcm4/gnulib-cache.m4	2012-01-08 02:07:43.154484593 -0800
+@@ -15,7 +15,7 @@
+ 
+ 
+ # Specification in the form of a command-line invocation:
+-#   gnulib-tool --import --dir=. --local-dir=gnulib-local --lib=libicrt --source-base=srclib --m4-base=srcm4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --makefile-name=Makefile.gnulib --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files binary-io error gettext gettext-h libiconv-misc mbstate memmove progname relocatable-prog safe-read sigpipe stdio stdlib strerror unistd uniwidth/width unlocked-io xalloc
++#   gnulib-tool --import --dir=. --local-dir=gnulib-local --lib=libicrt --source-base=srclib --m4-base=srcm4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --makefile-name=Makefile.gnulib --no-libtool --macro-prefix=gl --no-vc-files binary-io error gettext gettext-h libiconv-misc mbstate memmove progname relocatable relocatable-prog safe-read sigpipe stdio stdlib strerror unistd uniwidth/width unlocked-io xalloc
+ 
+ # Specification in the form of a few gnulib-tool.m4 macro invocations:
+ gl_LOCAL_DIR([gnulib-local])
+@@ -28,6 +28,7 @@ gl_MODULES([
+   mbstate
+   memmove
+   progname
++  relocatable
+   relocatable-prog
+   safe-read
+   sigpipe
+@@ -49,5 +50,4 @@ gl_LIB([libicrt])
+ gl_MAKEFILE_NAME([Makefile.gnulib])
+ gl_MACRO_PREFIX([gl])
+ gl_PO_DOMAIN([])
+-gl_WITNESS_C_DOMAIN([])
+ gl_VC_FILES([false])
+diff -Naurp libiconv-1.14.org//srcm4/gnulib-common.m4 libiconv-1.14/srcm4/gnulib-common.m4
+--- libiconv-1.14.org//srcm4/gnulib-common.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/gnulib-common.m4	2012-01-08 02:07:40.634484471 -0800
+@@ -1,4 +1,4 @@
+-# gnulib-common.m4 serial 29
++# gnulib-common.m4 serial 24
+ dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -12,19 +12,6 @@ AC_DEFUN([gl_COMMON], [
+   AC_REQUIRE([gl_COMMON_BODY])
+ ])
+ AC_DEFUN([gl_COMMON_BODY], [
+-  AH_VERBATIM([_Noreturn],
+-[/* The _Noreturn keyword of draft C1X.  */
+-#ifndef _Noreturn
+-# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+-      || 0x5110 <= __SUNPRO_C)
+-#  define _Noreturn __attribute__ ((__noreturn__))
+-# elif 1200 <= _MSC_VER
+-#  define _Noreturn __declspec (noreturn)
+-# else
+-#  define _Noreturn
+-# endif
+-#endif
+-])
+   AH_VERBATIM([isoc99_inline],
+ [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+    the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+@@ -47,20 +34,6 @@ AC_DEFUN([gl_COMMON_BODY], [
+ /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+    is a misnomer outside of parameter lists.  */
+ #define _UNUSED_PARAMETER_ _GL_UNUSED
+-
+-/* The __pure__ attribute was added in gcc 2.96.  */
+-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+-#else
+-# define _GL_ATTRIBUTE_PURE /* empty */
+-#endif
+-
+-/* The __const__ attribute was added in gcc 2.95.  */
+-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+-# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+-#else
+-# define _GL_ATTRIBUTE_CONST /* empty */
+-#endif
+ ])
+   dnl Preparation for running test programs:
+   dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
+@@ -74,49 +47,16 @@ AC_DEFUN([gl_COMMON_BODY], [
+ # expands to a C preprocessor expression that evaluates to 1 or 0, depending
+ # whether a gnulib module that has been requested shall be considered present
+ # or not.
+-m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
++AC_DEFUN([gl_MODULE_INDICATOR_CONDITION], [1])
+ 
+ # gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
+ # sets the shell variable that indicates the presence of the given module to
+ # a C preprocessor expression that will evaluate to 1.
+ AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
+ [
+-  gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
+-    [GNULIB_[]m4_translit([[$1]],
+-                          [abcdefghijklmnopqrstuvwxyz./-],
+-                          [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
+-    [gl_MODULE_INDICATOR_CONDITION])
+-])
+-
+-# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
+-# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
+-# The shell variable's value is a C preprocessor expression that evaluates
+-# to 0 or 1.
+-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
+-[
+-  m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
+-    [
+-     dnl Simplify the expression VALUE || 1 to 1.
+-     $1=1
+-    ],
+-    [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
+-                                             [gl_MODULE_INDICATOR_CONDITION])])
+-])
+-
+-# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
+-# modifies the shell variable to include the given condition.  The shell
+-# variable's value is a C preprocessor expression that evaluates to 0 or 1.
+-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
+-[
+-  dnl Simplify the expression 1 || CONDITION to 1.
+-  if test "$[]$1" != 1; then
+-    dnl Simplify the expression 0 || CONDITION to CONDITION.
+-    if test "$[]$1" = 0; then
+-      $1=$2
+-    else
+-      $1="($[]$1 || $2)"
+-    fi
+-  fi
++  GNULIB_[]m4_translit([[$1]],
++    [abcdefghijklmnopqrstuvwxyz./-],
++    [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=gl_MODULE_INDICATOR_CONDITION
+ ])
+ 
+ # gl_MODULE_INDICATOR([modulename])
+@@ -211,35 +151,6 @@ m4_ifndef([AS_VAR_IF],
+ [m4_define([AS_VAR_IF],
+ [AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
+ 
+-# gl_PROG_AR_RANLIB
+-# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
+-AC_DEFUN([gl_PROG_AR_RANLIB],
+-[
+-  dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
+-  dnl as "cc", and GCC as "gcc". They have different object file formats and
+-  dnl library formats. In particular, the GNU binutils programs ar, ranlib
+-  dnl produce libraries that work only with gcc, not with cc.
+-  AC_REQUIRE([AC_PROG_CC])
+-  AC_EGREP_CPP([Amsterdam],
+-    [
+-#ifdef __ACK__
+-Amsterdam
+-#endif
+-    ],
+-    [AR='cc -c.a'
+-     ARFLAGS='-o'
+-     RANLIB=':'
+-    ],
+-    [dnl Use the Automake-documented default values for AR and ARFLAGS.
+-     AR='ar'
+-     ARFLAGS='cru'
+-     dnl Use the ranlib program if it is available.
+-     AC_PROG_RANLIB
+-    ])
+-  AC_SUBST([AR])
+-  AC_SUBST([ARFLAGS])
+-])
+-
+ # AC_PROG_MKDIR_P
+ # is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
+ # for interoperability with automake-1.9.6 from autoconf-2.62.
+diff -Naurp libiconv-1.14.org//srcm4/gnulib-comp.m4 libiconv-1.14/srcm4/gnulib-comp.m4
+--- libiconv-1.14.org//srcm4/gnulib-comp.m4	2011-08-07 06:42:12.000000000 -0700
++++ libiconv-1.14/srcm4/gnulib-comp.m4	2012-01-08 02:07:43.922484630 -0800
+@@ -25,12 +25,14 @@ AC_DEFUN([gl_EARLY],
+   m4_pattern_allow([^gl_ES$])dnl a valid locale name
+   m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
+   m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
+-  AC_REQUIRE([gl_PROG_AR_RANLIB])
++  AC_REQUIRE([AC_PROG_RANLIB])
+   AC_REQUIRE([AM_PROG_CC_C_O])
+   # Code from module alloca-opt:
+   # Code from module allocator:
+   # Code from module areadlink:
++  # Code from module arg-nonnull:
+   # Code from module binary-io:
++  # Code from module c++defs:
+   # Code from module canonicalize-lgpl:
+   # Code from module careadlinkat:
+   # Code from module dosname:
+@@ -46,7 +48,6 @@ AC_DEFUN([gl_EARLY],
+   # Code from module havelib:
+   # Code from module include_next:
+   # Code from module intprops:
+-  # Code from module largefile:
+   # Code from module libiconv-misc:
+   # Code from module lstat:
+   # Code from module malloca:
+@@ -64,10 +65,6 @@ AC_DEFUN([gl_EARLY],
+   # Code from module signal:
+   # Code from module sigpipe:
+   # Code from module sigprocmask:
+-  # Code from module snippet/_Noreturn:
+-  # Code from module snippet/arg-nonnull:
+-  # Code from module snippet/c++defs:
+-  # Code from module snippet/warn-on-use:
+   # Code from module ssize_t:
+   # Code from module stat:
+   # Code from module stdbool:
+@@ -77,7 +74,6 @@ AC_DEFUN([gl_EARLY],
+   # Code from module stdlib:
+   # Code from module streq:
+   # Code from module strerror:
+-  # Code from module strerror-override:
+   # Code from module string:
+   # Code from module sys_stat:
+   # Code from module time:
+@@ -87,6 +83,7 @@ AC_DEFUN([gl_EARLY],
+   # Code from module uniwidth/width:
+   # Code from module unlocked-io:
+   # Code from module verify:
++  # Code from module warn-on-use:
+   # Code from module xalloc:
+   # Code from module xreadlink:
+ ])
+@@ -109,9 +106,6 @@ AC_DEFUN([gl_INIT],
+   gl_source_base='srclib'
+ gl_FUNC_ALLOCA
+ gl_CANONICALIZE_LGPL
+-if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+-  AC_LIBOBJ([canonicalize-lgpl])
+-fi
+ gl_MODULE_INDICATOR([canonicalize-lgpl])
+ gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name])
+ gl_STDLIB_MODULE_INDICATOR([realpath])
+@@ -121,10 +115,6 @@ gl_ENVIRON
+ gl_UNISTD_MODULE_INDICATOR([environ])
+ gl_HEADER_ERRNO_H
+ gl_ERROR
+-if test $ac_cv_lib_error_at_line = no; then
+-  AC_LIBOBJ([error])
+-  gl_PREREQ_ERROR
+-fi
+ m4_ifdef([AM_XGETTEXT_OPTION],
+   [AM_][XGETTEXT_OPTION([--flag=error:3:c-format])
+    AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])])
+@@ -134,43 +124,26 @@ AM_GNU_GETTEXT_VERSION([0.18.1])
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ gl_FUNC_LSTAT
+-if test $REPLACE_LSTAT = 1; then
+-  AC_LIBOBJ([lstat])
+-  gl_PREREQ_LSTAT
+-fi
+ gl_SYS_STAT_MODULE_INDICATOR([lstat])
+ gl_MALLOCA
+ AC_TYPE_MBSTATE_T
+ gl_FUNC_MEMMOVE
+-if test $ac_cv_func_memmove = no; then
+-  AC_LIBOBJ([memmove])
+-  gl_PREREQ_MEMMOVE
+-fi
+ gl_MULTIARCH
+ gl_PATHMAX
+ AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
+ AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>])
+ gl_FUNC_READ
+-if test $REPLACE_READ = 1; then
+-  AC_LIBOBJ([read])
+-fi
+ gl_UNISTD_MODULE_INDICATOR([read])
+ gl_FUNC_READLINK
+-if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
+-  AC_LIBOBJ([readlink])
+-  gl_PREREQ_READLINK
+-fi
+ gl_UNISTD_MODULE_INDICATOR([readlink])
+ gl_RELOCATABLE([$gl_source_base])
+-if test $RELOCATABLE = yes; then
+-  AC_LIBOBJ([progreloc])
+-fi
+ gl_FUNC_READLINK_SEPARATE
+ gl_CANONICALIZE_LGPL_SEPARATE
+ gl_MALLOCA
+-gl_RELOCATABLE_LIBRARY
++gl_RELOCATABLE_LIBRARY_SEPARATE
+ gl_FUNC_SETENV_SEPARATE
+-gl_PREREQ_SAFE_READ
++gl_FUNC_STRERROR_SEPARATE
++gl_SAFE_READ
+ gl_SIGNAL_H
+ gl_SIGNAL_SIGPIPE
+ dnl Define the C macro GNULIB_SIGPIPE to 1.
+@@ -186,17 +159,9 @@ dnl Define the substituted variable GNUL
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ GNULIB_UNISTD_H_SIGPIPE=1
+ gl_SIGNALBLOCKING
+-if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+-  AC_LIBOBJ([sigprocmask])
+-  gl_PREREQ_SIGPROCMASK
+-fi
+ gl_SIGNAL_MODULE_INDICATOR([sigprocmask])
+ gt_TYPE_SSIZE_T
+ gl_FUNC_STAT
+-if test $REPLACE_STAT = 1; then
+-  AC_LIBOBJ([stat])
+-  gl_PREREQ_STAT
+-fi
+ gl_SYS_STAT_MODULE_INDICATOR([stat])
+ AM_STDBOOL_H
+ gl_STDDEF_H
+@@ -204,17 +169,7 @@ gl_STDINT_H
+ gl_STDIO_H
+ gl_STDLIB_H
+ gl_FUNC_STRERROR
+-if test $REPLACE_STRERROR = 1; then
+-  AC_LIBOBJ([strerror])
+-fi
+-gl_MODULE_INDICATOR([strerror])
+ gl_STRING_MODULE_INDICATOR([strerror])
+-AC_REQUIRE([gl_HEADER_ERRNO_H])
+-AC_REQUIRE([gl_FUNC_STRERROR_0])
+-if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then
+-  AC_LIBOBJ([strerror-override])
+-  gl_PREREQ_SYS_H_WINSOCK2
+-fi
+ gl_HEADER_STRING_H
+ gl_HEADER_SYS_STAT_H
+ AC_PROG_MKDIR_P
+@@ -364,14 +319,13 @@ AC_DEFUN([gltests_LIBSOURCES], [
+ # This macro records the list of files which have been installed by
+ # gnulib-tool and may be removed by future gnulib-tool invocations.
+ AC_DEFUN([gl_FILE_LIST], [
++  build-aux/arg-nonnull.h
++  build-aux/c++defs.h
+   build-aux/config.libpath
+   build-aux/config.rpath
+   build-aux/install-reloc
+   build-aux/reloc-ldflags
+-  build-aux/snippet/_Noreturn.h
+-  build-aux/snippet/arg-nonnull.h
+-  build-aux/snippet/c++defs.h
+-  build-aux/snippet/warn-on-use.h
++  build-aux/warn-on-use.h
+   doc/relocatable.texi
+   lib/alloca.in.h
+   lib/allocator.c
+@@ -419,8 +373,6 @@ AC_DEFUN([gl_FILE_LIST], [
+   lib/stdio.in.h
+   lib/stdlib.in.h
+   lib/streq.h
+-  lib/strerror-override.c
+-  lib/strerror-override.h
+   lib/strerror.c
+   lib/string.in.h
+   lib/sys_stat.in.h
+@@ -463,7 +415,6 @@ AC_DEFUN([gl_FILE_LIST], [
+   m4/intmax.m4
+   m4/inttypes-pri.m4
+   m4/inttypes_h.m4
+-  m4/largefile.m4
+   m4/lcmessage.m4
+   m4/lib-ld.m4
+   m4/lib-link.m4
+@@ -502,7 +453,6 @@ AC_DEFUN([gl_FILE_LIST], [
+   m4/stdlib_h.m4
+   m4/strerror.m4
+   m4/string_h.m4
+-  m4/sys_socket_h.m4
+   m4/sys_stat_h.m4
+   m4/threadlib.m4
+   m4/time_h.m4
+diff -Naurp libiconv-1.14.org//srcm4/include_next.m4 libiconv-1.14/srcm4/include_next.m4
+--- libiconv-1.14.org//srcm4/include_next.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/include_next.m4	2012-01-08 02:07:40.650484472 -0800
+@@ -1,4 +1,4 @@
+-# include_next.m4 serial 20
++# include_next.m4 serial 18
+ dnl Copyright (C) 2006-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -175,13 +175,11 @@ AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
+     [AC_CHECK_HEADERS_ONCE([$1])
+     ])
+ 
+-dnl FIXME: gl_next_header and gl_header_exists must be used unquoted
+-dnl until we can assume autoconf 2.64 or newer.
+   m4_foreach_w([gl_HEADER_NAME], [$1],
+     [AS_VAR_PUSHDEF([gl_next_header],
+                     [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
+      if test $gl_cv_have_include_next = yes; then
+-       AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
++       AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+      else
+        AC_CACHE_CHECK(
+          [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+@@ -210,7 +208,7 @@ dnl until we can assume autoconf 2.64 or
+                dnl eval is necessary to expand gl_absname_cpp.
+                dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+                dnl so use subshell.
+-               AS_VAR_SET(gl_next_header,
++               AS_VAR_SET([gl_next_header],
+                  ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+                   sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{
+                     s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1#
+@@ -220,20 +218,20 @@ dnl until we can assume autoconf 2.64 or
+                   }'`'"'])
+           m4_if([$2], [check],
+             [else
+-               AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
++               AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+              fi
+             ])
+          ])
+      fi
+      AC_SUBST(
+        AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
+-       [AS_VAR_GET(gl_next_header)])
++       [AS_VAR_GET([gl_next_header])])
+      if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+        # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+        gl_next_as_first_directive='<'gl_HEADER_NAME'>'
+      else
+        # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+-       gl_next_as_first_directive=AS_VAR_GET(gl_next_header)
++       gl_next_as_first_directive=AS_VAR_GET([gl_next_header])
+      fi
+      AC_SUBST(
+        AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
+diff -Naurp libiconv-1.14.org//srcm4/largefile.m4 libiconv-1.14/srcm4/largefile.m4
+--- libiconv-1.14.org//srcm4/largefile.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/largefile.m4	1969-12-31 16:00:00.000000000 -0800
+@@ -1,104 +0,0 @@
+-# Enable large files on systems where this is not the default.
+-
+-# Copyright 1992-1996, 1998-2011 Free Software Foundation, Inc.
+-# This file is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+-# The following implementation works around a problem in autoconf <= 2.68;
+-# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5.
+-m4_version_prereq([2.69], [] ,[
+-
+-# _AC_SYS_LARGEFILE_TEST_INCLUDES
+-# -------------------------------
+-m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES],
+-[@%:@include <sys/types.h>
+- /* Check that off_t can represent 2**63 - 1 correctly.
+-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+-    since some C++ compilers masquerading as C compilers
+-    incorrectly reject 9223372036854775807.  */
+-@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+-  int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721
+-		       && LARGE_OFF_T % 2147483647 == 1)
+-		      ? 1 : -1]];[]dnl
+-])
+-
+-
+-# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE,
+-#				CACHE-VAR,
+-#				DESCRIPTION,
+-#				PROLOGUE, [FUNCTION-BODY])
+-# --------------------------------------------------------
+-m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE],
+-[AC_CACHE_CHECK([for $1 value needed for large files], [$3],
+-[while :; do
+-  m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+-    [AC_LANG_PROGRAM([$5], [$6])],
+-    [$3=no; break])
+-  m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+-    [AC_LANG_PROGRAM([@%:@define $1 $2
+-$5], [$6])],
+-    [$3=$2; break])
+-  $3=unknown
+-  break
+-done])
+-case $$3 in #(
+-  no | unknown) ;;
+-  *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);;
+-esac
+-rm -rf conftest*[]dnl
+-])# _AC_SYS_LARGEFILE_MACRO_VALUE
+-
+-
+-# AC_SYS_LARGEFILE
+-# ----------------
+-# By default, many hosts won't let programs access large files;
+-# one must use special compiler options to get large-file access to work.
+-# For more details about this brain damage please see:
+-# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html
+-AC_DEFUN([AC_SYS_LARGEFILE],
+-[AC_ARG_ENABLE(largefile,
+-	       [  --disable-largefile     omit support for large files])
+-if test "$enable_largefile" != no; then
+-
+-  AC_CACHE_CHECK([for special C compiler options needed for large files],
+-    ac_cv_sys_largefile_CC,
+-    [ac_cv_sys_largefile_CC=no
+-     if test "$GCC" != yes; then
+-       ac_save_CC=$CC
+-       while :; do
+-	 # IRIX 6.2 and later do not support large files by default,
+-	 # so use the C compiler's -n32 option if that helps.
+-	 AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])])
+-	 AC_COMPILE_IFELSE([], [break])
+-	 CC="$CC -n32"
+-	 AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break])
+-	 break
+-       done
+-       CC=$ac_save_CC
+-       rm -f conftest.$ac_ext
+-    fi])
+-  if test "$ac_cv_sys_largefile_CC" != no; then
+-    CC=$CC$ac_cv_sys_largefile_CC
+-  fi
+-
+-  _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
+-    ac_cv_sys_file_offset_bits,
+-    [Number of bits in a file offset, on hosts where this is settable.],
+-    [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+-  if test $ac_cv_sys_file_offset_bits = unknown; then
+-    _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
+-      ac_cv_sys_large_files,
+-      [Define for large files, on AIX-style hosts.],
+-      [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+-  fi
+-
+-  AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],
+-[/* Enable large inode numbers on Mac OS X.  */
+-#ifndef _DARWIN_USE_64_BIT_INODE
+-# define _DARWIN_USE_64_BIT_INODE 1
+-#endif])
+-fi
+-])# AC_SYS_LARGEFILE
+-
+-])# m4_version_prereq 2.69
+diff -Naurp libiconv-1.14.org//srcm4/lstat.m4 libiconv-1.14/srcm4/lstat.m4
+--- libiconv-1.14.org//srcm4/lstat.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/lstat.m4	2012-01-08 02:07:40.722484476 -0800
+@@ -1,4 +1,4 @@
+-# serial 23
++# serial 21
+ 
+ # Copyright (C) 1997-2001, 2003-2011 Free Software Foundation, Inc.
+ #
+@@ -15,28 +15,24 @@ AC_DEFUN([gl_FUNC_LSTAT],
+   dnl "#define lstat stat", and lstat.c is a no-op.
+   AC_CHECK_FUNCS_ONCE([lstat])
+   if test $ac_cv_func_lstat = yes; then
+-    AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+-    if test $gl_cv_func_lstat_dereferences_slashed_symlink = no; then
++    AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
++    if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
++      dnl Note: AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK does AC_LIBOBJ([lstat]).
+       REPLACE_LSTAT=1
+     fi
++    # Prerequisites of lib/lstat.c.
++    AC_REQUIRE([AC_C_INLINE])
+   else
+     HAVE_LSTAT=0
+   fi
+ ])
+ 
+-# Prerequisites of lib/lstat.c.
+-AC_DEFUN([gl_PREREQ_LSTAT],
++# Redefine AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, because it is no longer
++# maintained in Autoconf.
++AC_DEFUN([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
+ [
+-  AC_REQUIRE([AC_C_INLINE])
+-  :
+-])
+-
+-AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
+-[
+-  dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it
+-  dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ.
+   AC_CACHE_CHECK([whether lstat correctly handles trailing slash],
+-    [gl_cv_func_lstat_dereferences_slashed_symlink],
++    [ac_cv_func_lstat_dereferences_slashed_symlink],
+     [rm -f conftest.sym conftest.file
+      echo >conftest.file
+      if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+@@ -49,22 +45,25 @@ AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_
+                  have to compile and use the lstat wrapper.  */
+               return lstat ("conftest.sym/", &sbuf) == 0;
+             ]])],
+-         [gl_cv_func_lstat_dereferences_slashed_symlink=yes],
+-         [gl_cv_func_lstat_dereferences_slashed_symlink=no],
++         [ac_cv_func_lstat_dereferences_slashed_symlink=yes],
++         [ac_cv_func_lstat_dereferences_slashed_symlink=no],
+          [# When cross-compiling, be pessimistic so we will end up using the
+           # replacement version of lstat that checks for trailing slashes and
+           # calls lstat a second time when necessary.
+-          gl_cv_func_lstat_dereferences_slashed_symlink=no
++          ac_cv_func_lstat_dereferences_slashed_symlink=no
+          ])
+      else
+        # If the 'ln -s' command failed, then we probably don't even
+        # have an lstat function.
+-       gl_cv_func_lstat_dereferences_slashed_symlink=no
++       ac_cv_func_lstat_dereferences_slashed_symlink=no
+      fi
+      rm -f conftest.sym conftest.file
+     ])
+-  test $gl_cv_func_lstat_dereferences_slashed_symlink = yes &&
++  test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+     AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1],
+       [Define to 1 if `lstat' dereferences a symlink specified
+        with a trailing slash.])
++  if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
++    AC_LIBOBJ([lstat])
++  fi
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/memmove.m4 libiconv-1.14/srcm4/memmove.m4
+--- libiconv-1.14.org//srcm4/memmove.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/memmove.m4	2012-01-08 02:07:40.738484477 -0800
+@@ -1,4 +1,4 @@
+-# memmove.m4 serial 4
++# memmove.m4 serial 3
+ dnl Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -6,7 +6,10 @@ dnl with or without modifications, as lo
+ 
+ AC_DEFUN([gl_FUNC_MEMMOVE],
+ [
+-  AC_CHECK_FUNCS([memmove])
++  AC_REPLACE_FUNCS([memmove])
++  if test $ac_cv_func_memmove = no; then
++    gl_PREREQ_MEMMOVE
++  fi
+ ])
+ 
+ # Prerequisites of lib/memmove.c.
+diff -Naurp libiconv-1.14.org//srcm4/pathmax.m4 libiconv-1.14/srcm4/pathmax.m4
+--- libiconv-1.14.org//srcm4/pathmax.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/pathmax.m4	2012-01-08 02:07:40.758484478 -0800
+@@ -1,4 +1,4 @@
+-# pathmax.m4 serial 9
++# pathmax.m4 serial 8
+ dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 Free Software Foundation,
+ dnl Inc.
+ dnl This file is free software; the Free Software Foundation
+@@ -8,5 +8,6 @@ dnl with or without modifications, as lo
+ AC_DEFUN([gl_PATHMAX],
+ [
+   dnl Prerequisites of lib/pathmax.h.
++  AC_CHECK_FUNCS_ONCE([pathconf])
+   AC_CHECK_HEADERS_ONCE([sys/param.h])
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/po.m4 libiconv-1.14/srcm4/po.m4
+--- libiconv-1.14.org//srcm4/po.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/po.m4	2012-01-08 02:07:40.766484477 -0800
+@@ -1,4 +1,4 @@
+-# po.m4 serial 17a
++# po.m4 serial 17 (gettext-0.18)
+ dnl Copyright (C) 1995-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -118,8 +118,7 @@ changequote([,])dnl
+         if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+           rm -f "$ac_dir/POTFILES"
+           test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+-          gt_tab=`printf '\t'`
+-          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
++          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+           POMAKEFILEDEPS="POTFILES.in"
+           # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+           # on $ac_dir but don't depend on user-specified configuration
+@@ -255,7 +254,6 @@ EOT
+   fi
+ 
+   # A sed script that extracts the value of VARIABLE from a Makefile.
+-  tab=`printf '\t'`
+   sed_x_variable='
+ # Test if the hold space is empty.
+ x
+@@ -263,9 +261,9 @@ s/P/P/
+ x
+ ta
+ # Yes it was empty. Look if we have the expected variable definition.
+-/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
++/^[	 ]*VARIABLE[	 ]*=/{
+   # Seen the first line of the variable definition.
+-  s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
++  s/^[	 ]*VARIABLE[	 ]*=//
+   ba
+ }
+ bd
+@@ -407,15 +405,14 @@ changequote([,])dnl
+   fi
+ 
+   sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+-  tab=`printf '\t'`
+   if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+     # Add dependencies that cannot be formulated as a simple suffix rule.
+     for lang in $ALL_LINGUAS; do
+       frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+       cat >> "$ac_file.tmp" <<EOF
+ $frobbedlang.msg: $lang.po
+-${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+-${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
++	@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
++	\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+ EOF
+     done
+   fi
+@@ -425,8 +422,8 @@ EOF
+       frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+       cat >> "$ac_file.tmp" <<EOF
+ $frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+-${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+-${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
++	@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
++	\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+ EOF
+     done
+   fi
+diff -Naurp libiconv-1.14.org//srcm4/readlink.m4 libiconv-1.14/srcm4/readlink.m4
+--- libiconv-1.14.org//srcm4/readlink.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/readlink.m4	2012-01-08 02:07:40.790484479 -0800
+@@ -1,4 +1,4 @@
+-# readlink.m4 serial 11
++# readlink.m4 serial 10
+ dnl Copyright (C) 2003, 2007, 2009-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -10,6 +10,8 @@ AC_DEFUN([gl_FUNC_READLINK],
+   AC_CHECK_FUNCS_ONCE([readlink])
+   if test $ac_cv_func_readlink = no; then
+     HAVE_READLINK=0
++    AC_LIBOBJ([readlink])
++    gl_PREREQ_READLINK
+   else
+     AC_CACHE_CHECK([whether readlink signature is correct],
+       [gl_cv_decl_readlink_works],
+@@ -38,8 +40,10 @@ AC_DEFUN([gl_FUNC_READLINK],
+       AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink
+         fails to recognize a trailing slash.])
+       REPLACE_READLINK=1
++      AC_LIBOBJ([readlink])
+     elif test "$gl_cv_decl_readlink_works" != yes; then
+       REPLACE_READLINK=1
++      AC_LIBOBJ([readlink])
+     fi
+   fi
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/read.m4 libiconv-1.14/srcm4/read.m4
+--- libiconv-1.14.org//srcm4/read.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/read.m4	2012-01-08 02:07:40.782484478 -0800
+@@ -1,4 +1,4 @@
+-# read.m4 serial 2
++# read.m4 serial 1
+ dnl Copyright (C) 2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -14,6 +14,7 @@ AC_DEFUN([gl_FUNC_READ],
+     gl_NONBLOCKING_IO
+     if test $gl_cv_have_nonblocking != yes; then
+       REPLACE_READ=1
++      AC_LIBOBJ([read])
+     fi
+   ])
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/relocatable-lib.m4 libiconv-1.14/srcm4/relocatable-lib.m4
+--- libiconv-1.14.org//srcm4/relocatable-lib.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/relocatable-lib.m4	2012-01-08 02:07:40.798484480 -0800
+@@ -1,4 +1,4 @@
+-# relocatable-lib.m4 serial 6
++# relocatable-lib.m4 serial 5
+ dnl Copyright (C) 2003, 2005-2007, 2009-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -10,6 +10,9 @@ dnl Support for relocatable libraries.
+ AC_DEFUN([gl_RELOCATABLE_LIBRARY],
+ [
+   AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY])
++  if test $RELOCATABLE = yes; then
++    AC_LIBOBJ([relocatable])
++  fi
+ ])
+ AC_DEFUN([gl_RELOCATABLE_LIBRARY_BODY],
+ [
+@@ -29,6 +32,13 @@ AC_DEFUN([gl_RELOCATABLE_LIBRARY_BODY],
+   fi
+ ])
+ 
++dnl Like gl_RELOCATABLE_LIBRARY, except prepare for separate compilation
++dnl (no AC_LIBOBJ).
++AC_DEFUN([gl_RELOCATABLE_LIBRARY_SEPARATE],
++[
++  AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY])
++])
++
+ dnl Support for relocatable packages for which it is a nop.
+ AC_DEFUN([gl_RELOCATABLE_NOP],
+ [
+diff -Naurp libiconv-1.14.org//srcm4/relocatable.m4 libiconv-1.14/srcm4/relocatable.m4
+--- libiconv-1.14.org//srcm4/relocatable.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/relocatable.m4	2012-01-08 02:07:40.802484479 -0800
+@@ -1,4 +1,4 @@
+-# relocatable.m4 serial 17
++# relocatable.m4 serial 16
+ dnl Copyright (C) 2003, 2005-2007, 2009-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -14,6 +14,9 @@ AC_DEFUN([gl_RELOCATABLE],
+ [
+   AC_REQUIRE([gl_RELOCATABLE_BODY])
+   gl_RELOCATABLE_LIBRARY
++  if test $RELOCATABLE = yes; then
++    AC_LIBOBJ([progreloc])
++  fi
+   : ${RELOCATABLE_CONFIG_H_DIR='$(top_builddir)'}
+   RELOCATABLE_SRC_DIR="\$(top_srcdir)/$gl_source_base"
+   RELOCATABLE_BUILD_DIR="\$(top_builddir)/$gl_source_base"
+diff -Naurp libiconv-1.14.org//srcm4/safe-read.m4 libiconv-1.14/srcm4/safe-read.m4
+--- libiconv-1.14.org//srcm4/safe-read.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/safe-read.m4	2012-01-08 02:07:40.810484480 -0800
+@@ -1,10 +1,17 @@
+-# safe-read.m4 serial 6
++# safe-read.m4 serial 5
+ dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 Free Software Foundation,
+ dnl Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+ dnl with or without modifications, as long as this notice is preserved.
+ 
++AC_DEFUN([gl_SAFE_READ],
++[
++  AC_LIBOBJ([safe-read])
++
++  gl_PREREQ_SAFE_READ
++])
++
+ # Prerequisites of lib/safe-read.c.
+ AC_DEFUN([gl_PREREQ_SAFE_READ],
+ [
+diff -Naurp libiconv-1.14.org//srcm4/setenv.m4 libiconv-1.14/srcm4/setenv.m4
+--- libiconv-1.14.org//srcm4/setenv.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/setenv.m4	2012-01-08 02:07:40.818484481 -0800
+@@ -1,4 +1,4 @@
+-# setenv.m4 serial 24
++# setenv.m4 serial 22
+ dnl Copyright (C) 2001-2004, 2006-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -38,6 +38,9 @@ AC_DEFUN([gl_FUNC_SETENV],
+       REPLACE_SETENV=1
+     fi
+   fi
++  if test $HAVE_SETENV$REPLACE_SETENV != 10; then
++    AC_LIBOBJ([setenv])
++  fi
+ ])
+ 
+ # Like gl_FUNC_SETENV, except prepare for separate compilation
+@@ -62,9 +65,9 @@ AC_DEFUN([gl_FUNC_UNSETENV],
+   fi
+   AC_CHECK_FUNCS([unsetenv])
+   if test $ac_cv_func_unsetenv = no; then
+-    HAVE_UNSETENV=0
++    AC_LIBOBJ([unsetenv])
++    gl_PREREQ_UNSETENV
+   else
+-    HAVE_UNSETENV=1
+     dnl Some BSDs return void, failing to do error checking.
+     AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret],
+       [AC_COMPILE_IFELSE(
+@@ -90,6 +93,7 @@ int unsetenv();
+       AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void
+        instead of int.])
+       REPLACE_UNSETENV=1
++      AC_LIBOBJ([unsetenv])
+     fi
+ 
+     dnl Solaris 10 unsetenv does not remove all copies of a name.
+@@ -122,6 +126,7 @@ int unsetenv();
+       [gl_cv_func_unsetenv_works="guessing no"])])
+     if test "$gl_cv_func_unsetenv_works" != yes; then
+       REPLACE_UNSETENV=1
++      AC_LIBOBJ([unsetenv])
+     fi
+   fi
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/signalblocking.m4 libiconv-1.14/srcm4/signalblocking.m4
+--- libiconv-1.14.org//srcm4/signalblocking.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/signalblocking.m4	2012-01-08 02:07:40.834484482 -0800
+@@ -1,4 +1,4 @@
+-# signalblocking.m4 serial 12
++# signalblocking.m4 serial 10
+ dnl Copyright (C) 2001-2002, 2006-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -12,14 +12,31 @@ dnl with or without modifications, as lo
+ AC_DEFUN([gl_SIGNALBLOCKING],
+ [
+   AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+-  AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
+-  if test $gl_cv_type_sigset_t = yes; then
++  signals_not_posix=
++  AC_EGREP_HEADER([sigset_t], [signal.h], , [signals_not_posix=1])
++  if test -z "$signals_not_posix"; then
+     AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1])
+   fi
+   if test -z "$gl_cv_func_sigprocmask"; then
+     HAVE_POSIX_SIGNALBLOCKING=0
++    AC_LIBOBJ([sigprocmask])
++    gl_PREREQ_SIGPROCMASK
+   fi
+ ])
+ 
+-# Prerequisites of lib/sigprocmask.c.
+-AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:])
++# Prerequisites of the part of lib/signal.in.h and of lib/sigprocmask.c.
++AC_DEFUN([gl_PREREQ_SIGPROCMASK],
++[
++  AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
++  AC_CHECK_TYPES([sigset_t],
++    [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no],
++    [#include <signal.h>
++/* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.  */
++#include <sys/types.h>])
++  if test $gl_cv_type_sigset_t != yes; then
++    HAVE_SIGSET_T=0
++  fi
++  dnl HAVE_SIGSET_T is 1 if the system lacks the sigprocmask function but has
++  dnl the sigset_t type.
++  AC_SUBST([HAVE_SIGSET_T])
++])
+diff -Naurp libiconv-1.14.org//srcm4/signal_h.m4 libiconv-1.14/srcm4/signal_h.m4
+--- libiconv-1.14.org//srcm4/signal_h.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/signal_h.m4	2012-01-08 02:07:40.826484480 -0800
+@@ -1,4 +1,4 @@
+-# signal_h.m4 serial 16
++# signal_h.m4 serial 12
+ dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -7,7 +7,6 @@ dnl with or without modifications, as lo
+ AC_DEFUN([gl_SIGNAL_H],
+ [
+   AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+-  AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
+   gl_NEXT_HEADERS([signal.h])
+ 
+ # AIX declares sig_atomic_t to already include volatile, and C89 compilers
+@@ -28,25 +27,10 @@ AC_DEFUN([gl_SIGNAL_H],
+   dnl Check for declarations of anything we want to poison if the
+   dnl corresponding gnulib module is not in use.
+   gl_WARN_ON_USE_PREPARE([[#include <signal.h>
+-    ]], [pthread_sigmask sigaction
+-    sigaddset sigdelset sigemptyset sigfillset sigismember
++    ]], [sigaction sigaddset sigdelset sigemptyset sigfillset sigismember
+     sigpending sigprocmask])
+ ])
+ 
+-AC_DEFUN([gl_CHECK_TYPE_SIGSET_T],
+-[
+-  AC_CHECK_TYPES([sigset_t],
+-    [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no],
+-    [[
+-      #include <signal.h>
+-      /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.  */
+-      #include <sys/types.h>
+-    ]])
+-  if test $gl_cv_type_sigset_t != yes; then
+-    HAVE_SIGSET_T=0
+-  fi
+-])
+-
+ AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR],
+ [
+   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+@@ -58,13 +42,11 @@ AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR],
+ 
+ AC_DEFUN([gl_SIGNAL_H_DEFAULTS],
+ [
+-  GNULIB_PTHREAD_SIGMASK=0;    AC_SUBST([GNULIB_PTHREAD_SIGMASK])
+   GNULIB_SIGNAL_H_SIGPIPE=0;   AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE])
+   GNULIB_SIGPROCMASK=0;        AC_SUBST([GNULIB_SIGPROCMASK])
+   GNULIB_SIGACTION=0;          AC_SUBST([GNULIB_SIGACTION])
+   dnl Assume proper GNU behavior unless another module says otherwise.
+   HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING])
+-  HAVE_PTHREAD_SIGMASK=1;      AC_SUBST([HAVE_PTHREAD_SIGMASK])
+   HAVE_SIGSET_T=1;             AC_SUBST([HAVE_SIGSET_T])
+   HAVE_SIGINFO_T=1;            AC_SUBST([HAVE_SIGINFO_T])
+   HAVE_SIGACTION=1;            AC_SUBST([HAVE_SIGACTION])
+@@ -73,5 +55,4 @@ AC_DEFUN([gl_SIGNAL_H_DEFAULTS],
+   HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1;
+                                AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T])
+   HAVE_SIGHANDLER_T=1;         AC_SUBST([HAVE_SIGHANDLER_T])
+-  REPLACE_PTHREAD_SIGMASK=0;   AC_SUBST([REPLACE_PTHREAD_SIGMASK])
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/stat.m4 libiconv-1.14/srcm4/stat.m4
+--- libiconv-1.14.org//srcm4/stat.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/stat.m4	2012-01-08 02:07:40.854484483 -0800
+@@ -1,4 +1,4 @@
+-# serial 8
++# serial 7
+ 
+ # Copyright (C) 2009-2011 Free Software Foundation, Inc.
+ #
+@@ -58,11 +58,9 @@ AC_DEFUN([gl_FUNC_STAT],
+       AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
+         help when passed a file name with a trailing slash]);;
+   esac
+-])
+-
+-# Prerequisites of lib/stat.c.
+-AC_DEFUN([gl_PREREQ_STAT],
+-[
+-  AC_REQUIRE([AC_C_INLINE])
+-  :
++  if test $REPLACE_STAT = 1; then
++    AC_LIBOBJ([stat])
++    dnl Prerequisites of lib/stat.c.
++    AC_REQUIRE([AC_C_INLINE])
++  fi
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/strerror.m4 libiconv-1.14/srcm4/strerror.m4
+--- libiconv-1.14.org//srcm4/strerror.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/strerror.m4	2012-01-08 02:07:40.890484484 -0800
+@@ -1,4 +1,4 @@
+-# strerror.m4 serial 16
++# strerror.m4 serial 9
+ dnl Copyright (C) 2002, 2007-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -6,73 +6,63 @@ dnl with or without modifications, as lo
+ 
+ AC_DEFUN([gl_FUNC_STRERROR],
+ [
++  AC_REQUIRE([gl_FUNC_STRERROR_SEPARATE])
++  if test $REPLACE_STRERROR = 1; then
++    AC_LIBOBJ([strerror])
++    AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR],
++      [Define this to 1 if strerror is broken.])
++  fi
++])
++
++# Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ).
++AC_DEFUN([gl_FUNC_STRERROR_SEPARATE],
++[
+   AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+   AC_REQUIRE([gl_HEADER_ERRNO_H])
+-  AC_REQUIRE([gl_FUNC_STRERROR_0])
+-  m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
+-    AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
+-  ])
+-  if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
++  if test -z "$ERRNO_H"; then
+     AC_CACHE_CHECK([for working strerror function],
+      [gl_cv_func_working_strerror],
+      [AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <string.h>
+            ]],
+-           [[if (!*strerror (-2)) return 1;]])],
++           [[return !*strerror (-2);]])],
+         [gl_cv_func_working_strerror=yes],
+         [gl_cv_func_working_strerror=no],
+-        [dnl Be pessimistic on cross-compiles for now.
+-         gl_cv_func_working_strerror="guessing no"])
++        [dnl Assume crossbuild works if it compiles.
++         AC_COMPILE_IFELSE(
++           [AC_LANG_PROGRAM(
++              [[#include <string.h>
++              ]],
++              [[return !*strerror (-2);]])],
++           [gl_cv_func_working_strerror=yes],
++           [gl_cv_func_working_strerror=no])
++      ])
+     ])
+-    if test "$gl_cv_func_working_strerror" != yes; then
++    if test $gl_cv_func_working_strerror = no; then
+       dnl The system's strerror() fails to return a string for out-of-range
+       dnl integers. Replace it.
+       REPLACE_STRERROR=1
+     fi
+-    m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
+-      dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's
+-      dnl buffer, we must replace strerror.
+-      case "$gl_cv_func_strerror_r_works" in
+-        *no) REPLACE_STRERROR=1 ;;
+-      esac
+-    ])
+   else
+     dnl The system's strerror() cannot know about the new errno values we add
+-    dnl to <errno.h>, or any fix for strerror(0). Replace it.
++    dnl to <errno.h>. Replace it.
+     REPLACE_STRERROR=1
+   fi
++  if test $REPLACE_STRERROR = 1; then
++    gl_PREREQ_STRERROR
++  fi
+ ])
+ 
+-dnl Detect if strerror(0) passes (that is, does not set errno, and does not
+-dnl return a string that matches strerror(-1)).
+-AC_DEFUN([gl_FUNC_STRERROR_0],
+-[
+-  REPLACE_STRERROR_0=0
+-  AC_CACHE_CHECK([whether strerror(0) succeeds],
+-   [gl_cv_func_strerror_0_works],
+-   [AC_RUN_IFELSE(
+-      [AC_LANG_PROGRAM(
+-         [[#include <string.h>
+-           #include <errno.h>
+-         ]],
+-         [[int result = 0;
+-           char *str;
+-           errno = 0;
+-           str = strerror (0);
+-           if (!*str) result |= 1;
+-           if (errno) result |= 2;
+-           if (strstr (str, "nknown") || strstr (str, "ndefined"))
+-             result |= 4;
+-           return result;]])],
+-      [gl_cv_func_strerror_0_works=yes],
+-      [gl_cv_func_strerror_0_works=no],
+-      [dnl Be pessimistic on cross-compiles for now.
+-       gl_cv_func_strerror_0_works="guessing no"])
+-  ])
+-  if test "$gl_cv_func_strerror_0_works" != yes; then
+-    REPLACE_STRERROR_0=1
+-    AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0)
+-      does not return a message implying success.])
++# Prerequisites of lib/strerror.c.
++AC_DEFUN([gl_PREREQ_STRERROR], [
++  AC_CHECK_DECLS([strerror])
++  AC_CHECK_HEADERS_ONCE([sys/socket.h])
++  if test $ac_cv_header_sys_socket_h != yes; then
++    dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
++    dnl the check for those headers unconditional; yet cygwin reports
++    dnl that the headers are present but cannot be compiled (since on
++    dnl cygwin, all socket information should come from sys/socket.h).
++    AC_CHECK_HEADERS([winsock2.h])
+   fi
+ ])
+diff -Naurp libiconv-1.14.org//srcm4/string_h.m4 libiconv-1.14/srcm4/string_h.m4
+--- libiconv-1.14.org//srcm4/string_h.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/string_h.m4	2012-01-08 02:07:40.894484485 -0800
+@@ -5,7 +5,7 @@
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 21
++# serial 20
+ 
+ # Written by Paul Eggert.
+ 
+@@ -27,9 +27,9 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY],
+   dnl guaranteed by C89.
+   gl_WARN_ON_USE_PREPARE([[#include <string.h>
+     ]],
+-    [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul
+-     strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
+-     strerror_r strsignal strverscmp])
++    [memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup
++     strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r
++     strsignal strverscmp])
+ ])
+ 
+ AC_DEFUN([gl_STRING_MODULE_INDICATOR],
+@@ -43,8 +43,6 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR],
+ 
+ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+ [
+-  GNULIB_FFSL=0;        AC_SUBST([GNULIB_FFSL])
+-  GNULIB_FFSLL=0;       AC_SUBST([GNULIB_FFSLL])
+   GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
+   GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
+   GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
+@@ -82,8 +80,6 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+   GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
+   HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
+   dnl Assume proper GNU behavior unless another module says otherwise.
+-  HAVE_FFSL=1;                  AC_SUBST([HAVE_FFSL])
+-  HAVE_FFSLL=1;                 AC_SUBST([HAVE_FFSLL])
+   HAVE_MEMCHR=1;                AC_SUBST([HAVE_MEMCHR])
+   HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
+   HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
+diff -Naurp libiconv-1.14.org//srcm4/sys_socket_h.m4 libiconv-1.14/srcm4/sys_socket_h.m4
+--- libiconv-1.14.org//srcm4/sys_socket_h.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/sys_socket_h.m4	1969-12-31 16:00:00.000000000 -0800
+@@ -1,177 +0,0 @@
+-# sys_socket_h.m4 serial 22
+-dnl Copyright (C) 2005-2011 Free Software Foundation, Inc.
+-dnl This file is free software; the Free Software Foundation
+-dnl gives unlimited permission to copy and/or distribute it,
+-dnl with or without modifications, as long as this notice is preserved.
+-
+-dnl From Simon Josefsson.
+-
+-AC_DEFUN([gl_HEADER_SYS_SOCKET],
+-[
+-  AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+-  AC_REQUIRE([AC_CANONICAL_HOST])
+-  AC_REQUIRE([AC_C_INLINE])
+-
+-  dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have
+-  dnl old-style declarations (with return type 'int' instead of 'ssize_t')
+-  dnl unless _POSIX_PII_SOCKET is defined.
+-  case "$host_os" in
+-    osf*)
+-      AC_DEFINE([_POSIX_PII_SOCKET], [1],
+-        [Define to 1 in order to get the POSIX compatible declarations
+-         of socket functions.])
+-      ;;
+-  esac
+-
+-  AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
+-    [gl_cv_header_sys_socket_h_selfcontained],
+-    [
+-      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])],
+-        [gl_cv_header_sys_socket_h_selfcontained=yes],
+-        [gl_cv_header_sys_socket_h_selfcontained=no])
+-    ])
+-  if test $gl_cv_header_sys_socket_h_selfcontained = yes; then
+-    dnl If the shutdown function exists, <sys/socket.h> should define
+-    dnl SHUT_RD, SHUT_WR, SHUT_RDWR.
+-    AC_CHECK_FUNCS([shutdown])
+-    if test $ac_cv_func_shutdown = yes; then
+-      AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros],
+-        [gl_cv_header_sys_socket_h_shut],
+-        [
+-          AC_COMPILE_IFELSE(
+-            [AC_LANG_PROGRAM([[#include <sys/socket.h>]],
+-               [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])],
+-            [gl_cv_header_sys_socket_h_shut=yes],
+-            [gl_cv_header_sys_socket_h_shut=no])
+-        ])
+-      if test $gl_cv_header_sys_socket_h_shut = no; then
+-        SYS_SOCKET_H='sys/socket.h'
+-      fi
+-    fi
+-  fi
+-  # We need to check for ws2tcpip.h now.
+-  gl_PREREQ_SYS_H_SOCKET
+-  AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[
+-  /* sys/types.h is not needed according to POSIX, but the
+-     sys/socket.h in i386-unknown-freebsd4.10 and
+-     powerpc-apple-darwin5.5 required it. */
+-#include <sys/types.h>
+-#ifdef HAVE_SYS_SOCKET_H
+-#include <sys/socket.h>
+-#endif
+-#ifdef HAVE_WS2TCPIP_H
+-#include <ws2tcpip.h>
+-#endif
+-])
+-  if test $ac_cv_type_struct_sockaddr_storage = no; then
+-    HAVE_STRUCT_SOCKADDR_STORAGE=0
+-  fi
+-  if test $ac_cv_type_sa_family_t = no; then
+-    HAVE_SA_FAMILY_T=0
+-  fi
+-  if test $ac_cv_type_struct_sockaddr_storage != no; then
+-    AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family],
+-      [],
+-      [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0],
+-      [#include <sys/types.h>
+-       #ifdef HAVE_SYS_SOCKET_H
+-       #include <sys/socket.h>
+-       #endif
+-       #ifdef HAVE_WS2TCPIP_H
+-       #include <ws2tcpip.h>
+-       #endif
+-      ])
+-  fi
+-  if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
+-     || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
+-    SYS_SOCKET_H='sys/socket.h'
+-  fi
+-  gl_PREREQ_SYS_H_WINSOCK2
+-
+-  dnl Check for declarations of anything we want to poison if the
+-  dnl corresponding gnulib module is not in use.
+-  gl_WARN_ON_USE_PREPARE([[
+-/* Some systems require prerequisite headers.  */
+-#include <sys/types.h>
+-#include <sys/socket.h>
+-    ]], [socket connect accept bind getpeername getsockname getsockopt
+-    listen recv send recvfrom sendto setsockopt shutdown accept4])
+-])
+-
+-AC_DEFUN([gl_PREREQ_SYS_H_SOCKET],
+-[
+-  dnl Check prerequisites of the <sys/socket.h> replacement.
+-  AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])
+-  gl_CHECK_NEXT_HEADERS([sys/socket.h])
+-  if test $ac_cv_header_sys_socket_h = yes; then
+-    HAVE_SYS_SOCKET_H=1
+-    HAVE_WS2TCPIP_H=0
+-  else
+-    HAVE_SYS_SOCKET_H=0
+-    if test $ac_cv_header_ws2tcpip_h = yes; then
+-      HAVE_WS2TCPIP_H=1
+-    else
+-      HAVE_WS2TCPIP_H=0
+-    fi
+-  fi
+-  AC_SUBST([HAVE_SYS_SOCKET_H])
+-  AC_SUBST([HAVE_WS2TCPIP_H])
+-])
+-
+-# Common prerequisites of the <sys/socket.h> replacement and of the
+-# <sys/select.h> replacement.
+-# Sets and substitutes HAVE_WINSOCK2_H.
+-AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2],
+-[
+-  m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])])
+-  m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])])
+-  AC_CHECK_HEADERS_ONCE([sys/socket.h])
+-  if test $ac_cv_header_sys_socket_h != yes; then
+-    dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
+-    dnl the check for those headers unconditional; yet cygwin reports
+-    dnl that the headers are present but cannot be compiled (since on
+-    dnl cygwin, all socket information should come from sys/socket.h).
+-    AC_CHECK_HEADERS([winsock2.h])
+-  fi
+-  if test "$ac_cv_header_winsock2_h" = yes; then
+-    HAVE_WINSOCK2_H=1
+-    UNISTD_H_HAVE_WINSOCK2_H=1
+-    SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+-  else
+-    HAVE_WINSOCK2_H=0
+-  fi
+-  AC_SUBST([HAVE_WINSOCK2_H])
+-])
+-
+-AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
+-[
+-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+-  AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+-  dnl Define it also as a C macro, for the benefit of the unit tests.
+-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+-])
+-
+-AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
+-[
+-  GNULIB_SOCKET=0;      AC_SUBST([GNULIB_SOCKET])
+-  GNULIB_CONNECT=0;     AC_SUBST([GNULIB_CONNECT])
+-  GNULIB_ACCEPT=0;      AC_SUBST([GNULIB_ACCEPT])
+-  GNULIB_BIND=0;        AC_SUBST([GNULIB_BIND])
+-  GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME])
+-  GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME])
+-  GNULIB_GETSOCKOPT=0;  AC_SUBST([GNULIB_GETSOCKOPT])
+-  GNULIB_LISTEN=0;      AC_SUBST([GNULIB_LISTEN])
+-  GNULIB_RECV=0;        AC_SUBST([GNULIB_RECV])
+-  GNULIB_SEND=0;        AC_SUBST([GNULIB_SEND])
+-  GNULIB_RECVFROM=0;    AC_SUBST([GNULIB_RECVFROM])
+-  GNULIB_SENDTO=0;      AC_SUBST([GNULIB_SENDTO])
+-  GNULIB_SETSOCKOPT=0;  AC_SUBST([GNULIB_SETSOCKOPT])
+-  GNULIB_SHUTDOWN=0;    AC_SUBST([GNULIB_SHUTDOWN])
+-  GNULIB_ACCEPT4=0;     AC_SUBST([GNULIB_ACCEPT4])
+-  HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
+-  HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
+-                        AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY])
+-  HAVE_SA_FAMILY_T=1;   AC_SUBST([HAVE_SA_FAMILY_T])
+-  HAVE_ACCEPT4=1;       AC_SUBST([HAVE_ACCEPT4])
+-])
+diff -Naurp libiconv-1.14.org//srcm4/warn-on-use.m4 libiconv-1.14/srcm4/warn-on-use.m4
+--- libiconv-1.14.org//srcm4/warn-on-use.m4	2011-08-07 06:42:07.000000000 -0700
++++ libiconv-1.14/srcm4/warn-on-use.m4	2012-01-08 02:07:40.934484487 -0800
+@@ -1,4 +1,4 @@
+-# warn-on-use.m4 serial 4
++# warn-on-use.m4 serial 2
+ dnl Copyright (C) 2010-2011 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -27,8 +27,6 @@ AC_DEFUN([gl_WARN_ON_USE_PREPARE],
+     [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
+       [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
+        undefining macros.])])dnl
+-dnl FIXME: gl_Symbol must be used unquoted until we can assume
+-dnl autoconf 2.64 or newer.
+   for gl_func in m4_flatten([$2]); do
+     AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+     AC_CACHE_CHECK([whether $gl_func is declared without a macro],
+@@ -37,8 +35,8 @@ dnl autoconf 2.64 or newer.
+ [@%:@undef $gl_func
+   (void) $gl_func;])],
+         [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
+-    AS_VAR_IF(gl_Symbol, [yes],
+-      [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
++     AS_VAR_IF(gl_Symbol, [yes],
++       [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
+        dnl shortcut - if the raw declaration exists, then set a cache
+        dnl variable to allow skipping any later AC_CHECK_DECL efforts
+        eval ac_cv_have_decl_$gl_func=yes])
diff --git a/meta/recipes-support/libiconv/libiconv-1.14/autoconf.patch b/meta/recipes-support/libiconv/libiconv-1.14/autoconf.patch
new file mode 100644
index 0000000..5d34ce7
--- /dev/null
+++ b/meta/recipes-support/libiconv/libiconv-1.14/autoconf.patch
@@ -0,0 +1,50 @@
+It adds the variables that are needed
+for autoconf 2.65 to reconfigure libiconv and delete the m4 macros
+directory. Its imported from OE.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: libiconv-1.13.1/configure.ac
+===================================================================
+--- libiconv-1.13.1.orig/configure.ac
++++ libiconv-1.13.1/configure.ac
+@@ -23,7 +23,7 @@ AC_CONFIG_AUX_DIR([build-aux])
+ AM_INIT_AUTOMAKE([libiconv], [1.13.1])
+ AC_CONFIG_HEADERS([config.h lib/config.h])
+ AC_PROG_MAKE_SET
+-
++AC_CONFIG_MACRO_DIR([m4])
+ dnl           checks for basic programs
+ 
+ AC_PROG_CC
+Index: libiconv-1.13.1/libcharset/configure.ac
+===================================================================
+--- libiconv-1.13.1.orig/libcharset/configure.ac
++++ libiconv-1.13.1/libcharset/configure.ac
+@@ -16,17 +16,17 @@ dnl along with the GNU CHARSET Library;
+ dnl write to the Free Software Foundation, Inc., 51 Franklin Street,
+ dnl Fifth Floor, Boston, MA 02110-1301, USA.
+ 
+-AC_PREREQ([2.13])
++AC_PREREQ(2.61)
++AC_INIT([libcharset],[1.4] )
++AC_CONFIG_SRCDIR([lib/localcharset.c])
+ 
+-PACKAGE=libcharset
+-VERSION=1.4
+-
+-AC_INIT([lib/localcharset.c])
+ AC_CONFIG_AUX_DIR([build-aux])
+ AC_CONFIG_HEADER([config.h])
+ AC_PROG_MAKE_SET
+-AC_SUBST([PACKAGE])
+-AC_SUBST([VERSION])
++dnl AC_SUBST(PACKAGE)
++dnl AC_SUBST(VERSION)
++
++AC_CONFIG_MACRO_DIR([m4])
+ 
+ dnl           checks for basic programs
+ 
diff --git a/meta/recipes-support/libiconv/libiconv_1.11.1.bb b/meta/recipes-support/libiconv/libiconv_1.11.1.bb
new file mode 100644
index 0000000..6ce4b96
--- /dev/null
+++ b/meta/recipes-support/libiconv/libiconv_1.11.1.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Character encoding support library"
+DESCRIPTION = "GNU libiconv - libiconv is for you if your application needs to support \
+multiple character encodings, but that support lacks from your system."
+HOMEPAGE = "http://www.gnu.org/software/libiconv"
+SECTION = "libs"
+NOTES = "Needs to be stripped down to: ascii iso8859-1 eucjp iso-2022jp gb utf8"
+PROVIDES = "virtual/libiconv"
+
+LICENSE = "LGPLv2.0"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674 \
+                    file://libcharset/COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
+           file://autoconf.patch \
+	   file://shared_preloadable_libiconv_linux.patch \
+          "
+
+SRC_URI[md5sum] = "d42b97f6ef5dd0ba4469d520ed732fed"
+SRC_URI[sha256sum] = "e78c347a1a0cb15f2648519e9799151f4b4a934b61ad9ee7424478efe2b8257f"
+
+S = "${WORKDIR}/libiconv-${PV}"
+
+inherit autotools pkgconfig gettext
+
+python __anonymous() {
+    if d.getVar("TCLIBC", True) == "glibc":
+        raise bb.parse.SkipPackage("libiconv is provided for use with uClibc only - glibc already provides iconv")
+}
+
+EXTRA_OECONF += "--enable-shared --enable-static --enable-relocatable"
+
+LEAD_SONAME = "libiconv.so"
+
+do_configure_prepend () {
+	rm -f ${S}/m4/libtool.m4 ${S}/m4/ltoptions.m4 ${S}/m4/ltsugar.m4 ${S}/m4/ltversion.m4 ${S}/m4/lt~obsolete.m4 ${S}/libcharset/m4/libtool.m4 ${S}/libcharset/m4/ltoptions.m4 ${S}/libcharset/m4/ltsugar.m4 ${S}/libcharset/m4/ltversion.m4 ${S}/libcharset/m4/lt~obsolete.m4
+}
+
+do_configure_append () {
+        # forcibly remove RPATH from libtool
+        sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' *libtool
+        sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=_NO_RPATH_|g' *libtool
+}
+
+do_install_append () {
+	rm -rf ${D}${libdir}/preloadable_libiconv.so
+	rm -rf ${D}${libdir}/charset.alias
+}
diff --git a/meta/recipes-support/libiconv/libiconv_1.14.bb b/meta/recipes-support/libiconv/libiconv_1.14.bb
new file mode 100644
index 0000000..1b6fe09
--- /dev/null
+++ b/meta/recipes-support/libiconv/libiconv_1.14.bb
@@ -0,0 +1,51 @@
+SUMMARY = "Character encoding support library"
+DESCRIPTION = "GNU libiconv - libiconv is for you if your application needs to support \
+multiple character encodings, but that support lacks from your system."
+HOMEPAGE = "http://www.gnu.org/software/libiconv"
+SECTION = "libs"
+NOTES = "Needs to be stripped down to: ascii iso8859-1 eucjp iso-2022jp gb utf8"
+PROVIDES = "virtual/libiconv"
+PR = "r1"
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674 \
+                    file://libcharset/COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674"
+
+SRC_URI = "${GNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
+           file://autoconf.patch \
+           file://add-relocatable-module.patch \
+          "
+
+SRC_URI[md5sum] = "e34509b1623cec449dfeb73d7ce9c6c6"
+SRC_URI[sha256sum] = "72b24ded17d687193c3366d0ebe7cde1e6b18f0df8c55438ac95be39e8a30613"
+
+S = "${WORKDIR}/libiconv-${PV}"
+
+inherit autotools pkgconfig gettext
+
+python __anonymous() {
+    if d.getVar("TARGET_OS", True) != "linux":
+        return
+    if d.getVar("TCLIBC", True) == "glibc":
+        raise bb.parse.SkipPackage("libiconv is provided for use with uClibc only - glibc already provides iconv")
+}
+
+EXTRA_OECONF += "--enable-shared --enable-static --enable-relocatable"
+
+LEAD_SONAME = "libiconv.so"
+
+do_configure_prepend () {
+	rm -f ${S}/m4/libtool.m4 ${S}/m4/ltoptions.m4 ${S}/m4/ltsugar.m4 ${S}/m4/ltversion.m4 ${S}/m4/lt~obsolete.m4 ${S}/libcharset/m4/libtool.m4 ${S}/libcharset/m4/ltoptions.m4 ${S}/libcharset/m4/ltsugar.m4 ${S}/libcharset/m4/ltversion.m4 ${S}/libcharset/m4/lt~obsolete.m4
+}
+
+do_configure_append () {
+        # forcibly remove RPATH from libtool
+        sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' *libtool
+        sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=_NO_RPATH_|g' *libtool
+}
+
+do_install_append () {
+	rm -rf ${D}${libdir}/preloadable_libiconv.so
+	rm -rf ${D}${libdir}/charset.alias
+}
+
+BBCLASSEXTEND = "nativesdk"
