forked from mirrors/nixpkgs
Add haskell.lib.setBuiltTarget, and support non library compiling of a single target
This commit is contained in:
parent
111151c4bc
commit
d725ac7942
|
@ -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"
|
||||
|
|
|
@ -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; });
|
||||
|
||||
|
|
|
@ -3,4 +3,5 @@
|
|||
lib.recurseIntoAttrs {
|
||||
shellFor = callPackage ./shellFor { };
|
||||
documentationTarball = callPackage ./documentationTarball { };
|
||||
setBuildTarget = callPackage ./setBuildTarget { };
|
||||
}
|
||||
|
|
4
pkgs/test/haskell/setBuildTarget/Bar.hs
Normal file
4
pkgs/test/haskell/setBuildTarget/Bar.hs
Normal file
|
@ -0,0 +1,4 @@
|
|||
module Main where
|
||||
|
||||
main :: IO ()
|
||||
main = putStrLn "Hello, Bar!"
|
4
pkgs/test/haskell/setBuildTarget/Foo.hs
Normal file
4
pkgs/test/haskell/setBuildTarget/Foo.hs
Normal file
|
@ -0,0 +1,4 @@
|
|||
module Main where
|
||||
|
||||
main :: IO ()
|
||||
main = putStrLn "Hello, Foo!"
|
2
pkgs/test/haskell/setBuildTarget/Setup.hs
Normal file
2
pkgs/test/haskell/setBuildTarget/Setup.hs
Normal file
|
@ -0,0 +1,2 @@
|
|||
import Distribution.Simple
|
||||
main = defaultMain
|
26
pkgs/test/haskell/setBuildTarget/default.nix
Normal file
26
pkgs/test/haskell/setBuildTarget/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{ pkgs, haskellPackages }: with pkgs.haskell.lib;
|
||||
|
||||
|
||||
let
|
||||
drv = haskellPackages.callCabal2nix "haskell-setBuildTarget" ./. {};
|
||||
test = target: excluded:
|
||||
|
||||
let only = setBuildTarget drv target;
|
||||
in ''
|
||||
if [[ ! -f "${only}/bin/${target}" ]]; then
|
||||
echo "${target} was not built"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f "${only}/bin/${excluded}" ]]; then
|
||||
echo "${excluded} was built, when it should not have been"
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
|
||||
in pkgs.runCommand "test haskell.lib.setBuildTarget" {} ''
|
||||
${test "foo" "bar"}
|
||||
${test "bar" "foo"}
|
||||
touch "$out"
|
||||
''
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
cabal-version: >=1.10
|
||||
name: haskell-setBuildTarget
|
||||
version: 0.1.0.0
|
||||
author: Isaac Shapira
|
||||
maintainer: fresheyeball@protonmail.com
|
||||
build-type: Simple
|
||||
|
||||
executable foo
|
||||
main-is: Foo.hs
|
||||
build-depends: base
|
||||
default-language: Haskell2010
|
||||
|
||||
executable bar
|
||||
main-is: Bar.hs
|
||||
build-depends: base
|
||||
default-language: Haskell2010
|
Loading…
Reference in a new issue