summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaakov Selkowitz <yselkowitz@users.sourceforge.net>2011-10-31 19:59:09 -0500
committerYaakov Selkowitz <yselkowitz@users.sourceforge.net>2011-10-31 19:59:09 -0500
commit8bd628b6cd48fbbf9cc5dbcce6e53a4513cc8b31 (patch)
tree83867e72cd6ff149cb61832d5a96b29b06add99c
parentbeac5c2891fbbb03d9c3fd956d0f09244258116e (diff)
downloadcygwin-gettext-8bd628b6cd48fbbf9cc5dbcce6e53a4513cc8b31.tar.gz
cygwin-gettext-8bd628b6cd48fbbf9cc5dbcce6e53a4513cc8b31.tar.xz
cygwin-gettext-8bd628b6cd48fbbf9cc5dbcce6e53a4513cc8b31.zip
cygwin-gettext 0.18.1.1-1
-rw-r--r--cygwin-gettext.spec50
-rw-r--r--gettext-0.18.1.1-autopoint-V.patch54
-rw-r--r--gettext-0.18.1.1-locale.patch152
-rw-r--r--gettext-0.18.1.1-reloc.patch1002
-rw-r--r--sources5
5 files changed, 1255 insertions, 8 deletions
diff --git a/cygwin-gettext.spec b/cygwin-gettext.spec
index 38c64e8..d183c56 100644
--- a/cygwin-gettext.spec
+++ b/cygwin-gettext.spec
@@ -6,17 +6,21 @@
%define __debug_install_post %{_cygwin_debug_install_post}
Name: cygwin-gettext
-Version: 0.17
-Release: 2
+Version: 0.18.1.1
+Release: 1
Summary: GNU libraries and utilities for producing multi-lingual messages
License: GPLv2+ and LGPLv2+
Group: Development/Libraries
URL: http://www.gnu.org/software/gettext/
-Source0: http://ftp.gnu.org/pub/gnu/gettext/gettext-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
+Source0: http://ftp.gnu.org/pub/gnu/gettext/gettext-%{version}.tar.gz
+Patch0: gettext-0.18.1.1-autopoint-V.patch
+Patch1: gettext-0.18.1.1-locale.patch
+Patch2: gettext-0.18.1.1-reloc.patch
+
BuildRequires: cygwin-filesystem
BuildRequires: cygwin
BuildRequires: cygwin-gcc
@@ -49,6 +53,9 @@ Static version of the Cygwin Gettext library.
%prep
%setup -q -n gettext-%{version}
+%patch0 -p2
+%patch1 -p2
+%patch2 -p2
rm -f m4/libtool.m4 gettext-tools/gnulib-m4/openmp.m4
touch m4/libtool.m4 gettext-tools/gnulib-m4/openmp.m4
@@ -57,15 +64,40 @@ libtoolize --copy --force
%build
+# gnulib uses many AC_TRY_RUN/AC_RUN_IFELSE tests, but assumes functions
+# are broken when cross-compiling and tries replacing them, eventually leading
+# to compile errors in gettext-tools. The correct values below are based on
+# comparison with a Cygwin-native build.
%{_cygwin_configure} \
- gl_cv_cc_visibility=no \
--disable-java \
--disable-native-java \
--disable-csharp \
- --disable-openmp \
--enable-static --enable-shared \
- --enable-threads=win32 \
- --without-emacs
+ --enable-threads=posix \
+ --without-emacs \
+ --with-included-glib \
+ --with-included-libcroco \
+ --with-included-libunistring \
+ --with-included-libxml \
+ gl_cv_cc_visibility=no \
+ gl_cv_func_btowc_eof=yes gl_cv_func_btowc_nul=yes \
+ gl_cv_func_dup2_works=yes \
+ gl_cv_func_fcntl_f_dupfd_works=yes \
+ gl_cv_func_working_getdelim=yes \
+ gl_cv_func_gettimeofday_clobber=no \
+ ac_cv_func_lstat_dereferences_slashed_symlink=yes \
+ gl_cv_func_memchr_works=yes \
+ gl_cv_func_svid_putenv=yes \
+ gl_cv_func_readlink_works=yes \
+ gl_cv_func_rmdir_works=yes \
+ gl_cv_func_setenv_works=yes gl_cv_func_unsetenv_works=yes \
+ gl_cv_func_stat_file_slash=yes \
+ gl_cv_func_stpncpy=yes \
+ gl_cv_func_strstr_linear=yes \
+ gl_cv_func_symlink_works=yes \
+ gl_cv_func_wctob_works=yes \
+ gl_cv_func_wcwidth_works=yes
+
make %{?_smp_mflags}
@@ -126,6 +158,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Oct 31 2011 Yaakov Selkowitz <cygwin-ports-general@lists.sourceforge.net> - 0.18.1.1-1
+- Version bump.
+- Included relocation and locale patches from Cygwin gettext 0.18.1.1-2.
+
* Sun Aug 21 2011 Yaakov Selkowitz <cygwin-ports-general@lists.sourceforge.net> - 0.17-2
- Remove Cygwin EXEs and other files not needed for cross-compiling.
diff --git a/gettext-0.18.1.1-autopoint-V.patch b/gettext-0.18.1.1-autopoint-V.patch
new file mode 100644
index 0000000..d49207b
--- /dev/null
+++ b/gettext-0.18.1.1-autopoint-V.patch
@@ -0,0 +1,54 @@
+--- origsrc/gettext-0.18.1.1/gettext-tools/misc/autopoint.in 2010-06-06 08:49:57.000000000 -0400
++++ src/gettext-0.18.1.1/gettext-tools/misc/autopoint.in 2011-10-16 00:57:42.789133600 -0400
+@@ -161,9 +161,9 @@ Options:
+ --version print version information and exit
+ -f, --force force overwriting of files that already exist
+ -n, --dry-run print modifications but don't perform them"
+-# echo "\
+-# -V version copy the infrastructure of the specified gettext version
+-# (dangerous)"
++ echo "\
++ -V version copy the infrastructure of the specified gettext version
++ (dangerous)"
+ echo "
+ Report bugs to <bug-gnu-gettext@gnu.org>."
+ }
+@@ -210,17 +210,17 @@ func_fatal_error ()
+ force=yes ;;
+ --help | --hel | --he | --h )
+ func_usage; exit 0 ;;
+-# -V ) # Some people put a space between -V and the version number.
+-# shift
+-# if test $# = 0; then
+-# func_usage 1>&2
+-# exit 1
+-# fi
+-# ver=$1;
+-# shift ;;
+-# -V*) # Some people omit the space between -V and the version number.
+-# ver=`echo "X$1" | sed -e 's/^X-V//'`
+-# shift ;;
++ -V ) # Some people put a space between -V and the version number.
++ shift
++ if test $# = 0; then
++ func_usage 1>&2
++ exit 1
++ fi
++ ver=$1;
++ shift ;;
++ -V*) # Some people omit the space between -V and the version number.
++ ver=`echo "X$1" | sed -e 's/^X-V//'`
++ shift ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v )
+ func_version
+ exit 0 ;;
+@@ -276,7 +276,7 @@ fi
+ if test -n "$xver"; then
+ if test -n "$ver"; then
+ if test "X$ver" != "X$xver"; then
+- func_fatal_error "Version mismatch: specified -V $ver but the package uses gettext version $xver"
++ echo "autopoint: warning: Version mismatch: specified -V $ver but the package uses gettext version $xver. Forcibly upgrading to $ver" 1>&2
+ fi
+ else
+ ver="$xver"
+
diff --git a/gettext-0.18.1.1-locale.patch b/gettext-0.18.1.1-locale.patch
new file mode 100644
index 0000000..6d80e36
--- /dev/null
+++ b/gettext-0.18.1.1-locale.patch
@@ -0,0 +1,152 @@
+--- old/gettext-0.18.1.1/gettext-runtime/intl/localename.c 2011-10-15 00:21:37.853133600 -0400
++++ new/gettext-0.18.1.1/gettext-runtime/intl/localename.c 2011-10-15 00:29:27.601133600 -0400
+@@ -59,7 +59,7 @@
+ # define WIN32_NATIVE
+ #endif
+
+-#if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */
++#if defined WIN32_NATIVE /* WIN32 */
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ /* List of language codes, sorted by value:
+@@ -1407,7 +1407,7 @@
+ #endif
+
+
+-#if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */
++#if defined WIN32_NATIVE /* WIN32 */
+
+ /* Canonicalize a Win32 native locale name to a Unix locale name.
+ NAME is a sufficiently large buffer.
+@@ -2770,8 +2770,8 @@
+ setting of 'local'."
+ However it does not specify the exact format. Neither do SUSV2 and
+ ISO C 99. So we can use this feature only on selected systems (e.g.
+- those using GNU C Library). */
+-#if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2)
++ those using GNU C Library, or cygwin [1.5 and 1.7+]). */
++#if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2) || defined __CYGWIN__
+ # define HAVE_LOCALE_NULL
+ #endif
+
+@@ -2826,11 +2826,6 @@
+ Ignore invalid LANG value set by the Terminal application. */
+ if (strcmp (retval, "UTF-8") != 0)
+ #endif
+-#if defined __CYGWIN__
+- /* Cygwin.
+- Ignore dummy LANG value set by ~/.profile. */
+- if (strcmp (retval, "C.UTF-8") != 0)
+-#endif
+ return retval;
+ }
+
+@@ -2923,7 +2918,7 @@
+
+ # endif
+
+-# if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */
++# if defined WIN32_NATIVE /* WIN32 */
+ {
+ LCID lcid;
+
+@@ -2933,6 +2928,23 @@
+ return gl_locale_name_from_win32_LCID (lcid);
+ }
+ # endif
++# if defined __CYGWIN__
++ {
++ /* Rarely arrive here. This function is called only when an earlier
++ * call to gl_locale_name_posix() or gl_locale_name_environ()
++ * returned NULL. That first function now simply delegates to
++ * setlocale (LC_*, NULL), which never fails on cygwin. But...for
++ * completeness, or when called after gl_locale_name_environ() and
++ * none are set, go ahead and specify the cygwin default. Cheat a bit
++ * to distinguish old cygwin (1.5 and below) from new cygwin (1.7+).
++ */
++# if PATH_MAX < 261 /* cygwin 1.5 or below */
++ return "C";
++# else /* PATH_MAX = 4096, cygwin 1.7 or above */
++ return "C.UTF-8";
++# endif
++ }
++# endif
+ #endif
+ }
+
+--- old/gettext-0.18.1.1/gettext-tools/gnulib-lib/localename.c 2011-10-15 00:21:37.853133600 -0400
++++ new/gettext-0.18.1.1/gettext-tools/gnulib-lib/localename.c 2011-10-15 00:29:27.601133600 -0400
+@@ -59,7 +59,7 @@
+ # define WIN32_NATIVE
+ #endif
+
+-#if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */
++#if defined WIN32_NATIVE /* WIN32 */
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ /* List of language codes, sorted by value:
+@@ -1407,7 +1407,7 @@
+ #endif
+
+
+-#if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */
++#if defined WIN32_NATIVE /* WIN32 */
+
+ /* Canonicalize a Win32 native locale name to a Unix locale name.
+ NAME is a sufficiently large buffer.
+@@ -2770,8 +2770,8 @@
+ setting of 'local'."
+ However it does not specify the exact format. Neither do SUSV2 and
+ ISO C 99. So we can use this feature only on selected systems (e.g.
+- those using GNU C Library). */
+-#if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2)
++ those using GNU C Library, or cygwin [1.5 and 1.7+]). */
++#if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2) || defined __CYGWIN__
+ # define HAVE_LOCALE_NULL
+ #endif
+
+@@ -2826,11 +2826,6 @@
+ Ignore invalid LANG value set by the Terminal application. */
+ if (strcmp (retval, "UTF-8") != 0)
+ #endif
+-#if defined __CYGWIN__
+- /* Cygwin.
+- Ignore dummy LANG value set by ~/.profile. */
+- if (strcmp (retval, "C.UTF-8") != 0)
+-#endif
+ return retval;
+ }
+
+@@ -2923,7 +2918,7 @@
+
+ # endif
+
+-# if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */
++# if defined WIN32_NATIVE /* WIN32 */
+ {
+ LCID lcid;
+
+@@ -2933,6 +2928,23 @@
+ return gl_locale_name_from_win32_LCID (lcid);
+ }
+ # endif
++# if defined __CYGWIN__
++ {
++ /* Rarely arrive here. This function is called only when an earlier
++ * call to gl_locale_name_posix() or gl_locale_name_environ()
++ * returned NULL. That first function now simply delegates to
++ * setlocale (LC_*, NULL), which never fails on cygwin. But...for
++ * completeness, or when called after gl_locale_name_environ() and
++ * none are set, go ahead and specify the cygwin default. Cheat a bit
++ * to distinguish old cygwin (1.5 and below) from new cygwin (1.7+).
++ */
++# if PATH_MAX < 261 /* cygwin 1.5 or below */
++ return "C";
++# else /* PATH_MAX = 4096, cygwin 1.7 or above */
++ return "C.UTF-8";
++# endif
++ }
++# endif
+ #endif
+ }
+
diff --git a/gettext-0.18.1.1-reloc.patch b/gettext-0.18.1.1-reloc.patch
new file mode 100644
index 0000000..86dea96
--- /dev/null
+++ b/gettext-0.18.1.1-reloc.patch
@@ -0,0 +1,1002 @@
+--- origsrc/gettext-0.18.1.1/gettext-runtime/gnulib-lib/progreloc.c 2010-02-16 15:31:28.000000000 -0600
++++ src/gettext-0.18.1.1/gettext-runtime/gnulib-lib/progreloc.c 2011-10-31 18:40:26.619853680 -0500
+@@ -16,6 +16,7 @@
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+
++#define _GL_USE_STDLIB_ALLOC 1
+ #include <config.h>
+
+ /* Specification. */
+@@ -34,11 +35,11 @@
+ # include <mach-o/dyld.h>
+ #endif
+
+-#if defined _WIN32 || defined __WIN32__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+ # define WIN32_NATIVE
+ #endif
+
+-#if defined WIN32_NATIVE || defined __CYGWIN__
++#ifdef WIN32_NATIVE
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ #endif
+@@ -59,6 +60,10 @@
+ # include "xalloc.h"
+ #endif
+
++#ifndef O_EXEC
++# define O_EXEC O_RDONLY /* This is often close enough in older systems. */
++#endif
++
+ /* Declare canonicalize_file_name.
+ The <stdlib.h> included above may be the system's one, not the gnulib
+ one. */
+@@ -68,8 +73,8 @@ extern char * canonicalize_file_name (co
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+- /* Win32, Cygwin, OS/2, DOS */
++#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
+ # define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ # define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+@@ -89,12 +94,15 @@ extern char * canonicalize_file_name (co
+ #undef open
+ #undef close
+
++/* Use the system functions, not the gnulib overrides in this file. */
++#undef sprintf
++
+ #undef set_program_name
+
+
+ #if ENABLE_RELOCATABLE
+
+-#ifdef __linux__
++#if defined __linux__ || defined __CYGWIN__
+ /* File descriptor of the executable.
+ (Only used to verify that we find the correct executable.) */
+ static int executable_fd = -1;
+@@ -104,12 +112,13 @@ static int executable_fd = -1;
+ static bool
+ maybe_executable (const char *filename)
+ {
+- /* Woe32 lacks the access() function, but Cygwin doesn't. */
+-#if !(defined WIN32_NATIVE && !defined __CYGWIN__)
++ /* Woe32 lacks the access() function. */
++#if !defined WIN32_NATIVE
+ if (access (filename, X_OK) < 0)
+ return false;
++#endif
+
+-#ifdef __linux__
++#if defined __linux__ || defined __CYGWIN__
+ if (executable_fd >= 0)
+ {
+ /* If we already have an executable_fd, check that filename points to
+@@ -128,7 +137,6 @@ maybe_executable (const char *filename)
+ }
+ }
+ #endif
+-#endif
+
+ return true;
+ }
+@@ -140,7 +148,12 @@ maybe_executable (const char *filename)
+ static char *
+ find_executable (const char *argv0)
+ {
+-#if defined WIN32_NATIVE || defined __CYGWIN__
++#if defined WIN32_NATIVE
++ /* Native Win32 only.
++ On Cygwin, it is better to use the Cygwin provided /proc interface, than
++ to use native Win32 API and cygwin_conv_to_posix_path, because it supports
++ longer file names
++ (see <http://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */
+ char location[MAX_PATH];
+ int length = GetModuleFileName (NULL, location, sizeof (location));
+ if (length < 0)
+@@ -148,32 +161,9 @@ find_executable (const char *argv0)
+ if (!IS_PATH_WITH_DIR (location))
+ /* Shouldn't happen. */
+ return NULL;
+- {
+-#if defined __CYGWIN__
+- /* cygwin-1.5.13 (2005-03-01) or newer would also allow a Linux-like
+- implementation: readlink of "/proc/self/exe". But using the
+- result of the Win32 system call is simpler and is consistent with the
+- code in relocatable.c. */
+- /* On Cygwin, we need to convert paths coming from Win32 system calls
+- to the Unix-like slashified notation. */
+- static char location_as_posix_path[2 * MAX_PATH];
+- /* There's no error return defined for cygwin_conv_to_posix_path.
+- See cygwin-api/func-cygwin-conv-to-posix-path.html.
+- Does it overflow the buffer of expected size MAX_PATH or does it
+- truncate the path? I don't know. Let's catch both. */
+- cygwin_conv_to_posix_path (location, location_as_posix_path);
+- location_as_posix_path[MAX_PATH - 1] = '\0';
+- if (strlen (location_as_posix_path) >= MAX_PATH - 1)
+- /* A sign of buffer overflow or path truncation. */
+- return NULL;
+- /* Call canonicalize_file_name, because Cygwin supports symbolic links. */
+- return canonicalize_file_name (location_as_posix_path);
+-#else
+- return xstrdup (location);
+-#endif
+- }
+-#else /* Unix && !Cygwin */
+-#ifdef __linux__
++ return xstrdup (location);
++#else /* Unix */
++# ifdef __linux__
+ /* The executable is accessible as /proc/<pid>/exe. In newer Linux
+ versions, also as /proc/self/exe. Linux >= 2.1 provides a symlink
+ to the true pathname; older Linux versions give only device and ino,
+@@ -185,7 +175,7 @@ find_executable (const char *argv0)
+ if (link != NULL && link[0] != '[')
+ return link;
+ if (executable_fd < 0)
+- executable_fd = open ("/proc/self/exe", O_RDONLY, 0);
++ executable_fd = open ("/proc/self/exe", O_EXEC, 0);
+
+ {
+ char buf[6+10+5];
+@@ -194,11 +184,24 @@ find_executable (const char *argv0)
+ if (link != NULL && link[0] != '[')
+ return link;
+ if (executable_fd < 0)
+- executable_fd = open (buf, O_RDONLY, 0);
++ executable_fd = open (buf, O_EXEC, 0);
+ }
+ }
+-#endif
+-#if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH
++# endif
++# ifdef __CYGWIN__
++ /* The executable is accessible as /proc/<pid>/exe, at least in
++ Cygwin >= 1.5. */
++ {
++ char *link;
++
++ link = xreadlink ("/proc/self/exe");
++ if (link != NULL)
++ return link;
++ if (executable_fd < 0)
++ executable_fd = open ("/proc/self/exe", O_EXEC, 0);
++ }
++# endif
++# if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH
+ /* On MacOS X 10.2 or newer, the function
+ int _NSGetExecutablePath (char *buf, uint32_t *bufsize);
+ can be used to retrieve the executable's full path. */
+@@ -207,7 +210,7 @@ find_executable (const char *argv0)
+ if (_NSGetExecutablePath (location, &length) == 0
+ && location[0] == '/')
+ return canonicalize_file_name (location);
+-#endif
++# endif
+ /* Guess the executable's full path. We assume the executable has been
+ called via execlp() or execvp() with properly set up argv[0]. The
+ login(1) convention to add a '-' prefix to argv[0] is not supported. */
+@@ -248,10 +251,10 @@ find_executable (const char *argv0)
+ /* We have a path item at p, of length p_len.
+ Now concatenate the path item and argv0. */
+ concat_name = (char *) xmalloc (p_len + strlen (argv0) + 2);
+-#ifdef NO_XMALLOC
++# ifdef NO_XMALLOC
+ if (concat_name == NULL)
+ return NULL;
+-#endif
++# endif
+ if (p_len == 0)
+ /* An empty PATH element designates the current directory. */
+ strcpy (concat_name, argv0);
+--- origsrc/gettext-0.18.1.1/gettext-runtime/gnulib-lib/relocatable.c 2010-02-16 15:31:28.000000000 -0600
++++ src/gettext-0.18.1.1/gettext-runtime/gnulib-lib/relocatable.c 2011-10-31 18:40:29.867853399 -0500
+@@ -25,6 +23,7 @@
+ # define _GNU_SOURCE 1
+ #endif
+
++#define _GL_USE_STDLIB_ALLOC 1
+ #include <config.h>
+
+ /* Specification. */
+@@ -43,7 +42,7 @@
+ # include "xalloc.h"
+ #endif
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ #endif
+@@ -70,8 +69,8 @@
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+- /* Win32, Cygwin, OS/2, DOS */
++#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
+ # define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ # define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+@@ -86,6 +85,19 @@
+ # define FILE_SYSTEM_PREFIX_LEN(P) 0
+ #endif
+
++/* Whether to enable the more costly support for relocatable libraries.
++ It allows libraries to be have been installed with a different original
++ prefix than the program. But it is quite costly, especially on Cygwin
++ platforms, see below. Therefore we enable it by default only on native
++ Win32 platforms. */
++#ifndef ENABLE_COSTLY_RELOCATABLE
++# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++# define ENABLE_COSTLY_RELOCATABLE 1
++# else
++# define ENABLE_COSTLY_RELOCATABLE 0
++# endif
++#endif
++
+ /* Original installation prefix. */
+ static char *orig_prefix;
+ static size_t orig_prefix_len;
+@@ -155,7 +167,7 @@ set_relocation_prefix (const char *orig_
+ #endif
+ }
+
+-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
++#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
+
+ /* Convenience function:
+ Computes the current installation prefix, based on the original
+@@ -285,12 +297,17 @@ compute_curr_prefix (const char *orig_in
+
+ #endif /* !IN_LIBRARY || PIC */
+
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+
+ /* Full pathname of shared library, or NULL. */
+ static char *shared_library_fullname;
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++/* Native Win32 only.
++ On Cygwin, it is better to use the Cygwin provided /proc interface, than
++ to use native Win32 API and cygwin_conv_to_posix_path, because it supports
++ longer file names
++ (see <http://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */
+
+ /* Determine the full pathname of the shared library when it is loaded. */
+
+@@ -312,37 +329,23 @@ DllMain (HINSTANCE module_handle, DWORD
+ /* Shouldn't happen. */
+ return FALSE;
+
+- {
+-#if defined __CYGWIN__
+- /* On Cygwin, we need to convert paths coming from Win32 system calls
+- to the Unix-like slashified notation. */
+- static char location_as_posix_path[2 * MAX_PATH];
+- /* There's no error return defined for cygwin_conv_to_posix_path.
+- See cygwin-api/func-cygwin-conv-to-posix-path.html.
+- Does it overflow the buffer of expected size MAX_PATH or does it
+- truncate the path? I don't know. Let's catch both. */
+- cygwin_conv_to_posix_path (location, location_as_posix_path);
+- location_as_posix_path[MAX_PATH - 1] = '\0';
+- if (strlen (location_as_posix_path) >= MAX_PATH - 1)
+- /* A sign of buffer overflow or path truncation. */
+- return FALSE;
+- shared_library_fullname = strdup (location_as_posix_path);
+-#else
+- shared_library_fullname = strdup (location);
+-#endif
+- }
++ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+ }
+
+-#else /* Unix except Cygwin */
++#else /* Unix */
+
+ static void
+ find_shared_library_fullname ()
+ {
+-#if defined __linux__ && __GLIBC__ >= 2
+- /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
++#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
++ /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
++ function.
++ Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
++ But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
++ Cygwin 1.7. */
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+@@ -387,7 +390,7 @@ find_shared_library_fullname ()
+ #endif
+ }
+
+-#endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */
++#endif /* WIN32 / Unix */
+
+ /* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+@@ -395,7 +398,7 @@ find_shared_library_fullname ()
+ static char *
+ get_shared_library_fullname ()
+ {
+-#if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)
++#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+@@ -415,7 +418,7 @@ get_shared_library_fullname ()
+ const char *
+ relocate (const char *pathname)
+ {
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+--- origsrc/gettext-0.18.1.1/gettext-runtime/intl/relocatable.c 2010-06-06 07:49:57.000000000 -0500
++++ src/gettext-0.18.1.1/gettext-runtime/intl/relocatable.c 2011-10-31 18:40:29.867853399 -0500
+@@ -25,6 +23,7 @@
+ # define _GNU_SOURCE 1
+ #endif
+
++#define _GL_USE_STDLIB_ALLOC 1
+ #include <config.h>
+
+ /* Specification. */
+@@ -43,7 +42,7 @@
+ # include "xalloc.h"
+ #endif
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ #endif
+@@ -70,8 +69,8 @@
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+- /* Win32, Cygwin, OS/2, DOS */
++#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
+ # define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ # define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+@@ -86,6 +85,19 @@
+ # define FILE_SYSTEM_PREFIX_LEN(P) 0
+ #endif
+
++/* Whether to enable the more costly support for relocatable libraries.
++ It allows libraries to be have been installed with a different original
++ prefix than the program. But it is quite costly, especially on Cygwin
++ platforms, see below. Therefore we enable it by default only on native
++ Win32 platforms. */
++#ifndef ENABLE_COSTLY_RELOCATABLE
++# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++# define ENABLE_COSTLY_RELOCATABLE 1
++# else
++# define ENABLE_COSTLY_RELOCATABLE 0
++# endif
++#endif
++
+ /* Original installation prefix. */
+ static char *orig_prefix;
+ static size_t orig_prefix_len;
+@@ -155,7 +167,7 @@ set_relocation_prefix (const char *orig_
+ #endif
+ }
+
+-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
++#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
+
+ /* Convenience function:
+ Computes the current installation prefix, based on the original
+@@ -285,12 +297,17 @@ compute_curr_prefix (const char *orig_in
+
+ #endif /* !IN_LIBRARY || PIC */
+
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+
+ /* Full pathname of shared library, or NULL. */
+ static char *shared_library_fullname;
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++/* Native Win32 only.
++ On Cygwin, it is better to use the Cygwin provided /proc interface, than
++ to use native Win32 API and cygwin_conv_to_posix_path, because it supports
++ longer file names
++ (see <http://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */
+
+ /* Determine the full pathname of the shared library when it is loaded. */
+
+@@ -312,37 +329,23 @@ DllMain (HINSTANCE module_handle, DWORD
+ /* Shouldn't happen. */
+ return FALSE;
+
+- {
+-#if defined __CYGWIN__
+- /* On Cygwin, we need to convert paths coming from Win32 system calls
+- to the Unix-like slashified notation. */
+- static char location_as_posix_path[2 * MAX_PATH];
+- /* There's no error return defined for cygwin_conv_to_posix_path.
+- See cygwin-api/func-cygwin-conv-to-posix-path.html.
+- Does it overflow the buffer of expected size MAX_PATH or does it
+- truncate the path? I don't know. Let's catch both. */
+- cygwin_conv_to_posix_path (location, location_as_posix_path);
+- location_as_posix_path[MAX_PATH - 1] = '\0';
+- if (strlen (location_as_posix_path) >= MAX_PATH - 1)
+- /* A sign of buffer overflow or path truncation. */
+- return FALSE;
+- shared_library_fullname = strdup (location_as_posix_path);
+-#else
+- shared_library_fullname = strdup (location);
+-#endif
+- }
++ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+ }
+
+-#else /* Unix except Cygwin */
++#else /* Unix */
+
+ static void
+ find_shared_library_fullname ()
+ {
+-#if defined __linux__ && __GLIBC__ >= 2
+- /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
++#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
++ /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
++ function.
++ Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
++ But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
++ Cygwin 1.7. */
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+@@ -387,7 +390,7 @@ find_shared_library_fullname ()
+ #endif
+ }
+
+-#endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */
++#endif /* WIN32 / Unix */
+
+ /* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+@@ -395,7 +398,7 @@ find_shared_library_fullname ()
+ static char *
+ get_shared_library_fullname ()
+ {
+-#if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)
++#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+@@ -415,7 +418,7 @@ get_shared_library_fullname ()
+ const char *
+ relocate (const char *pathname)
+ {
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+--- origsrc/gettext-0.18.1.1/gettext-tools/gnulib-lib/progreloc.c 2010-05-24 04:42:46.000000000 -0500
++++ src/gettext-0.18.1.1/gettext-tools/gnulib-lib/progreloc.c 2011-10-31 18:40:26.620853680 -0500
+@@ -16,6 +16,7 @@
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+
++#define _GL_USE_STDLIB_ALLOC 1
+ #include <config.h>
+
+ /* Specification. */
+@@ -34,11 +35,11 @@
+ # include <mach-o/dyld.h>
+ #endif
+
+-#if defined _WIN32 || defined __WIN32__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+ # define WIN32_NATIVE
+ #endif
+
+-#if defined WIN32_NATIVE || defined __CYGWIN__
++#ifdef WIN32_NATIVE
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ #endif
+@@ -59,6 +60,10 @@
+ # include "xalloc.h"
+ #endif
+
++#ifndef O_EXEC
++# define O_EXEC O_RDONLY /* This is often close enough in older systems. */
++#endif
++
+ /* Declare canonicalize_file_name.
+ The <stdlib.h> included above may be the system's one, not the gnulib
+ one. */
+@@ -68,8 +73,8 @@ extern char * canonicalize_file_name (co
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+- /* Win32, Cygwin, OS/2, DOS */
++#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
+ # define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ # define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+@@ -89,12 +94,15 @@ extern char * canonicalize_file_name (co
+ #undef open
+ #undef close
+
++/* Use the system functions, not the gnulib overrides in this file. */
++#undef sprintf
++
+ #undef set_program_name
+
+
+ #if ENABLE_RELOCATABLE
+
+-#ifdef __linux__
++#if defined __linux__ || defined __CYGWIN__
+ /* File descriptor of the executable.
+ (Only used to verify that we find the correct executable.) */
+ static int executable_fd = -1;
+@@ -104,12 +112,13 @@ static int executable_fd = -1;
+ static bool
+ maybe_executable (const char *filename)
+ {
+- /* Woe32 lacks the access() function, but Cygwin doesn't. */
+-#if !(defined WIN32_NATIVE && !defined __CYGWIN__)
++ /* Woe32 lacks the access() function. */
++#if !defined WIN32_NATIVE
+ if (access (filename, X_OK) < 0)
+ return false;
++#endif
+
+-#ifdef __linux__
++#if defined __linux__ || defined __CYGWIN__
+ if (executable_fd >= 0)
+ {
+ /* If we already have an executable_fd, check that filename points to
+@@ -128,7 +137,6 @@ maybe_executable (const char *filename)
+ }
+ }
+ #endif
+-#endif
+
+ return true;
+ }
+@@ -140,7 +148,12 @@ maybe_executable (const char *filename)
+ static char *
+ find_executable (const char *argv0)
+ {
+-#if defined WIN32_NATIVE || defined __CYGWIN__
++#if defined WIN32_NATIVE
++ /* Native Win32 only.
++ On Cygwin, it is better to use the Cygwin provided /proc interface, than
++ to use native Win32 API and cygwin_conv_to_posix_path, because it supports
++ longer file names
++ (see <http://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */
+ char location[MAX_PATH];
+ int length = GetModuleFileName (NULL, location, sizeof (location));
+ if (length < 0)
+@@ -148,32 +161,9 @@ find_executable (const char *argv0)
+ if (!IS_PATH_WITH_DIR (location))
+ /* Shouldn't happen. */
+ return NULL;
+- {
+-#if defined __CYGWIN__
+- /* cygwin-1.5.13 (2005-03-01) or newer would also allow a Linux-like
+- implementation: readlink of "/proc/self/exe". But using the
+- result of the Win32 system call is simpler and is consistent with the
+- code in relocatable.c. */
+- /* On Cygwin, we need to convert paths coming from Win32 system calls
+- to the Unix-like slashified notation. */
+- static char location_as_posix_path[2 * MAX_PATH];
+- /* There's no error return defined for cygwin_conv_to_posix_path.
+- See cygwin-api/func-cygwin-conv-to-posix-path.html.
+- Does it overflow the buffer of expected size MAX_PATH or does it
+- truncate the path? I don't know. Let's catch both. */
+- cygwin_conv_to_posix_path (location, location_as_posix_path);
+- location_as_posix_path[MAX_PATH - 1] = '\0';
+- if (strlen (location_as_posix_path) >= MAX_PATH - 1)
+- /* A sign of buffer overflow or path truncation. */
+- return NULL;
+- /* Call canonicalize_file_name, because Cygwin supports symbolic links. */
+- return canonicalize_file_name (location_as_posix_path);
+-#else
+- return xstrdup (location);
+-#endif
+- }
+-#else /* Unix && !Cygwin */
+-#ifdef __linux__
++ return xstrdup (location);
++#else /* Unix */
++# ifdef __linux__
+ /* The executable is accessible as /proc/<pid>/exe. In newer Linux
+ versions, also as /proc/self/exe. Linux >= 2.1 provides a symlink
+ to the true pathname; older Linux versions give only device and ino,
+@@ -185,7 +175,7 @@ find_executable (const char *argv0)
+ if (link != NULL && link[0] != '[')
+ return link;
+ if (executable_fd < 0)
+- executable_fd = open ("/proc/self/exe", O_RDONLY, 0);
++ executable_fd = open ("/proc/self/exe", O_EXEC, 0);
+
+ {
+ char buf[6+10+5];
+@@ -194,11 +184,24 @@ find_executable (const char *argv0)
+ if (link != NULL && link[0] != '[')
+ return link;
+ if (executable_fd < 0)
+- executable_fd = open (buf, O_RDONLY, 0);
++ executable_fd = open (buf, O_EXEC, 0);
+ }
+ }
+-#endif
+-#if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH
++# endif
++# ifdef __CYGWIN__
++ /* The executable is accessible as /proc/<pid>/exe, at least in
++ Cygwin >= 1.5. */
++ {
++ char *link;
++
++ link = xreadlink ("/proc/self/exe");
++ if (link != NULL)
++ return link;
++ if (executable_fd < 0)
++ executable_fd = open ("/proc/self/exe", O_EXEC, 0);
++ }
++# endif
++# if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH
+ /* On MacOS X 10.2 or newer, the function
+ int _NSGetExecutablePath (char *buf, uint32_t *bufsize);
+ can be used to retrieve the executable's full path. */
+@@ -207,7 +210,7 @@ find_executable (const char *argv0)
+ if (_NSGetExecutablePath (location, &length) == 0
+ && location[0] == '/')
+ return canonicalize_file_name (location);
+-#endif
++# endif
+ /* Guess the executable's full path. We assume the executable has been
+ called via execlp() or execvp() with properly set up argv[0]. The
+ login(1) convention to add a '-' prefix to argv[0] is not supported. */
+@@ -248,10 +251,10 @@ find_executable (const char *argv0)
+ /* We have a path item at p, of length p_len.
+ Now concatenate the path item and argv0. */
+ concat_name = (char *) xmalloc (p_len + strlen (argv0) + 2);
+-#ifdef NO_XMALLOC
++# ifdef NO_XMALLOC
+ if (concat_name == NULL)
+ return NULL;
+-#endif
++# endif
+ if (p_len == 0)
+ /* An empty PATH element designates the current directory. */
+ strcpy (concat_name, argv0);
+--- origsrc/gettext-0.18.1.1/gettext-tools/gnulib-lib/relocatable.c 2010-05-24 04:42:46.000000000 -0500
++++ src/gettext-0.18.1.1/gettext-tools/gnulib-lib/relocatable.c 2011-10-31 18:40:29.868853403 -0500
+@@ -25,6 +23,7 @@
+ # define _GNU_SOURCE 1
+ #endif
+
++#define _GL_USE_STDLIB_ALLOC 1
+ #include <config.h>
+
+ /* Specification. */
+@@ -43,7 +42,7 @@
+ # include "xalloc.h"
+ #endif
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ #endif
+@@ -70,8 +69,8 @@
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+- /* Win32, Cygwin, OS/2, DOS */
++#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
+ # define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ # define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+@@ -86,6 +85,19 @@
+ # define FILE_SYSTEM_PREFIX_LEN(P) 0
+ #endif
+
++/* Whether to enable the more costly support for relocatable libraries.
++ It allows libraries to be have been installed with a different original
++ prefix than the program. But it is quite costly, especially on Cygwin
++ platforms, see below. Therefore we enable it by default only on native
++ Win32 platforms. */
++#ifndef ENABLE_COSTLY_RELOCATABLE
++# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++# define ENABLE_COSTLY_RELOCATABLE 1
++# else
++# define ENABLE_COSTLY_RELOCATABLE 0
++# endif
++#endif
++
+ /* Original installation prefix. */
+ static char *orig_prefix;
+ static size_t orig_prefix_len;
+@@ -155,7 +167,7 @@ set_relocation_prefix (const char *orig_
+ #endif
+ }
+
+-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
++#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
+
+ /* Convenience function:
+ Computes the current installation prefix, based on the original
+@@ -285,12 +297,17 @@ compute_curr_prefix (const char *orig_in
+
+ #endif /* !IN_LIBRARY || PIC */
+
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+
+ /* Full pathname of shared library, or NULL. */
+ static char *shared_library_fullname;
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++/* Native Win32 only.
++ On Cygwin, it is better to use the Cygwin provided /proc interface, than
++ to use native Win32 API and cygwin_conv_to_posix_path, because it supports
++ longer file names
++ (see <http://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */
+
+ /* Determine the full pathname of the shared library when it is loaded. */
+
+@@ -312,37 +329,23 @@ DllMain (HINSTANCE module_handle, DWORD
+ /* Shouldn't happen. */
+ return FALSE;
+
+- {
+-#if defined __CYGWIN__
+- /* On Cygwin, we need to convert paths coming from Win32 system calls
+- to the Unix-like slashified notation. */
+- static char location_as_posix_path[2 * MAX_PATH];
+- /* There's no error return defined for cygwin_conv_to_posix_path.
+- See cygwin-api/func-cygwin-conv-to-posix-path.html.
+- Does it overflow the buffer of expected size MAX_PATH or does it
+- truncate the path? I don't know. Let's catch both. */
+- cygwin_conv_to_posix_path (location, location_as_posix_path);
+- location_as_posix_path[MAX_PATH - 1] = '\0';
+- if (strlen (location_as_posix_path) >= MAX_PATH - 1)
+- /* A sign of buffer overflow or path truncation. */
+- return FALSE;
+- shared_library_fullname = strdup (location_as_posix_path);
+-#else
+- shared_library_fullname = strdup (location);
+-#endif
+- }
++ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+ }
+
+-#else /* Unix except Cygwin */
++#else /* Unix */
+
+ static void
+ find_shared_library_fullname ()
+ {
+-#if defined __linux__ && __GLIBC__ >= 2
+- /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
++#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
++ /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
++ function.
++ Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
++ But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
++ Cygwin 1.7. */
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+@@ -387,7 +390,7 @@ find_shared_library_fullname ()
+ #endif
+ }
+
+-#endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */
++#endif /* WIN32 / Unix */
+
+ /* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+@@ -395,7 +398,7 @@ find_shared_library_fullname ()
+ static char *
+ get_shared_library_fullname ()
+ {
+-#if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)
++#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+@@ -415,7 +418,7 @@ get_shared_library_fullname ()
+ const char *
+ relocate (const char *pathname)
+ {
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+--- origsrc/gettext-0.18.1.1/gettext-tools/libgettextpo/relocatable.c 2010-02-16 15:33:15.000000000 -0600
++++ src/gettext-0.18.1.1/gettext-tools/libgettextpo/relocatable.c 2011-10-31 18:40:29.868853403 -0500
+@@ -25,6 +23,7 @@
+ # define _GNU_SOURCE 1
+ #endif
+
++#define _GL_USE_STDLIB_ALLOC 1
+ #include <config.h>
+
+ /* Specification. */
+@@ -43,7 +42,7 @@
+ # include "xalloc.h"
+ #endif
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ #endif
+@@ -70,8 +69,8 @@
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+- /* Win32, Cygwin, OS/2, DOS */
++#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
++ /* Win32, OS/2, DOS */
+ # define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ # define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+@@ -86,6 +85,19 @@
+ # define FILE_SYSTEM_PREFIX_LEN(P) 0
+ #endif
+
++/* Whether to enable the more costly support for relocatable libraries.
++ It allows libraries to be have been installed with a different original
++ prefix than the program. But it is quite costly, especially on Cygwin
++ platforms, see below. Therefore we enable it by default only on native
++ Win32 platforms. */
++#ifndef ENABLE_COSTLY_RELOCATABLE
++# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++# define ENABLE_COSTLY_RELOCATABLE 1
++# else
++# define ENABLE_COSTLY_RELOCATABLE 0
++# endif
++#endif
++
+ /* Original installation prefix. */
+ static char *orig_prefix;
+ static size_t orig_prefix_len;
+@@ -155,7 +167,7 @@ set_relocation_prefix (const char *orig_
+ #endif
+ }
+
+-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
++#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
+
+ /* Convenience function:
+ Computes the current installation prefix, based on the original
+@@ -285,12 +297,17 @@ compute_curr_prefix (const char *orig_in
+
+ #endif /* !IN_LIBRARY || PIC */
+
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+
+ /* Full pathname of shared library, or NULL. */
+ static char *shared_library_fullname;
+
+-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
++#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
++/* Native Win32 only.
++ On Cygwin, it is better to use the Cygwin provided /proc interface, than
++ to use native Win32 API and cygwin_conv_to_posix_path, because it supports
++ longer file names
++ (see <http://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */
+
+ /* Determine the full pathname of the shared library when it is loaded. */
+
+@@ -312,37 +329,23 @@ DllMain (HINSTANCE module_handle, DWORD
+ /* Shouldn't happen. */
+ return FALSE;
+
+- {
+-#if defined __CYGWIN__
+- /* On Cygwin, we need to convert paths coming from Win32 system calls
+- to the Unix-like slashified notation. */
+- static char location_as_posix_path[2 * MAX_PATH];
+- /* There's no error return defined for cygwin_conv_to_posix_path.
+- See cygwin-api/func-cygwin-conv-to-posix-path.html.
+- Does it overflow the buffer of expected size MAX_PATH or does it
+- truncate the path? I don't know. Let's catch both. */
+- cygwin_conv_to_posix_path (location, location_as_posix_path);
+- location_as_posix_path[MAX_PATH - 1] = '\0';
+- if (strlen (location_as_posix_path) >= MAX_PATH - 1)
+- /* A sign of buffer overflow or path truncation. */
+- return FALSE;
+- shared_library_fullname = strdup (location_as_posix_path);
+-#else
+- shared_library_fullname = strdup (location);
+-#endif
+- }
++ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+ }
+
+-#else /* Unix except Cygwin */
++#else /* Unix */
+
+ static void
+ find_shared_library_fullname ()
+ {
+-#if defined __linux__ && __GLIBC__ >= 2
+- /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
++#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
++ /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
++ function.
++ Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
++ But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
++ Cygwin 1.7. */
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+@@ -387,7 +390,7 @@ find_shared_library_fullname ()
+ #endif
+ }
+
+-#endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */
++#endif /* WIN32 / Unix */
+
+ /* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+@@ -395,7 +398,7 @@ find_shared_library_fullname ()
+ static char *
+ get_shared_library_fullname ()
+ {
+-#if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)
++#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+@@ -415,7 +418,7 @@ get_shared_library_fullname ()
+ const char *
+ relocate (const char *pathname)
+ {
+-#if defined PIC && defined INSTALLDIR
++#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+ static int initialized;
+
+ /* Initialization code for a shared library. */
diff --git a/sources b/sources
index e072641..07b9e44 100644
--- a/sources
+++ b/sources
@@ -1 +1,4 @@
-58a2bc6d39c0ba57823034d55d65d606 gettext-0.17.tar.gz
+3dd55b952826d2b32f51308f2f91aa89 gettext-0.18.1.1.tar.gz
+3dd55b952826d2b32f51308f2f91aa89 gettext-0.18.1.1.tar.gz
+3133cb765a0e2c9e7908028b86bdbb55 gettext-0.18.1.1-2-src.tar.bz2
+3dd55b952826d2b32f51308f2f91aa89 gettext-0.18.1.1.tar.gz