on e94de40 help sign in
haskell.nix/compiler/bootstrap/cabal-install.nix
82 lines 3.2 kB history raw
1{ fetchurl, hackage, stdenv, ghc, zlib, src, version }:
2let dependencies =
3 [ { name = "deepseq"; version = "1.4.3.0"; }
4 { name = "binary"; version = "0.8.5.1"; }
5 { name = "time"; version = "1.9.1"; }
6 { name = "transformers"; version = "0.5.5.0"; }
7 { name = "mtl"; version = "2.2.2"; }
8 { name = "text"; version = "1.2.3.0"; }
9 { name = "parsec"; version = "3.1.13.0"; }
10 { name = "network-uri"; version = "2.6.1.0"; }
11 { name = "network"; version = "2.7.0.0"; }
12 { name = "HTTP"; version = "4000.3.12"; }
13 { name = "zlib"; version = "0.6.2"; }
14 { name = "random"; version = "1.1"; }
15 { name = "stm"; version = "2.4.5.0"; }
16 { name = "hashable"; version = "1.2.7.0"; }
17 { name = "async"; version = "2.2.1"; }
18 { name = "base16-bytestring"; version = "0.1.1.6"; }
19 { name = "base64-bytestring"; version = "1.0.0.1"; }
20 { name = "cryptohash-sha256"; version = "0.11.101.0";}
21 { name = "resolv"; version = "0.1.1.1"; }
22 { name = "mintty"; version = "0.1.2"; }
23 { name = "echo"; version = "0.1.3"; }
24 { name = "edit-distance"; version = "0.2.2.1"; }
25 { name = "ed25519"; version = "0.0.5.0"; }
26 { name = "tar"; version = "0.5.1.0"; }
27 { name = "digest"; version = "0.0.1.2"; }
28 { name = "zip-archive"; version = "0.3.3"; }
29 { name = "hackage-security"; version = "0.5.3.0"; }
30 ]; in
31let depPaths = builtins.map ({name, version}:
32 fetchurl {
33 url = "mirror://hackage/${name}-${version}.tar.gz";
34 inherit (hackage.${name}.${version}) sha256; }) dependencies;
35in stdenv.mkDerivation ({
36 name = "cabal-install";
38 inherit version;
40 passthru = {
41 inherit version;
42 };
44 meta = {
45 platforms = stdenv.lib.platforms.all;
46 };
48 nativeBuildInputs = [ ghc zlib ];
50 inherit src;
52 configurePhase = "";
54 buildPhase = ''
55 # We need the .git directory to make the ./bootstrap command use ../Cabal.
56 mkdir .git
58 cd cabal-install
59 # unpack dependencies, so we can bootstrap without network.
60 for dep in ${builtins.concatStringsSep " " depPaths}; do
61 tar xzf $dep
62 done
64 # make sure we have the patched (revised) .cabal files.
65 ${builtins.concatStringsSep "\n"
66 (builtins.map ({name, version}:
67 let revInfo = hackage.${name}.${version}.revisions.default; in
68 if revInfo.revNum == null || revInfo.revNum == 0
69 then ""
70 else let revision = fetchurl { url = "https://hackage.haskell.org/package/${name}-${version}/revision/${toString revInfo.revNum}.cabal"; inherit (revInfo) sha256; }; in
71 ''cp "${revision}" "${name}-${version}/${name}.cabal"''
72 ) dependencies)
73 }
74 mkdir $out
75 ghc-pkg init $out/packages.conf.d
76 EXTRA_CONFIGURE_OPTS="" SCOPE_OF_INSTALLATION="--package-db=$out/packages.conf.d" PREFIX="$out" ./bootstrap.sh --no-doc -j
77 '';
79 installPhase = ''
81 '';
82})