summary refs log tree commit diff
path: root/pkgs/development/haskell-modules/generic-stack-builder.nix
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2019-01-07 21:28:53 -0600
committerMatthew Bauer <mjbauer95@gmail.com>2019-01-07 21:28:53 -0600
commit0dabacae0048dfa164fb9e01bbd00b610b5b87d9 (patch)
tree280931b19677ee24cb60505772741f959f367e62 /pkgs/development/haskell-modules/generic-stack-builder.nix
parent04beae0979007f5a5b99e64fc945211824a91572 (diff)
downloadnixpkgs-0dabacae0048dfa164fb9e01bbd00b610b5b87d9.tar
nixpkgs-0dabacae0048dfa164fb9e01bbd00b610b5b87d9.tar.gz
nixpkgs-0dabacae0048dfa164fb9e01bbd00b610b5b87d9.tar.bz2
nixpkgs-0dabacae0048dfa164fb9e01bbd00b610b5b87d9.tar.lz
nixpkgs-0dabacae0048dfa164fb9e01bbd00b610b5b87d9.tar.xz
nixpkgs-0dabacae0048dfa164fb9e01bbd00b610b5b87d9.tar.zst
nixpkgs-0dabacae0048dfa164fb9e01bbd00b610b5b87d9.zip
haskell.buildStackProject: use setup hook
This makes things easier and hopefully fixes the arg too long issue.

Fixes #49206.
Diffstat (limited to 'pkgs/development/haskell-modules/generic-stack-builder.nix')
-rw-r--r--pkgs/development/haskell-modules/generic-stack-builder.nix65
1 files changed, 36 insertions, 29 deletions
diff --git a/pkgs/development/haskell-modules/generic-stack-builder.nix b/pkgs/development/haskell-modules/generic-stack-builder.nix
index 2afe270e0fc..184d45eda44 100644
--- a/pkgs/development/haskell-modules/generic-stack-builder.nix
+++ b/pkgs/development/haskell-modules/generic-stack-builder.nix
@@ -1,6 +1,5 @@
-{ stdenv, ghc, pkgconfig, glibcLocales, cacert, stack }@depArgs:
-
-with stdenv.lib;
+{ stdenv, ghc, pkgconfig, glibcLocales
+, cacert, stack, makeSetupHook, lib }@depArgs:
 
 { buildInputs ? []
 , extraArgs ? []
@@ -10,34 +9,27 @@ with stdenv.lib;
 , ...
 }@args:
 
-let stackCmd = "stack --internal-re-exec-version=${stack.version}";
-
-    # Add all dependencies in buildInputs including propagated ones to
-    # STACK_IN_NIX_EXTRA_ARGS.
-    addStackArgsHook = ''
-for pkg in ''${pkgsHostHost[@]} ''${pkgsHostBuild[@]} ''${pkgsHostTarget[@]}
-do
-  [ -d "$pkg/lib" ] && \
-    export STACK_IN_NIX_EXTRA_ARGS+=" --extra-lib-dirs=$pkg/lib"
-  [ -d "$pkg/include" ] && \
-    export STACK_IN_NIX_EXTRA_ARGS+=" --extra-include-dirs=$pkg/include"
-done
-    '';
+let
+
+  stackCmd = "stack --internal-re-exec-version=${stack.version}";
+
+  # Add all dependencies in buildInputs including propagated ones to
+  # STACK_IN_NIX_EXTRA_ARGS.
+  stackHook = makeSetupHook {} ./stack-hook.sh;
+
 in stdenv.mkDerivation (args // {
 
-  buildInputs =
-    buildInputs ++
-    optional (stdenv.hostPlatform.libc == "glibc") glibcLocales ++
-    [ ghc pkgconfig stack ];
+  buildInputs = buildInputs
+    ++ lib.optional (stdenv.hostPlatform.libc == "glibc") glibcLocales;
 
-  STACK_PLATFORM_VARIANT="nix";
-  STACK_IN_NIX_SHELL=1;
-  STACK_IN_NIX_EXTRA_ARGS = extraArgs;
-  shellHook = addStackArgsHook + args.shellHook or "";
+  nativeBuildInputs = [ ghc pkgconfig stack stackHook ];
 
+  STACK_PLATFORM_VARIANT = "nix";
+  STACK_IN_NIX_SHELL = 1;
+  STACK_IN_NIX_EXTRA_ARGS = extraArgs;
 
   # XXX: workaround for https://ghc.haskell.org/trac/ghc/ticket/11042.
-  LD_LIBRARY_PATH = makeLibraryPath (LD_LIBRARY_PATH ++ buildInputs);
+  LD_LIBRARY_PATH = lib.makeLibraryPath (LD_LIBRARY_PATH ++ buildInputs);
                     # ^^^ Internally uses `getOutput "lib"` (equiv. to getLib)
 
   # Non-NixOS git needs cert
@@ -48,18 +40,33 @@ in stdenv.mkDerivation (args // {
 
   preferLocalBuild = true;
 
-  configurePhase = args.configurePhase or ''
+  preConfigure = ''
     export STACK_ROOT=$NIX_BUILD_TOP/.stack
-    ${addStackArgsHook}
   '';
 
-  buildPhase = args.buildPhase or "${stackCmd} build";
+  buildPhase = args.buildPhase or ''
+    runHook preBuild
+
+    ${stackCmd} build
+
+    runHook postBuild
+  '';
+
+  checkPhase = args.checkPhase or ''
+    runHook preCheck
 
-  checkPhase = args.checkPhase or "${stackCmd} test";
+    ${stackCmd} test
+
+    runHook postCheck
+  '';
 
   doCheck = args.doCheck or true;
 
   installPhase = args.installPhase or ''
+    runHook preInstall
+
     ${stackCmd} --local-bin-path=$out/bin build --copy-bins
+
+    runHook postInstall
   '';
 })