mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-21 13:10:33 +00:00
cygwin: libiconv and gettext for x86_64
This commit is contained in:
parent
ebf6d98fc2
commit
b658196c6c
|
@ -12,11 +12,13 @@ stdenv.mkDerivation (rec {
|
|||
|
||||
configureFlags = [ "--disable-csharp" "--with-xz" ]
|
||||
++ (stdenv.lib.optionals stdenv.isCygwin
|
||||
[ # We have a static libiconv, so we can only build the static lib.
|
||||
"--disable-shared" "--enable-static"
|
||||
|
||||
[ "--disable-java"
|
||||
"--disable-native-java"
|
||||
# Share the cache among the various `configure' runs.
|
||||
"--config-cache"
|
||||
"--with-included-gettext"
|
||||
"--with-included-glib"
|
||||
"--with-included-libcroco"
|
||||
]);
|
||||
|
||||
# On cross building, gettext supposes that the wchar.h from libc
|
||||
|
@ -28,6 +30,8 @@ stdenv.mkDerivation (rec {
|
|||
echo gl_cv_func_wcwidth_works=yes > cachefile
|
||||
configureFlags="$configureFlags --cache-file=`pwd`/cachefile"
|
||||
fi
|
||||
'' + stdenv.lib.optionalString stdenv.isCygwin ''
|
||||
sed -i -e "s/\(am_libgettextlib_la_OBJECTS = \)error.lo/\\1/" gettext-tools/gnulib-lib/Makefile.in
|
||||
'';
|
||||
|
||||
buildInputs = [ xz ] ++ stdenv.lib.optional (!stdenv.isLinux) libiconv;
|
||||
|
|
|
@ -10,11 +10,16 @@ stdenv.mkDerivation rec {
|
|||
sha256 = "04q6lgl3kglmmhw59igq1n7v3rp1rpkypl366cy1k1yn2znlvckj";
|
||||
};
|
||||
|
||||
patches = if stdenv.isCygwin then [
|
||||
./libiconv-1.14-reloc.patch
|
||||
./libiconv-1.14-wchar.patch
|
||||
] else null;
|
||||
|
||||
# On Cygwin, Libtool produces a `.dll.a', which is not a "real" DLL
|
||||
# (Windows' linker would need to be used somehow to produce an actual
|
||||
# DLL.) Thus, build the static library too, and this is what Gettext
|
||||
# will actually use.
|
||||
configureFlags = stdenv.lib.optional stdenv.isCygwin [ "--enable-static" ];
|
||||
configureFlags = if stdenv.isCygwin then [ "--enable-static" ] else null;
|
||||
|
||||
crossAttrs = {
|
||||
# Disable stripping to avoid "libiconv.a: Archive has no index" (MinGW).
|
||||
|
|
269
pkgs/development/libraries/libiconv/libiconv-1.14-reloc.patch
Normal file
269
pkgs/development/libraries/libiconv/libiconv-1.14-reloc.patch
Normal file
|
@ -0,0 +1,269 @@
|
|||
--- libiconv-1.14/lib/relocatable.c 2011-08-07 13:48:03.000000000 -0400
|
||||
+++ libiconv-1.14/lib/relocatable.c 2011-10-15 03:14:13.195133600 -0400
|
||||
@@ -2,20 +2,18 @@
|
||||
Copyright (C) 2003-2006, 2008-2011 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
|
||||
- This program is free software; you can redistribute it and/or modify it
|
||||
- under the terms of the GNU Library General Public License as published
|
||||
- by the Free Software Foundation; either version 2, or (at your option)
|
||||
- any later version.
|
||||
+ This program is free software: you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU Lesser General Public License as published by
|
||||
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||
+ (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
- Library General Public License for more details.
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU Lesser General Public License for more details.
|
||||
|
||||
- You should have received a copy of the GNU Library General Public
|
||||
- License along with this program; if not, write to the Free Software
|
||||
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
- USA. */
|
||||
+ You should have received a copy of the GNU Lesser General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
/* Tell glibc's <stdio.h> to provide a prototype for getline().
|
||||
@@ -87,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;
|
||||
@@ -156,7 +167,7 @@
|
||||
#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
|
||||
@@ -286,7 +297,7 @@
|
||||
|
||||
#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;
|
||||
@@ -332,7 +343,9 @@
|
||||
#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. */
|
||||
+ 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. */
|
||||
@@ -405,7 +418,7 @@
|
||||
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. */
|
||||
--- libiconv-1.14/libcharset/lib/relocatable.c 2011-08-07 13:48:03.000000000 -0400
|
||||
+++ libiconv-1.14/libcharset/lib/relocatable.c 2011-10-15 03:14:27.878133600 -0400
|
||||
@@ -2,20 +2,18 @@
|
||||
Copyright (C) 2003-2006, 2008-2011 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
|
||||
- This program is free software; you can redistribute it and/or modify it
|
||||
- under the terms of the GNU Library General Public License as published
|
||||
- by the Free Software Foundation; either version 2, or (at your option)
|
||||
- any later version.
|
||||
+ This program is free software: you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU Lesser General Public License as published by
|
||||
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||
+ (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
- Library General Public License for more details.
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU Lesser General Public License for more details.
|
||||
|
||||
- You should have received a copy of the GNU Library General Public
|
||||
- License along with this program; if not, write to the Free Software
|
||||
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
- USA. */
|
||||
+ You should have received a copy of the GNU Lesser General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
/* Tell glibc's <stdio.h> to provide a prototype for getline().
|
||||
@@ -87,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;
|
||||
@@ -156,7 +167,7 @@
|
||||
#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
|
||||
@@ -286,7 +297,7 @@
|
||||
|
||||
#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;
|
||||
@@ -332,7 +343,9 @@
|
||||
#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. */
|
||||
+ 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. */
|
||||
@@ -405,7 +418,7 @@
|
||||
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. */
|
||||
--- libiconv-1.14/srclib/relocatable.c 2011-08-07 09:42:06.000000000 -0400
|
||||
+++ libiconv-1.14/srclib/relocatable.c 2011-10-15 03:14:37.739133600 -0400
|
||||
@@ -3,16 +3,16 @@
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
- it under the terms of the GNU General Public License as published by
|
||||
- the Free Software Foundation; either version 3 of the License, or
|
||||
+ it under the terms of the GNU Lesser General Public License as published by
|
||||
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- GNU General Public License for more details.
|
||||
+ GNU Lesser General Public License for more details.
|
||||
|
||||
- You should have received a copy of the GNU General Public License
|
||||
+ You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
@@ -85,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;
|
||||
@@ -154,7 +167,7 @@
|
||||
#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
|
||||
@@ -284,7 +297,7 @@
|
||||
|
||||
#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;
|
||||
@@ -330,7 +343,9 @@
|
||||
#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. */
|
||||
+ 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. */
|
||||
@@ -403,7 +418,7 @@
|
||||
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. */
|
||||
--- libiconv-1.14/srcm4/gnulib-comp.m4 2011-08-07 09:42:12.000000000 -0400
|
||||
+++ libiconv-1.14/srcm4/gnulib-comp.m4 2011-08-30 02:40:45.597317000 -0400
|
||||
@@ -164,6 +164,7 @@ gl_UNISTD_MODULE_INDICATOR([readlink])
|
||||
gl_RELOCATABLE([$gl_source_base])
|
||||
if test $RELOCATABLE = yes; then
|
||||
AC_LIBOBJ([progreloc])
|
||||
+ AC_LIBOBJ([relocatable])
|
||||
fi
|
||||
gl_FUNC_READLINK_SEPARATE
|
||||
gl_CANONICALIZE_LGPL_SEPARATE
|
102
pkgs/development/libraries/libiconv/libiconv-1.14-wchar.patch
Normal file
102
pkgs/development/libraries/libiconv/libiconv-1.14-wchar.patch
Normal file
|
@ -0,0 +1,102 @@
|
|||
--- libiconv-1.14/libcharset/lib/localcharset.c 2011-02-28 17:43:35.000000000 -0500
|
||||
+++ libiconv-1.14/libcharset/lib/localcharset.c 2011-08-28 00:16:57.238000000 -0400
|
||||
@@ -54,10 +54,6 @@
|
||||
# include <locale.h>
|
||||
# endif
|
||||
# endif
|
||||
-# ifdef __CYGWIN__
|
||||
-# define WIN32_LEAN_AND_MEAN
|
||||
-# include <windows.h>
|
||||
-# endif
|
||||
#elif defined WIN32_NATIVE
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
@@ -124,7 +120,7 @@
|
||||
cp = charset_aliases;
|
||||
if (cp == NULL)
|
||||
{
|
||||
-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
|
||||
+#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE)
|
||||
const char *dir;
|
||||
const char *base = "charset.alias";
|
||||
char *file_name;
|
||||
@@ -309,7 +305,7 @@
|
||||
"DECKOREAN" "\0" "EUC-KR" "\0";
|
||||
# endif
|
||||
|
||||
-# if defined WIN32_NATIVE || defined __CYGWIN__
|
||||
+# if defined WIN32_NATIVE
|
||||
/* To avoid the troubles of installing a separate file in the same
|
||||
directory as the DLL and of retrieving the DLL's directory at
|
||||
runtime, simply inline the aliases here. */
|
||||
@@ -365,64 +361,12 @@
|
||||
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
|
||||
- /* Most systems support nl_langinfo (CODESET) nowadays. */
|
||||
- codeset = nl_langinfo (CODESET);
|
||||
-
|
||||
-# ifdef __CYGWIN__
|
||||
- /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always
|
||||
- returns "US-ASCII". Return the suffix of the locale name from the
|
||||
- environment variables (if present) or the codepage as a number. */
|
||||
- if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
|
||||
- {
|
||||
- const char *locale;
|
||||
- static char buf[2 + 10 + 1];
|
||||
-
|
||||
- locale = getenv ("LC_ALL");
|
||||
- if (locale == NULL || locale[0] == '\0')
|
||||
- {
|
||||
- locale = getenv ("LC_CTYPE");
|
||||
- if (locale == NULL || locale[0] == '\0')
|
||||
- locale = getenv ("LANG");
|
||||
- }
|
||||
- if (locale != NULL && locale[0] != '\0')
|
||||
- {
|
||||
- /* If the locale name contains an encoding after the dot, return
|
||||
- it. */
|
||||
- const char *dot = strchr (locale, '.');
|
||||
-
|
||||
- if (dot != NULL)
|
||||
- {
|
||||
- const char *modifier;
|
||||
-
|
||||
- dot++;
|
||||
- /* Look for the possible @... trailer and remove it, if any. */
|
||||
- modifier = strchr (dot, '@');
|
||||
- if (modifier == NULL)
|
||||
- return dot;
|
||||
- if (modifier - dot < sizeof (buf))
|
||||
- {
|
||||
- memcpy (buf, dot, modifier - dot);
|
||||
- buf [modifier - dot] = '\0';
|
||||
- return buf;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- /* Woe32 has a function returning the locale's codepage as a number:
|
||||
- GetACP(). This encoding is used by Cygwin, unless the user has set
|
||||
- the environment variable CYGWIN=codepage:oem (which very few people
|
||||
- do).
|
||||
- Output directed to console windows needs to be converted (to
|
||||
- GetOEMCP() if the console is using a raster font, or to
|
||||
- GetConsoleOutputCP() if it is using a TrueType font). Cygwin does
|
||||
- this conversion transparently (see winsup/cygwin/fhandler_console.cc),
|
||||
- converting to GetConsoleOutputCP(). This leads to correct results,
|
||||
- except when SetConsoleOutputCP has been called and a raster font is
|
||||
- in use. */
|
||||
- sprintf (buf, "CP%u", GetACP ());
|
||||
- codeset = buf;
|
||||
- }
|
||||
-# endif
|
||||
+ /* Most systems support nl_langinfo (CODESET) nowadays.
|
||||
+ POSIX allows that the returned pointer may point to a static area that
|
||||
+ may be overwritten by subsequent calls to setlocale or nl_langinfo. */
|
||||
+ static char codeset_buf[64];
|
||||
+ codeset_buf[0] = '\0';
|
||||
+ codeset = strncat (codeset_buf, nl_langinfo (CODESET), sizeof (codeset_buf));
|
||||
|
||||
# else
|
||||
|
Loading…
Reference in a new issue