Add haskell.lib.setBuiltTarget, and support non library compiling of a single target

This commit is contained in:
Isaac Shapira
2021-05-02 13:35:07 +09:00
committed by (cdep)illabout
parent 111151c4bc
commit d725ac7942
8 changed files with 69 additions and 1 deletions
@@ -464,7 +464,12 @@ stdenv.mkDerivation ({
installPhase = ''
runHook preInstall
${if !isLibrary then "${setupCommand} install" else ''
${if !isLibrary && buildTarget == "" then "${setupCommand} install"
# ^^ if the project is not a library, and no build target is specified, we can just use "install".
else if !isLibrary then "${setupCommand} copy ${buildTarget}"
# ^^ if the project is not a library, and we have a build target, then use "copy" to install
# just the target specified; "install" will error here, since not all targets have been built.
else ''
${setupCommand} copy
local packageConfDir="$out/lib/${ghc.name}/package.conf.d"
local packageConfFile="$packageConfDir/${pname}-${version}.conf"
+10
View File
@@ -196,6 +196,16 @@ rec {
appendPatch = drv: x: appendPatches drv [x];
appendPatches = drv: xs: overrideCabal drv (drv: { patches = (drv.patches or []) ++ xs; });
/* Set a specific build target instead of compiling all targets in the package.
* For example, imagine we have a .cabal file with a library, and 2 executables "dev" and "server".
* We can build only "server" and not wait on the compilation of "dev" by useing setBuildTarget as follows:
*
* setBuildTarget (callCabal2nix "thePackageName" thePackageSrc {}) "server"
*
*/
setBuildTargets = drv: xs: overrideCabal drv (drv: { buildTarget = lib.concatStringsSep " " xs; });
setBuildTarget = drv: x: setBuildTargets drv [x];
doHyperlinkSource = drv: overrideCabal drv (drv: { hyperlinkSource = true; });
dontHyperlinkSource = drv: overrideCabal drv (drv: { hyperlinkSource = false; });