Skip to content

Commit 5f7fbb8

Browse files
committed
Thread toolchains everywhere.
1 parent c83ed1c commit 5f7fbb8

File tree

11 files changed

+76
-61
lines changed

11 files changed

+76
-61
lines changed

cabal-install-solver/src/Distribution/Solver/Modular.hs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ import Distribution.Verbosity
5757
import Distribution.Solver.Modular.Configured (CP (..))
5858
import qualified Distribution.Solver.Types.ComponentDeps as ComponentDeps
5959
import Distribution.Pretty (Pretty (..))
60-
import Text.PrettyPrint (text, vcat, Doc, nest, ($+$))
60+
import Text.PrettyPrint (text, vcat, Doc, nest, ($+$))
6161
import Distribution.Solver.Types.OptionalStanza (showStanzas, optStanzaSetNull)
62+
import Distribution.Solver.Types.Toolchain ( Toolchains )
6263
import Distribution.Types.Flag (nullFlagAssignment)
6364

6465

@@ -75,18 +76,18 @@ showCP (CP qpi fa es ds) =
7576
| (c, deps) <- ComponentDeps.toList ds
7677
]
7778
])
78-
79+
7980
-- | Ties the two worlds together: classic cabal-install vs. the modular
8081
-- solver. Performs the necessary translations before and after.
8182
modularResolver :: SolverConfig -> DependencyResolver loc
82-
modularResolver sc (Platform arch os) cinfo iidx sidx pkgConfigDB pprefs pcs pns = do
83-
(assignment, revdepmap) <- solve' sc cinfo idx pkgConfigDB pprefs gcs pns
83+
modularResolver sc toolchains iidx sidx pkgConfigDB pprefs pcs pns = do
84+
(assignment, revdepmap) <- solve' sc toolchains idx pkgConfigDB pprefs gcs pns
8485
let cp = toCPs assignment revdepmap
8586
Step (show (vcat (map showCP cp))) $
8687
return $ postprocess assignment revdepmap
8788
where
8889
-- Indices have to be converted into solver-specific uniform index.
89-
idx = convPIs os arch cinfo gcs (shadowPkgs sc) (strongFlags sc) (solveExecutables sc) iidx sidx
90+
idx = convPIs toolchains gcs (shadowPkgs sc) (strongFlags sc) (solveExecutables sc) iidx sidx
9091
-- Constraints have to be converted into a finite map indexed by PN.
9192
gcs = M.fromListWith (++) (map pair pcs)
9293
where
@@ -136,21 +137,21 @@ modularResolver sc (Platform arch os) cinfo iidx sidx pkgConfigDB pprefs pcs pns
136137
-- complete, i.e., it shows the whole chain of dependencies from the user
137138
-- targets to the conflicting packages.
138139
solve' :: SolverConfig
139-
-> CompilerInfo
140+
-> Toolchains
140141
-> Index
141142
-> Maybe PkgConfigDb
142143
-> (PN -> PackagePreferences)
143144
-> Map PN [LabeledPackageConstraint]
144145
-> Set PN
145146
-> Progress String String (Assignment, RevDepMap)
146-
solve' sc cinfo idx pkgConfigDB pprefs gcs pns =
147+
solve' sc toolchains idx pkgConfigDB pprefs gcs pns =
147148
toProgress $ retry (runSolver printFullLog sc) createErrorMsg
148149
where
149150
runSolver :: Bool -> SolverConfig
150151
-> RetryLog String SolverFailure (Assignment, RevDepMap)
151152
runSolver keepLog sc' =
152153
displayLogMessages keepLog $
153-
solve sc' cinfo idx pkgConfigDB pprefs gcs pns
154+
solve sc' toolchains idx pkgConfigDB pprefs gcs pns
154155

155156
createErrorMsg :: SolverFailure
156157
-> RetryLog String String (Assignment, RevDepMap)

cabal-install-solver/src/Distribution/Solver/Modular/IndexConversion.hs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import qualified Distribution.InstalledPackageInfo as IPI
1414
import Distribution.Compiler
1515
import Distribution.Package -- from Cabal
1616
import Distribution.Simple.BuildToolDepends -- from Cabal
17+
import Distribution.Simple.Compiler (compilerInfo)
1718
import Distribution.Types.ExeDependency -- from Cabal
1819
import Distribution.Types.PkgconfigDependency -- from Cabal
1920
import Distribution.Types.ComponentName -- from Cabal
@@ -34,6 +35,7 @@ import Distribution.Solver.Types.PackageConstraint
3435
import qualified Distribution.Solver.Types.PackageIndex as CI
3536
import Distribution.Solver.Types.Settings
3637
import Distribution.Solver.Types.SourcePackage
38+
import Distribution.Solver.Types.Toolchain ( Toolchains(..), Toolchain(..) )
3739

