@@ -1,33 +1,15 @@
1−{ stdenv, lib, buildPackages, haskellLib, ghc, nonReinstallablePkgs, hsPkgs, makeSetupConfigFiles }:
1+{ stdenv, lib, buildPackages, haskellLib, ghc, nonReinstallablePkgs, hsPkgs, makeSetupConfigFiles, pkgconfig }:
22
3−{ setup-depends, package, name, src, flags, revision, patches, defaultSetupSrc
3+{ component, package, name, src, flags, revision, patches, defaultSetupSrc
44, preUnpack ? null, postUnpack ? null
55}:
66
77let
8− component = {
9− depends = setup-depends;
10− libs = [];
11− frameworks = [];
12− doExactConfig = false;
13− # We have to set hsSourceDirs or cleanCabalComponent will
14− # include everything (and as a result all the components of
15− # the package will depend on eveything in the package).
16− # TODO find a better way
17− hsSourceDirs = ["setup-src"];
18− includeDirs = [];
19− asmSources = [];
20− cSources = [];
21− cmmSources = [];
22− cxxSources = [];
23− jsSources = [];
24− extraSrcFiles = [ "Setup.hs" "Setup.lhs" ];
25− };
268 cleanSrc = haskellLib.cleanCabalComponent package component src;
279
2810 fullName = "${name}-setup";
2911
30− includeGhcPackage = lib.any (p: p.identifier.name == "ghc") setup-depends;
12+ includeGhcPackage = lib.any (p: p.identifier.name == "ghc") component.depends;
3113
3214 configFiles = makeSetupConfigFiles {
3315 inherit (package) identifier;
@@ -37,12 +19,21 @@ let
3719 inherit preUnpack postUnpack;
3820 };
3921
22+ executableToolDepends =
23+ (lib.concatMap (c: if c.isHaskell or false
24+ then builtins.attrValues (c.components.exes or {})
25+ else [c]) component.build-tools) ++
26+ lib.optional (component.pkgconfig != []) pkgconfig;
27+
4028in
4129 stdenv.lib.fix (drv:
4230 stdenv.mkDerivation ({
4331 name = "${fullName}";
4432 src = cleanSrc;
45− nativeBuildInputs = [ghc];
33+ buildInputs = component.libs
34+ ++ component.frameworks
35+ ++ builtins.concatLists component.pkgconfig;
36+ nativeBuildInputs = [ghc] ++ executableToolDepends;
4637
4738 passthru = {
4839 inherit (package) identifier;