callCabal2nix: Don't rebuild unchanged cabal file (Fixed #23880)

wip/yesman
Will Fancher 7 years ago
parent cccee1ddb7
commit aadbef00bd
  1. 17
      pkgs/development/haskell-modules/make-package-set.nix

@ -144,7 +144,22 @@ in package-set { inherit pkgs stdenv callPackage; } self // {
callHackage = name: version: self.callPackage (self.hackage2nix name version);
# Creates a Haskell package from a source package by calling cabal2nix on the source.
callCabal2nix = name: src: self.callPackage (self.haskellSrc2nix { inherit src name; });
callCabal2nix = name: src: args: if builtins.typeOf src != "path"
then self.callPackage (haskellSrc2nix { inherit name src; }) args
else
# When `src` is a Nix path literal, only use `cabal2nix` on
# the cabal file, so that the "import-from-derivation" is only
# recomputed when the cabal file changes, and so your source
# code isn't duplicated into the nix store on every change.
# This can only be done when `src` is a Nix path literal
# because that is the only kind of source that
# `builtins.filterSource` works on. But this filtering isn't
# usually important on other kinds of sources, like
# `fetchFromGitHub`.
overrideCabal (self.callPackage (haskellSrc2nix {
inherit name;
src = builtins.filterSource (path: type: pkgs.lib.hasSuffix ".cabal" path) src;
}) args) (_: { inherit src; });
# : Map Name (Either Path VersionNumber) -> HaskellPackageOverrideSet
# Given a set whose values are either paths or version strings, produces

Loading…
Cancel
Save