3840
import Distribution.Solver.Modular.Dependency as D
3941
import Distribution.Solver.Modular.Flag as F
@@ -53,13 +55,13 @@ import Distribution.Solver.Modular.Version
5355
-- resolving these situations. However, the right thing to do is to
5456
-- fix the problem there, so for now, shadowing is only activated if
5557
-- explicitly requested.
56-
convPIs :: OS -> Arch -> CompilerInfo -> Map PN [LabeledPackageConstraint]
58+
convPIs :: Toolchains -> Map PN [LabeledPackageConstraint]
5759
-> ShadowPkgs -> StrongFlags -> SolveExecutables
5860
-> SI.InstalledPackageIndex -> CI.PackageIndex (SourcePackage loc)
5961
-> Index
60-
convPIs os arch comp constraints sip strfl solveExes iidx sidx =
62+
convPIs toolchains constraints sip strfl solveExes iidx sidx =
6163
mkIndex $
62-
convIPI' sip iidx ++ convSPI' os arch comp constraints strfl solveExes sidx
64+
convIPI' sip iidx ++ convSPI' toolchains constraints strfl solveExes sidx
6365

6466
-- | Convert a Cabal installed package index to the simpler,
6567
-- more uniform index format of the solver.
@@ -153,31 +155,33 @@ convIPId dr comp idx ipid =
153155

154156
-- | Convert a cabal-install source package index to the simpler,
155157
-- more uniform index format of the solver.
156-
convSPI' :: OS -> Arch -> CompilerInfo -> Map PN [LabeledPackageConstraint]
158+
convSPI' :: Toolchains -> Map PN [LabeledPackageConstraint]
157159
-> StrongFlags -> SolveExecutables
158160
-> CI.PackageIndex (SourcePackage loc) -> [(PN, I, PInfo)]
159-
convSPI' os arch cinfo constraints strfl solveExes =
160-
L.map (convSP os arch cinfo constraints strfl solveExes) . CI.allPackages
161+
convSPI' toolchains constraints strfl solveExes =
162+
L.concatMap (convSP toolchains constraints strfl solveExes) . CI.allPackages
161163

162164
-- | Convert a single source package into the solver-specific format.
163-
convSP :: OS -> Arch -> CompilerInfo -> Map PN [LabeledPackageConstraint]
164-
-> StrongFlags -> SolveExecutables -> SourcePackage loc -> (PN, I, PInfo)
165-
convSP os arch cinfo constraints strfl solveExes (SourcePackage (PackageIdentifier pn pv) gpd _ _pl) =
166-
let i = I {- FIXME -} Host pv InRepo
167-
pkgConstraints = fromMaybe [] $ M.lookup pn constraints
168-
in (pn, i, convGPD os arch cinfo pkgConstraints strfl solveExes pn gpd)
165+
convSP :: Toolchains -> Map PN [LabeledPackageConstraint]
166+
-> StrongFlags -> SolveExecutables -> SourcePackage loc -> [(PN, I, PInfo)]
167+
convSP toolchains constraints strfl solveExes (SourcePackage (PackageIdentifier pn pv) gpd _ _pl) =
168+
let pkgConstraints = fromMaybe [] $ M.lookup pn constraints
169+
in [(pn, I Host pv InRepo, convGPD (hostToolchain toolchains) pkgConstraints strfl solveExes pn gpd)
170+
,(pn, I Build pv InRepo, convGPD (buildToolchain toolchains) pkgConstraints strfl solveExes pn gpd)]
169171

170172
-- We do not use 'flattenPackageDescription' or 'finalizePD'
171173
-- from 'Distribution.PackageDescription.Configuration' here, because we
172174
-- want to keep the condition tree, but simplify much of the test.
173175

