From 89c566fcfd40a82a98d4e674e3aaa6d57d20cceb Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 7 Nov 2013 12:02:47 +0100 Subject: [PATCH] pkgs/development/compilers/ghc/with-packages.nix: improve recognition of Haskell packages Haskell packages -- i.e. packages built by our Cabal builder -- invariably have the attributes 'pname' and 'version'. We use the absence of these attributes to recognize non-Haskell packages and filter them from the closed package set generated by closePropagation. We do this so that the generated Haskell environment won't contain paths like "/lib/libz.a", which are part of the closure but have nothing to do with Haskell. The previous scheme used the attribute 'ghc' to accomplish the same thing, but unfortunately other packages to contain a 'ghc' attribute, too, like the old-style ghc-wrapper. Including the ghc-wrapper in this environment is pointless, obviously. The new approach filters the ghc-wrapper successfully. --- pkgs/development/compilers/ghc/with-packages.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/ghc/with-packages.nix b/pkgs/development/compilers/ghc/with-packages.nix index b32b12d5b95..8f5e8616a84 100644 --- a/pkgs/development/compilers/ghc/with-packages.nix +++ b/pkgs/development/compilers/ghc/with-packages.nix @@ -7,10 +7,11 @@ let packageDBFlag = if ghc761OrLater then "--package-db" else "--package-conf"; libDir = "$out/lib/ghc-${ghc.version}"; packageCfgDir = "${libDir}/package.conf.d"; + isHaskellPkg = x: (x ? pname) && (x ? version); in buildEnv { name = "haskell-env-${ghc.name}"; - paths = stdenv.lib.filter (x: x ? ghc) (stdenv.lib.closePropagation packages) ++ [ghc]; + paths = stdenv.lib.filter isHaskellPkg (stdenv.lib.closePropagation packages) ++ [ghc]; postBuild = '' . ${makeWrapper}/nix-support/setup-hook