at 18.09-beta 1.8 kB view raw
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}"; 14 15 # Add all dependencies in buildInputs including propagated ones to 16 # STACK_IN_NIX_EXTRA_ARGS. 17 addStackArgsHook = '' 18for pkg in ''${pkgsHostHost[@]} ''${pkgsHostBuild[@]} ''${pkgsHostTarget[@]} 19do 20 [ -d "$pkg/lib" ] && \ 21 export STACK_IN_NIX_EXTRA_ARGS+=" --extra-lib-dirs=$pkg/lib" 22 [ -d "$pkg/include" ] && \ 23 export STACK_IN_NIX_EXTRA_ARGS+=" --extra-include-dirs=$pkg/include" 24done 25 ''; 26in stdenv.mkDerivation (args // { 27 28 buildInputs = 29 buildInputs ++ 30 optional (stdenv.hostPlatform.libc == "glibc") glibcLocales ++ 31 [ ghc pkgconfig stack ]; 32 33 STACK_PLATFORM_VARIANT="nix"; 34 STACK_IN_NIX_SHELL=1; 35 STACK_IN_NIX_EXTRA_ARGS = extraArgs; 36 shellHook = addStackArgsHook + args.shellHook or ""; 37 38 39 # XXX: workaround for https://ghc.haskell.org/trac/ghc/ticket/11042. 40 LD_LIBRARY_PATH = makeLibraryPath (LD_LIBRARY_PATH ++ buildInputs); 41 # ^^^ Internally uses `getOutput "lib"` (equiv. to getLib) 42 43 # Non-NixOS git needs cert 44 GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt"; 45 46 # Fixes https://github.com/commercialhaskell/stack/issues/2358 47 LANG = "en_US.UTF-8"; 48 49 preferLocalBuild = true; 50 51 configurePhase = args.configurePhase or '' 52 export STACK_ROOT=$NIX_BUILD_TOP/.stack 53 ${addStackArgsHook} 54 ''; 55 56 buildPhase = args.buildPhase or "${stackCmd} build"; 57 58 checkPhase = args.checkPhase or "${stackCmd} test"; 59 60 doCheck = args.doCheck or true; 61 62 installPhase = args.installPhase or '' 63 ${stackCmd} --local-bin-path=$out/bin build --copy-bins 64 ''; 65})