174176
-- | Convert a generic package description to a solver-specific 'PInfo'.
175-
convGPD :: OS -> Arch -> CompilerInfo -> [LabeledPackageConstraint]
177+
convGPD :: Toolchain -> [LabeledPackageConstraint]
176178
-> StrongFlags -> SolveExecutables -> PN -> GenericPackageDescription
177179
-> PInfo
178-
convGPD os arch cinfo constraints strfl solveExes pn
180+
convGPD toolchain constraints strfl solveExes pn
179181
(GenericPackageDescription pkg scannedVersion flags mlib sub_libs flibs exes tests benchs) =
180182
let
183+
cinfo = compilerInfo (toolchainCompiler toolchain)
184+
(Platform arch os) = toolchainPlatform toolchain
181185
fds = flagInfo strfl flags
182186

183187

cabal-install-solver/src/Distribution/Solver/Modular/Solver.hs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import Distribution.Solver.Types.PackagePreferences
2424
import Distribution.Solver.Types.PkgConfigDb (PkgConfigDb)
2525
import Distribution.Solver.Types.LabeledPackageConstraint
2626
import Distribution.Solver.Types.Settings
27+
import Distribution.Solver.Types.Toolchain ( Toolchains(..), Toolchain(..) )
2728
import Distribution.Solver.Types.Variable
2829

2930
import Distribution.Solver.Modular.Assignment
@@ -44,6 +45,7 @@ import Distribution.Solver.Modular.Tree
4445
import qualified Distribution.Solver.Modular.PSQ as PSQ
4546

4647
import Distribution.Simple.Setup (BooleanFlag(..))
48+
import Distribution.Simple.Compiler (compilerInfo)
4749

