Skip to content

Commit 06c2501

Browse files
author
Sven Heyll
committedNov 2, 2014
Add --cabal-ghc/-pkg flags to 'configure'
Add 'SetupWrapperFlags' with flags to configure a path to GHC and GHC-PKG to build 'Setup.hs'. This is an initial draft implementation done primarily for code review of the basic design decision, so only the configure and the install commands respect these flags.
1 parent 1f41dbf commit 06c2501

File tree

7 files changed

+213
-83
lines changed

7 files changed

+213
-83
lines changed
 

Diff for: ‎cabal-install/Distribution/Client/Config.hs

+13
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import Distribution.Client.BuildReports.Types
4444
( ReportLevel(..) )
4545
import Distribution.Client.Setup
4646
( GlobalFlags(..), globalCommand, defaultGlobalFlags
47+
, SetupWrapperFlags(..), setupWrapperOptions
4748
, ConfigExFlags(..), configureExOptions, defaultConfigExFlags
4849
, InstallFlags(..), installOptions, defaultInstallFlags
4950
, UploadFlags(..), uploadCommand
@@ -127,6 +128,7 @@ import qualified Data.Map as M
127128

128129
data SavedConfig = SavedConfig {
129130
savedGlobalFlags :: GlobalFlags,
131+
savedSetupWrapperFlags :: SetupWrapperFlags,
130132
savedInstallFlags :: InstallFlags,
131133
savedConfigureFlags :: ConfigFlags,
132134
savedConfigureExFlags :: ConfigExFlags,
@@ -140,6 +142,7 @@ data SavedConfig = SavedConfig {
140142
instance Monoid SavedConfig where
141143
mempty = SavedConfig {
142144
savedGlobalFlags = mempty,
145+
savedSetupWrapperFlags = mempty,
143146
savedInstallFlags = mempty,
144147
savedConfigureFlags = mempty,
145148
savedConfigureExFlags = mempty,
@@ -151,6 +154,7 @@ instance Monoid SavedConfig where
151154
}
152155
mappend a b = SavedConfig {
153156
savedGlobalFlags = combine savedGlobalFlags,
157+
savedSetupWrapperFlags = combine savedSetupWrapperFlags,
154158
savedInstallFlags = combine savedInstallFlags,
155159
savedConfigureFlags = combine savedConfigureFlags,
156160
savedConfigureExFlags = combine savedConfigureExFlags,
@@ -367,6 +371,7 @@ commentSavedConfig = do
367371
globalInstallDirs <- defaultInstallDirs defaultCompiler False True
368372
return SavedConfig {
369373
savedGlobalFlags = defaultGlobalFlags,
374+
savedSetupWrapperFlags = mempty,
370375
savedInstallFlags = defaultInstallFlags,
371376
savedConfigureExFlags = defaultConfigExFlags,
372377
savedConfigureFlags = (defaultConfigFlags defaultProgramConfiguration) {
@@ -388,6 +393,10 @@ configFieldDescriptions =
388393
(commandOptions globalCommand ParseArgs)
389394
["version", "numeric-version", "config-file", "sandbox-config-file"] []
390395

396+
++ toSavedConfig liftSetupWrapperFlag
397+
(setupWrapperOptions ParseArgs)
398+
[] []
399+
391400
++ toSavedConfig liftConfigFlag
392401
(configureOptions ParseArgs)
393402
(["builddir", "constraint", "dependency"]
@@ -501,6 +510,10 @@ liftGlobalFlag :: FieldDescr GlobalFlags -> FieldDescr SavedConfig
501510
liftGlobalFlag = liftField
502511
savedGlobalFlags (\flags conf -> conf { savedGlobalFlags = flags })
503512

513+
liftSetupWrapperFlag :: FieldDescr SetupWrapperFlags -> FieldDescr SavedConfig
514+
liftSetupWrapperFlag = liftField
515+
savedSetupWrapperFlags (\flags conf -> conf { savedSetupWrapperFlags = flags })
516+
504517
liftConfigFlag :: FieldDescr ConfigFlags -> FieldDescr SavedConfig
505518
liftConfigFlag = liftField
506519
savedConfigureFlags (\flags conf -> conf { savedConfigureFlags = flags })

Diff for: ‎cabal-install/Distribution/Client/Configure.hs

+8-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ import Distribution.Client.InstallPlan (InstallPlan)
2222
import Distribution.Client.IndexUtils as IndexUtils
2323
( getSourcePackages, getInstalledPackages )
2424
import Distribution.Client.Setup
25-
( ConfigExFlags(..), configureCommand, filterConfigureFlags )
25+
( ConfigExFlags(..), configureCommand, filterConfigureFlags
26+
, SetupWrapperFlags(..) )
2627
import Distribution.Client.Types as Source
2728
import Distribution.Client.SetupWrapper
28-
( setupWrapper, SetupScriptOptions(..), defaultSetupScriptOptions )
29+
( setupWrapper, SetupScriptOptions(..), defaultSetupScriptOptions
30+
, updateSetupScriptOptions )
2931
import Distribution.Client.Targets
3032
( userToPackageConstraint )
3133

@@ -80,12 +82,13 @@ configure :: Verbosity
8082
-> Compiler
8183
-> Platform
8284
-> ProgramConfiguration
85+
-> SetupWrapperFlags
8386
-> ConfigFlags
8487
-> ConfigExFlags
8588
-> [String]
8689
-> IO ()
8790
configure verbosity packageDBs repos comp platform conf
88-
configFlags configExFlags extraArgs = do
91+
setupWrapperFlags configFlags configExFlags extraArgs = do
8992

9093
installedPkgIndex <- getInstalledPackages verbosity comp packageDBs conf
9194
sourcePkgDb <- getSourcePackages verbosity repos
@@ -114,7 +117,8 @@ configure verbosity packageDBs repos comp platform conf
114117
++ "one local ready package."
115118

116119
where
117-
setupScriptOptions index = SetupScriptOptions {
120+
setupScriptOptions index =
121+
updateSetupScriptOptions setupWrapperFlags $ defaultSetupScriptOptions {
118122
useCabalVersion = chooseCabalVersion configExFlags
119123
(flagToMaybe (configCabalVersion configExFlags)),
120124
useCompiler = Just comp,

Diff for: ‎cabal-install/Distribution/Client/Install.hs

+19-13
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ import qualified Distribution.Client.InstallPlan as InstallPlan
7272
import Distribution.Client.InstallPlan (InstallPlan)
7373
import Distribution.Client.Setup
7474
( GlobalFlags(..)
75+
, SetupWrapperFlags(..)
7576
, ConfigFlags(..), configureCommand, filterConfigureFlags
7677
, ConfigExFlags(..), InstallFlags(..) )
7778
import Distribution.Client.Config
@@ -86,7 +87,8 @@ import Distribution.Client.Types as Source
8687
import Distribution.Client.BuildReports.Types
8788
( ReportLevel(..) )
8889
import Distribution.Client.SetupWrapper
89-
( setupWrapper, SetupScriptOptions(..), defaultSetupScriptOptions )
90+
( setupWrapper, SetupScriptOptions(..), defaultSetupScriptOptions
91+
, updateSetupScriptOptions )
9092
import qualified Distribution.Client.BuildReports.Anonymous as BuildReports
9193
import qualified Distribution.Client.BuildReports.Storage as BuildReports
9294
( storeAnonymous, storeLocal, fromInstallPlan, fromPlanningFailure )
@@ -179,15 +181,16 @@ install
179181
-> UseSandbox
180182
-> Maybe SandboxPackageInfo
181183
-> GlobalFlags
184+
-> SetupWrapperFlags
182185
-> ConfigFlags
183186
-> ConfigExFlags
184187
-> InstallFlags
185188
-> HaddockFlags
186189
-> [UserTarget]
187190
-> IO ()
188191
install verbosity packageDBs repos comp platform conf useSandbox mSandboxPkgInfo
189-
globalFlags configFlags configExFlags installFlags haddockFlags
190-
userTargets0 = do
192+
globalFlags setupWrapperFlags configFlags configExFlags installFlags
193+
haddockFlags userTargets0 = do
191194

192195
installContext <- makeInstallContext verbosity args (Just userTargets0)
193196
planResult <- foldProgress logMsg (return . Left) (return . Right) =<<
@@ -201,9 +204,9 @@ install verbosity packageDBs repos comp platform conf useSandbox mSandboxPkgInfo
201204
processInstallPlan verbosity args installContext installPlan
202205
where
203206
args :: InstallArgs
204-
args = (packageDBs, repos, comp, platform, conf, useSandbox, mSandboxPkgInfo,
205-
globalFlags, configFlags, configExFlags, installFlags,
206-
haddockFlags)
207+
args = (packageDBs, repos, comp, platform, conf, useSandbox,
208+
mSandboxPkgInfo, globalFlags, setupWrapperFlags, configFlags,
209+
configExFlags, installFlags, haddockFlags)
207210

208211
die' message = die (message ++ if isUseSandbox useSandbox
209212
then installFailedInSandbox else [])
@@ -231,6 +234,7 @@ type InstallArgs = ( PackageDBStack
231234
, UseSandbox
232235
, Maybe SandboxPackageInfo
233236
, GlobalFlags
237+
, SetupWrapperFlags
234238
, ConfigFlags
235239
, ConfigExFlags
236240
, InstallFlags
@@ -241,7 +245,7 @@ makeInstallContext :: Verbosity -> InstallArgs -> Maybe [UserTarget]
241245
-> IO InstallContext
242246
makeInstallContext verbosity
243247
(packageDBs, repos, comp, _, conf,_,_,
244-
globalFlags, _, _, _, _) mUserTargets = do
248+
globalFlags, _, _, _, _, _) mUserTargets = do
245249

246250
installedPkgIndex <- getInstalledPackages verbosity comp packageDBs conf
247251
sourcePkgDb <- getSourcePackages verbosity repos
@@ -271,7 +275,7 @@ makeInstallPlan :: Verbosity -> InstallArgs -> InstallContext
271275
-> IO (Progress String String InstallPlan)
272276
makeInstallPlan verbosity
273277
(_, _, comp, platform, _, _, mSandboxPkgInfo,
274-
_, configFlags, configExFlags, installFlags,
278+
_, _, configFlags, configExFlags, installFlags,
275279
_)
276280
(installedPkgIndex, sourcePkgDb,
277281
_, pkgSpecifiers) = do
@@ -288,7 +292,7 @@ processInstallPlan :: Verbosity -> InstallArgs -> InstallContext
288292
-> InstallPlan
289293
-> IO ()
290294
processInstallPlan verbosity
291-
args@(_,_, comp, _, _, _, _, _, _, _, installFlags, _)
295+
args@(_,_, comp, _, _, _, _, _, _, _, _, installFlags, _)
292296
(installedPkgIndex, sourcePkgDb,
293297
userTargets, pkgSpecifiers) installPlan = do
294298
checkPrintPlan verbosity comp installedPkgIndex installPlan sourcePkgDb
@@ -654,7 +658,7 @@ printPlan dryRun verbosity plan sourcePkgDb = case plan of
654658
-- 'postInstallActions', as (by definition) we don't have an install plan.
655659
reportPlanningFailure :: Verbosity -> InstallArgs -> InstallContext -> String -> IO ()
656660
reportPlanningFailure verbosity
657-
(_, _, comp, platform, _, _, _
661+
(_, _, comp, platform, _, _, _, _
658662
,_, configFlags, _, installFlags, _)
659663
(_, sourcePkgDb, _, pkgSpecifiers)
660664
message = do
@@ -730,7 +734,7 @@ postInstallActions :: Verbosity
730734
-> IO ()
731735
postInstallActions verbosity
732736
(packageDBs, _, comp, platform, conf, useSandbox, mSandboxPkgInfo
733-
,globalFlags, configFlags, _, installFlags, _)
737+
,globalFlags, _, configFlags, _, installFlags, _)
734738
targets installPlan = do
735739

736740
unless oneShot $
@@ -966,7 +970,8 @@ performInstallations :: Verbosity
966970
-> IO InstallPlan
967971
performInstallations verbosity
968972
(packageDBs, _, comp, _, conf, useSandbox, _,
969-
globalFlags, configFlags, configExFlags, installFlags, haddockFlags)
973+
globalFlags, setupWrapperFlags, configFlags, configExFlags, installFlags,
974+
haddockFlags)
970975
installedPkgIndex installPlan = do
971976

972977
-- With 'install -j' it can be a bit hard to tell whether a sandbox is used.
@@ -1006,7 +1011,8 @@ performInstallations verbosity
10061011
distPref = fromFlagOrDefault (useDistPref defaultSetupScriptOptions)
10071012
(configDistPref configFlags)
10081013

1009-
setupScriptOptions index lock = SetupScriptOptions {
1014+
setupScriptOptions index lock =
1015+
updateSetupScriptOptions setupWrapperFlags $ defaultSetupScriptOptions {
10101016
useCabalVersion = chooseCabalVersion configExFlags
10111017
(libVersion miscOptions),
10121018
useCompiler = Just comp,

Diff for: ‎cabal-install/Distribution/Client/Sandbox.hs

+30-21
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ module Distribution.Client.Sandbox (
4141

4242
import Distribution.Client.Setup
4343
( SandboxFlags(..), ConfigFlags(..), ConfigExFlags(..), InstallFlags(..)
44-
, GlobalFlags(..), defaultConfigExFlags, defaultInstallFlags
45-
, defaultSandboxLocation, globalRepos )
44+
, GlobalFlags(..), SetupWrapperFlags(..)
45+
, defaultConfigExFlags, defaultInstallFlags, defaultSandboxLocation
46+
, globalRepos )
4647
import Distribution.Client.Sandbox.Timestamp ( listModifiedDeps
4748
, maybeAddCompilerTimestampRecord
4849
, withAddTimestamps
@@ -549,12 +550,13 @@ data WereDepsReinstalled = ReinstalledSomeDeps | NoDepsReinstalled
549550
-- | Reinstall those add-source dependencies that have been modified since
550551
-- we've last installed them. Assumes that we're working inside a sandbox.
551552
reinstallAddSourceDeps :: Verbosity
552-
-> ConfigFlags -> ConfigExFlags
553-
-> InstallFlags -> GlobalFlags
553+
-> ConfigFlags -> ConfigExFlags -> InstallFlags
554+
-> GlobalFlags -> SetupWrapperFlags
554555
-> FilePath
555556
-> IO WereDepsReinstalled
556-
reinstallAddSourceDeps verbosity configFlags' configExFlags
557-
installFlags globalFlags sandboxDir = topHandler' $ do
557+
reinstallAddSourceDeps verbosity configFlags' configExFlags installFlags
558+
globalFlags setupWrapperFlags
559+
sandboxDir = topHandler' $ do
558560
let sandboxDistPref = sandboxBuildDir sandboxDir
559561
configFlags = configFlags'
560562
{ configDistPref = Flag sandboxDistPref }
@@ -572,7 +574,8 @@ reinstallAddSourceDeps verbosity configFlags' configExFlags
572574
,(globalRepos globalFlags)
573575
,comp, platform, conf
574576
,UseSandbox sandboxDir, Just sandboxPkgInfo
575-
,globalFlags, configFlags, configExFlags, installFlags
577+
,globalFlags, setupWrapperFlags
578+
,configFlags, configExFlags, installFlags
576579
,haddockFlags)
577580

578581
-- This can actually be replaced by a call to 'install', but we use a
@@ -682,34 +685,40 @@ maybeReinstallAddSourceDeps :: Verbosity
682685
-> ConfigFlags -- ^ Saved configure flags
683686
-- (from dist/setup-config)
684687
-> GlobalFlags
688+
-> SetupWrapperFlags
685689
-> IO (UseSandbox, SavedConfig
686690
,WereDepsReinstalled)
687-
maybeReinstallAddSourceDeps verbosity numJobsFlag configFlags' globalFlags' = do
691+
maybeReinstallAddSourceDeps verbosity
692+
numJobsFlag
693+
configFlags'
694+
globalFlags'
695+
setupWrapperFlags' = do
688696
(useSandbox, config) <- loadConfigOrSandboxConfig verbosity globalFlags'
689697
(configUserInstall configFlags')
690698
case useSandbox of
691699
NoSandbox -> return (NoSandbox, config, NoDepsReinstalled)
692700
UseSandbox sandboxDir -> do
693701
-- Reinstall the modified add-source deps.
694-
let configFlags = savedConfigureFlags config
695-
`mappendSomeSavedFlags`
696-
configFlags'
697-
configExFlags = defaultConfigExFlags
698-
`mappend` savedConfigureExFlags config
699-
installFlags' = defaultInstallFlags
700-
`mappend` savedInstallFlags config
701-
installFlags = installFlags' {
702-
installNumJobs = installNumJobs installFlags'
703-
`mappend` numJobsFlag
702+
let configFlags = savedConfigureFlags config
703+
`mappendSomeSavedFlags` configFlags'
704+
configExFlags = defaultConfigExFlags
705+
`mappend` savedConfigureExFlags config
706+
installFlags' = defaultInstallFlags
707+
`mappend` savedInstallFlags config
708+
installFlags = installFlags' {
709+
installNumJobs = installNumJobs installFlags'
710+
`mappend` numJobsFlag
704711
}
705-
globalFlags = savedGlobalFlags config
706712
-- This makes it possible to override things like 'remote-repo-cache'
707713
-- from the command line. These options are hidden, and are only
708714
-- useful for debugging, so this should be fine.
709-
`mappend` globalFlags'
715+
globalFlags = savedGlobalFlags config
716+
`mappend` globalFlags'
717+
setupWrapperFlags = savedSetupWrapperFlags config
718+
`mappend` setupWrapperFlags'
710719
depsReinstalled <- reinstallAddSourceDeps verbosity
711720
configFlags configExFlags installFlags globalFlags
712-
sandboxDir
721+
setupWrapperFlags sandboxDir
713722
return (UseSandbox sandboxDir, config, depsReinstalled)
714723

715724
where

0 commit comments

Comments
 (0)