diff options
author | Matthew Bauer <mjbauer95@gmail.com> | 2019-01-07 21:28:53 -0600 |
---|---|---|
committer | Matthew Bauer <mjbauer95@gmail.com> | 2019-01-07 21:28:53 -0600 |
commit | 0dabacae0048dfa164fb9e01bbd00b610b5b87d9 (patch) | |
tree | 280931b19677ee24cb60505772741f959f367e62 /pkgs/development/haskell-modules/generic-stack-builder.nix | |
parent | 04beae0979007f5a5b99e64fc945211824a91572 (diff) | |
download | nixpkgs-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.nix | 65 |
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 ''; }) |