diff options
author | Peter Simons <simons@cryp.to> | 2015-01-08 18:29:37 +0100 |
---|---|---|
committer | Peter Simons <simons@cryp.to> | 2015-01-08 18:50:19 +0100 |
commit | 3c8b33eee442fd573d47555122cfe358134aeb64 (patch) | |
tree | ac840e9ab9bec22b9832e67ad9dba49cb4e17075 /pkgs/development/haskell-modules/default.nix | |
parent | d737d463c6de53ddbcaa9e95b7e02dac05dda9b0 (diff) |
haskell-modules: implement overrideScope method for deep overriding
deepOverride turns out to be completely unfeasible for non-trivial overrides. Nix evaluates for an eternity, and then comes back saying: Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS nix-instantiate killed by signal 6 The hand-written deep-override, on the other hand, performs the job in a fraction of a second, no problem. All bow to Russell O'Connor!
Diffstat (limited to 'pkgs/development/haskell-modules/default.nix')
-rw-r--r-- | pkgs/development/haskell-modules/default.nix | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/pkgs/development/haskell-modules/default.nix b/pkgs/development/haskell-modules/default.nix index 846f85da66ff1..d65ebd63c7519 100644 --- a/pkgs/development/haskell-modules/default.nix +++ b/pkgs/development/haskell-modules/default.nix @@ -31,8 +31,12 @@ let mkDerivation = drv: args.mkDerivation (drv // f drv); }); + callPackageWithScope = scope: drv: args: (stdenv.lib.callPackageWith scope drv args) // { + overrideScope = f: callPackageWithScope (fix (extend scope.__unfix__ f)) drv args; + }; + defaultScope = pkgs // pkgs.xlibs // pkgs.gnome // self; - callPackage = drv: args: stdenv.lib.callPackageWith defaultScope drv args; + callPackage = drv: args: callPackageWithScope defaultScope drv args; in import ./hackage-packages.nix { inherit pkgs stdenv callPackage; } self // { |