Skip to content

Commit c136985

Browse files
committed
wip: thread toolchains everywhere
1 parent c8f5f5e commit c136985

File tree

16 files changed

+312
-250
lines changed

16 files changed

+312
-250
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: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import Distribution.Client.ProjectPlanning
5555
)
5656
import qualified Distribution.Client.ProjectPlanning as Planning
5757
import Distribution.Client.ProjectPlanning.Types
58-
( dataDirsEnvironmentForPlan
58+
( dataDirsEnvironmentForPlan, Toolchain (..), Toolchains (..)
5959
)
6060
import Distribution.Client.Setup
6161
( ConfigFlags (configCommonFlags)
@@ -170,7 +170,7 @@ execAction flags@NixStyleFlags{..} extraArgs globalFlags = do
170170

171171
-- Some dependencies may have executables. Let's put those on the PATH.
172172
let extraPaths = pathAdditions baseCtx buildCtx
173-
pkgProgs = pkgConfigCompilerProgs (elaboratedShared buildCtx)
173+
pkgProgs = toolchainProgramDb $ buildToolchain $ pkgConfigToolchains (elaboratedShared buildCtx)
174174
extraEnvVars =
175175
dataDirsEnvironmentForPlan
176176
(distDirLayout baseCtx)
@@ -185,7 +185,7 @@ execAction flags@NixStyleFlags{..} extraArgs globalFlags = do
185185
-- point at the file.
186186
-- In case ghc is too old to support environment files,
187187
-- we pass the same info as arguments
188-
let compiler = pkgConfigCompiler $ elaboratedShared buildCtx
188+
let compiler = toolchainCompiler $ buildToolchain $ pkgConfigToolchains $ elaboratedShared buildCtx
189189
envFilesSupported = supportsPkgEnvFiles (getImplInfo compiler)
190190
case extraArgs of
191191
[] -> dieWithException verbosity SpecifyAnExecutable
@@ -243,7 +243,7 @@ matchCompilerPath elaboratedShared program =
243243
programPath program
244244
`elem` (programPath <$> configuredCompilers)
245245
where
246-
configuredCompilers = configuredPrograms $ pkgConfigCompilerProgs elaboratedShared
246+
configuredCompilers = configuredPrograms $ toolchainProgramDb $ buildToolchain $ pkgConfigToolchains elaboratedShared
247247

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

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

Lines changed: 22 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
@@ -153,13 +143,15 @@ haddockAction relFlags targetStrings globalFlags = do
153143
installDoc = fromFlagOrDefault True (installDocumentation installFlags)
154144
flags' = flags{installFlags = installFlags{installDocumentation = Flag installDoc}}
155145
cliConfig = commandLineFlagsToProjectConfig globalFlags flags' mempty -- ClientInstallFlags, not needed here
146+
156147
projCtx <- establishProjectBaseContext verbosity cliConfig HaddockCommand
157148

158149
let relBaseCtx@ProjectBaseContext{projectConfig = relProjectConfig}
159150
| fromFlagOrDefault False (openInBrowser extraFlags) =
160151
projCtx{buildSettings = (buildSettings projCtx){buildSettingHaddockOpen = True}}
161152
| otherwise =
162153
projCtx
154+
163155
absProjectConfig <- mkConfigAbsolute relProjectConfig
164156
let baseCtx = relBaseCtx{projectConfig = absProjectConfig}
165157

@@ -188,28 +180,32 @@ haddockAction relFlags targetStrings globalFlags = do
188180
TargetActionHaddock
189181
targets
190182
elaboratedPlan
183+
191184
return (elaboratedPlan', targets)
192185

193186
printPlan verbosity baseCtx buildCtx
194187

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
188+
-- TODO
189+
-- progs <-
190+
-- reconfigurePrograms
191+
-- verbosity
192+
-- (haddockProgramPaths haddockFlags)
193+
-- (haddockProgramArgs haddockFlags)
194+
-- -- we need to insert 'haddockProgram' before we reconfigure it,
195+
-- -- otherwise 'set
196+
-- . addKnownProgram haddockProgram
197+
-- . pkgConfigCompilerProgs
198+
-- . elaboratedShared
199+
-- $ buildCtx
200+
201+
-- TODO
206202
let buildCtx' =
207203
buildCtx
208-
{ elaboratedShared =
209-
(elaboratedShared buildCtx)
210-
{ pkgConfigCompilerProgs = progs
211-
}
212-
}
204+
-- { elaboratedShared =
205+
-- (elaboratedShared buildCtx)
206+
-- { pkgConfigCompilerProgs = progs
207+
-- }
208+
-- }
213209

214210
buildOutcomes <- runProjectBuildPhase verbosity baseCtx buildCtx'
215211
runProjectPostBuildPhase verbosity baseCtx buildCtx' buildOutcomes

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

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import Distribution.Client.ProjectPlanning
3737
, TargetAction (..)
3838
)
3939
import Distribution.Client.ProjectPlanning.Types
40-
( elabDistDirParams
40+
( elabDistDirParams, Toolchain (..), Toolchains (..)
4141
)
4242
import Distribution.Client.ScriptUtils
4343
( AcceptNoTargets (..)
@@ -72,14 +72,6 @@ import Distribution.Simple.Haddock (createHaddockIndex)
7272
import Distribution.Simple.InstallDirs
7373
( toPathTemplate
7474
)
75-
import Distribution.Simple.Program.Builtin
76-
( haddockProgram
77-
)
78-
import Distribution.Simple.Program.Db
79-
( addKnownProgram
80-
, reconfigurePrograms
81-
, requireProgramVersion
82-
)
8375
import Distribution.Simple.Setup
8476
( HaddockFlags (..)
8577
, HaddockProjectFlags (..)
@@ -100,8 +92,6 @@ import Distribution.Types.PackageDescription (PackageDescription (benchmarks, su
10092
import Distribution.Types.PackageId (pkgName)
10193
import Distribution.Types.PackageName (unPackageName)
10294
import Distribution.Types.UnitId (unUnitId)
103-
import Distribution.Types.Version (mkVersion)
104-
import Distribution.Types.VersionRange (orLaterVersion)
10595
import Distribution.Verbosity as Verbosity
10696
( normal
10797
)
@@ -166,24 +156,26 @@ haddockProjectAction flags _extraArgs globalFlags = do
166156
pkgs :: [Either InstalledPackageInfo ElaboratedConfiguredPackage]
167157
pkgs = matchingPackages elaboratedPlan
168158

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
159+
-- TODO
160+
-- progs <-
161+
-- reconfigurePrograms
162+
-- verbosity
163+
-- (haddockProjectProgramPaths flags)
164+
-- (haddockProjectProgramArgs flags)
165+
-- -- we need to insert 'haddockProgram' before we reconfigure it,
166+
-- -- otherwise 'set
167+
-- . addKnownProgram haddockProgram
168+
-- . pkgConfigCompilerProgs
169+
-- $ sharedConfig
170+
-- let sharedConfig' = sharedConfig{pkgConfigCompilerProgs = progs}
171+
let sharedConfig' = sharedConfig
172+
173+
-- _ <-
174+
-- requireProgramVersion
175+
-- verbosity
176+
-- haddockProgram
177+
-- (orLaterVersion (mkVersion [2, 26, 1]))
178+
-- progs
187179

188180
--
189181
-- Build project; we need to build dependencies.
@@ -301,7 +293,7 @@ haddockProjectAction flags _extraArgs globalFlags = do
301293
packageDir =
302294
storePackageDirectory
303295
(cabalStoreDirLayout cabalLayout)
304-
(pkgConfigCompiler sharedConfig')
296+
(toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig')
305297
(elabUnitId package)
306298
-- TODO: use `InstallDirTemplates`
307299
docDir = packageDir </> "share" </> "doc" </> "html"
@@ -344,11 +336,12 @@ haddockProjectAction flags _extraArgs globalFlags = do
344336
]
345337
, haddockProjectUseUnicode = NoFlag
346338
}
339+
-- NOTE: this lives in Cabal
347340
createHaddockIndex
348341
verbosity
349-
(pkgConfigCompilerProgs sharedConfig')
350-
(pkgConfigCompiler sharedConfig')
351-
(pkgConfigPlatform sharedConfig')
342+
(toolchainProgramDb $ buildToolchain $ pkgConfigToolchains sharedConfig')
343+
(toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig')
344+
(toolchainPlatform $ buildToolchain $ pkgConfigToolchains sharedConfig')
352345
Nothing
353346
flags'
354347
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,5 +1,6 @@
11
{-# LANGUAGE LambdaCase #-}
22
{-# LANGUAGE RecordWildCards #-}
3+
{-# LANGUAGE NamedFieldPuns #-}
34

45
-- |
56
-- Module : Distribution.Client.CmdPath
@@ -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 (Toolchains(..), Toolchain(..))
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: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import Distribution.Client.ProjectPlanning
5656
)
5757
import Distribution.Client.ProjectPlanning.Types
5858
( elabOrderExeDependencies
59-
, showElaboratedInstallPlan
59+
, showElaboratedInstallPlan, Toolchains (..), Toolchain (..)
6060
)
6161
import Distribution.Client.ScriptUtils
6262
( AcceptNoTargets (..)
@@ -344,7 +344,7 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g
344344
-- especially in the no-project case.
345345
withInstallPlan (lessVerbose verbosity) baseCtx' $ \elaboratedPlan sharedConfig -> do
346346
-- targets should be non-empty map, but there's no NonEmptyMap yet.
347-
targets <- validatedTargets (projectConfigShared (projectConfig ctx)) (pkgConfigCompiler sharedConfig) elaboratedPlan targetSelectors
347+
targets <- validatedTargets (projectConfigShared (projectConfig ctx)) (toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig) elaboratedPlan targetSelectors
348348

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

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

373373
let
374374
elaboratedPlan' =
@@ -400,7 +400,7 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g
400400
, targetsMap = targets
401401
}
402402

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

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

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

447447
-- 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

0 commit comments

Comments
 (0)