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}