Skip to content

Commit 560975d

Browse files
committed
refactor(cabal-install): rename, format and comment
1 parent fe886f2 commit 560975d

File tree

1 file changed

+86
-65
lines changed

1 file changed

+86
-65
lines changed

cabal-install/src/Distribution/Client/ProjectPlanning.hs

Lines changed: 86 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1705,21 +1705,33 @@ elaborateInstallPlan
17051705
=> (SolverId -> [ElaboratedPlanPackage])
17061706
-> SolverPackage UnresolvedPkgLoc
17071707
-> LogProgress [ElaboratedConfiguredPackage]
1708-
elaborateSolverToComponents mapDep spkg@SolverPackage{solverPkgStage, solverPkgLibDeps, solverPkgExeDeps} =
1708+
elaborateSolverToComponents
1709+
mapDep
1710+
solverPkg@SolverPackage{solverPkgStage, solverPkgLibDeps, solverPkgExeDeps} =
17091711
case mkComponentsGraph (elabEnabledSpec elab0) pd of
1712+
Left cns ->
1713+
dieProgress $
1714+
hang
1715+
(text "Dependency cycle between the following components:")
1716+
4
1717+
(vcat (map (text . componentNameStanza) cns))
17101718
Right g -> do
17111719
let src_comps = componentsGraphToList g
1720+
17121721
infoProgress $
17131722
hang
1714-
(text "Component graph for" <+> pretty (solverId (ResolverPackage.Configured spkg)))
1723+
(text "Component graph for" <+> pretty (solverId (ResolverPackage.Configured solverPkg)))
17151724
4
17161725
(dispComponentsWithDeps src_comps)
1726+
17171727
(_, comps) <-
17181728
mapAccumM
17191729
buildComponent
17201730
(Map.empty, Map.empty, Map.empty)
17211731
(map fst src_comps)
1732+
17221733
let whyNotPerComp = why_not_per_component src_comps
1734+
17231735
case NE.nonEmpty whyNotPerComp of
17241736
Nothing ->
17251737
return comps
@@ -1728,18 +1740,13 @@ elaborateInstallPlan
17281740
pkgComp <-
17291741
elaborateSolverToPackage
17301742
notPerCompReasons
1731-
spkg
1743+
solverPkg
17321744
g
17331745
(comps ++ maybeToList setupComponent)
17341746
return [pkgComp]
1735-
Left cns ->
1736-
dieProgress $
1737-
hang
1738-
(text "Dependency cycle between the following components:")
1739-
4
1740-
(vcat (map (text . componentNameStanza) cns))
17411747
where
17421748
bt = PD.buildType (elabPkgDescription elab0)
1749+
17431750
-- You are eligible to per-component build if this list is empty
17441751
why_not_per_component g =
17451752
cuz_buildtype ++ cuz_spec ++ cuz_length ++ cuz_flag
@@ -1792,7 +1799,7 @@ elaborateInstallPlan
17921799
<+> fsep (punctuate comma $ map (text . whyNotPerComponent) $ toList reasons)
17931800
-- TODO: Maybe exclude Backpack too
17941801

1795-
elab0 = elaborateSolverToCommon spkg
1802+
elab0 = elaborateSolverToCommon solverPkg
17961803
pkgid = elabPkgSourceId elab0
17971804
pd = elabPkgDescription elab0
17981805

@@ -1865,6 +1872,7 @@ elaborateInstallPlan
18651872
[ text "lib_dep_map:" <+> Disp.hsep (punctuate comma $ map pretty (Map.keys lib_dep_map))
18661873
, text "exe_dep_map:" <+> Disp.hsep (punctuate comma $ map pretty (Map.keys exe_dep_map))
18671874
]
1875+
18681876
cc0 <-
18691877
toConfiguredComponent
18701878
pd
@@ -1999,14 +2007,16 @@ elaborateInstallPlan
19992007
, elabPkgOrComp =
20002008
ElabComponent $
20012009
elab_comp
2002-
{ compLinkedLibDependencies = ordNub (map ci_id (lc_includes lc))
2010+
{ compLinkedLibDependencies =
2011+
ordNub (map ci_id (lc_includes lc))
20032012
, compOrderLibDependencies =
20042013
ordNub
20052014
( map
20062015
(abstractUnitId . ci_id)
20072016
(lc_includes lc ++ lc_sig_includes lc)
20082017
)
2009-
, compLinkedInstantiatedWith = Map.fromList (lc_insts lc)
2018+
, compLinkedInstantiatedWith =
2019+
Map.fromList (lc_insts lc)
20102020
}
20112021
}
20122022
elab =
@@ -2040,14 +2050,17 @@ elaborateInstallPlan
20402050
[ (getComponentId pkg, planPackageExePaths pkg)
20412051
| pkg <- external_exe_dep_pkgs
20422052
]
2053+
20432054
exe_map1 = Map.union external_exe_map $ fmap (\x -> [x]) exe_map
20442055

