1{ stdenv, ghc, pkgconfig, glibcLocales, cacert, stack }@depArgs:
2
3with stdenv.lib;
4
5{ buildInputs ? []
6, extraArgs ? []
7, LD_LIBRARY_PATH ? []
8, ghc ? depArgs.ghc
9, stack ? depArgs.stack
10, ...
11}@args:
12
13let stackCmd = "stack --internal-re-exec-version=${stack.version}";
14in stdenv.mkDerivation (args // {
15
16 buildInputs =
17 buildInputs ++
18 optional stdenv.isLinux glibcLocales ++
19 [ ghc pkgconfig stack ];
20
21 STACK_PLATFORM_VARIANT="nix";
22 STACK_IN_NIX_SHELL=1;
23 STACK_IN_NIX_EXTRA_ARGS =
24 concatMap (pkg: ["--extra-lib-dirs=${getLib pkg}/lib"
25 "--extra-include-dirs=${getDev pkg}/include"]) buildInputs ++
26 extraArgs;
27
28 # XXX: workaround for https://ghc.haskell.org/trac/ghc/ticket/11042.
29 LD_LIBRARY_PATH = makeLibraryPath (LD_LIBRARY_PATH ++ buildInputs);
30 # ^^^ Internally uses `getOutput "lib"` (equiv. to getLib)
31
32 # Non-NixOS git needs cert
33 GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
34
35 # Fixes https://github.com/commercialhaskell/stack/issues/2358
36 LANG = "en_US.UTF-8";
37
38 preferLocalBuild = true;
39
40 configurePhase = args.configurePhase or ''
41 export STACK_ROOT=$NIX_BUILD_TOP/.stack
42 '';
43
44 buildPhase = args.buildPhase or "${stackCmd} build";
45
46 checkPhase = args.checkPhase or "${stackCmd} test";
47
48 doCheck = args.doCheck or true;
49
50 installPhase = args.installPhase or ''
51 ${stackCmd} --local-bin-path=$out/bin build --copy-bins
52 '';
53})