diff options
author | Yaakov Selkowitz <yselkowitz@users.sourceforge.net> | 2011-10-31 19:59:09 -0500 |
---|---|---|
committer | Yaakov Selkowitz <yselkowitz@users.sourceforge.net> | 2011-10-31 19:59:09 -0500 |
commit | 8bd628b6cd48fbbf9cc5dbcce6e53a4513cc8b31 (patch) | |
tree | 83867e72cd6ff149cb61832d5a96b29b06add99c | |
parent | beac5c2891fbbb03d9c3fd956d0f09244258116e (diff) | |
download | cygwin-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.spec | 50 | ||||
-rw-r--r-- | gettext-0.18.1.1-autopoint-V.patch | 54 | ||||
-rw-r--r-- | gettext-0.18.1.1-locale.patch | 152 | ||||
-rw-r--r-- | gettext-0.18.1.1-reloc.patch | 1002 | ||||
-rw-r--r-- | sources | 5 |
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. */ @@ -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 |