1{ pkgs }:
2
3rec {
4
5 overrideCabal = drv: f: (drv.override (args: args // {
6 mkDerivation = drv: args.mkDerivation (drv // f drv);
7 })) // {
8 overrideScope = scope: overrideCabal (drv.overrideScope scope) f;
9 };
10
11 doHaddock = drv: overrideCabal drv (drv: { doHaddock = true; });
12 dontHaddock = drv: overrideCabal drv (drv: { doHaddock = false; });
13
14 doJailbreak = drv: overrideCabal drv (drv: { jailbreak = true; });
15 dontJailbreak = drv: overrideCabal drv (drv: { jailbreak = false; });
16
17 doCheck = drv: overrideCabal drv (drv: { doCheck = true; });
18 dontCheck = drv: overrideCabal drv (drv: { doCheck = false; });
19
20 doDistribute = drv: overrideCabal drv (drv: { hydraPlatforms = drv.platforms or ["i686-linux" "x86_64-linux" "x86_64-darwin"]; });
21 dontDistribute = drv: overrideCabal drv (drv: { hydraPlatforms = []; });
22
23 appendConfigureFlag = drv: x: overrideCabal drv (drv: { configureFlags = (drv.configureFlags or []) ++ [x]; });
24 removeConfigureFlag = drv: x: overrideCabal drv (drv: { configureFlags = pkgs.stdenv.lib.remove x (drv.configureFlags or []); });
25
26 addBuildTool = drv: x: addBuildTools drv [x];
27 addBuildTools = drv: xs: overrideCabal drv (drv: { buildTools = (drv.buildTools or []) ++ xs; });
28
29 addExtraLibrary = drv: x: addExtraLibraries drv [x];
30 addExtraLibraries = drv: xs: overrideCabal drv (drv: { extraLibraries = (drv.extraLibraries or []) ++ xs; });
31
32 addBuildDepend = drv: x: addBuildDepends drv [x];
33 addBuildDepends = drv: xs: overrideCabal drv (drv: { buildDepends = (drv.buildDepends or []) ++ xs; });
34
35 addPkgconfigDepend = drv: x: addPkgconfigDepends drv [x];
36 addPkgconfigDepends = drv: xs: overrideCabal drv (drv: { pkgconfigDepends = (drv.pkgconfigDepends or []) ++ xs; });
37
38 enableCabalFlag = drv: x: appendConfigureFlag (removeConfigureFlag drv "-f-${x}") "-f${x}";
39 disableCabalFlag = drv: x: appendConfigureFlag (removeConfigureFlag drv "-f${x}") "-f-${x}";
40
41 markBroken = drv: overrideCabal drv (drv: { broken = true; });
42 markBrokenVersion = version: drv: assert drv.version == version; markBroken drv;
43
44 enableLibraryProfiling = drv: overrideCabal drv (drv: { enableLibraryProfiling = true; });
45 disableLibraryProfiling = drv: overrideCabal drv (drv: { enableLibraryProfiling = false; });
46
47 enableSharedExecutables = drv: overrideCabal drv (drv: { enableSharedExecutables = true; });
48 disableSharedExecutables = drv: overrideCabal drv (drv: { enableSharedExecutables = false; });
49
50 enableSharedLibraries = drv: overrideCabal drv (drv: { enableSharedLibraries = true; });
51 disableSharedLibraries = drv: overrideCabal drv (drv: { enableSharedLibraries = false; });
52
53 enableSplitObjs = drv: overrideCabal drv (drv: { enableSplitObjs = true; });
54 disableSplitObjs = drv: overrideCabal drv (drv: { enableSplitObjs = false; });
55
56 enableStaticLibraries = drv: overrideCabal drv (drv: { enableStaticLibraries = true; });
57 disableStaticLibraries = drv: overrideCabal drv (drv: { enableStaticLibraries = false; });
58
59 appendPatch = drv: x: appendPatches drv [x];
60 appendPatches = drv: xs: overrideCabal drv (drv: { patches = (drv.patches or []) ++ xs; });
61
62 doHyperlinkSource = drv: overrideCabal drv (drv: { hyperlinkSource = true; });
63 dontHyperlinkSource = drv: overrideCabal drv (drv: { hyperlinkSource = false; });
64
65 sdistTarball = pkg: pkgs.lib.overrideDerivation pkg (drv: {
66 name = "${drv.pname}-source-${drv.version}";
67 buildPhase = "./Setup sdist";
68 haddockPhase = ":";
69 checkPhase = ":";
70 installPhase = "install -D dist/${drv.pname}-*.tar.gz $out/${drv.pname}-${drv.version}.tar.gz";
71 fixupPhase = ":";
72 });
73
74 buildFromSdist = pkg: pkgs.lib.overrideDerivation pkg (drv: {
75 unpackPhase = let src = sdistTarball pkg; tarname = "${pkg.pname}-${pkg.version}"; in ''
76 echo "Source tarball is at ${src}/${tarname}.tar.gz"
77 tar xf ${src}/${tarname}.tar.gz
78 cd ${pkg.pname}-*
79 '';
80 });
81
82 buildStrictly = pkg: buildFromSdist (appendConfigureFlag pkg "--ghc-option=-Wall --ghc-option=-Werror");
83
84 triggerRebuild = drv: i: overrideCabal drv (drv: { postUnpack = ": trigger rebuild ${toString i}"; });
85
86 #FIXME: throw this away sometime in the future. added 2015-08-18
87 withHoogle = throw "withHoogle is no longer supported, use ghcWithHoogle instead";
88}