Merge pull request #26021 from corngood/cygwin-wip

Cygwin fixes
This commit is contained in:
John Ericson 2017-06-26 15:04:40 -04:00 committed by GitHub
commit b686fd1570
33 changed files with 729 additions and 3702 deletions

View File

@ -1,8 +1,9 @@
with import ./parse.nix; with import ./parse.nix;
with import ../attrsets.nix; with import ../attrsets.nix;
with import ../lists.nix;
rec { rec {
patterns = { patterns = rec {
"32bit" = { cpu = { bits = 32; }; }; "32bit" = { cpu = { bits = 32; }; };
"64bit" = { cpu = { bits = 64; }; }; "64bit" = { cpu = { bits = 64; }; };
i686 = { cpu = cpuTypes.i686; }; i686 = { cpu = cpuTypes.i686; };
@ -13,8 +14,8 @@ rec {
BigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; }; BigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; };
LittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; }; LittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; };
Unix = { kernel = { families = { inherit (kernelFamilies) unix; }; }; };
BSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; }; BSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; };
Unix = [ BSD Linux SunOS Hurd Cygwin ];
Darwin = { kernel = kernels.darwin; }; Darwin = { kernel = kernels.darwin; };
Linux = { kernel = kernels.linux; }; Linux = { kernel = kernels.linux; };
@ -27,11 +28,15 @@ rec {
Cygwin = { kernel = kernels.windows; abi = abis.cygnus; }; Cygwin = { kernel = kernels.windows; abi = abis.cygnus; };
MinGW = { kernel = kernels.windows; abi = abis.gnu; }; MinGW = { kernel = kernels.windows; abi = abis.gnu; };
Arm32 = recursiveUpdate patterns.Arm patterns."32bit"; Arm32 = recursiveUpdate Arm patterns."32bit";
Arm64 = recursiveUpdate patterns.Arm patterns."64bit"; Arm64 = recursiveUpdate Arm patterns."64bit";
}; };
matchAnyAttrs = patterns:
if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns
else matchAttrs patterns;
predicates = mapAttrs' predicates = mapAttrs'
(name: value: nameValuePair ("is" + name) (matchAttrs value)) (name: value: nameValuePair ("is" + name) (matchAnyAttrs value))
patterns; patterns;
} }

View File

@ -68,21 +68,20 @@ rec {
isKernelFamily = isType "kernel-family"; isKernelFamily = isType "kernel-family";
kernelFamilies = setTypes "kernel-family" { kernelFamilies = setTypes "kernel-family" {
bsd = {}; bsd = {};
unix = {};
}; };
isKernel = x: isType "kernel" x; isKernel = x: isType "kernel" x;
kernels = with execFormats; with kernelFamilies; setTypesAssert "kernel" kernels = with execFormats; with kernelFamilies; setTypesAssert "kernel"
(x: isExecFormat x.execFormat && all isKernelFamily (attrValues x.families)) (x: isExecFormat x.execFormat && all isKernelFamily (attrValues x.families))
{ {
darwin = { execFormat = macho; families = { inherit unix; }; }; darwin = { execFormat = macho; families = { }; };
freebsd = { execFormat = elf; families = { inherit unix bsd; }; }; freebsd = { execFormat = elf; families = { inherit bsd; }; };
hurd = { execFormat = elf; families = { inherit unix; }; }; hurd = { execFormat = elf; families = { }; };
linux = { execFormat = elf; families = { inherit unix; }; }; linux = { execFormat = elf; families = { }; };
netbsd = { execFormat = elf; families = { inherit unix bsd; }; }; netbsd = { execFormat = elf; families = { inherit bsd; }; };
none = { execFormat = unknown; families = { inherit unix; }; }; none = { execFormat = unknown; families = { }; };
openbsd = { execFormat = elf; families = { inherit unix bsd; }; }; openbsd = { execFormat = elf; families = { inherit bsd; }; };
solaris = { execFormat = elf; families = { inherit unix; }; }; solaris = { execFormat = elf; families = { }; };
windows = { execFormat = pe; families = { }; }; windows = { execFormat = pe; families = { }; };
} // { # aliases } // { # aliases
# TODO(@Ericson2314): Handle these Darwin version suffixes more generally. # TODO(@Ericson2314): Handle these Darwin version suffixes more generally.
@ -164,7 +163,7 @@ rec {
mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s)); mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s));
doubleFromSystem = { cpu, vendor, kernel, abi, ... }: doubleFromSystem = { cpu, vendor, kernel, abi, ... }:
if vendor == kernels.windows && abi == abis.cygnus if abi == abis.cygnus
then "${cpu.name}-cygwin" then "${cpu.name}-cygwin"
else "${cpu.name}-${kernel.name}"; else "${cpu.name}-${kernel.name}";

File diff suppressed because it is too large Load Diff

View File

@ -38,8 +38,7 @@ stdenv.mkDerivation rec {
url = "https://aur.archlinux.org/cgit/aur.git/plain/https.patch?h=w3m-mouse&id=5b5f0fbb59f674575e87dd368fed834641c35f03"; url = "https://aur.archlinux.org/cgit/aur.git/plain/https.patch?h=w3m-mouse&id=5b5f0fbb59f674575e87dd368fed834641c35f03";
sha256 = "08skvaha1hjyapsh8zw5dgfy433mw2hk7qy9yy9avn8rjqj7kjxk"; sha256 = "08skvaha1hjyapsh8zw5dgfy433mw2hk7qy9yy9avn8rjqj7kjxk";
}) })
] ++ optional (graphicsSupport && !x11Support) [ ./no-x11.patch ] ] ++ optional (graphicsSupport && !x11Support) [ ./no-x11.patch ];
++ optional stdenv.isCygwin ./cygwin.patch;
buildInputs = [ pkgconfig ncurses boehmgc gettext zlib ] buildInputs = [ pkgconfig ncurses boehmgc gettext zlib ]
++ optional sslSupport openssl ++ optional sslSupport openssl

View File

