Skip to content

Commit 4b55c76

Browse files
committed
feat(cabal-install): all of it
1 parent 085bbd3 commit 4b55c76

20 files changed

+811
-530
lines changed

cabal-install/cabal-install.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ library
193193
Distribution.Client.ProjectPlanOutput
194194
Distribution.Client.ProjectPlanning
195195
Distribution.Client.ProjectPlanning.SetupPolicy
196+
Distribution.Client.ProjectPlanning.Stage
196197
Distribution.Client.ProjectPlanning.Types
197198
Distribution.Client.RebuildMonad
198199
Distribution.Client.Reconfigure

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
-------------------------------------------------------------------------------
22
-------------------------------------------------------------------------------
33
{-# LANGUAGE RecordWildCards #-}
4+
{-# OPTIONS_GHC -Wno-unused-imports #-}
5+
{-# OPTIONS_GHC -Wno-unused-local-binds #-}
6+
{-# OPTIONS_GHC -Wno-unused-matches #-}
47

58
-- |
69
-- Module : Distribution.Client.Exec
@@ -56,7 +59,8 @@ import Distribution.Client.ProjectPlanning
5659
)
5760
import qualified Distribution.Client.ProjectPlanning as Planning
5861
import Distribution.Client.ProjectPlanning.Types
59-
( dataDirsEnvironmentForPlan
62+
( Toolchain (..)
63+
, dataDirsEnvironmentForPlan
6064
)
6165
import Distribution.Client.Setup
6266
( GlobalFlags
@@ -104,6 +108,7 @@ import Prelude ()
104108
import qualified Data.Map as M
105109
import qualified Data.Set as S
106110
import Distribution.Client.Errors
111+
import Distribution.Solver.Types.Stage
107112

108113
execCommand :: CommandUI (NixStyleFlags ())
109114
execCommand =
@@ -152,6 +157,12 @@ execAction flags extraArgs globalFlags = do
152157
baseCtx
153158
(\plan -> return (plan, M.empty))
154159

160+
let toolchains = pkgConfigToolchains (elaboratedShared buildCtx)
161+
-- We need the compiler and platform to set up the environment.
162+
compilers = toolchainCompiler <$> toolchains
163+
platforms = toolchainPlatform <$> toolchains
164+
progdbs = toolchainProgramDb <$> toolchains
165+
155166
-- We use the build status below to decide what libraries to include in the
156167
-- compiler environment, but we don't want to actually build anything. So we
157168
-- pass mempty to indicate that nothing happened and we just want the current
@@ -166,7 +177,9 @@ execAction flags extraArgs globalFlags = do
166177

167178
-- Some dependencies may have executables. Let's put those on the PATH.
168179
let extraPaths = pathAdditions baseCtx buildCtx
169-
pkgProgs = pkgConfigCompilerProgs (elaboratedShared buildCtx)
180+
-- NOTE: only build-stage dependencies make sense here
181+
pkgProgs = getStage progdbs Build
182+
--
170183
extraEnvVars =
171184
dataDirsEnvironmentForPlan
172185
(distDirLayout baseCtx)
@@ -181,7 +194,8 @@ execAction flags extraArgs globalFlags = do
181194
-- point at the file.
182195
-- In case ghc is too old to support environment files,
183196
-- we pass the same info as arguments
184-
let compiler = pkgConfigCompiler $ elaboratedShared buildCtx
197+
-- FIXME
198+
let compiler = getStage compilers Host
185199
envFilesSupported = supportsPkgEnvFiles (getImplInfo compiler)
186200
case extraArgs of
187201
[] -> dieWithException verbosity SpecifyAnExecutable
@@ -234,7 +248,9 @@ matchCompilerPath elaboratedShared program =
234248
programPath program
235249
`elem` (programPath <$> configuredCompilers)
236250
where
237-
configuredCompilers = configuredPrograms $ pkgConfigCompilerProgs elaboratedShared
251+
progdbs = toolchainProgramDb <$> pkgConfigToolchains elaboratedShared
252+
-- FIXME
253+
configuredCompilers = configuredPrograms (getStage progdbs Host)
238254

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

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import Control.Monad (mapM_)
1818
import Distribution.Client.Errors
1919

2020
import Distribution.Client.ProjectPlanning hiding (pruneInstallPlanToTargets)
21-
import Distribution.Client.ProjectPlanning.Types
2221
import Distribution.Client.Types.ConfiguredId (confInstId)
2322
import Distribution.Client.Utils hiding (pvpize)
2423
import Distribution.InstalledPackageInfo (InstalledPackageInfo, installedComponentId)

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{-# LANGUAGE LambdaCase #-}
12
{-# LANGUAGE PatternSynonyms #-}
23
{-# LANGUAGE RecordWildCards #-}
34

@@ -29,8 +30,12 @@ import Distribution.Client.ProjectConfig.Types
2930
, ProjectConfig (..)
3031
)
3132
import Distribution.Client.ProjectOrchestration
32-
import Distribution.Client.ProjectPlanning
33+
import Distribution.Client.ProjectPlanning.Types
3334
( ElaboratedSharedConfig (..)
35+
, Stage (..)
36+
, Staged (..)
37+
, Toolchain (..)
38+
, getStage
3439
)
3540
import Distribution.Client.Setup
3641
( GlobalFlags
@@ -160,6 +165,7 @@ haddockAction relFlags targetStrings globalFlags = do
160165
projCtx{buildSettings = (buildSettings projCtx){buildSettingHaddockOpen = True}}
161166
| otherwise =
162167
projCtx
168+
163169
absProjectConfig <- mkConfigAbsolute relProjectConfig
164170
let baseCtx = relBaseCtx{projectConfig = absProjectConfig}
165171

@@ -192,6 +198,9 @@ haddockAction relFlags targetStrings globalFlags = do
192198

193199
printPlan verbosity baseCtx buildCtx
194200

201+
let toolchains = pkgConfigToolchains (elaboratedShared buildCtx)
202+
203+
-- TODO
195204
progs <-
196205
reconfigurePrograms
197206
verbosity
@@ -200,14 +209,19 @@ haddockAction relFlags targetStrings globalFlags = do
200209
-- we need to insert 'haddockProgram' before we reconfigure it,
201210
-- otherwise 'set
202211
. addKnownProgram haddockProgram
203-
. pkgConfigCompilerProgs
204-
. elaboratedShared
205-
$ buildCtx
212+
-- TODO
213+
. toolchainProgramDb
214+
$ getStage toolchains Host
215+
216+
let toolchains' = Staged $ \case
217+
Host -> (getStage toolchains' Host){toolchainProgramDb = progs}
218+
Build -> getStage toolchains' Build
219+
206220
let buildCtx' =
207221
buildCtx
208222
{ elaboratedShared =
209223
(elaboratedShared buildCtx)
210-
{ pkgConfigCompilerProgs = progs
224+
{ pkgConfigToolchains = toolchains'
211225
}
212226
}
213227

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

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ import Distribution.Client.ProjectPlanning
3939
, TargetAction (..)
4040
)
4141
import Distribution.Client.ProjectPlanning.Types
42-
( elabDistDirParams
42+
( Toolchain (..)
43+
, elabDistDirParams
44+
, getStage
4345
)
4446
import Distribution.Client.ScriptUtils
4547
( AcceptNoTargets (..)
@@ -71,18 +73,11 @@ import Distribution.Simple.Flag
7173
, pattern Flag
7274
, pattern NoFlag
7375
)
74-
import Distribution.Simple.Haddock (createHaddockIndex)
76+
77+
-- import Distribution.Simple.Haddock (createHaddockIndex)
7578
import Distribution.Simple.InstallDirs
7679
( toPathTemplate
7780
)
78-
import Distribution.Simple.Program.Builtin
79-
( haddockProgram
80-
)
81-
import Distribution.Simple.Program.Db
82-
( addKnownProgram
83-
, reconfigurePrograms
84-
, requireProgramVersion
85-
)
8681
import Distribution.Simple.Setup
8782
( HaddockFlags (..)
8883
, HaddockProjectFlags (..)
@@ -103,8 +98,6 @@ import Distribution.Types.PackageDescription (PackageDescription (benchmarks, su
10398
import Distribution.Types.PackageId (pkgName)
10499
import Distribution.Types.PackageName (unPackageName)
105100
import Distribution.Types.UnitId (unUnitId)
106-
import Distribution.Types.Version (mkVersion)
107-
import Distribution.Types.VersionRange (orLaterVersion)
108101
import Distribution.Verbosity as Verbosity
109102
( normal
110103
)
@@ -170,24 +163,26 @@ haddockProjectAction flags _extraArgs globalFlags = do
170163
pkgs :: [Either InstalledPackageInfo ElaboratedConfiguredPackage]
171164
pkgs = matchingPackages elaboratedPlan
172165

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

192187
--
193188
-- Build project; we need to build dependencies.
@@ -302,10 +297,12 @@ haddockProjectAction flags _extraArgs globalFlags = do
302297
False -> do
303298
let pkg_descr = elabPkgDescription package
304299
unitId = unUnitId (elabUnitId package)
300+
compilers = toolchainCompiler <$> pkgConfigToolchains sharedConfig'
301+
compiler = getStage compilers (elabStage package)
305302
packageDir =
306303
storePackageDirectory
307304
(cabalStoreDirLayout cabalLayout)
308-
(pkgConfigCompiler sharedConfig')
305+
compiler
309306
(elabUnitId package)
310307
-- TODO: use `InstallDirTemplates`
311308
docDir = packageDir </> "share" </> "doc" </> "html"
@@ -325,7 +322,7 @@ haddockProjectAction flags _extraArgs globalFlags = do
325322
-- generate index, content, etc.
326323
--
327324

328-
let (missingHaddocks, packageInfos') = partitionEithers packageInfos
325+
let (missingHaddocks, _packageInfos') = partitionEithers packageInfos
329326
when (not (null missingHaddocks)) $ do
330327
warn verbosity "missing haddocks for some packages from the store"
331328
-- Show the package list if `-v1` is passed; it's usually a long list.
@@ -334,28 +331,31 @@ haddockProjectAction flags _extraArgs globalFlags = do
334331
-- `documentation: True` in the global config).
335332
info verbosity (intercalate "\n" missingHaddocks)
336333

337-
let flags' =
338-
flags
339-
{ haddockProjectDir = Flag outputDir
340-
, haddockProjectInterfaces =
341-
Flag
342-
[ ( interfacePath
343-
, Just url
344-
, Just url
345-
, visibility
346-
)
347-
| (url, interfacePath, visibility) <- packageInfos'
348-
]
349-
, haddockProjectUseUnicode = NoFlag
350-
}
351-
createHaddockIndex
352-
verbosity
353-
(pkgConfigCompilerProgs sharedConfig')
354-
(pkgConfigCompiler sharedConfig')
355-
(pkgConfigPlatform sharedConfig')
356-
Nothing
357-
flags'
334+
warn verbosity "createHaddockIndex not implemented"
358335
where
336+
-- let flags' =
337+
-- flags
338+
-- { haddockProjectDir = Flag outputDir
339+
-- , haddockProjectInterfaces =
340+
-- Flag
341+
-- [ ( interfacePath
342+
-- , Just url
343+
-- , Just url
344+
-- , visibility
345+
-- )
346+
-- | (url, interfacePath, visibility) <- packageInfos'
347+
-- ]
348+
-- , haddockProjectUseUnicode = NoFlag
349+
-- }
350+
-- -- NOTE: this lives in Cabal
351+
-- createHaddockIndex
352+
-- verbosity
353+
-- (toolchainProgramDb $ buildToolchain $ pkgConfigToolchains sharedConfig')
354+
-- (toolchainCompiler $ buildToolchain $ pkgConfigToolchains sharedConfig')
355+
-- (toolchainPlatform $ buildToolchain $ pkgConfigToolchains sharedConfig')
356+
-- Nothing
357+
-- flags'
358+
359359
-- build all packages with appropriate haddock flags
360360
commonFlags = haddockProjectCommonFlags flags
361361

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ import Distribution.Client.TargetProblem (TargetProblem (..))
4848
import Distribution.Simple.BuildPaths (dllExtension, exeExtension)
4949
import Distribution.Simple.Command (CommandUI (..))
5050
import Distribution.Simple.Utils (dieWithException, withOutputMarker, wrapText)
51-
import Distribution.System (Platform)
5251
import Distribution.Types.ComponentName (showComponentName)
5352
import Distribution.Types.UnitId (UnitId)
5453
import Distribution.Types.UnqualComponentName (UnqualComponentName)
@@ -204,8 +203,8 @@ listbinAction flags args globalFlags = do
204203
| s == selectedComponent -> [flib_file' s]
205204
_ -> []
206205

207-
plat :: Platform
208-
plat = pkgConfigPlatform elaboratedSharedConfig
206+
Toolchain{toolchainPlatform = plat} =
207+
getStage (pkgConfigToolchains elaboratedSharedConfig) (elabStage elab)
209208

210209
-- here and in PlanOutput,
211210
-- use binDirectoryFor?

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE LambdaCase #-}
22
{-# LANGUAGE PatternSynonyms #-}
3+
{-# LANGUAGE RecordWildCards #-}
34

45
-- |
56
-- Module : Distribution.Client.CmdPath
@@ -41,14 +42,12 @@ import Distribution.Client.ProjectConfig.Types
4142
)
4243
import Distribution.Client.ProjectOrchestration
4344
import Distribution.Client.ProjectPlanning
45+
import Distribution.Client.ProjectPlanning.Types (Toolchain (..))
4446
import Distribution.Client.RebuildMonad (runRebuild)
4547
import Distribution.Client.ScriptUtils
4648
import Distribution.Client.Setup
4749
( yesNoOpt
4850
)
49-
import Distribution.Client.Toolchain
50-
( Toolchain (..)
51-
)
5251
import Distribution.Client.Utils.Json
5352
( (.=)
5453
)
@@ -79,9 +78,11 @@ import Distribution.Simple.Program
7978
import Distribution.Simple.Utils
8079
( die'
8180
, dieWithException
81+
, warn
8282
, withOutputMarker
8383
, wrapText
8484
)
85+
import Distribution.Solver.Types.Stage
8586
import Distribution.Verbosity
8687
( normal
8788
)
@@ -247,10 +248,13 @@ pathAction flags@NixStyleFlags{extraFlags = pathFlags'} cliTargetStrings globalF
247248
if not $ fromFlagOrDefault False (pathCompiler pathFlags)
248249
then pure Nothing
249250
else do
250-
toolchain <- runRebuild (distProjectRootDirectory . distDirLayout $ baseCtx) $ configureCompiler verbosity (distDirLayout baseCtx) (projectConfig baseCtx)
251-
compilerProg <- requireCompilerProg verbosity (toolchainCompiler toolchain)
252-
(configuredCompilerProg, _) <- requireProgram verbosity compilerProg (toolchainProgramDb toolchain)
253-
pure $ Just $ mkCompilerInfo configuredCompilerProg (toolchainCompiler toolchain)
251+
let projectRoot = distProjectRootDirectory (distDirLayout baseCtx)
252+
toolchains <- runRebuild projectRoot $ configureToolchains verbosity (distDirLayout baseCtx) (projectConfig baseCtx)
253+
warn verbosity "WIP: Assuming host toolchain, result might be wrong"
254+
let Toolchain{..} = getStage toolchains Host
255+
compilerProg <- requireCompilerProg verbosity toolchainCompiler
256+
(configuredCompilerProg, _) <- requireProgram verbosity compilerProg toolchainProgramDb
257+
pure $ Just $ mkCompilerInfo configuredCompilerProg toolchainCompiler
254258

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

0 commit comments

Comments
 (0)