20452056
external_lib_cc_map =
20462057
Map.fromListWith Map.union $
20472058
map mkCCMapping external_lib_dep_pkgs
2059+
20482060
external_exe_cc_map =
20492061
Map.fromListWith Map.union $
20502062
map mkCCMapping external_exe_dep_pkgs
2063+
20512064
external_lc_map =
20522065
Map.fromList $
20532066
map mkShapeMapping $
@@ -2126,7 +2139,7 @@ elaborateInstallPlan
21262139
-> LogProgress ElaboratedConfiguredPackage
21272140
elaborateSolverToPackage
21282141
pkgWhyNotPerComponent
2129-
pkg@SolverPackage {solverPkgSource = SourcePackage {srcpkgPackageId}}
2142+
solverPkg@SolverPackage {solverPkgSource = SourcePackage {srcpkgPackageId}}
21302143
compGraph
21312144
comps = do
21322145
-- Knot tying: the final elab includes the
@@ -2138,23 +2151,13 @@ elaborateInstallPlan
21382151
{ elabPkgSourceHash
21392152
, elabStanzasRequested
21402153
, elabStage
2141-
} = elaborateSolverToCommon pkg
2154+
} = elaborateSolverToCommon solverPkg
21422155

21432156
elab1 =
21442157
elab0
21452158
{ elabUnitId = newSimpleUnitId pkgInstalledId
21462159
, elabComponentId = pkgInstalledId
2147-
, elabPkgOrComp = ElabPackage $ ElaboratedPackage
2148-
{ pkgStage = elabStage
2149-
, pkgInstalledId
2150-
, pkgLibDependencies
2151-
, pkgDependsOnSelfLib
2152-
, pkgExeDependencies
2153-
, pkgExeDependencyPaths
2154-
, pkgPkgConfigDependencies
2155-
, pkgStanzasEnabled
2156-
, pkgWhyNotPerComponent
2157-
}
2160+
, elabPkgOrComp = ElabPackage elabPkg
21582161
, elabModuleShape = modShape
21592162
}
21602163

@@ -2173,7 +2176,7 @@ elaborateInstallPlan
21732176
Just e -> Ty.elabModuleShape e
21742177

21752178
pkgInstalledId
2176-
| shouldBuildInplaceOnly pkg =
2179+
| shouldBuildInplaceOnly solverPkg =
21772180
mkComponentId (prettyShow srcpkgPackageId)
21782181
| otherwise =
21792182
assert (isJust elabPkgSourceHash) $
@@ -2188,19 +2191,31 @@ elaborateInstallPlan
21882191
isExternal confid = confSrcId confid /= srcpkgPackageId
21892192
isExternal' (WithStage stage confId) = stage /= elabStage || isExternal confId
21902193

