Skip to content

Commit cb4a0c5

Browse files
committed
wip: thread toolchains everywhere
1 parent 25aaa95 commit cb4a0c5

File tree

16 files changed

+337
-254
lines changed

16 files changed

+337
-254
lines changed

Cabal/src/Distribution/Simple/Program/Db.hs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ module Distribution.Simple.Program.Db
6767
, ConfiguredProgs
6868
, updateUnconfiguredProgs
6969
, updateConfiguredProgs
70+
, programDbSignature
7071
) where
7172

7273
import Distribution.Compat.Prelude
@@ -564,3 +565,17 @@ requireProgramVersion verbosity prog range programDb =
564565
join $
565566
either (dieWithException verbosity) return
566567
`fmap` lookupProgramVersion verbosity prog range programDb
568+
569+
-- | Select the bits of a 'ProgramDb' to monitor for value changes.
570+
-- Use 'programsMonitorFiles' for the files to monitor.
571+
programDbSignature :: ProgramDb -> [ConfiguredProgram]
572+
programDbSignature progdb =
573+
[ prog
574+
{ programMonitorFiles = []
575+
, programOverrideEnv =
576+
filter
577+
((/= "PATH") . fst)
578+
(programOverrideEnv prog)
579+
}
580+
| prog <- configuredPrograms progdb
581+
]

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ import Distribution.Client.ProjectPlanning
5555
)
5656
import qualified Distribution.Client.ProjectPlanning as Planning
5757
import Distribution.Client.ProjectPlanning.Types
58-
( dataDirsEnvironmentForPlan
58+
( Toolchain (..)
59+
, Toolchains (..)
60+
, dataDirsEnvironmentForPlan
5961
)
6062
import Distribution.Client.Setup
6163
( ConfigFlags (configCommonFlags)
@@ -170,7 +172,7 @@ execAction flags@NixStyleFlags{..} extraArgs globalFlags = do
170172

171173
-- Some dependencies may have executables. Let's put those on the PATH.
172174
let extraPaths = pathAdditions baseCtx buildCtx
173-
pkgProgs = pkgConfigCompilerProgs (elaboratedShared buildCtx)
175+
pkgProgs = toolchainProgramDb $ buildToolchain $ pkgConfigToolchains (elaboratedShared buildCtx)
174176
extraEnvVars =
175177
dataDirsEnvironmentForPlan
176178
(distDirLayout baseCtx)
@@ -185,7 +187,7 @@ execAction flags@NixStyleFlags{..} extraArgs globalFlags = do
185187
-- point at the file.
186188
-- In case ghc is too old to support environment files,
187189
-- we pass the same info as arguments
188-
let compiler = pkgConfigCompiler $ elaboratedShared buildCtx
190+
let compiler = toolchainCompiler $ buildToolchain $ pkgConfigToolchains $ elaboratedShared buildCtx
189191
envFilesSupported = supportsPkgEnvFiles (getImplInfo compiler)
190192
case extraArgs of
191193
[] -> dieWithException verbosity SpecifyAnExecutable
@@ -243,7 +245,7 @@ matchCompilerPath elaboratedShared program =
243245
programPath program
244246
`elem` (programPath <$> configuredCompilers)
245247
where
246-
configuredCompilers = configuredPrograms $ pkgConfigCompilerProgs elaboratedShared
248+
configuredCompilers = configuredPrograms $ toolchainProgramDb $ buildToolchain $ pkgConfigToolchains elaboratedShared
247249

248250
-- | Execute an action with a temporary .ghc.environment file reflecting the
249251
-- current environment. The action takes an environment containing the env

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

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ import Distribution.Client.ProjectConfig.Types
2727
, ProjectConfig (..)
2828
)
2929
import Distribution.Client.ProjectOrchestration
30-
import Distribution.Client.ProjectPlanning
31-
( ElaboratedSharedConfig (..)
32-
)
3330
import Distribution.Client.Setup
3431
( CommonSetupFlags (..)
3532
, ConfigFlags (..)
@@ -48,13 +45,6 @@ import Distribution.Simple.Command
4845
, usageAlternatives
4946
)
5047
import Distribution.Simple.Flag (Flag (..))
51-
import Distribution.Simple.Program.Builtin
52-
( haddockProgram
53-
)
54-
import Distribution.Simple.Program.Db
55-
( addKnownProgram
56-
, reconfigurePrograms
57-
)
5848
import Distribution.Simple.Setup
5949
( HaddockFlags (..)
6050
, fromFlagOrDefault
@@ -160,6 +150,7 @@ haddockAction relFlags targetStrings globalFlags = do
160150
projCtx{buildSettings = (buildSettings projCtx){buildSettingHaddockOpen = True}}
161151
| otherwise =
162152
projCtx
153+
163154
absProjectConfig <- mkConfigAbsolute relProjectConfig
164155
let baseCtx = relBaseCtx{projectConfig = absProjectConfig}
165156

@@ -188,28 +179,32 @@ haddockAction relFlags targetStrings globalFlags = do
188179
TargetActionHaddock
189180
targets
190181
elaboratedPlan
182+
191183
return (elaboratedPlan', targets)
192184

193185
printPlan verbosity baseCtx buildCtx
194186

195-
progs <-
196-
reconfigurePrograms
197-
verbosity
198-
(haddockProgramPaths haddockFlags)
199-
(haddockProgramArgs haddockFlags)
200-
-- we need to insert 'haddockProgram' before we reconfigure it,
201-
-- otherwise 'set
202-
. addKnownProgram haddockProgram
203-
. pkgConfigCompilerProgs
204-
. elaboratedShared
205-
$ buildCtx
187+
-- TODO
188+
-- progs <-
189+
-- reconfigurePrograms
190+
-- verbosity
191+
-- (haddockProgramPaths haddockFlags)
192+
-- (haddockProgramArgs haddockFlags)
193+
-- -- we need to insert 'haddockProgram' before we reconfigure it,
194+
-- -- otherwise 'set
195+
-- . addKnownProgram haddockProgram
196+
-- . pkgConfigCompilerProgs
197+
-- . elaboratedShared
198+
-- $ buildCtx
199+
200+
-- TODO
206201
let buildCtx' =
207202
buildCtx
208-
{ elaboratedShared =
209-
(elaboratedShared buildCtx)
210-
{ pkgConfigCompilerProgs = progs
211-
}
212-
}
203+
-- { elaboratedShared =
204+
-- (elaboratedShared buildCtx)
205+
-- { pkgConfigCompilerProgs = progs
206+
-- }
207+
-- }
213208

214209
buildOutcomes <- runProjectBuildPhase verbosity baseCtx buildCtx'
215210
runProjectPostBuildPhase verbosity baseCtx buildCtx' buildOutcomes

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

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ import Distribution.Client.ProjectPlanning
3737
, TargetAction (..)
3838
)
3939
import Distribution.Client.ProjectPlanning.Types
40-
( elabDistDirParams
40+
( Toolchain (..)
41+
, Toolchains (..)
42+
, elabDistDirParams
4143
)
4244
import Distribution.Client.ScriptUtils
4345
( AcceptNoTargets (..)
@@ -72,14 +74,6 @@ import Distribution.Simple.Haddock (createHaddockIndex)
7274
import Distribution.Simple.InstallDirs
7375
( toPathTemplate
7476
)
75-
import Distribution.Simple.Program.Builtin
76-
( haddockProgram
77-
)
78-
import Distribution.Simple.Program.Db
79-
( addKnownProgram
80-
, reconfigurePrograms
81-
, requireProgramVersion
82-
)
8377
import Distribution.Simple.Setup
8478
( HaddockFlags (..)
8579
, HaddockProjectFlags (..)
@@ -100,8 +94,6 @@ import Distribution.Types.PackageDescription (PackageDescription (benchmarks, su
10094
import Distribution.Types.PackageId (pkgName)
10195
import Distribution.Types.PackageName (unPackageName)
10296
import Distribution.Types.UnitId (unUnitId)
103-
import Distribution.Types.Version (mkVersion)
104-
import Distribution.Types.VersionRange (orLaterVersion)
10597
import Distribution.Verbosity as Verbosity
10698
( normal
10799
)
@@ -166,24 +158,26 @@ haddockProjectAction flags _extraArgs globalFlags = do
166158
pkgs :: [Either InstalledPackageInfo ElaboratedConfiguredPackage]
167159
pkgs = matchingPackages elaboratedPlan
168160

169-
progs <-
170-
reconfigurePrograms
171-
verbosity
172-
(haddockProjectProgramPaths flags)
173-
(haddockProjectProgramArgs flags)
174-
-- we need to insert 'haddockProgram' before we reconfigure it,
175-
-- otherwise 'set
176-
. addKnownProgram haddockProgram
177-
. pkgConfigCompilerProgs
178-
$ sharedConfig
179-
let sharedConfig' = sharedConfig{pkgConfigCompilerProgs = progs}
180-
181-
_ <-
182-
requireProgramVersion
183-
verbosity
184-
haddockProgram
185-
(orLaterVersion (mkVersion [2, 26, 1]))
186-
progs
161+
-- TODO
162+
-- progs <-
163+
-- reconfigurePrograms
164+
-- verbosity
165+
-- (haddockProjectProgramPaths flags)
166+
-- (haddockProjectProgramArgs flags)
167+
-- -- we need to insert 'haddockProgram' before we reconfigure it,
168+
-- -- otherwise 'set
169+
-- . addKnownProgram haddockProgram
170+
-- . pkgConfigCompilerProgs
171+
-- $ sharedConfig
172+
-- let sharedConfig' = sharedConfig{pkgConfigCompilerProgs = progs}
173+
let sharedConfig' = sharedConfig
174+
175+
-- _ <-
176+
-- requireProgramVersion
177+
-- verbosity
178+
-- haddockProgram
179+
-- (orLaterVersion (mkVersion [2, 26, 1]))
180+
-- progs
187181

188182
--
189183
-- Build project; we need to build dependencies.
@@ -301,7 +295,7 @@ haddockProjectAction flags _extraArgs globalFlags = do
301295
packageDir =
302296
storePackageDirectory
303297
(cabalStoreDirLayout cabalLayout)
304-
(pkgConfigCompiler sharedConfig')
298+
(toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig')
305299
(elabUnitId package)
306300
-- TODO: use `InstallDirTemplates`
307301
docDir = packageDir </> "share" </> "doc" </> "html"
@@ -344,11 +338,12 @@ haddockProjectAction flags _extraArgs globalFlags = do
344338
]
345339
, haddockProjectUseUnicode = NoFlag
346340
}
341+
-- NOTE: this lives in Cabal
347342
createHaddockIndex
348343
verbosity
349-
(pkgConfigCompilerProgs sharedConfig')
350-
(pkgConfigCompiler sharedConfig')
351-
(pkgConfigPlatform sharedConfig')
344+
(toolchainProgramDb $ buildToolchain $ pkgConfigToolchains sharedConfig')
345+
(toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig')
346+
(toolchainPlatform $ buildToolchain $ pkgConfigToolchains sharedConfig')
352347
Nothing
353348
flags'
354349
where

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ listbinAction flags@NixStyleFlags{..} args globalFlags = do
205205
_ -> []
206206

207207
plat :: Platform
208-
plat = pkgConfigPlatform elaboratedSharedConfig
208+
plat = toolchainPlatform $ buildToolchain $ pkgConfigToolchains elaboratedSharedConfig
209209

210210
-- here and in PlanOutput,
211211
-- use binDirectoryFor?

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{-# LANGUAGE LambdaCase #-}
2+
{-# LANGUAGE NamedFieldPuns #-}
23
{-# LANGUAGE RecordWildCards #-}
34

45
-- |
@@ -40,6 +41,7 @@ import Distribution.Client.ProjectConfig.Types
4041
)
4142
import Distribution.Client.ProjectOrchestration
4243
import Distribution.Client.ProjectPlanning
44+
import Distribution.Client.ProjectPlanning.Types (Toolchain (..), Toolchains (..))
4345
import Distribution.Client.RebuildMonad (runRebuild)
4446
import Distribution.Client.ScriptUtils
4547
import Distribution.Client.Setup
@@ -242,10 +244,11 @@ pathAction flags@NixStyleFlags{extraFlags = pathFlags', ..} cliTargetStrings glo
242244
if not $ fromFlagOrDefault False (pathCompiler pathFlags)
243245
then pure Nothing
244246
else do
245-
(compiler, _, progDb) <- runRebuild (distProjectRootDirectory . distDirLayout $ baseCtx) $ configureCompiler verbosity (distDirLayout baseCtx) (projectConfig baseCtx)
246-
compilerProg <- requireCompilerProg verbosity compiler
247-
(configuredCompilerProg, _) <- requireProgram verbosity compilerProg progDb
248-
pure $ Just $ mkCompilerInfo configuredCompilerProg compiler
247+
let projectRoot = distProjectRootDirectory (distDirLayout baseCtx)
248+
Toolchains{buildToolchain} <- runRebuild projectRoot $ configureCompiler verbosity (distDirLayout baseCtx) (projectConfig baseCtx)
249+
compilerProg <- requireCompilerProg verbosity (toolchainCompiler buildToolchain)
250+
(configuredCompilerProg, _) <- requireProgram verbosity compilerProg (toolchainProgramDb buildToolchain)
251+
pure $ Just $ mkCompilerInfo configuredCompilerProg (toolchainCompiler buildToolchain)
249252

250253
paths <- for (fromFlagOrDefault [] $ pathDirectories pathFlags) $ \p -> do
251254
t <- getPathLocation baseCtx p

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ import Distribution.Client.ProjectPlanning
5555
, ElaboratedSharedConfig (..)
5656
)
5757
import Distribution.Client.ProjectPlanning.Types
58-
( elabOrderExeDependencies
58+
( Toolchain (..)
59+
, Toolchains (..)
60+
, elabOrderExeDependencies
5961
, showElaboratedInstallPlan
6062
)
6163
import Distribution.Client.ScriptUtils
@@ -344,7 +346,7 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g
344346
-- especially in the no-project case.
345347
withInstallPlan (lessVerbose verbosity) baseCtx' $ \elaboratedPlan sharedConfig -> do
346348
-- targets should be non-empty map, but there's no NonEmptyMap yet.
347-
targets <- validatedTargets (projectConfigShared (projectConfig ctx)) (pkgConfigCompiler sharedConfig) elaboratedPlan targetSelectors
349+
targets <- validatedTargets (projectConfigShared (projectConfig ctx)) (toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig) elaboratedPlan targetSelectors
348350

349351
let
350352
(unitId, _) = fromMaybe (error "panic: targets should be non-empty") $ safeHead $ Map.toList targets
@@ -368,7 +370,7 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g
368370
let ProjectBaseContext{..} = baseCtx''
369371

370372
-- Recalculate with updated project.
371-
targets <- validatedTargets (projectConfigShared projectConfig) (pkgConfigCompiler elaboratedShared') elaboratedPlan targetSelectors
373+
targets <- validatedTargets (projectConfigShared projectConfig) (toolchainCompiler $ buildToolchain $ pkgConfigToolchains elaboratedShared') elaboratedPlan targetSelectors
372374

373375
let
374376
elaboratedPlan' =
@@ -400,7 +402,7 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g
400402
, targetsMap = targets
401403
}
402404

403-
ElaboratedSharedConfig{pkgConfigCompiler = compiler} = elaboratedShared'
405+
ElaboratedSharedConfig{pkgConfigToolchains = Toolchains{hostToolchain = Toolchain{toolchainCompiler = compiler}}} = elaboratedShared'
404406

405407
repl_flags = case originalComponent of
406408
Just oci -> generateReplFlags includeTransitive elaboratedPlan' oci
@@ -441,7 +443,7 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g
441443
-- HACK: Just combine together all env overrides, placing the most common things last
442444

443445
-- ghc program with overridden PATH
444-
(ghcProg, _) <- requireProgram verbosity ghcProgram (pkgConfigCompilerProgs (elaboratedShared buildCtx'))
446+
(ghcProg, _) <- requireProgram verbosity ghcProgram (toolchainProgramDb $ buildToolchain $ pkgConfigToolchains (elaboratedShared buildCtx'))
445447
let ghcProg' = ghcProg{programOverrideEnv = [("PATH", Just sp)]}
446448

447449
-- Find what the unit files are, and start a repl based on all the response

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,7 @@ rebuildTargets
343343
storeDirLayout
344344
installPlan
345345
sharedPackageConfig@ElaboratedSharedConfig
346-
{ pkgConfigCompiler = compiler
347-
, pkgConfigCompilerProgs = progdb
346+
{ pkgConfigToolchains = Toolchains{hostToolchain = Toolchain{toolchainCompiler = compiler, toolchainProgramDb = progdb}}
348347
}
349348
pkgsBuildStatus
350349
buildSettings@BuildTimeSettings

cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,14 @@ buildAndRegisterUnpackedPackage
178178
registerLock
179179
cacheLock
180180
pkgshared@ElaboratedSharedConfig
181-
{ pkgConfigCompiler = compiler
182-
, pkgConfigCompilerProgs = progdb
181+
{ pkgConfigToolchains =
182+
Toolchains
183+
{ buildToolchain =
184+
Toolchain
185+
{ toolchainCompiler = compiler
186+
, toolchainProgramDb = progdb
187+
}
188+
}
183189
}
184190
plan
185191
rpkg@(ReadyPackage pkg)
@@ -451,7 +457,15 @@ buildInplaceUnpackedPackage
451457
buildSettings@BuildTimeSettings{buildSettingHaddockOpen}
452458
registerLock
453459
cacheLock
454-
pkgshared@ElaboratedSharedConfig{pkgConfigPlatform = Platform _ os}
460+
pkgshared@ElaboratedSharedConfig
461+
{ pkgConfigToolchains =
462+
Toolchains
463+
{ buildToolchain =
464+
Toolchain
465+
{ toolchainPlatform = Platform _ os
466+
}
467+
}
468+
}
455469
plan
456470
rpkg@(ReadyPackage pkg)
457471
buildStatus
@@ -657,8 +671,14 @@ buildAndInstallUnpackedPackage
657671
registerLock
658672
cacheLock
659673
pkgshared@ElaboratedSharedConfig
660-
{ pkgConfigCompiler = compiler
661-
, pkgConfigPlatform = platform
674+
{ pkgConfigToolchains =
675+
Toolchains
676+
{ buildToolchain =
677+
Toolchain
678+
{ toolchainCompiler = compiler
679+
, toolchainPlatform = platform
680+
}
681+
}
662682
}
663683
plan
664684
rpkg@(ReadyPackage pkg)

0 commit comments

Comments
 (0)