diff --git a/cabal-install/Distribution/Client/InstallPlan.hs b/cabal-install/Distribution/Client/InstallPlan.hs index 1c99d1779965a0b8a8d19bed4c812ae3408b9d08..fbc923265d54688e913a8ad6b5400ae8b030872b 100644 --- a/cabal-install/Distribution/Client/InstallPlan.hs +++ b/cabal-install/Distribution/Client/InstallPlan.hs @@ -28,6 +28,7 @@ module Distribution.Client.InstallPlan ( new, toList, planIndepGoals, + depends, fromSolverInstallPlan, configureInstallPlan, @@ -161,6 +162,9 @@ data GenericPlanPackage ipkg srcpkg type IsUnit a = (IsNode a, Key a ~ UnitId) +depends :: IsUnit a => a -> [UnitId] +depends = nodeNeighbors + -- NB: Expanded constraint synonym here to avoid undecidable -- instance errors in GHC 7.8 and earlier. instance (IsNode ipkg, IsNode srcpkg, Key ipkg ~ UnitId, Key srcpkg ~ UnitId) diff --git a/cabal-install/Distribution/Client/ProjectBuilding.hs b/cabal-install/Distribution/Client/ProjectBuilding.hs index 4d56fa93b72e64f546cfa87dd64b13d90ea6bd62..1dc4e2e0278df34fd14b5b8990002dddd3fd0929 100644 --- a/cabal-install/Distribution/Client/ProjectBuilding.hs +++ b/cabal-install/Distribution/Client/ProjectBuilding.hs @@ -351,7 +351,7 @@ foldMInstallPlanDepOrder plan0 visit = depresults = map (\ipkgid -> let Just result = Map.lookup ipkgid results in result) - (nodeNeighbors pkg) + (InstallPlan.depends pkg) result <- visit pkg depresults let results' = Map.insert (nodeKey pkg) result results go results' pkgs diff --git a/cabal-install/Distribution/Client/ProjectPlanning.hs b/cabal-install/Distribution/Client/ProjectPlanning.hs index c2f01ad2bcde717c5bfbacc7e22e069c89609d3b..3538320903332872353643a261fb031a385ebef7 100644 --- a/cabal-install/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/Distribution/Client/ProjectPlanning.hs @@ -1744,9 +1744,10 @@ pruneInstallPlanPass1 perPkgTargetsMap pkgs = -- stanzas in the next pass. -- pruneOptionalDependencies :: ElaboratedConfiguredPackage -> [UnitId] - pruneOptionalDependencies elab@ElaboratedConfiguredPackage{ elabPkgOrComp = ElabComponent _ } = nodeNeighbors elab -- no pruning - pruneOptionalDependencies ElaboratedConfiguredPackage{ elabPkgOrComp = ElabPackage pkg } = - (CD.flatDeps . CD.filterDeps keepNeeded) (pkgOrderDependencies pkg) + pruneOptionalDependencies elab@ElaboratedConfiguredPackage{ elabPkgOrComp = ElabComponent _ } + = InstallPlan.depends elab -- no pruning + pruneOptionalDependencies ElaboratedConfiguredPackage{ elabPkgOrComp = ElabPackage pkg } + = (CD.flatDeps . CD.filterDeps keepNeeded) (pkgOrderDependencies pkg) where keepNeeded (CD.ComponentTest _) _ = TestStanzas `Set.member` stanzas keepNeeded (CD.ComponentBench _) _ = BenchStanzas `Set.member` stanzas @@ -1865,7 +1866,7 @@ pruneInstallPlanPass2 pkgs = hasReverseLibDeps :: Set UnitId hasReverseLibDeps = Set.fromList [ depid | pkg <- pkgs - , depid <- nodeNeighbors pkg ] + , depid <- InstallPlan.depends pkg ] mapConfiguredPackage :: (srcpkg -> srcpkg') -> InstallPlan.GenericPlanPackage ipkg srcpkg @@ -2211,7 +2212,7 @@ setupHsConfigureFlags (ReadyPackage elab@ElaboratedConfiguredPackage{..}) -- we only use configDependencies, unless we're talking to an old Cabal -- in which case we use configConstraints - -- NB: This does NOT use nodeNeighbors, which includes executable + -- NB: This does NOT use InstallPlan.depends, which includes executable -- dependencies which should NOT be fed in here (also you don't have -- enough info anyway) configDependencies = [ (packageName srcid, cid)