4850
#ifdef DEBUG_TRACETREE
4951
import qualified Distribution.Solver.Modular.ConflictSet as CS
@@ -89,14 +91,14 @@ newtype PruneAfterFirstSuccess = PruneAfterFirstSuccess Bool
8991
-- before exploration.
9092
--
9193
solve :: SolverConfig -- ^ solver parameters
92-
-> CompilerInfo
94+
-> Toolchains
9395
-> Index -- ^ all available packages as an index
9496
-> Maybe PkgConfigDb -- ^ available pkg-config pkgs
9597
-> (PN -> PackagePreferences) -- ^ preferences
9698
-> M.Map PN [LabeledPackageConstraint] -- ^ global constraints
9799
-> S.Set PN -- ^ global goals
98100
-> RetryLog Message SolverFailure (Assignment, RevDepMap)
99-
solve sc cinfo idx pkgConfigDB userPrefs userConstraints userGoals =
101+
solve sc toolchains idx pkgConfigDB userPrefs userConstraints userGoals =
100102
explorePhase .
101103
traceTree "cycles.json" id .
102104
detectCycles .
@@ -137,7 +139,7 @@ solve sc cinfo idx pkgConfigDB userPrefs userConstraints userGoals =
137139
P.enforceManualFlags userConstraints
138140
validationCata = P.enforceSingleInstanceRestriction .
139141
validateLinking idx .
140-
validateTree cinfo idx pkgConfigDB
142+
validateTree (compilerInfo (toolchainCompiler (hostToolchain toolchains))) idx pkgConfigDB
141143
prunePhase = (if asBool (avoidReinstalls sc) then P.avoidReinstalls (const True) else id) .
142144
(case onlyConstrained sc of
143145
OnlyConstrainedAll ->

cabal-install-solver/src/Distribution/Solver/Types/DependencyResolver.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import Distribution.Solver.Types.SourcePackage
1616
import Distribution.Simple.PackageIndex ( InstalledPackageIndex )
1717
import Distribution.Package ( PackageName )
1818
import Distribution.Compiler ( CompilerInfo )
19+
import Distribution.Solver.Types.Toolchain ( Toolchains )
1920
import Distribution.System ( Platform )
2021

2122
-- | A dependency resolver is a function that works out an installation plan
@@ -26,8 +27,7 @@ import Distribution.System ( Platform )
2627
-- solving the package dependency problem and we want to make it easy to swap
2728
-- in alternatives.
2829
--
29-
type DependencyResolver loc = Platform
30-
-> CompilerInfo
30+
type DependencyResolver loc = Toolchains
3131
-> InstalledPackageIndex
3232
-> PackageIndex (SourcePackage loc)
3333
-> Maybe PkgConfigDb

cabal-install-solver/src/Distribution/Solver/Types/Toolchain.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Distribution.Solver.Types.Toolchain
44
( Toolchain (..)
55
, Toolchains (..)
66
, toolchainFor
7+
, mkToolchainsWithHost
78
) where
89

910
import Distribution.Compat.Prelude
@@ -47,3 +48,10 @@ toolchainFor Host = hostToolchain
4748

4849
instance Binary Toolchains
4950
instance Structured Toolchains
51+
52+
mkToolchainsWithHost :: Platform -> Compiler -> Toolchains
53+
mkToolchainsWithHost platform compiler =
54+
Toolchains
55+
{ buildToolchain = Toolchain platform compiler (error "build program db missing")
56+
, hostToolchain = Toolchain platform compiler (error "host program db missing")
57+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import Distribution.Solver.Types.PkgConfigDb
6767
)
6868
import Distribution.Solver.Types.Settings
6969
import Distribution.Solver.Types.SourcePackage
70+
import Distribution.Solver.Types.Toolchain (mkToolchainsWithHost)
7071

7172
import Distribution.Client.SavedFlags (readCommandFlags, writeCommandFlags)
7273
import Distribution.Package
@@ -470,7 +471,7 @@ planLocalPackage
470471
(SourcePackageDb mempty packagePrefs)
471472
[SpecificSourcePackage localPkg]
472473

473-
return (resolveDependencies platform (compilerInfo comp) pkgConfigDb resolverParams)
474+
return (resolveDependencies (mkToolchainsWithHost platform comp) pkgConfigDb resolverParams)
474475

475476
-- | Call an installer for an 'SourcePackage' but override the configure
476477
-- flags with the ones given by the 'ReadyPackage'. In particular the

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

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ import Distribution.PackageDescription.Configuration
115115
import qualified Distribution.PackageDescription.Configuration as PD
116116
import Distribution.Simple.PackageIndex (InstalledPackageIndex)
117117
import qualified Distribution.Simple.PackageIndex as InstalledPackageIndex
118+
import Distribution.Simple.Compiler (compilerInfo)
118119
import Distribution.Simple.Setup
119120
( asBool
120121
)
@@ -153,6 +154,7 @@ import Distribution.Solver.Types.Settings
153154
import Distribution.Solver.Types.SolverId
154155
import Distribution.Solver.Types.SolverPackage
155156
import Distribution.Solver.Types.SourcePackage
157+
import Distribution.Solver.Types.Toolchain
156158
import Distribution.Solver.Types.Variable
157159

158160
import Control.Exception
@@ -782,14 +784,13 @@ runSolver = modularResolver
782784
-- a 'Progress' structure that can be unfolded to provide progress information,
783785
-- logging messages and the final result or an error.
784786
resolveDependencies
785-
:: Platform
786-
-> CompilerInfo
787+
:: Toolchains
787788
-> Maybe PkgConfigDb
788789
-> DepResolverParams
789790
-> Progress String String SolverInstallPlan
790-
resolveDependencies platform comp pkgConfigDB params =
791+
resolveDependencies toolchains pkgConfigDB params =
791792
Step (showDepResolverParams finalparams) $
792-
fmap (validateSolverResult platform comp indGoals) $
793+
fmap (validateSolverResult toolchains indGoals) $
793794
runSolver
794795
( SolverConfig
795796
reordGoals
@@ -808,8 +809,7 @@ resolveDependencies platform comp pkgConfigDB params =
808809
verbosity
809810
(PruneAfterFirstSuccess False)
810811
)
811-
platform
812-
comp
812+
toolchains
813813
installedPkgIndex
814814
sourcePkgIndex
815815
pkgConfigDB
@@ -909,13 +909,12 @@ interpretPackagesPreference selected defaultPref prefs =
909909
-- | Make an install plan from the output of the dep resolver.
910910
-- It checks that the plan is valid, or it's an error in the dep resolver.
911911
validateSolverResult
912-
:: Platform
913-
-> CompilerInfo
912+
:: Toolchains
914913
-> IndependentGoals
915914
-> [ResolverPackage UnresolvedPkgLoc]
916915
-> SolverInstallPlan
917-
validateSolverResult platform comp indepGoals pkgs =
918-
case planPackagesProblems platform comp pkgs of
916+
validateSolverResult toolchains indepGoals pkgs =
917+
case planPackagesProblems toolchains pkgs of
919918
[] -> case SolverInstallPlan.new indepGoals graph of
920919
Right plan -> plan
921920
Left problems -> error (formatPlanProblems problems)
@@ -960,14 +959,13 @@ showPlanPackageProblem (DuplicatePackageSolverId pid dups) =
960959
++ " duplicate instances."
961960

962961
planPackagesProblems
963-
:: Platform
964-
-> CompilerInfo
962+
:: Toolchains
965963
-> [ResolverPackage UnresolvedPkgLoc]
966964
-> [PlanPackageProblem]
967-
planPackagesProblems platform cinfo pkgs =
965+
planPackagesProblems toolchains pkgs =
968966
[ InvalidConfiguredPackage pkg packageProblems
969967
| Configured pkg <- pkgs
970-
, let packageProblems = configuredPackageProblems platform cinfo pkg
968+
, let packageProblems = configuredPackageProblems toolchains pkg
971969
, not (null packageProblems)
972970
]
973971
++ [ DuplicatePackageSolverId (Graph.nodeKey aDup) dups
@@ -1016,13 +1014,11 @@ showPackageProblem (InvalidDep dep pkgid) =
10161014
-- in the configuration given by the flag assignment, all the package
10171015
-- dependencies are satisfied by the specified packages.
10181016
configuredPackageProblems
1019-
:: Platform
1020-
-> CompilerInfo
1017+
:: Toolchains
10211018
-> SolverPackage UnresolvedPkgLoc
10221019
-> [PackageProblem]
10231020
configuredPackageProblems
1024-
platform
1025-
cinfo
1021+
toolchains
10261022
(SolverPackage _qpn pkg specifiedFlags stanzas specifiedDeps0 _specifiedExeDeps') =
10271023
[ DuplicateFlag flag
10281024
| flag <- PD.findDuplicateFlagAssignments specifiedFlags
@@ -1096,8 +1092,9 @@ configuredPackageProblems
10961092
specifiedFlags
10971093
compSpec
10981094
(const Satisfied)
1099-
platform
1100-
cinfo
1095+
-- FIXME: HARDCODED HOST TOOLCHAIN here.
1096+
(toolchainPlatform (hostToolchain toolchains))
1097+
(compilerInfo (toolchainCompiler (hostToolchain toolchains)))
11011098
[]
11021099
(srcpkgDescription pkg) of
11031100
Right (resolvedPkg, _) ->

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import Distribution.Solver.Types.OptionalStanza
3838
import Distribution.Solver.Types.PkgConfigDb (PkgConfigDb, readPkgConfigDb)
3939
import Distribution.Solver.Types.SolverPackage
4040
import Distribution.Solver.Types.SourcePackage
41+
import Distribution.Solver.Types.Toolchain (mkToolchainsWithHost)
4142

4243
import Distribution.Client.Errors
4344
import Distribution.Package
@@ -174,8 +175,7 @@ planPackages
174175
installPlan <-
175176
foldProgress logMsg (dieWithException verbosity . PlanPackages . show) return $
176177
resolveDependencies
177-
platform
178-
(compilerInfo comp)
178+
(mkToolchainsWithHost platform comp)
179179
pkgConfigDb
180180
resolverParams
181181

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import Distribution.Solver.Types.LabeledPackageConstraint
5252
import Distribution.Solver.Types.OptionalStanza
5353
import Distribution.Solver.Types.PkgConfigDb
5454
import Distribution.Solver.Types.SolverId
55+
import Distribution.Solver.Types.Toolchain (mkToolchainsWithHost)
5556

5657
import Distribution.Client.Errors
5758
import Distribution.Package
@@ -212,8 +213,7 @@ planPackages
212213
installPlan <-
213214
foldProgress logMsg (dieWithException verbosity . FreezeException) return $
214215
resolveDependencies
215-
platform
216-
(compilerInfo comp)
216+
(mkToolchainsWithHost platform comp)
217217
pkgConfigDb
218218
resolverParams
219219

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ import Distribution.Solver.Types.PkgConfigDb
141141
)
142142
import Distribution.Solver.Types.Settings
143143
import Distribution.Solver.Types.SourcePackage as SourcePackage
144+
import Distribution.Solver.Types.Toolchain (mkToolchainsWithHost)
144145

145146
import Distribution.Client.ProjectConfig
146147
import Distribution.Client.Utils
@@ -585,8 +586,7 @@ planPackages
585586
pkgConfigDb
586587
pkgSpecifiers =
587588
resolveDependencies
588-
platform
589-
(compilerInfo comp)
589+
(mkToolchainsWithHost platform comp)
590590
pkgConfigDb
591591
resolverParams
592592
>>= if onlyDeps then pruneInstallPlan pkgSpecifiers else return

0 commit comments

Comments
 (0)