Skip to content

Commit ac1610d

Browse files
committed
wip: thread toolchains everywhere
1 parent 2d9e562 commit ac1610d

File tree

15 files changed

+375
-299
lines changed

15 files changed

+375
-299
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 & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,15 @@ haddockAction relFlags targetStrings globalFlags = do
153153
installDoc = fromFlagOrDefault True (installDocumentation installFlags)
154154
flags' = flags{installFlags = installFlags{installDocumentation = Flag installDoc}}
155155
cliConfig = commandLineFlagsToProjectConfig globalFlags flags' mempty -- ClientInstallFlags, not needed here
156+
156157
projCtx <- establishProjectBaseContext verbosity cliConfig HaddockCommand
157158

158159
let relBaseCtx@ProjectBaseContext{projectConfig = relProjectConfig}
159160
| fromFlagOrDefault False (openInBrowser extraFlags) =
160161
projCtx{buildSettings = (buildSettings projCtx){buildSettingHaddockOpen = True}}
161162
| otherwise =
162163
projCtx
164+
163165
absProjectConfig <- mkConfigAbsolute relProjectConfig
164166
let baseCtx = relBaseCtx{projectConfig = absProjectConfig}
165167

@@ -188,28 +190,32 @@ haddockAction relFlags targetStrings globalFlags = do
188190
TargetActionHaddock
189191
targets
190192
elaboratedPlan
193+
191194
return (elaboratedPlan', targets)
192195

193196
printPlan verbosity baseCtx buildCtx
194197

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
198+
-- TODO
199+
-- progs <-
200+
-- reconfigurePrograms
201+
-- verbosity
202+
-- (haddockProgramPaths haddockFlags)
203+
-- (haddockProgramArgs haddockFlags)
204+
-- -- we need to insert 'haddockProgram' before we reconfigure it,
205+
-- -- otherwise 'set
206+
-- . addKnownProgram haddockProgram
207+
-- . pkgConfigCompilerProgs
208+
-- . elaboratedShared
209+
-- $ buildCtx
210+
211+
-- TODO
206212
let buildCtx' =
207213
buildCtx
208-
{ elaboratedShared =
209-
(elaboratedShared buildCtx)
210-
{ pkgConfigCompilerProgs = progs
211-
}
212-
}
214+
-- { elaboratedShared =
215+
-- (elaboratedShared buildCtx)
216+
-- { pkgConfigCompilerProgs = progs
217+
-- }
218+
-- }
213219

214220
buildOutcomes <- runProjectBuildPhase verbosity baseCtx buildCtx'
215221
runProjectPostBuildPhase verbosity baseCtx buildCtx' buildOutcomes

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

Lines changed: 26 additions & 23 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 (..)
@@ -166,24 +166,26 @@ haddockProjectAction flags _extraArgs globalFlags = do
166166
pkgs :: [Either InstalledPackageInfo ElaboratedConfiguredPackage]
167167
pkgs = matchingPackages elaboratedPlan
168168

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
169+
-- TODO
170+
-- progs <-
171+
-- reconfigurePrograms
172+
-- verbosity
173+
-- (haddockProjectProgramPaths flags)
174+
-- (haddockProjectProgramArgs flags)
175+
-- -- we need to insert 'haddockProgram' before we reconfigure it,
176+
-- -- otherwise 'set
177+
-- . addKnownProgram haddockProgram
178+
-- . pkgConfigCompilerProgs
179+
-- $ sharedConfig
180+
-- let sharedConfig' = sharedConfig{pkgConfigCompilerProgs = progs}
181+
let sharedConfig' = sharedConfig
182+
183+
-- _ <-
184+
-- requireProgramVersion
185+
-- verbosity
186+
-- haddockProgram
187+
-- (orLaterVersion (mkVersion [2, 26, 1]))
188+
-- progs
187189

188190
--
189191
-- Build project; we need to build dependencies.
@@ -301,7 +303,7 @@ haddockProjectAction flags _extraArgs globalFlags = do
301303
packageDir =
302304
storePackageDirectory
303305
(cabalStoreDirLayout cabalLayout)
304-
(pkgConfigCompiler sharedConfig')
306+
(toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig')
305307
(elabUnitId package)
306308
-- TODO: use `InstallDirTemplates`
307309
docDir = packageDir </> "share" </> "doc" </> "html"
@@ -344,11 +346,12 @@ haddockProjectAction flags _extraArgs globalFlags = do
344346
]
345347
, haddockProjectUseUnicode = NoFlag
346348
}
349+
-- NOTE: this lives in Cabal
347350
createHaddockIndex
348351
verbosity
349-
(pkgConfigCompilerProgs sharedConfig')
350-
(pkgConfigCompiler sharedConfig')
351-
(pkgConfigPlatform sharedConfig')
352+
(toolchainProgramDb $ buildToolchain $ pkgConfigToolchains sharedConfig')
353+
(toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig')
354+
(toolchainPlatform $ buildToolchain $ pkgConfigToolchains sharedConfig')
352355
Nothing
353356
flags'
354357
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

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

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,12 @@ buildAndRegisterUnpackedPackage
178178
registerLock
179179
cacheLock
180180
pkgshared@ElaboratedSharedConfig
181-
{ pkgConfigCompiler = compiler
182-
, pkgConfigCompilerProgs = progdb
181+
{ pkgConfigToolchains = Toolchains {
182+
buildToolchain = Toolchain {
183+
toolchainCompiler = compiler,
184+
toolchainProgramDb = progdb
185+
}
186+
}
183187
}
184188
plan
185189
rpkg@(ReadyPackage pkg)
@@ -451,7 +455,13 @@ buildInplaceUnpackedPackage
451455
buildSettings@BuildTimeSettings{buildSettingHaddockOpen}
452456
registerLock
453457
cacheLock
454-
pkgshared@ElaboratedSharedConfig{pkgConfigPlatform = Platform _ os}
458+
pkgshared@ElaboratedSharedConfig{
459+
pkgConfigToolchains = Toolchains {
460+
buildToolchain = Toolchain {
461+
toolchainPlatform = Platform _ os
462+
}
463+
}
464+
}
455465
plan
456466
rpkg@(ReadyPackage pkg)
457467
buildStatus
@@ -657,8 +667,12 @@ buildAndInstallUnpackedPackage
657667
registerLock
658668
cacheLock
659669
pkgshared@ElaboratedSharedConfig
660-
{ pkgConfigCompiler = compiler
661-
, pkgConfigPlatform = platform
670+
{ pkgConfigToolchains = Toolchains {
671+
buildToolchain = Toolchain {
672+
toolchainCompiler = compiler,
673+
toolchainPlatform = platform
674+
}
675+
}
662676
}
663677
plan
664678
rpkg@(ReadyPackage pkg)
@@ -723,8 +737,8 @@ buildAndInstallUnpackedPackage
723737
runBuild
724738
-- not sure, if we want to care about a failed postBuildHook?
725739
postBuildHookFile <- canonicalizePath (hooksDir </> "postBuildHook")
726-
hookExists <- doesFileExist postBuildHookFile
727-
when hookExists $ do
740+
hookExists' <- doesFileExist postBuildHookFile
741+
when hookExists' $ do
728742
assertHookHash (pkgConfigHookHashes pkgshared) postBuildHookFile
729743
void $
730744
rawSystemExitCode

0 commit comments

Comments
 (0)