Skip to content

Commit

Permalink
mingw-w64: Clean up, especially clarifying staging
Browse files Browse the repository at this point in the history
  • Loading branch information
Ericson2314 committed Jun 22, 2017
1 parent c2e2152 commit bb7067f
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 51 deletions.
11 changes: 11 additions & 0 deletions pkgs/os-specific/windows/mingw-w64/common.nix
@@ -0,0 +1,11 @@
{ fetchurl }:

rec {
version = "4.0.6";
name = "mingw-w64-${version}";

src = fetchurl {
url = "mirror://sourceforge/mingw-w64/mingw-w64-v${version}.tar.bz2";
sha256 = "0p01vm5kx1ixc08402z94g1alip4vx66gjpvyi9maqyqn2a76h0c";
};
}
38 changes: 4 additions & 34 deletions pkgs/os-specific/windows/mingw-w64/default.nix
@@ -1,36 +1,6 @@
{ stdenv, fetchurl, binutils ? null, gccCross ? null
, onlyHeaders ? false
, onlyPthreads ? false
}:

let
version = "4.0.6";
name = "mingw-w64-${version}";
in
stdenv.mkDerivation ({
inherit name;

src = fetchurl {
url = "mirror://sourceforge/mingw-w64/mingw-w64-v${version}.tar.bz2";
sha256 = "0p01vm5kx1ixc08402z94g1alip4vx66gjpvyi9maqyqn2a76h0c";
};
} //
(if onlyHeaders then {
name = name + "-headers";
preConfigure = ''
cd mingw-w64-headers
'';
configureFlags = "--without-crt";
} else if onlyPthreads then {
name = name + "-pthreads";
preConfigure = ''
cd mingw-w64-libraries/winpthreads
'';
} else {
buildInputs = [ gccCross binutils ];

crossConfig = gccCross.crossConfig;
{ stdenv, callPackage }:

stdenv.mkDerivation {
inherit (callPackage ./common.nix {}) name src;
dontStrip = true;
})
)
}
13 changes: 13 additions & 0 deletions pkgs/os-specific/windows/mingw-w64/headers.nix
@@ -0,0 +1,13 @@
{ stdenvNoCC, callPackage }:

let
inherit (callPackage ./common.nix {}) name src;

in stdenvNoCC.mkDerivation {
name = name + "-headers";
inherit src;

preConfigure = ''
cd mingw-w64-headers
'';
}
13 changes: 13 additions & 0 deletions pkgs/os-specific/windows/mingw-w64/pthreads.nix
@@ -0,0 +1,13 @@
{ stdenvNoCC, callPackage }:

let
inherit (callPackage ./common.nix {}) name src;

in stdenvNoCC.mkDerivation {
name = name + "-pthreads";
inherit src;

preConfigure = ''
cd mingw-w64-libraries/winpthreads
'';
}
31 changes: 14 additions & 17 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -5163,9 +5163,17 @@ with pkgs;

gccApple = throw "gccApple is no longer supported";

# Can't just overrideCC, because then the stdenv-cross mkDerivation will be
# thrown away. TODO: find a better solution for this.
crossLibcStdenv = buildPackages.makeStdenvCross {
inherit (buildPackages.buildPackages) stdenv;
inherit buildPlatform hostPlatform targetPlatform;
cc = buildPackages.gccCrossStageStatic;
};

gccCrossStageStatic = assert targetPlatform != buildPlatform; let
libcCross1 =
if targetPlatform.libc == "msvcrt" then windows.mingw_w64_headers
if targetPlatform.libc == "msvcrt" then __targetPackages.windows.mingw_w64_headers
else if targetPlatform.libc == "libSystem" then darwin.xcode
else null;
in wrapCCCross {
Expand Down Expand Up @@ -7800,13 +7808,7 @@ with pkgs;
# Being redundant to avoid cycles on boot. TODO: find a better way
glibcCross = callPackage ../development/libraries/glibc {
installLocales = config.glibc.locales or false;
# Can't just overrideCC, because then the stdenv-cross mkDerivation will be
# thrown away. TODO: find a better solution for this.
stdenv = buildPackages.makeStdenvCross {
inherit (buildPackages.buildPackages) stdenv;
inherit buildPlatform hostPlatform targetPlatform;
cc = buildPackages.gccCrossStageStatic;
};
stdenv = crossLibcStdenv;
};

# We can choose:
Expand All @@ -7815,7 +7817,7 @@ with pkgs;
# hack fixes the hack, *sigh*.
/**/ if name == "glibc" then __targetPackages.glibcCross or glibcCross
else if name == "uclibc" then uclibcCross
else if name == "msvcrt" then windows.mingw_w64
else if name == "msvcrt" then __targetPackages.windows.mingw_w64 or windows.mingw_w64
else if name == "libSystem" then darwin.xcode
else throw "Unknown libc";

Expand Down Expand Up @@ -12561,17 +12563,12 @@ with pkgs;
};

mingw_w64 = callPackage ../os-specific/windows/mingw-w64 {
gccCross = gccCrossStageStatic;
binutils = binutils;
stdenv = crossLibcStdenv;
};

mingw_w64_headers = callPackage ../os-specific/windows/mingw-w64 {
onlyHeaders = true;
};
mingw_w64_headers = callPackage ../os-specific/windows/mingw-w64/headers.nix { };

mingw_w64_pthreads = callPackage ../os-specific/windows/mingw-w64 {
onlyPthreads = true;
};
mingw_w64_pthreads = callPackage ../os-specific/windows/mingw-w64/pthreads.nix { };

pthreads = callPackage ../os-specific/windows/pthread-w32 {
mingw_headers = mingw_headers3;
Expand Down

0 comments on commit bb7067f

Please sign in to comment.