2191-
pkgLibDependencies =
2192-
buildComponentDeps (filter (isExternal . fst) . compLibDependencies)
2193-
2194-
pkgExeDependencies =
2195-
buildComponentDeps (filter isExternal' . compExeDependencies)
2196-
2197-
pkgExeDependencyPaths =
2198-
buildComponentDeps (filter (isExternal' . fst) . compExeDependencyPaths)
2199-
2200-
-- TODO: Why is this flat?
2201-
pkgPkgConfigDependencies =
2202-
CD.flatDeps $ buildComponentDeps compPkgConfigDependencies
2194+
elabPkg = ElaboratedPackage
2195+
{ pkgStage = elabStage
2196+
, pkgInstalledId
2197+
, pkgLibDependencies = buildComponentDeps (filter (isExternal . fst) . compLibDependencies)
2198+
, pkgDependsOnSelfLib
2199+
, pkgExeDependencies = buildComponentDeps (filter isExternal' . compExeDependencies)
2200+
, pkgExeDependencyPaths = buildComponentDeps (filter (isExternal' . fst) . compExeDependencyPaths)
2201+
-- Why is this flat?
2202+
, pkgPkgConfigDependencies = CD.flatDeps $ buildComponentDeps compPkgConfigDependencies
2203+
, -- NB: This is not the final setting of 'pkgStanzasEnabled'.
2204+
-- See [Sticky enabled testsuites]; we may enable some extra
2205+
-- stanzas opportunistically when it is cheap to do so.
2206+
--
2207+
-- However, we start off by enabling everything that was
2208+
-- requested, so that we can maintain an invariant that
2209+
-- pkgStanzasEnabled is a superset of elabStanzasRequested
2210+
pkgStanzasEnabled = optStanzaKeysFilteredByValue (fromMaybe False) elabStanzasRequested
2211+
, pkgWhyNotPerComponent
2212+
}
22032213

2214+
-- This tells us which components depend on the main library of this package.
2215+
-- Note: the sublib case should not occur, because sub-libraries are not
2216+
-- supported without per-component builds.
2217+
-- TODO: Add a check somewhere that this is the case.
2218+
pkgDependsOnSelfLib :: CD.ComponentDeps [()]
22042219
pkgDependsOnSelfLib =
22052220
CD.fromList
22062221
[ (CD.componentNameToComponent cn, [()])
@@ -2220,20 +2235,11 @@ elaborateInstallPlan
22202235
| ElaboratedConfiguredPackage{elabPkgOrComp = ElabComponent comp} <- comps
22212236
]
22222237

2223-
-- NB: This is not the final setting of 'pkgStanzasEnabled'.
2224-
-- See [Sticky enabled testsuites]; we may enable some extra
2225-
-- stanzas opportunistically when it is cheap to do so.
2226-
--
2227-
-- However, we start off by enabling everything that was
2228-
-- requested, so that we can maintain an invariant that
2229-
-- pkgStanzasEnabled is a superset of elabStanzasRequested
2230-
pkgStanzasEnabled = optStanzaKeysFilteredByValue (fromMaybe False) elabStanzasRequested
2231-
22322238
elaborateSolverToCommon
22332239
:: SolverPackage UnresolvedPkgLoc
22342240
-> ElaboratedConfiguredPackage
22352241
elaborateSolverToCommon
2236-
pkg@SolverPackage{
2242+
solverPkg@SolverPackage{
22372243
solverPkgStage,
22382244
solverPkgSource = SourcePackage
22392245
{ srcpkgPackageId
@@ -2269,17 +2275,20 @@ elaborateInstallPlan
22692275
elabPlatform = getStage platforms elabStage
22702276
elabProgramDb = getStage programDbs elabStage
22712277

2272-
elabPkgDescription = case PD.finalizePD
2273-
solverPkgFlags
2274-
elabEnabledSpec
2275-
(const Satisfied)
2276-
elabPlatform
2277-
(compilerInfo elabCompiler)
2278-
[]
2279-
srcpkgDescription of
2278+
elabPkgDescription =
2279+
case PD.finalizePD
2280+
solverPkgFlags
2281+
elabEnabledSpec
2282+
(const Satisfied)
2283+
elabPlatform
2284+
(compilerInfo elabCompiler)
2285+
[]
2286+
srcpkgDescription of
22802287
Right (desc, _) -> desc
22812288
Left _ -> error "Failed to finalizePD in elaborateSolverToCommon"
2289+
22822290
elabFlagAssignment = solverPkgFlags
2291+
22832292
elabFlagDefaults =
22842293
PD.mkFlagAssignment
22852294
[ (PD.flagName flag, PD.flagDefault flag)
@@ -2328,12 +2337,15 @@ elaborateInstallPlan
23282337
if programId == "ghc" && elabBuildHaddocks
23292338
then cp{programOverrideArgs = "-haddock" : programOverrideArgs}
23302339
else cp
2331-
2340+
23322341
elabPkgSourceLocation = srcpkgSource
2342+
23332343
elabPkgSourceHash = Map.lookup srcpkgPackageId sourcePackageHashes
2334-
elabLocalToProject = isLocalToProject pkg
2344+
2345+
elabLocalToProject = isLocalToProject solverPkg
2346+
23352347
elabBuildStyle =
2336-
if shouldBuildInplaceOnly pkg
2348+
if shouldBuildInplaceOnly solverPkg
23372349
then BuildInplaceOnly OnDisk
23382350
else BuildAndInstall
23392351

@@ -2342,12 +2354,14 @@ elaborateInstallPlan
23422354
elabRegisterPackageDBStack = buildAndRegisterDbs elabStage
23432355

23442356
elabSetupScriptStyle = packageSetupScriptStyle elabPkgDescription
2357+
23452358
elabSetupScriptCliVersion =
23462359
packageSetupScriptSpecVersion
23472360
elabSetupScriptStyle
23482361
elabPkgDescription
23492362
libDepGraph
23502363
solverPkgLibDeps
2364+
23512365
elabSetupPackageDBStack = buildAndRegisterDbs (prevStage elabStage)
23522366

23532367
-- Same as corePackageDbs but with the addition of the in-place packagedb.
@@ -2361,7 +2375,7 @@ elaborateInstallPlan
23612375
elabInplaceSetupPackageDBStack = inplacePackageDbs (prevStage elabStage)
23622376

23632377
buildAndRegisterDbs stage
2364-
| shouldBuildInplaceOnly pkg = inplacePackageDbs stage
2378+
| shouldBuildInplaceOnly solverPkg = inplacePackageDbs stage
23652379
| otherwise = corePackageDbs stage
23662380

23672381
elabPkgDescriptionOverride = srcpkgDescrOverride
@@ -2419,6 +2433,7 @@ elaborateInstallPlan
24192433
| prog <- configuredPrograms elabProgramDb
24202434
]
24212435
<> perPkgOptionMapLast srcpkgPackageId packageConfigProgramPaths
2436+
24222437
elabProgramArgs =
24232438
Map.unionWith
24242439
(++)
@@ -2430,13 +2445,16 @@ elaborateInstallPlan
24302445
]
24312446
)
24322447
(perPkgOptionMapMappend srcpkgPackageId packageConfigProgramArgs)
2448+
24332449
elabProgramPathExtra = perPkgOptionNubList srcpkgPackageId packageConfigProgramPathExtra
24342450
elabConfiguredPrograms = configuredPrograms elabProgramDb
24352451
elabConfigureScriptArgs = perPkgOptionList srcpkgPackageId packageConfigConfigureArgs
2452+
24362453
elabExtraLibDirs = perPkgOptionList srcpkgPackageId packageConfigExtraLibDirs
24372454
elabExtraLibDirsStatic = perPkgOptionList srcpkgPackageId packageConfigExtraLibDirsStatic
24382455
elabExtraFrameworkDirs = perPkgOptionList srcpkgPackageId packageConfigExtraFrameworkDirs
24392456
elabExtraIncludeDirs = perPkgOptionList srcpkgPackageId packageConfigExtraIncludeDirs
2457+
24402458
elabProgPrefix = perPkgOptionMaybe srcpkgPackageId packageConfigProgPrefix
24412459
elabProgSuffix = perPkgOptionMaybe srcpkgPackageId packageConfigProgSuffix
24422460

@@ -2485,7 +2503,6 @@ elaborateInstallPlan
24852503
where
24862504
exe = fromFlagOrDefault def bothflag
24872505
lib = fromFlagOrDefault def (bothflag <> libflag)
2488-
24892506
bothflag = lookupPerPkgOption pkgid fboth
24902507
libflag = lookupPerPkgOption pkgid flib
24912508

@@ -2620,6 +2637,7 @@ elaborateInstallPlan
26202637
NonSetupLibDepSolverPlanPackage
26212638
(SolverInstallPlan.toList solverPlan)
26222639

2640+
packagesWithLibDepsDownwardClosedProperty :: (PackageIdentifier -> Bool) -> Set PackageIdentifier
26232641
packagesWithLibDepsDownwardClosedProperty property =
26242642
Set.fromList
26252643
. map packageId
@@ -2644,12 +2662,15 @@ elaborateInstallPlan
26442662
-- TODO: Drop matchPlanPkg/matchElabPkg in favor of mkCCMapping
26452663

26462664
shouldBeLocal :: PackageSpecifier (SourcePackage (PackageLocation loc)) -> Maybe PackageId
2647-
shouldBeLocal NamedPackage{} = Nothing
2648-
shouldBeLocal (SpecificSourcePackage pkg) = case srcpkgSource pkg of
2649-
LocalUnpackedPackage _ -> Just (packageId pkg)
2650-
_ -> Nothing
2665+
shouldBeLocal (NamedPackage _ _) =
2666+
Nothing
2667+
shouldBeLocal (SpecificSourcePackage pkg) =
2668+
case srcpkgSource pkg of
2669+
LocalUnpackedPackage _ -> Just (packageId pkg)
2670+
_ -> Nothing
26512671

26522672
-- | Given a 'ElaboratedPlanPackage', report if it matches a 'ComponentName'.
2673+
-- TODO: check the role of stage here.
26532674
matchPlanPkg :: (ComponentName -> Bool) -> ElaboratedPlanPackage -> Bool
26542675
matchPlanPkg p = InstallPlan.foldPlanPackage (\(WithStage _stage ipkg) -> p (ipiComponentName ipkg)) (matchElabPkg p)
26552676

0 commit comments

Comments
 (0)