@@ -10,25 +10,31 @@ let
1010 ## packageComponentsOfType :: Package -> Type String -> [Component]
1111 packageComponentsOfType = pkg: type:
1212 (optionals (hasAttr type pkg.components) (lib.mapAttrsToList (n: c: c) pkg.components."${type}"));
13− ## packageComponentsOfType :: Package -> [Component]
13+ ## packageComponents :: Package -> [Component]
1414 packageComponents = pkg:
1515 optionals (hasAttr "library" pkg.components) [ pkg.components.library ]
1616 ++ concatMap (packageComponentsOfType pkg) ["sublibs" "exes" "foreignlibs" "tests" "benchmarks"];
17+ ## packageLibComponents :: Package -> [Component]
18+ packageLibComponents = pkg:
19+ optionals (hasAttr "library" pkg.components) [ pkg.components.library ]
20+ ++ concatMap (packageComponentsOfType pkg) ["sublibs"];
21+ ## packageHasLib :: Package -> Bool
22+ packageHasLib = p: hasAttr "library" p.components;
1723 ## packageKeyComponent :: Package -> Component
1824 packageKeyComponent = pkg:
19− let comps = packageComponents pkg;
25+ let comps = packageLibComponents pkg;
2026 first = elemAt comps 0;
2127 r = if length comps == 0
2228 then throw "No components in package ${pkg.identifier.name}."
2329 else first; in
2430 r;
25− ## flatDepends :: Component -> [Package]
26− flatDepends =
31+ ## flatLibDepends :: Component -> [Package]
32+ flatLibDepends =
2733 component:
2834 let
2935 makePairs = map (p: rec { key="${val.name}"; val=packageKeyComponent p; });
3036 closure = builtins.genericClosure {
31− startSet = makePairs component.depends;
37+ startSet = makePairs (filter packageHasLib component.depends);
3238 operator = {val,...}: makePairs val.config.depends;
3339 };
3440 in map ({val,...}: val) closure;
@@ -76,7 +82,7 @@ in { identifier, component, fullName, flags ? {} }:
7682
7783 ${lib.concatMapStringsSep "\n" (p: ''
7884 target-pkg --package-db ${p}/package.conf.d dump | target-pkg --force --package-db $out/package.conf.d register -
79− '') (flatDepends component)}
85+ '') (flatLibDepends component)}
8086
8187 # Note: we pass `clear` first to ensure that we never consult the implicit global package db.
8288 ${flagsAndConfig "package-db" ["clear" "$out/package.conf.d"]}
@@ -87,7 +93,8 @@ in { identifier, component, fullName, flags ? {} }:
8793 cat > $out/ghc-environment <<EOF
8894 package-db $out/package.conf.d
8995 EOF
90− ${lib.concatMapStringsSep "\n" (p: envDep "--package-db ${packageKeyComponent p}/package.conf.d" p.identifier.name) component.depends}
96+ ${lib.concatMapStringsSep "\n" (p: envDep "--package-db ${packageKeyComponent p}/package.conf.d" p.identifier.name)
97+ (filter packageHasLib component.depends)}
9198 ${lib.concatMapStringsSep "\n" (envDep "") (lib.remove "ghc" nonReinstallablePkgs)}
9299
93100 '' + lib.optionalString component.doExactConfig ''
@@ -95,7 +102,8 @@ in { identifier, component, fullName, flags ? {} }:
95102 echo "allow-newer: ${identifier.name}:*" >> $out/cabal.config
96103 echo "allow-older: ${identifier.name}:*" >> $out/cabal.config
97104
98− ${lib.concatMapStringsSep "\n" (p: exactDep "--package-db ${p.components.library}/package.conf.d" p.identifier.name) component.depends}
105+ ${lib.concatMapStringsSep "\n" (p: exactDep "--package-db ${p.components.library}/package.conf.d" p.identifier.name)
106+ (filter packageHasLib component.depends)}
99107 ${lib.concatMapStringsSep "\n" (exactDep "") nonReinstallablePkgs}
100108
101109 ''