1{ stdenv, ghc, pkgconfig, glibcLocales
2, cacert, stack, makeSetupHook, lib }@depArgs:
3
4{ buildInputs ? []
5, extraArgs ? []
6, LD_LIBRARY_PATH ? []
7, ghc ? depArgs.ghc
8, stack ? depArgs.stack
9, ...
10}@args:
11
12let
13
14 stackCmd = "stack --internal-re-exec-version=${stack.version}";
15
16 # Add all dependencies in buildInputs including propagated ones to
17 # STACK_IN_NIX_EXTRA_ARGS.
18 stackHook = makeSetupHook {} ./stack-hook.sh;
19
20in stdenv.mkDerivation (args // {
21
22 buildInputs = buildInputs
23 ++ lib.optional (stdenv.hostPlatform.libc == "glibc") glibcLocales;
24
25 nativeBuildInputs = [ ghc pkgconfig stack stackHook ];
26
27 STACK_PLATFORM_VARIANT = "nix";
28 STACK_IN_NIX_SHELL = 1;
29 STACK_IN_NIX_EXTRA_ARGS = extraArgs;
30
31 # XXX: workaround for https://ghc.haskell.org/trac/ghc/ticket/11042.
32 LD_LIBRARY_PATH = lib.makeLibraryPath (LD_LIBRARY_PATH ++ buildInputs);
33 # ^^^ Internally uses `getOutput "lib"` (equiv. to getLib)
34
35 # Non-NixOS git needs cert
36 GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
37
38 # Fixes https://github.com/commercialhaskell/stack/issues/2358
39 LANG = "en_US.UTF-8";
40
41 preferLocalBuild = true;
42
43 preConfigure = ''
44 export STACK_ROOT=$NIX_BUILD_TOP/.stack
45 '';
46
47 buildPhase = args.buildPhase or ''
48 runHook preBuild
49
50 ${stackCmd} build
51
52 runHook postBuild
53 '';
54
55 checkPhase = args.checkPhase or ''
56 runHook preCheck
57
58 ${stackCmd} test
59
60 runHook postCheck
61 '';
62
63 doCheck = args.doCheck or true;
64
65 installPhase = args.installPhase or ''
66 runHook preInstall
67
68 ${stackCmd} --local-bin-path=$out/bin build --copy-bins
69
70 runHook postInstall
71 '';
72})