Use runCommandLocal for dotCabal (#901)
This produces a pretty big store path (>1GB), and is very quick to
build. Prefer building it locally.
commit8c0b7c27b4806340ffe8e3f163b2cd06e062a6fb
authorMichael Peyton Jones <michael.peyton-jones@iohk.io>
dateFri 6 Nov 2020, 11:18 (6 years ago)
parentb06fdfa
mk-local-hackage-repo/default.nix+1−1
@@ -17,7 +17,7 @@
1717pkgs:
1818{ name, index }:
1919
20−pkgs.evalPackages.runCommand "hackage-repo-${name}" { nativeBuildInputs = [ pkgs.evalPackages.nix ]; } ''
20+pkgs.evalPackages.runCommandLocal "hackage-repo-${name}" { nativeBuildInputs = [ pkgs.evalPackages.nix ]; } ''
2121mkdir -p $out
2222export expires="4000-01-01T00:00:00Z"
2323
overlays/default.nix+2
@@ -17,6 +17,7 @@ let
1717 emscripten = import ./emscripten.nix;
1818 nix-prefetch-git-minimal = import ./nix-prefetch-git-minimal.nix;
1919 gobject-introspection = import ./gobject-introspection.nix;
20+ shims = import ./shims.nix;
2021 eval-on-current = import ./eval-on-current.nix;
2122 eval-on-build = import ./eval-on-build.nix;
2223 };
@@ -48,6 +49,7 @@ let
4849 emscripten
4950 nix-prefetch-git-minimal
5051 gobject-introspection
52+ shims
5153 # Restore nixpkgs haskell and haskellPackages
5254 (_: prev: { inherit (prev.haskell-nix-prev) haskell haskellPackages; })
5355 ];
overlays/haskell.nix+2−1
@@ -218,7 +218,8 @@ final: prev: {
218218 # dotCabalName anyway.
219219 dotCabalName = "dot-cabal-" + allNames;
220220 in
221− final.evalPackages.runCommand dotCabalName { nativeBuildInputs = [ cabal-install ]; } ''
221+ # This is very big, and cheap to build: use runCommandLocal to prefer building it locally
222+ final.evalPackages.runCommandLocal dotCabalName { nativeBuildInputs = [ cabal-install ]; } ''
222223 mkdir -p $out/.cabal
223224 cat <<EOF > $out/.cabal/config
224225 ${final.lib.concatStrings (
overlays/shims.nixnew file+9
@@ -0,0 +1,9 @@
1+# Shims to make older versions of nixpkgs work
2+final: prev: {
3+ # nixpkgs 19.09 and older does not have runCommandLocal
4+ runCommandLocal = prev.runCommandLocal or (name: env:
5+ final.runCommand name ({
6+ preferLocalBuild = true;
7+ allowSubstitutes = false;
8+ } // env));
9+}