From be63be9d042839f1c85de7d75ca957c9cff6be57 Mon Sep 17 00:00:00 2001 From: Mathieu Boespflug Date: Sun, 13 Dec 2015 18:20:12 +0100 Subject: [PATCH] haskell: add buildStackProject. For building environments for Stack projects. --- pkgs/build-support/haskell/stack.nix | 40 ++++++++++++++++++++++++++++ pkgs/top-level/haskell-packages.nix | 2 ++ 2 files changed, 42 insertions(+) create mode 100644 pkgs/build-support/haskell/stack.nix diff --git a/pkgs/build-support/haskell/stack.nix b/pkgs/build-support/haskell/stack.nix new file mode 100644 index 00000000000..80b70203955 --- /dev/null +++ b/pkgs/build-support/haskell/stack.nix @@ -0,0 +1,40 @@ +{ stdenv, ghc, pkgconfig, glibcLocales }: + +with stdenv.lib; + +{ buildInputs ? [] +, extraArgs ? [] +, LD_LIBRARY_PATH ? "" +, ... +}@args: + +stdenv.mkDerivation (args // { + + buildInputs = + buildInputs ++ + optional stdenv.isLinux glibcLocales ++ + [ ghc pkgconfig ]; + + STACK_IN_NIX_SHELL=1; + STACK_IN_NIX_EXTRA_ARGS = + concatMap (pkg: ["--extra-lib-dirs=${pkg}/lib" + "--extra-include-dirs=${pkg}/include"]) buildInputs ++ + extraArgs; + + # XXX: workaround for https://ghc.haskell.org/trac/ghc/ticket/11042. + LD_LIBRARY_PATH = "${makeLibraryPath buildInputs}:${LD_LIBRARY_PATH}"; + + preferLocalBuild = true; + + configurePhase = args.configurePhase or "stack setup"; + + buildPhase = args.buildPhase or "stack build"; + + checkPhase = args.checkPhase or "stack test"; + + doCheck = args.doCheck or true; + + installPhase = args.installPhase or '' + stack --local-bin-path=$out/bin build --copy-bins + ''; +}) diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix index 928541cd9df..9b7bdd01505 100644 --- a/pkgs/top-level/haskell-packages.nix +++ b/pkgs/top-level/haskell-packages.nix @@ -4,6 +4,8 @@ rec { lib = import ../development/haskell-modules/lib.nix { inherit pkgs; }; + buildStackProject = callPackage ../build-support/haskell/stack.nix { }; + compiler = { ghc6102Binary = callPackage ../development/compilers/ghc/6.10.2-binary.nix { gmp = pkgs.gmp4; };