@ -359,7 +359,13 @@ stdenv.mkDerivation {
if [[ "$($ldPath/${prefix}ld -z relro 2>&1 || true)" =~ un(recognized|known)\ option ]]; then if [[ "$($ldPath/${prefix}ld -z relro 2>&1 || true)" =~ un(recognized|known)\ option ]]; then
hardening_unsupported_flags+=" relro" hardening_unsupported_flags+=" relro"
fi fi
''
+ optionalString hostPlatform.isCygwin ''
hardening_unsupported_flags+=" pic"
''
+ ''
substituteAll ${preWrap ./add-flags.sh} $out/nix-support/add-flags.sh substituteAll ${preWrap ./add-flags.sh} $out/nix-support/add-flags.sh
substituteAll ${preWrap ./add-hardening.sh} $out/nix-support/add-hardening.sh substituteAll ${preWrap ./add-hardening.sh} $out/nix-support/add-hardening.sh
cp -p ${preWrap ./utils.sh} $out/nix-support/utils.sh cp -p ${preWrap ./utils.sh} $out/nix-support/utils.sh

View File

@ -35,7 +35,7 @@ _linkDLLs() {
local dllPath2 local dllPath2
for dllPath2 in "$dllPath" "$(dirname $(readlink "$dllPath" || echo "$dllPath"))"/*.dll; do for dllPath2 in "$dllPath" "$(dirname $(readlink "$dllPath" || echo "$dllPath"))"/*.dll; do
if [ -e ./"$(basename "$dllPath2")" ]; then continue; fi if [ -e ./"$(basename "$dllPath2")" ]; then continue; fi
ln -sr "$dllPath2" . CYGWIN+=\ winsymlinks:nativestrict ln -sr "$dllPath2" .
linkCount=$(($linkCount+1)) linkCount=$(($linkCount+1))
done done
done done

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl { stdenv, hostPlatform, fetchurl
, bzip2 , bzip2
, gdbm , gdbm
, fetchpatch , fetchpatch
@ -69,7 +69,7 @@ let
./glibc-2.25-enosys.patch ./glibc-2.25-enosys.patch
] ++ optionals stdenv.isCygwin [ ] ++ optionals hostPlatform.isCygwin [
./2.5.2-ctypes-util-find_library.patch ./2.5.2-ctypes-util-find_library.patch
./2.5.2-tkinter-x11.patch ./2.5.2-tkinter-x11.patch
./2.6.2-ssl-threads.patch ./2.6.2-ssl-threads.patch
@ -110,7 +110,7 @@ let
"--enable-shared" "--enable-shared"
"--with-threads" "--with-threads"
"--enable-unicode=ucs4" "--enable-unicode=ucs4"
] ++ optionals stdenv.isCygwin [ ] ++ optionals hostPlatform.isCygwin [
"--with-system-ffi" "--with-system-ffi"
"--with-system-expat" "--with-system-expat"
"ac_cv_func_bind_textdomain_codeset=yes" "ac_cv_func_bind_textdomain_codeset=yes"
@ -118,14 +118,14 @@ let
"--disable-toolbox-glue" "--disable-toolbox-glue"
]; ];
postConfigure = if stdenv.isCygwin then '' postConfigure = if hostPlatform.isCygwin then ''
sed -i Makefile -e 's,PYTHONPATH="$(srcdir),PYTHONPATH="$(abs_srcdir),' sed -i Makefile -e 's,PYTHONPATH="$(srcdir),PYTHONPATH="$(abs_srcdir),'
'' else null; '' else null;
buildInputs = buildInputs =
optional (stdenv ? cc && stdenv.cc.libc != null) stdenv.cc.libc ++ optional (stdenv ? cc && stdenv.cc.libc != null) stdenv.cc.libc ++
[ bzip2 openssl zlib ] [ bzip2 openssl zlib ]
++ optionals stdenv.isCygwin [ expat libffi ] ++ optionals hostPlatform.isCygwin [ expat libffi ]
++ [ db gdbm ncurses sqlite readline ] ++ [ db gdbm ncurses sqlite readline ]
++ optionals x11Support [ tcl tk xlibsWrapper libX11 ] ++ optionals x11Support [ tcl tk xlibsWrapper libX11 ]
++ optionals stdenv.isDarwin [ CF configd ]; ++ optionals stdenv.isDarwin [ CF configd ];
@ -190,6 +190,8 @@ in stdenv.mkDerivation {
find $out -name "*.py" | $out/bin/python -m compileall -q -f -x "lib2to3" -i - find $out -name "*.py" | $out/bin/python -m compileall -q -f -x "lib2to3" -i -
find $out -name "*.py" | $out/bin/python -O -m compileall -q -f -x "lib2to3" -i - find $out -name "*.py" | $out/bin/python -O -m compileall -q -f -x "lib2to3" -i -
find $out -name "*.py" | $out/bin/python -OO -m compileall -q -f -x "lib2to3" -i - find $out -name "*.py" | $out/bin/python -OO -m compileall -q -f -x "lib2to3" -i -
'' + optionalString hostPlatform.isCygwin ''
cp libpython2.7.dll.a $out/lib
''; '';
passthru = let passthru = let

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl }: { stdenv, lib, buildPlatform, fetchurl }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "gdbm-1.13"; name = "gdbm-1.13";
@ -10,9 +10,22 @@ stdenv.mkDerivation rec {
doCheck = true; doCheck = true;
# Linking static stubs on cygwin requires correct ordering.
# Consider upstreaming this.
# Disable dbmfetch03.at test because it depends on unlink()
# failing on a link in a chmod -w directory, which cygwin
# apparently allows.
postPatch = lib.optionalString buildPlatform.isCygwin ''
substituteInPlace tests/Makefile.in --replace \
'_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la' \
'_LDADD = ../compat/libgdbm_compat.la ../src/libgdbm.la'
substituteInPlace tests/testsuite.at --replace \
'm4_include([dbmfetch03.at])' ""
'';
configureFlags = [ "--enable-libgdbm-compat" ]; configureFlags = [ "--enable-libgdbm-compat" ];
meta = with stdenv.lib; { meta = with lib; {
description = "GNU dbm key/value database library"; description = "GNU dbm key/value database library";
longDescription = longDescription =

View File

@ -1,4 +1,4 @@
{ stdenv, lib, fetchurl, libiconv, xz }: { stdenv, lib, hostPlatform, fetchurl, libiconv, xz }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "gettext-${version}"; name = "gettext-${version}";
@ -18,15 +18,6 @@ stdenv.mkDerivation rec {
LDFLAGS = if stdenv.isSunOS then "-lm -lmd -lmp -luutil -lnvpair -lnsl -lidmap -lavl -lsec" else ""; LDFLAGS = if stdenv.isSunOS then "-lm -lmd -lmp -luutil -lnvpair -lnsl -lidmap -lavl -lsec" else "";
configureFlags = [ "--disable-csharp" "--with-xz" ] configureFlags = [ "--disable-csharp" "--with-xz" ]
++ lib.optionals stdenv.isCygwin [
"--disable-java"
"--disable-native-java"
# Share the cache among the various `configure' runs.
"--config-cache"
"--with-included-gettext"
"--with-included-glib"
"--with-included-libcroco"
]
# avoid retaining reference to CF during stdenv bootstrap # avoid retaining reference to CF during stdenv bootstrap
++ lib.optionals stdenv.isDarwin [ ++ lib.optionals stdenv.isDarwin [
"gt_cv_func_CFPreferencesCopyAppValue=no" "gt_cv_func_CFPreferencesCopyAppValue=no"
@ -38,6 +29,9 @@ stdenv.mkDerivation rec {
substituteInPlace gettext-tools/projects/KDE/trigger --replace "/bin/pwd" pwd substituteInPlace gettext-tools/projects/KDE/trigger --replace "/bin/pwd" pwd
substituteInPlace gettext-tools/projects/GNOME/trigger --replace "/bin/pwd" pwd substituteInPlace gettext-tools/projects/GNOME/trigger --replace "/bin/pwd" pwd
substituteInPlace gettext-tools/src/project-id --replace "/bin/pwd" pwd substituteInPlace gettext-tools/src/project-id --replace "/bin/pwd" pwd
'' + lib.optionalString hostPlatform.isCygwin ''
sed -i -e "s/\(cldr_plurals_LDADD = \)/\\1..\/gnulib-lib\/libxml_rpl.la /" gettext-tools/src/Makefile.in
sed -i -e "s/\(libgettextsrc_la_LDFLAGS = \)/\\1..\/gnulib-lib\/libxml_rpl.la /" gettext-tools/src/Makefile.in
''; '';
# On cross building, gettext supposes that the wchar.h from libc # On cross building, gettext supposes that the wchar.h from libc
@ -49,11 +43,9 @@ stdenv.mkDerivation rec {
echo gl_cv_func_wcwidth_works=yes > cachefile echo gl_cv_func_wcwidth_works=yes > cachefile
configureFlags="$configureFlags --cache-file=`pwd`/cachefile" configureFlags="$configureFlags --cache-file=`pwd`/cachefile"
fi fi
'' + lib.optionalString stdenv.isCygwin ''
sed -i -e "s/\(am_libgettextlib_la_OBJECTS = \)error.lo/\\1/" gettext-tools/gnulib-lib/Makefile.in
''; '';
nativeBuildInputs = [ xz xz.bin ] ++ stdenv.lib.optional (!stdenv.isLinux) libiconv; # HACK, see #10874 (and 14664) nativeBuildInputs = [ xz xz.bin ] ++ stdenv.lib.optional (!stdenv.isLinux && !hostPlatform.isCygwin) libiconv; # HACK, see #10874 (and 14664)
enableParallelBuilding = true; enableParallelBuilding = true;
@ -89,14 +81,3 @@ stdenv.mkDerivation rec {
// stdenv.lib.optionalAttrs stdenv.isDarwin { // stdenv.lib.optionalAttrs stdenv.isDarwin {
makeFlags = "CFLAGS=-D_FORTIFY_SOURCE=0"; makeFlags = "CFLAGS=-D_FORTIFY_SOURCE=0";
} }
// stdenv.lib.optionalAttrs stdenv.isCygwin {
patchPhase =
# Make sure `error.c' gets compiled and is part of `libgettextlib.la'.
# This fixes:
# gettext-0.18.1.1/gettext-tools/src/msgcmp.c:371: undefined reference to `_error_message_count'
''
sed -i gettext-tools/gnulib-lib/Makefile.in \
-e 's/am_libgettextlib_la_OBJECTS =/am_libgettextlib_la_OBJECTS = error.lo/g'
'';
}

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, pkgconfig, gettext, perl, python { stdenv, hostPlatform, fetchurl, pkgconfig, gettext, perl, python
, libiconv, libintlOrEmpty, zlib, libffi, pcre, libelf , libiconv, libintlOrEmpty, zlib, libffi, pcre, libelf
# use utillinuxMinimal to avoid circular dependency (utillinux, systemd, glib) # use utillinuxMinimal to avoid circular dependency (utillinux, systemd, glib)
, utillinuxMinimal ? null , utillinuxMinimal ? null
@ -9,7 +9,7 @@
with stdenv.lib; with stdenv.lib;
assert stdenv.isFreeBSD || stdenv.isDarwin || stdenv.cc.isGNU; assert stdenv.isFreeBSD || stdenv.isDarwin || stdenv.cc.isGNU || hostPlatform.isCygwin;
assert stdenv.isLinux -> utillinuxMinimal != null; assert stdenv.isLinux -> utillinuxMinimal != null;
# TODO: # TODO:

View File

@ -11,11 +11,6 @@ stdenv.mkDerivation rec {
sha256 = "0y1ij745r4p48mxq84rax40p10ln7fc7m243p8k8sia519i3dxfc"; sha256 = "0y1ij745r4p48mxq84rax40p10ln7fc7m243p8k8sia519i3dxfc";
}; };
patches = lib.optionals stdenv.isCygwin [
./libiconv-1.14-reloc.patch
./libiconv-1.14-wchar.patch
];
postPatch = postPatch =
lib.optionalString ((stdenv ? cross && stdenv.cross.libc == "msvcrt") || stdenv.cc.nativeLibc) lib.optionalString ((stdenv ? cross && stdenv.cross.libc == "msvcrt") || stdenv.cc.nativeLibc)
'' ''
@ -23,12 +18,7 @@ stdenv.mkDerivation rec {
''; '';
configureFlags = configureFlags =
# On Cygwin, Libtool produces a `.dll.a', which is not a "real" DLL lib.optional stdenv.isFreeBSD "--with-pic";
# (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.
lib.optional stdenv.isCygwin "--enable-static"
++ lib.optional stdenv.isFreeBSD "--with-pic";
crossAttrs = { crossAttrs = {
# Disable stripping to avoid "libiconv.a: Archive has no index" (MinGW). # Disable stripping to avoid "libiconv.a: Archive has no index" (MinGW).

View File

@ -1,269 +0,0 @@
--- 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

View File

@ -1,102 +0,0 @@
--- 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

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, fetchpatch, libxml2, findXMLCatalogs, python2 { stdenv, hostPlatform, fetchurl, fetchpatch, libxml2, findXMLCatalogs, python2
, cryptoSupport ? false , cryptoSupport ? false
, pythonSupport ? (! stdenv ? cross) , pythonSupport ? (! stdenv ? cross)
}: }:
@ -18,6 +18,12 @@ stdenv.mkDerivation rec {
patches = stdenv.lib.optional stdenv.isSunOS ./patch-ah.patch; patches = stdenv.lib.optional stdenv.isSunOS ./patch-ah.patch;
# fixes: can't build x86_64-unknown-cygwin shared library unless -no-undefined is specified
postPatch = optionalString hostPlatform.isCygwin ''
substituteInPlace tests/plugins/Makefile.in \
--replace 'la_LDFLAGS =' 'la_LDFLAGS = $(WIN32_EXTRA_LDFLAGS)'
'';
outputs = [ "bin" "dev" "out" "doc" ] ++ stdenv.lib.optional pythonSupport "py"; outputs = [ "bin" "dev" "out" "doc" ] ++ stdenv.lib.optional pythonSupport "py";
buildInputs = [ libxml2.dev ] ++ stdenv.lib.optionals pythonSupport [ libxml2.py python2 ]; buildInputs = [ libxml2.dev ] ++ stdenv.lib.optionals pythonSupport [ libxml2.py python2 ];

View File

@ -61,8 +61,6 @@ stdenv.mkDerivation rec {
-e '/CPPFLAGS="$CPPFLAGS/s/ -D_XOPEN_SOURCE_EXTENDED//' \ -e '/CPPFLAGS="$CPPFLAGS/s/ -D_XOPEN_SOURCE_EXTENDED//' \
configure configure
CFLAGS=-D_XOPEN_SOURCE_EXTENDED CFLAGS=-D_XOPEN_SOURCE_EXTENDED
'' + lib.optionalString stdenv.isCygwin ''
sed -i -e 's,LIB_SUFFIX="t,LIB_SUFFIX=",' configure
''; '';
enableParallelBuilding = true; enableParallelBuilding = true;
@ -122,7 +120,7 @@ stdenv.mkDerivation rec {
moveToOutput "bin/tset" "$out" moveToOutput "bin/tset" "$out"
''; '';
preFixup = '' preFixup = lib.optionalString (!hostPlatform.isCygwin) ''
rm "$out"/lib/*.a rm "$out"/lib/*.a
''; '';

View File

@ -1,136 +0,0 @@
--- openssl-1.0.1e/config 2014-10-23 15:53:23.436600000 +0200
+++ openssl-1.0.1e/config 2014-10-23 15:55:33.837000000 +0200
@@ -832,6 +832,7 @@
# these are all covered by the catchall below
# *-dgux) OUT="dgux" ;;
mips-sony-newsos4) OUT="newsos4-gcc" ;;
+ x86_64-*-cygwin) OUT="Cygwin-x86_64" ;;
*-*-cygwin_pre1.3) OUT="Cygwin-pre1.3" ;;
*-*-cygwin) OUT="Cygwin" ;;
t3e-cray-unicosmk) OUT="cray-t3e" ;;
--- openssl-1.0.1e/Configure 2013-02-17 17:06:18.682058900 -0600
+++ openssl-1.0.1e/Configure 2013-02-17 16:38:08.000000000 -0600
@@ -550,6 +550,7 @@ my %table=(
"Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
+"Cygwin-x86_64", "gcc:-DTERMIOS -DL_ENDIAN -O3 -Wall:::CYGWIN32::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:mingw64:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
# NetWare from David Ward (dsward@novell.com)
# requires either MetroWerks NLM development tools, or gcc / nlmconv
@@ -1128,7 +1129,7 @@ foreach (sort @experimental)
my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
-$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target =~ /^mingw/);
+$exe_ext=".exe" if ($target =~ /^Cygwin/ || $target eq "DJGPP" || $target =~ /^mingw/);
$exe_ext=".nlm" if ($target =~ /netware/);
$exe_ext=".pm" if ($target =~ /vos/);
$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
--- openssl-1.0.1e/Makefile.org 2013-02-11 09:26:04.000000000 -0600
+++ openssl-1.0.1e/Makefile.org 2013-02-17 16:38:08.000000000 -0600
@@ -326,9 +326,9 @@ clean-shared:
done; \
fi; \
( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
- if [ "$(PLATFORM)" = "Cygwin" ]; then \
+ case "$(PLATFORM)" in Cygwin*) \
( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
- fi; \
+ esac; \
done
link-shared:
@@ -571,11 +571,7 @@ install_sw:
do \
if [ -f "$$i" -o -f "$$i.a" ]; then \
( echo installing $$i; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
- cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
- chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
- mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
- else \
+ case "$(PLATFORM)" in Cygwin*) \
c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
@@ -583,7 +579,12 @@ install_sw:
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
- fi ); \
+ ;; \
+ *) \
+ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
+ esac ); \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
( case $$i in \
*crypto*) i=libeay32.dll;; \
@@ -643,9 +644,9 @@ install_docs:
@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
here="`pwd`"; \
filecase=; \
- if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
+ case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*) \
filecase=-i; \
- fi; \
+ esac; \
set -e; for i in doc/apps/*.pod; do \
fn=`basename $$i .pod`; \
sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
--- openssl-1.0.1e/engines/ccgost/Makefile 2013-02-11 09:26:04.000000000 -0600
+++ openssl-1.0.1e/engines/ccgost/Makefile 2013-02-17 17:05:47.759290200 -0600
@@ -45,7 +45,11 @@ install:
set -e; \
echo installing $(LIBNAME); \
pfx=lib; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
+ case "$(PLATFORM)" in Cygwin*) \
+ sfx=".so"; \
+ cp cyg$(LIBNAME).dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
+ ;; \
+ *) \
case "$(CFLAGS)" in \
*DSO_BEOS*) sfx=".so";; \
*DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \
@@ -54,10 +58,7 @@ install:
*) sfx=".bad";; \
esac; \
cp $${pfx}$(LIBNAME)$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
- else \
- sfx=".so"; \
- cp cyg$(LIBNAME).dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
- fi; \
+ esac; \
chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx; \
fi
--- openssl-1.0.1i/engines/Makefile 2014-10-23 16:08:19.360200000 +0200
+++ openssl-1.0.1i/engines/Makefile 2014-10-23 16:10:54.205800000 +0200
@@ -111,7 +111,11 @@
for l in $(LIBNAMES); do \
( echo installing $$l; \
pfx=lib; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
+ case "$(PLATFORM)" in Cygwin*) \
+ sfx=".so"; \
+ cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
+ ;; \
+ *) \
case "$(CFLAGS)" in \
*DSO_BEOS*) sfx=".so";; \
*DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \
@@ -120,10 +124,7 @@
*) sfx=".bad";; \
esac; \
cp $$pfx$$l$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
- else \
- sfx=".so"; \
- cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
- fi; \
+ esac; \
chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx ); \
done; \

View File

@ -22,7 +22,6 @@ let
++ [ ./nix-ssl-cert-file.patch ] ++ [ ./nix-ssl-cert-file.patch ]
++ optional (versionOlder version "1.1.0") ++ optional (versionOlder version "1.1.0")
(if stdenv.isDarwin then ./use-etc-ssl-certs-darwin.patch else ./use-etc-ssl-certs.patch) (if stdenv.isDarwin then ./use-etc-ssl-certs-darwin.patch else ./use-etc-ssl-certs.patch)
++ optional stdenv.isCygwin ./1.0.1-cygwin64.patch
++ optional ++ optional
(versionOlder version "1.0.2" && (stdenv.isDarwin || (stdenv ? cross && stdenv.cross.libc == "libSystem"))) (versionOlder version "1.0.2" && (stdenv.isDarwin || (stdenv ? cross && stdenv.cross.libc == "libSystem")))
./darwin-arch.patch; ./darwin-arch.patch;

View File

@ -17,6 +17,8 @@ stdenv.mkDerivation rec {
sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1"; sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1";
}; };
patches = stdenv.lib.optional hostPlatform.isCygwin ./disable-cygwin-widechar.patch;
postPatch = stdenv.lib.optionalString stdenv.isDarwin '' postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
substituteInPlace configure \ substituteInPlace configure \
--replace '/usr/bin/libtool' 'ar' \ --replace '/usr/bin/libtool' 'ar' \

View File

@ -0,0 +1,13 @@
diff --git a/gzguts.h b/gzguts.h
index 990a4d2..6378d46 100644
--- a/gzguts.h
+++ b/gzguts.h
@@ -39,7 +39,7 @@
# include <io.h>
#endif
-#if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_WIN32)
# define WIDECHAR
#endif

View File

@ -16,8 +16,8 @@ that we're trying to help2man).
install_preload: install_dirs preload install_preload: install_dirs preload
- $(INSTALL_PROGRAM) $(preload).so $(DESTDIR)$(pkglibdir) - $(INSTALL_PROGRAM) $(preload).so $(DESTDIR)$(pkglibdir)
+ $(INSTALL_PROGRAM) lib/cygintl-8.dll $(DESTDIR)$(pkglibdir) + $(INSTALL_PROGRAM) lib/cygintl-9.dll $(DESTDIR)$(pkglibdir)
+ ln -sf cygintl-8.dll $(DESTDIR)$(pkglibdir)/$(preload).so + ln -sf cygintl-9.dll $(DESTDIR)$(pkglibdir)/$(preload).so
install_l10n: install_dirs msg_l10n man_l10n info_l10n install_l10n: install_dirs msg_l10n man_l10n info_l10n
set -e; \ set -e; \
@ -27,8 +27,8 @@ that we're trying to help2man).
$(preload).so: $(srcdir)/$(preload).c $(preload).so: $(srcdir)/$(preload).c
- $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -fPIC -shared $? $(LIBS) - $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -fPIC -shared $? $(LIBS)
+ mkdir -p lib + mkdir -p lib
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o lib/cygintl-8.dll -shared $? $(LIBS) + $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o lib/cygintl-9.dll -shared $? $(LIBS)
+ ln -sf lib/cygintl-8.dll $@ + ln -sf lib/cygintl-9.dll $@
man: $(target).1 man: $(target).1
$(target).1: $(srcdir)/$(target).PL $(srcdir)/$(target).h2m.PL $(target).1: $(srcdir)/$(target).PL $(srcdir)/$(target).h2m.PL
@ -62,7 +62,7 @@ that we're trying to help2man).
return; return;
+#ifdef __CYGWIN__ +#ifdef __CYGWIN__
+ if (!(RTLD_NEXT = dlopen("/usr/bin/cygintl-8.dll", RTLD_LAZY))) + if (!(RTLD_NEXT = dlopen("/usr/bin/cygintl-9.dll", RTLD_LAZY)))
+ die("libintl8 not found"); + die("libintl8 not found");
+#endif +#endif
+ +

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, perl, gettext, LocaleGettext, makeWrapper }: { stdenv, hostPlatform, fetchurl, perl, gettext, LocaleGettext, makeWrapper }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "help2man-1.47.4"; name = "help2man-1.47.4";
@ -12,11 +12,12 @@ stdenv.mkDerivation rec {
doCheck = false; # target `check' is missing doCheck = false; # target `check' is missing
patches = if stdenv.isCygwin then [ ./1.40.4-cygwin-nls.patch ] else null; patches = if hostPlatform.isCygwin then [ ./1.40.4-cygwin-nls.patch ] else null;
postInstall = postInstall =
'' wrapProgram "$out/bin/help2man" \ '' wrapProgram "$out/bin/help2man" \
--prefix PERL5LIB : "$(echo ${LocaleGettext}/lib/perl*/site_perl)" --prefix PERL5LIB : "$(echo ${LocaleGettext}/lib/perl*/site_perl)" \
${stdenv.lib.optionalString hostPlatform.isCygwin "--prefix PATH : ${gettext}/bin"}
''; '';

View File

@ -309,3 +309,16 @@
# else # else
/* On old systems which lack it, use setlocale or getenv. */ /* On old systems which lack it, use setlocale or getenv. */
diff --git a/glib/gtypes.h b/glib/gtypes.h
index c18e0bf..816685a 100644
--- a/glib/glib/gtypes.h
+++ b/glib/glib/gtypes.h
@@ -462,7 +462,7 @@ G_END_DECLS
* properly get exported in Windows DLLs.
*/
#ifndef GLIB_VAR
-# ifdef G_PLATFORM_WIN32
+# ifdef G_OS_WIN32
# ifdef GLIB_STATIC_COMPILATION
# define GLIB_VAR extern
# else /* !GLIB_STATIC_COMPILATION */

View File

@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
configureFlags = [ "--with-internal-glib" ] configureFlags = [ "--with-internal-glib" ]
++ optional (stdenv.isSunOS) [ "--with-libiconv=gnu" "--with-system-library-path" "--with-system-include-path" "CFLAGS=-DENABLE_NLS" ]; ++ optional (stdenv.isSunOS) [ "--with-libiconv=gnu" "--with-system-library-path" "--with-system-include-path" "CFLAGS=-DENABLE_NLS" ];
postInstall = ''rm "$out"/bin/*-pkg-config''; # clean the duplicate file postInstall = ''rm -f "$out"/bin/*-pkg-config''; # clean the duplicate file
meta = { meta = {
description = "A tool that allows packages to find out information about other packages"; description = "A tool that allows packages to find out information about other packages";

View File

@ -27,6 +27,6 @@ stdenv.mkDerivation rec {
description = "Utilities that give information about processes using the /proc filesystem"; description = "Utilities that give information about processes using the /proc filesystem";
priority = 10; # less than coreutils, which also provides "kill" and "uptime" priority = 10; # less than coreutils, which also provides "kill" and "uptime"
license = lib.licenses.gpl2; license = lib.licenses.gpl2;
platforms = lib.platforms.linux; platforms = lib.platforms.linux ++ lib.platforms.cygwin;
}; };
} }

View File

@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
homepage = http://www.nico.schottelius.org/software/gpm/; homepage = http://www.nico.schottelius.org/software/gpm/;
description = "A daemon that provides mouse support on the Linux console"; description = "A daemon that provides mouse support on the Linux console";
license = licenses.gpl2; license = licenses.gpl2;
platforms = platforms.linux; platforms = platforms.linux ++ platforms.cygwin;
maintainers = with maintainers; [ eelco wkennington ]; maintainers = with maintainers; [ eelco wkennington ];
}; };
} }

View File

@ -23,7 +23,7 @@ let
in in
import ./bash-4.4-patches.nix patch; import ./bash-4.4-patches.nix patch;
inherit (stdenv.lib) optional optionals; inherit (stdenv.lib) optional optionals optionalString;
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -52,8 +52,9 @@ stdenv.mkDerivation rec {
patchFlags = "-p0"; patchFlags = "-p0";
patches = upstreamPatches patches = upstreamPatches;
++ optional hostPlatform.isCygwin ./cygwin-bash-4.3.33-1.src.patch;
postPatch = optionalString hostPlatform.isCygwin "patch -p2 < ${./cygwin-bash-4.4.11-2.src.patch}";
configureFlags = [ configureFlags = [
(if interactive then "--with-installed-readline" else "--disable-readline") (if interactive then "--with-installed-readline" else "--disable-readline")
@ -79,6 +80,11 @@ stdenv.mkDerivation rec {
# build `version.h'. # build `version.h'.
enableParallelBuilding = false; enableParallelBuilding = false;
makeFlags = optional hostPlatform.isCygwin [
"LOCAL_LDFLAGS=-Wl,--export-all,--out-implib,libbash.dll.a"
"SHOBJ_LIBS=-lbash"
];
postInstall = '' postInstall = ''
ln -s bash "$out/bin/sh" ln -s bash "$out/bin/sh"
rm $out/lib/bash/Makefile.inc rm $out/lib/bash/Makefile.inc

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,607 @@
--- origsrc/bash-4.4/bashline.c 2017-01-23 13:28:06.955247200 -0600
+++ src/bash-4.4/bashline.c 2017-01-23 13:55:07.992877600 -0600
@@ -76,6 +76,16 @@
# include "pcomplete.h"
#endif
+#if __CYGWIN__
+# ifdef __x86_64__
+# define IMP(x) __imp_##x
+# else
+# define IMP(x) _imp__##x
+# endif
+#else
+# define IMP(x) x
+#endif
+
/* These should agree with the defines for emacs_mode and vi_mode in
rldefs.h, even though that's not a public readline header file. */
#ifndef EMACS_EDITING_MODE
@@ -271,6 +281,11 @@ int no_empty_command_completion;
are the only possible matches, even if FIGNORE says to. */
int force_fignore = 1;
+#if __CYGWIN__
+/* If set, shorten "foo.exe" to "foo" when they are the same file. */
+int completion_strip_exe;
+#endif /* __CYGWIN__ */
+
/* Perform spelling correction on directory names during word completion */
int dircomplete_spelling = 0;
@@ -498,11 +513,12 @@ initialize_readline ()
kseq[0] = CTRL('J');
kseq[1] = '\0';
func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
- if (func == rl_vi_editing_mode)
+ extern rl_command_func_t *IMP(rl_vi_editing_mode);
+ if (func == rl_vi_editing_mode || func == IMP(rl_vi_editing_mode))
rl_unbind_key_in_map (CTRL('J'), emacs_meta_keymap);
kseq[0] = CTRL('M');
func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
- if (func == rl_vi_editing_mode)
+ if (func == rl_vi_editing_mode || func == IMP(rl_vi_editing_mode))
rl_unbind_key_in_map (CTRL('M'), emacs_meta_keymap);
#if defined (VI_MODE)
rl_unbind_key_in_map (CTRL('E'), vi_movement_keymap);
@@ -521,7 +537,8 @@ initialize_readline ()
kseq[0] = '~';
kseq[1] = '\0';
func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
- if (func == 0 || func == rl_tilde_expand)
+ extern rl_command_func_t *IMP(rl_tilde_expand);
+ if (func == 0 || func == rl_tilde_expand || func == IMP(rl_tilde_expand))
rl_bind_keyseq_in_map (kseq, bash_complete_username, emacs_meta_keymap);
rl_bind_key_if_unbound_in_map ('~', bash_possible_username_completions, emacs_ctlx_keymap);
@@ -544,7 +561,8 @@ initialize_readline ()
kseq[0] = TAB;
kseq[1] = '\0';
func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
- if (func == 0 || func == rl_tab_insert)
+ extern rl_command_func_t *IMP(rl_tab_insert);
+ if (func == 0 || func == rl_tab_insert || func == IMP(rl_tab_insert))
rl_bind_key_in_map (TAB, dynamic_complete_history, emacs_meta_keymap);
/* Tell the completer that we want a crack first. */
@@ -2194,6 +2212,21 @@ globword:
if (match && executable_completion ((searching_path ? val : cval), searching_path))
{
+#if __CYGWIN__
+ if (completion_strip_exe)
+ {
+ size_t val_len = strlen (val);
+ char *candidate;
+ if (val_len > 4 && !strcasecmp (&val[val_len - 4], ".exe")
+ && (candidate = strdup (val)))
+ {
+ candidate[val_len - 4] = '\0';
+ if (same_file (val, candidate, NULL, NULL))
+ temp[strlen (temp) - 4] = '\0';
+ free (candidate);
+ }
+ }
+#endif
if (cval != val)
free (cval);
free (val);
@@ -2929,6 +2962,17 @@ test_for_directory (name)
int r;
fn = bash_tilde_expand (name, 0);
+#if __CYGWIN
+ /* stat("//server") can only be successful as a directory, but can take
+ seconds to time out on failure. It is much faster to assume that
+ "//server" is a valid name than it is to wait for a stat, even if it
+ gives false positives on bad names. */
+ if (fn[0] == '/' && fn[1] == '/' && ! strchr (&fn[2], '/'))
+ {
+ free (fn);
+ return 1;
+ }
+#endif
r = file_isdir (fn);
free (fn);
--- origsrc/bash-4.4/builtins/read.def 2017-01-23 13:28:07.017686500 -0600
+++ src/bash-4.4/builtins/read.def 2017-01-23 13:55:07.992877600 -0600
@@ -85,7 +85,6 @@ $END
#ifdef __CYGWIN__
# include <fcntl.h>
-# include <io.h>
#endif
#include "../bashintl.h"
@@ -530,10 +529,6 @@ read_builtin (list)
fflush (stderr);
}
-#if defined (__CYGWIN__) && defined (O_TEXT)
- setmode (0, O_TEXT);
-#endif
-
ps2 = 0;
for (print_ps2 = eof = retval = 0;;)
{
@@ -664,6 +659,14 @@ read_builtin (list)
if (c == '\0' && delim != '\0')
continue; /* skip NUL bytes in input */
+#ifdef __CYGWIN__
+ {
+ extern igncr;
+ if (igncr && c == '\r' && delim != '\r')
+ continue; /* skip carriage return */
+ }
+#endif
+
if ((skip_ctlesc == 0 && c == CTLESC) || (skip_ctlnul == 0 && c == CTLNUL))
{
saw_escape++;
--- origsrc/bash-4.4/builtins/set.def 2016-06-02 19:10:10.000000000 -0500
+++ src/bash-4.4/builtins/set.def 2017-01-23 13:55:07.992877600 -0600
@@ -56,6 +56,13 @@ extern int dont_save_function_defs;
#if defined (READLINE)
extern int no_line_editing;
#endif /* READLINE */
+#ifdef __CYGWIN__
+extern int igncr;
+static int set_minus_o_option_maybe (int, const char *, int);
+# define INTERACTIVE_ONLY ,1
+#else
+# define INTERACTIVE_ONLY
+#endif
$BUILTIN set
$FUNCTION set_builtin
@@ -92,6 +99,9 @@ Options:
#if defined (HISTORY)
history enable command history
#endif
+#ifdef __CYGWIN__
+ igncr on Cygwin, ignore \r in line endings
+#endif
ignoreeof the shell will not exit upon reading EOF
interactive-comments
allow comments to appear in interactive commands
@@ -192,29 +202,39 @@ const struct {
int *variable;
setopt_set_func_t *set_func;
setopt_get_func_t *get_func;
+#ifdef __CYGWIN__
+ /* Cygwin users have taken to exporting SHELLOPTS for the cygwin-specific
+ igncr. As a result, we want to ensure SHELLOPTS parsing does not turn
+ on interactive options when exported from an interactive shell, but
+ parse in a non-interactive setting, so as not to break POSIX /bin/sh */
+ int interactive_only;
+#endif
} o_options[] = {
{ "allexport", 'a', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
#if defined (BRACE_EXPANSION)
{ "braceexpand",'B', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
#endif
#if defined (READLINE)
- { "emacs", '\0', (int *)NULL, set_edit_mode, get_edit_mode },
+ { "emacs", '\0', (int *)NULL, set_edit_mode, get_edit_mode INTERACTIVE_ONLY },
#endif
{ "errexit", 'e', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
{ "errtrace", 'E', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
{ "functrace", 'T', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
{ "hashall", 'h', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
#if defined (BANG_HISTORY)
- { "histexpand", 'H', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
+ { "histexpand", 'H', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL INTERACTIVE_ONLY },
#endif /* BANG_HISTORY */
#if defined (HISTORY)
- { "history", '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL },
+ { "history", '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL INTERACTIVE_ONLY },
+#endif
+#ifdef __CYGWIN__
+ { "igncr", '\0', &igncr, NULL, (setopt_get_func_t *)NULL },
#endif
{ "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL },
{ "interactive-comments", '\0', &interactive_comments, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
{ "keyword", 'k', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
#if defined (JOB_CONTROL)
- { "monitor", 'm', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
+ { "monitor", 'm', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL INTERACTIVE_ONLY },
#endif
{ "noclobber", 'C', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
{ "noexec", 'n', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
@@ -233,7 +253,7 @@ const struct {
{ "privileged", 'p', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
{ "verbose", 'v', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
#if defined (READLINE)
- { "vi", '\0', (int *)NULL, set_edit_mode, get_edit_mode },
+ { "vi", '\0', (int *)NULL, set_edit_mode, get_edit_mode INTERACTIVE_ONLY },
#endif
{ "xtrace", 'x', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
{(char *)NULL, 0 , (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
@@ -455,6 +475,15 @@ int
set_minus_o_option (on_or_off, option_name)
int on_or_off;
char *option_name;
+#ifdef __CYGWIN__
+{
+ /* See Cygwin comments above. */
+ return set_minus_o_option_maybe (on_or_off, option_name, 0);
+}
+static int
+set_minus_o_option_maybe (int on_or_off, const char *option_name,
+ int avoid_interactive)
+#endif /* __CYGWIN__ */
{
register int i;
@@ -462,6 +491,10 @@ set_minus_o_option (on_or_off, option_na
{
if (STREQ (option_name, o_options[i].name))
{
+#ifdef __CYGWIN__
+ if (o_options[i].interactive_only && avoid_interactive)
+ return EXECUTION_SUCCESS;
+#endif
if (o_options[i].letter == 0)
{
previous_option_value = GET_BINARY_O_OPTION_VALUE (i, o_options[i].name);
@@ -588,7 +621,11 @@ parse_shellopts (value)
vptr = 0;
while (vname = extract_colon_unit (value, &vptr))
{
+#ifdef __CYGWIN__
+ set_minus_o_option_maybe (FLAG_ON, vname, !interactive_shell);
+#else
set_minus_o_option (FLAG_ON, vname);
+#endif
free (vname);
}
}
--- origsrc/bash-4.4/builtins/shopt.def 2016-05-06 14:00:02.000000000 -0500
+++ src/bash-4.4/builtins/shopt.def 2017-01-23 13:55:07.992877600 -0600
@@ -92,6 +92,10 @@ extern int glob_asciirange;
extern int lastpipe_opt;
extern int inherit_errexit;
+#ifdef __CYGWIN__
+extern int completion_strip_exe;
+#endif
+
#if defined (EXTENDED_GLOB)
extern int extended_glob;
#endif
@@ -169,6 +173,9 @@ static struct {
{ "compat41", &shopt_compat41, set_compatibility_level },
{ "compat42", &shopt_compat42, set_compatibility_level },
{ "compat43", &shopt_compat43, set_compatibility_level },
+#ifdef __CYGWIN__
+ { "completion_strip_exe", &completion_strip_exe, NULL },
+#endif
#if defined (READLINE)
{ "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
{ "direxpand", &dircomplete_expand, shopt_set_complete_direxpand },
--- origsrc/bash-4.4/config-top.h 2016-05-19 13:34:02.000000000 -0500
+++ src/bash-4.4/config-top.h 2017-01-23 13:55:07.992877600 -0600
@@ -87,10 +87,10 @@
#define DEFAULT_BASHRC "~/.bashrc"
/* System-wide .bashrc file for interactive shells. */
-/* #define SYS_BASHRC "/etc/bash.bashrc" */
+#define SYS_BASHRC "/etc/bash.bashrc"
/* System-wide .bash_logout for login shells. */
-/* #define SYS_BASH_LOGOUT "/etc/bash.bash_logout" */
+#define SYS_BASH_LOGOUT "/etc/bash.bash_logout"
/* Define this to make non-interactive shells begun with argv[0][0] == '-'
run the startup files when not in posix mode. */
@@ -100,7 +100,7 @@
sshd and source the .bashrc if so (like the rshd behavior). This checks
for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment,
which can be fooled under certain not-uncommon circumstances. */
-/* #define SSH_SOURCE_BASHRC */
+#define SSH_SOURCE_BASHRC
/* Define if you want the case-capitalizing operators (~[~]) and the
`capcase' variable attribute (declare -c). */
--- origsrc/bash-4.4/doc/Makefile.in 2015-12-06 18:55:56.000000000 -0600
+++ src/bash-4.4/doc/Makefile.in 2017-01-23 13:55:07.992877600 -0600
@@ -189,7 +189,7 @@ bashref.html: $(BASHREF_FILES) $(HSUSER)
$(MAKEINFO) --html --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
bash.info: bashref.info
- ${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \
+ ${SHELL} ${INFOPOST} < bashref.info > $@ ; \
bash.txt: bash.1
bash.ps: bash.1
@@ -252,9 +252,9 @@ install: info installdirs
-$(INSTALL_DATA) $(srcdir)/bashbug.1 $(DESTDIR)$(man1dir)/bashbug${man1ext}
-$(INSTALL_DATA) $(OTHER_DOCS) $(DESTDIR)$(docdir)
# uncomment the next lines to install the builtins man page
-# sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1
-# -$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
-# -$(RM) $${TMPDIR:-/var/tmp}/builtins.1
+ sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1
+ -$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
+ -$(RM) $${TMPDIR:-/var/tmp}/builtins.1
-if test -f bash.info; then d=.; else d=$(srcdir); fi; \
$(INSTALL_DATA) $$d/bash.info $(DESTDIR)$(infodir)/bash.info
# run install-info if it is present to update the info directory
--- origsrc/bash-4.4/doc/bash.1 2016-08-26 08:45:17.000000000 -0500
+++ src/bash-4.4/doc/bash.1 2017-01-23 13:55:08.008447700 -0600
@@ -9607,6 +9607,10 @@ filenames.
This variable is set by default, which is the default bash behavior in
versions through 4.2.
.TP 8
+.B completion_strip_exe
+If set, whenever bash sees \fIfoo.exe\fP during completion, it checks if
+\fIfoo\fP is the same file and strips the suffix.
+.TP 8
.B direxpand
If set,
.B bash
--- origsrc/bash-4.4/doc/bashref.texi 2016-09-07 16:13:36.000000000 -0500
+++ src/bash-4.4/doc/bashref.texi 2017-01-23 13:55:08.008447700 -0600
@@ -5123,6 +5123,10 @@ filenames.
This variable is set by default, which is the default Bash behavior in
versions through 4.2.
+@item completion_strip_exe
+If set, whenever bash sees @file{foo.exe} during completion, it checks if
+@file{foo} is the same file and strips the suffix.
+
@item direxpand
If set, Bash
replaces directory names with the results of word expansion when performing
--- origsrc/bash-4.4/doc/builtins.1 2012-02-21 13:32:05.000000000 -0600
+++ src/bash-4.4/doc/builtins.1 2017-01-23 13:55:08.008447700 -0600
@@ -19,6 +19,6 @@ shift, shopt, source, suspend, test, tim
ulimit, umask, unalias, unset, wait \- bash built-in commands, see \fBbash\fR(1)
.SH BASH BUILTIN COMMANDS
.nr zZ 1
-.so bash.1
+.so man1/bash.1
.SH SEE ALSO
bash(1), sh(1)
--- origsrc/bash-4.4/general.c 2016-08-11 10:16:56.000000000 -0500
+++ src/bash-4.4/general.c 2017-01-23 13:55:08.008447700 -0600
@@ -48,6 +48,10 @@
#include <tilde/tilde.h>
+#ifdef __CYGWIN__
+# include <sys/cygwin.h>
+#endif
+
#if !defined (errno)
extern int errno;
#endif /* !errno */
@@ -718,7 +722,8 @@ make_absolute (string, dot_path)
{
char pathbuf[PATH_MAX + 1];
- cygwin_conv_to_full_posix_path (string, pathbuf);
+ cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_ABSOLUTE, string, pathbuf,
+ sizeof pathbuf);
result = savestring (pathbuf);
}
#else
--- origsrc/bash-4.4/input.c 2015-09-24 18:49:23.000000000 -0500
+++ src/bash-4.4/input.c 2017-01-23 13:55:08.008447700 -0600
@@ -44,6 +44,10 @@
#include "quit.h"
#include "trap.h"
+#ifdef __CYGWIN__
+int igncr;
+#endif
+
#if !defined (errno)
extern int errno;
#endif /* !errno */
@@ -561,6 +565,19 @@ buffered_getchar ()
{
CHECK_TERMSIG;
+#ifdef __CYGWIN__
+ /* shopt igncr discards carriage returns from the input stream.
+ If cr is the only character left in the buffer, recurse to pick
+ up the next byte; otherwise flatten the buffer. */
+ if (igncr)
+ {
+ int ch;
+ while ((ch = bufstream_getc (buffers[bash_input.location.buffered_fd]))
+ == '\r')
+ ;
+ return ch;
+ }
+#endif
#if !defined (DJGPP)
return (bufstream_getc (buffers[bash_input.location.buffered_fd]));
#else
--- origsrc/bash-4.4/lib/sh/pathphys.c 2013-05-28 14:33:58.000000000 -0500
+++ src/bash-4.4/lib/sh/pathphys.c 2017-01-23 13:55:08.008447700 -0600
@@ -35,6 +35,7 @@
#include <stdio.h>
#include <chartypes.h>
#include <errno.h>
+#include <stdlib.h>
#include "shell.h"
@@ -76,6 +77,9 @@ sh_physpath (path, flags)
char *path;
int flags;
{
+#ifdef __CYGWIN__
+ return realpath (path, NULL);
+#endif
char tbuf[PATH_MAX+1], linkbuf[PATH_MAX+1];
char *result, *p, *q, *qsave, *qbase, *workpath;
int double_slash_path, linklen, nlink;
@@ -214,11 +218,7 @@ error:
{
q = result;
/* Duplicating some code here... */
-#if defined (__CYGWIN__)
- qbase = (ISALPHA((unsigned char)workpath[0]) && workpath[1] == ':') ? workpath + 3 : workpath + 1;
-#else
qbase = workpath + 1;
-#endif
double_slash_path = DOUBLE_SLASH (workpath);
qbase += double_slash_path;
--- origsrc/bash-4.4/lib/sh/tmpfile.c 2016-08-11 10:05:58.000000000 -0500
+++ src/bash-4.4/lib/sh/tmpfile.c 2017-01-23 13:55:08.008447700 -0600
@@ -101,7 +101,7 @@ get_tmpdir (flags)
if (tdir && (file_iswdir (tdir) == 0 || strlen (tdir) > PATH_MAX))
tdir = 0;
- if (tdir == 0)
+ if (tdir == 0 || !file_iswdir (tdir))
tdir = get_sys_tmpdir ();
#if defined (HAVE_PATHCONF) && defined (_PC_NAME_MAX)
--- origsrc/bash-4.4/mksyntax.c 2012-07-29 18:48:38.000000000 -0500
+++ src/bash-4.4/mksyntax.c 2017-01-23 13:55:08.008447700 -0600
@@ -29,13 +29,13 @@
#ifdef HAVE_UNISTD_H
# include <unistd.h>
+#else
+extern int optind;
+extern char *optarg;
#endif
#include "syntax.h"
-extern int optind;
-extern char *optarg;
-
#ifndef errno
extern int errno;
#endif
--- origsrc/bash-4.4/parse.y 2016-09-11 10:31:46.000000000 -0500
+++ src/bash-4.4/parse.y 2017-01-23 13:55:08.008447700 -0600
@@ -1539,14 +1539,20 @@ yy_string_get ()
string = bash_input.location.string;
/* If the string doesn't exist, or is empty, EOF found. */
- if (string && *string)
+ while (string && *string)
{
c = *string++;
bash_input.location.string = string;
+#ifdef __CYGWIN__
+ {
+ extern int igncr;
+ if (igncr && c == '\r')
+ continue;
+ }
+#endif
return (c);
}
- else
- return (EOF);
+ return (EOF);
}
static int
--- origsrc/bash-4.4/subst.c 2017-01-23 13:28:06.955247200 -0600
+++ src/bash-4.4/subst.c 2017-01-23 13:55:08.008447700 -0600
@@ -43,6 +43,7 @@
#include "posixstat.h"
#include "bashintl.h"
+#define NEED_SH_SETLINEBUF_DECL
#include "shell.h"
#include "parser.h"
#include "flags.h"
@@ -5964,6 +5965,13 @@ read_comsub (fd, quoted, rflag)
#endif
continue;
}
+#ifdef __CYGWIN__
+ {
+ extern int igncr;
+ if (igncr && c == '\r')
+ continue;
+ }
+#endif
/* Add the character to ISTRING, possibly after resizing it. */
RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE);
@@ -6088,6 +6096,28 @@ command_substitute (string, quoted)
goto error_exit;
}
+#ifdef __CYGWIN__
+ /* Passing a pipe through std fds can cause hangs when talking to a
+ non-cygwin child. Move it. */
+ if (fildes[0] < 3)
+ {
+ int fd = fcntl (fildes[0], F_DUPFD, 3);
+ close (fildes[0]);
+ fildes[0] = fd;
+ }
+ if (fildes[1] < 3)
+ {
+ int fd = fcntl (fildes[1], F_DUPFD, 3);
+ close (fildes[1]);
+ fildes[1] = fd;
+ }
+ if (fildes[0] < 0 || fildes[1] < 0)
+ {
+ sys_error (_("cannot make pipe for command substitution"));
+ goto error_exit;
+ }
+#endif /* __CYGWIN__ */
+
old_pid = last_made_pid;
#if defined (JOB_CONTROL)
old_pipeline_pgrp = pipeline_pgrp;
--- origsrc/bash-4.4/support/bashversion.c 2008-09-09 08:31:53.000000000 -0500
+++ src/bash-4.4/support/bashversion.c 2017-01-23 13:55:08.024037200 -0600
@@ -26,6 +26,9 @@
#if defined (HAVE_UNISTD_H)
# include <unistd.h>
+#else
+extern int optind;
+extern char *optarg;
#endif
#include "bashansi.h"
@@ -41,9 +44,6 @@
#define LFLAG 0x0020
#define XFLAG 0x0040
-extern int optind;
-extern char *optarg;
-
extern char *dist_version;
extern int patch_level;
--- origsrc/bash-4.4/support/mkversion.sh 2008-08-13 07:25:57.000000000 -0500
+++ src/bash-4.4/support/mkversion.sh 2017-01-23 13:55:08.024037200 -0600
@@ -29,7 +29,7 @@ source_dir="."
while [ $# -gt 0 ]; do
case "$1" in
-o) shift; OUTFILE=$1; shift ;;
- -b) shift; inc_build=yes ;;
+ -b) shift; ;; # inc_build=yes ;; # hacked out for cygport
-s) shift; rel_status=$1; shift ;;
-p) shift; patch_level=$1; shift ;;
-d) shift; dist_version=$1; shift ;;
--- origsrc/bash-4.4/variables.c 2016-06-15 15:05:52.000000000 -0500
+++ src/bash-4.4/variables.c 2017-01-23 13:55:08.024037200 -0600
@@ -5239,6 +5239,7 @@ sv_winsize (name)
/* Update the value of HOME in the export environment so tilde expansion will
work on cygwin. */
#if defined (__CYGWIN__)
+void
sv_home (name)
char *name;
{

View File

@ -1,10 +1,10 @@
postFixupHooks+=(_cygwinFixAutoImageBase) fixupOutputHooks+=(_cygwinFixAutoImageBase)
_cygwinFixAutoImageBase() { _cygwinFixAutoImageBase() {
if [ "$dontRebase" == 1 ]; then if [ "$dontRebase" == 1 ] || [ ! -d "$prefix" ]; then
return return
fi fi
find $out -name "*.dll" | while read DLL; do find "$prefix" -name "*.dll" -type f | while read DLL; do
if [ -f /etc/rebasenix.nextbase ]; then if [ -f /etc/rebasenix.nextbase ]; then
NEXTBASE="$(</etc/rebasenix.nextbase)" NEXTBASE="$(</etc/rebasenix.nextbase)"
fi fi

View File

@ -1,10 +1,10 @@
postFixupHooks+=(_cygwinFixAutoImageBase) fixupOutputHooks+=(_cygwinFixAutoImageBase)
_cygwinFixAutoImageBase() { _cygwinFixAutoImageBase() {
if [ "$dontRebase" == 1 ]; then if [ "$dontRebase" == 1 ] || [ ! -d "$prefix" ]; then
return return
fi fi
find $out -name "*.dll" | while read DLL; do find "$prefix" -name "*.dll" -type f | while read DLL; do
if [ -f /etc/rebasenix.nextbase ]; then if [ -f /etc/rebasenix.nextbase ]; then
NEXTBASE="$(</etc/rebasenix.nextbase)" NEXTBASE="$(</etc/rebasenix.nextbase)"
fi fi

View File

@ -102,7 +102,7 @@ let
fetchurlBoot = fetchurl; fetchurlBoot = fetchurl;
inherit system shell cc overrides config; inherit shell cc overrides config;
}; };
in in

View File

@ -15,10 +15,6 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ xz.bin ]; nativeBuildInputs = [ xz.bin ];
preConfigure = if stdenv.isCygwin then ''
sed -i lib/fpending.h -e 's,include <stdio_ext.h>,,'
'' else null;
# In stdenv-linux, prevent a dependency on bootstrap-tools. # In stdenv-linux, prevent a dependency on bootstrap-tools.
makeFlags = "SHELL=/bin/sh GREP=grep"; makeFlags = "SHELL=/bin/sh GREP=grep";

View File

@ -7753,6 +7753,7 @@ let self = _self // overrides; _self = with self; {
url = mirror://cpan/authors/id/P/PV/PVANDRY/gettext-1.05.tar.gz; url = mirror://cpan/authors/id/P/PV/PVANDRY/gettext-1.05.tar.gz;
sha256 = "15262a00vx714szpx8p2z52wxkz46xp7acl72znwjydyq4ypydi7"; sha256 = "15262a00vx714szpx8p2z52wxkz46xp7acl72znwjydyq4ypydi7";
}; };
LANG="C";
}; };
LocaleMaketext = buildPerlPackage { LocaleMaketext = buildPerlPackage {