Skip to content

Commit 9ea9b57

Browse files
committed
Modernize CmdShowBuildInfo
1 parent 498261a commit 9ea9b57

File tree

5 files changed

+39
-94
lines changed

5 files changed

+39
-94
lines changed

cabal-install/Distribution/Client/CmdBuild.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ module Distribution.Client.CmdBuild (
88

99
-- * Internals exposed for testing
1010
selectPackageTargets,
11-
selectComponentTarget,
12-
reportTargetProblems
11+
selectComponentTarget
1312
) where
1413

1514
import Prelude ()

cabal-install/Distribution/Client/CmdShowBuildInfo.hs

Lines changed: 31 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{-# LANGUAGE RecordWildCards #-}
12
-- | cabal-install CLI command: show-build-info
23
--
34
module Distribution.Client.CmdShowBuildInfo (
@@ -10,14 +11,13 @@ import Distribution.Client.Compat.Prelude
1011
( when, find, fromMaybe )
1112
import Distribution.Client.ProjectOrchestration
1213
import Distribution.Client.CmdErrorMessages
13-
import Distribution.Client.CmdInstall.ClientInstallFlags
14+
import Distribution.Client.TargetProblem
15+
( TargetProblem (..), TargetProblem' )
1416

1517
import Distribution.Client.Setup
16-
( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags )
17-
import qualified Distribution.Client.Setup as Client
18+
( GlobalFlags )
1819
import Distribution.Simple.Setup
19-
( HaddockFlags, TestFlags, BenchmarkFlags
20-
, fromFlagOrDefault )
20+
(configVerbosity, fromFlagOrDefault )
2121
import Distribution.Simple.Command
2222
( CommandUI(..), option, reqArg', usageAlternatives )
2323
import Distribution.Verbosity
@@ -30,8 +30,8 @@ import Distribution.Types.Version
3030
( mkVersion )
3131
import Distribution.Types.PackageDescription
3232
( buildType )
33-
import Distribution.Deprecated.Text
34-
( display )
33+
import Distribution.Pretty
34+
( prettyShow )
3535

3636
import qualified Data.Map as Map
3737
import qualified Distribution.Simple.Setup as Cabal
@@ -43,6 +43,8 @@ import Distribution.Client.ProjectPlanning.Types
4343
import Distribution.Client.ProjectPlanning
4444
( setupHsConfigureFlags, setupHsConfigureArgs, setupHsBuildFlags
4545
, setupHsBuildArgs, setupHsScriptOptions )
46+
import Distribution.Client.NixStyleOptions
47+
( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags )
4648
import Distribution.Client.DistDirLayout
4749
( distBuildDirectory )
4850
import Distribution.Client.Types
@@ -51,15 +53,14 @@ import Distribution.Client.JobControl
5153
( newLock, Lock )
5254
import Distribution.Simple.Configure
5355
( tryGetPersistBuildConfig )
54-
import qualified Distribution.Client.CmdInstall as CmdInstall
5556

5657
import System.Directory
5758
( getTemporaryDirectory )
5859
import System.FilePath
5960
( (</>) )
6061

61-
showBuildInfoCommand :: CommandUI ShowBuildInfoFlags
62-
showBuildInfoCommand = CmdInstall.installCommand {
62+
showBuildInfoCommand :: CommandUI (NixStyleFlags ShowBuildInfoFlags)
63+
showBuildInfoCommand = CommandUI {
6364
commandName = "show-build-info",
6465
commandSynopsis = "Show project build information",
6566
commandUsage = usageAlternatives "show-build-info" [ "[TARGETS] [FLAGS]" ],
@@ -75,9 +76,7 @@ showBuildInfoCommand = CmdInstall.installCommand {
7576
++ " " ++ pname ++ " show-build-info ./pkgname \n"
7677
++ " Shows build information about the package located in './pkgname'\n"
7778
++ cmdCommonHelpTextNewBuildBeta,
78-
commandOptions = \showOrParseArgs ->
79-
Client.liftOptions buildInfoInstallCommandFlags (\pf flags -> flags { buildInfoInstallCommandFlags = pf }) (commandOptions CmdInstall.installCommand showOrParseArgs)
80-
++
79+
commandOptions = nixStyleOptions $ \_ ->
8180
[ option [] ["buildinfo-json-output"]
8281
"Write the result to the given file instead of stdout"
8382
buildInfoOutputFile (\pf flags -> flags { buildInfoOutputFile = pf })
@@ -87,28 +86,25 @@ showBuildInfoCommand = CmdInstall.installCommand {
8786
buildInfoUnitIds (\pf flags -> flags { buildInfoUnitIds = pf })
8887
(reqArg' "UNIT-ID" (Just . words) (fromMaybe []))
8988
],
90-
commandDefaultFlags = defaultShowBuildInfoFlags
91-
92-
}
89+
commandDefaultFlags = defaultNixStyleFlags defaultShowBuildInfoFlags
90+
}
9391

9492
data ShowBuildInfoFlags = ShowBuildInfoFlags
95-
{ buildInfoInstallCommandFlags :: (ConfigFlags, ConfigExFlags, InstallFlags, HaddockFlags, TestFlags, BenchmarkFlags, ClientInstallFlags)
96-
, buildInfoOutputFile :: Maybe FilePath
93+
{ buildInfoOutputFile :: Maybe FilePath
9794
, buildInfoUnitIds :: Maybe [String]
9895
}
9996

10097
defaultShowBuildInfoFlags :: ShowBuildInfoFlags
10198
defaultShowBuildInfoFlags = ShowBuildInfoFlags
102-
{ buildInfoInstallCommandFlags = (mempty, mempty, mempty, mempty, mempty, mempty, mempty)
103-
, buildInfoOutputFile = Nothing
99+
{ buildInfoOutputFile = Nothing
104100
, buildInfoUnitIds = Nothing
105101
}
106102

107103
-- | The @show-build-info@ exports information about a package and the compiler
108104
-- configuration used to build it as JSON, that can be used by other tooling.
109105
-- See "Distribution.Simple.ShowBuildInfo" for more information.
110-
showBuildInfoAction :: ShowBuildInfoFlags -> [String] -> GlobalFlags -> IO ()
111-
showBuildInfoAction (ShowBuildInfoFlags (configFlags, configExFlags, installFlags, haddockFlags, testFlags, benchmarkFlags, clientInstallFlags) fileOutput unitIds)
106+
showBuildInfoAction :: NixStyleFlags ShowBuildInfoFlags -> [String] -> GlobalFlags -> IO ()
107+
showBuildInfoAction flags@NixStyleFlags { extraFlags = (ShowBuildInfoFlags fileOutput unitIds), ..}
112108
targetStrings globalFlags = do
113109
baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand
114110
let baseCtx' = baseCtx
@@ -122,11 +118,10 @@ showBuildInfoAction (ShowBuildInfoFlags (configFlags, configExFlags, installFlag
122118
runProjectPreBuildPhase verbosity baseCtx' $ \elaboratedPlan -> do
123119
-- Interpret the targets on the command line as build targets
124120
-- (as opposed to say repl or haddock targets).
125-
targets <- either (reportTargetProblems verbosity) return
121+
targets <- either (reportShowBuildInfoTargetProblems verbosity) return
126122
$ resolveTargets
127123
selectPackageTargets
128124
selectComponentTarget
129-
TargetProblemCommon
130125
elaboratedPlan
131126
Nothing
132127
targetSelectors
@@ -139,12 +134,8 @@ showBuildInfoAction (ShowBuildInfoFlags (configFlags, configExFlags, installFlag
139134
where
140135
-- Default to silent verbosity otherwise it will pollute our json output
141136
verbosity = fromFlagOrDefault silent (configVerbosity configFlags)
142-
cliConfig = commandLineFlagsToProjectConfig
143-
globalFlags configFlags configExFlags
144-
installFlags clientInstallFlags
145-
haddockFlags
146-
testFlags
147-
benchmarkFlags
137+
cliConfig = commandLineFlagsToProjectConfig globalFlags flags
138+
mempty -- ClientInstallFlags, not needed here
148139

149140
-- Pretty nasty piecemeal out of json, but I can't see a way to retrieve output of the setupWrapper'd tasks
150141
showTargets :: Maybe FilePath -> Maybe [String] -> Verbosity -> ProjectBaseContext -> ProjectBuildContext -> Lock -> IO ()
@@ -187,12 +178,12 @@ showTargets fileOutput unitIds verbosity baseCtx buildCtx lock = do
187178
printer "]"
188179

189180
unitIdToFilePath :: UnitId -> FilePath
190-
unitIdToFilePath unitId = "build-info-" ++ display unitId ++ ".json"
181+
unitIdToFilePath unitId = "build-info-" ++ prettyShow unitId ++ ".json"
191182

192183
showInfo :: FilePath -> Verbosity -> ProjectBaseContext -> ProjectBuildContext -> Lock -> [ElaboratedConfiguredPackage] -> UnitId -> IO ()
193184
showInfo fileOutput verbosity baseCtx buildCtx lock pkgs targetUnitId =
194185
case mbPkg of
195-
Nothing -> die' verbosity $ "No unit " ++ display targetUnitId
186+
Nothing -> die' verbosity $ "No unit " ++ prettyShow targetUnitId
196187
Just pkg -> do
197188
let shared = elaboratedShared buildCtx
198189
install = elaboratedPlanOriginal buildCtx
@@ -221,8 +212,8 @@ showInfo fileOutput verbosity baseCtx buildCtx lock pkgs targetUnitId =
221212
(elabPkgDescription pkg) buildType'
222213
when (cabalVersion < mkVersion [3, 0, 0, 0])
223214
( die' verbosity $ "Only a Cabal version >= 3.0.0.0 is supported for this command.\n"
224-
++ "Found version: " ++ display cabalVersion ++ "\n"
225-
++ "For component: " ++ display targetUnitId
215+
++ "Found version: " ++ prettyShow cabalVersion ++ "\n"
216+
++ "For component: " ++ prettyShow targetUnitId
226217
)
227218
-- Configure the package if there's no existing config
228219
lbi <- tryGetPersistBuildConfig buildDir
@@ -260,7 +251,7 @@ showInfo fileOutput verbosity baseCtx buildCtx lock pkgs targetUnitId =
260251
-- tests\/benchmarks, fail if there are no such components
261252
--
262253
selectPackageTargets :: TargetSelector
263-
-> [AvailableTarget k] -> Either TargetProblem [k]
254+
-> [AvailableTarget k] -> Either TargetProblem' [k]
264255
selectPackageTargets targetSelector targets
265256

266257
-- If there are any buildable targets then we select those
@@ -293,33 +284,10 @@ selectPackageTargets targetSelector targets
293284
-- For the @show-build-info@ command we just need the basic checks on being buildable etc.
294285
--
295286
selectComponentTarget :: SubComponentTarget
296-
-> AvailableTarget k -> Either TargetProblem k
297-
selectComponentTarget subtarget =
298-
either (Left . TargetProblemCommon) Right
299-
. selectComponentTargetBasic subtarget
300-
301-
302-
-- | The various error conditions that can occur when matching a
303-
-- 'TargetSelector' against 'AvailableTarget's for the @show-build-info@ command.
304-
--
305-
data TargetProblem =
306-
TargetProblemCommon TargetProblemCommon
307-
308-
-- | The 'TargetSelector' matches targets but none are buildable
309-
| TargetProblemNoneEnabled TargetSelector [AvailableTarget ()]
310-
311-
-- | There are no targets at all
312-
| TargetProblemNoTargets TargetSelector
313-
deriving (Eq, Show)
287+
-> AvailableTarget k -> Either TargetProblem' k
288+
selectComponentTarget = selectComponentTargetBasic
314289

315-
reportTargetProblems :: Verbosity -> [TargetProblem] -> IO a
316-
reportTargetProblems verbosity =
317-
die' verbosity . unlines . map renderTargetProblem
318290

319-
renderTargetProblem :: TargetProblem -> String
320-
renderTargetProblem (TargetProblemCommon problem) =
321-
renderTargetProblemCommon "show-build-info" problem
322-
renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) =
323-
renderTargetProblemNoneEnabled "show-build-info" targetSelector targets
324-
renderTargetProblem(TargetProblemNoTargets targetSelector) =
325-
renderTargetProblemNoTargets "show-build-info" targetSelector
291+
reportShowBuildInfoTargetProblems :: Verbosity -> [TargetProblem'] -> IO a
292+
reportShowBuildInfoTargetProblems verbosity problems =
293+
reportTargetProblems verbosity "show-build-info" problems

cabal-install/Distribution/Client/Setup.hs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ module Distribution.Client.Setup
5151
, doctestCommand
5252
, copyCommand
5353
, registerCommand
54-
--, showBuildInfoCommand
54+
5555
, parsePackageArgs
5656
, liftOptions
5757
, yesNoOpt
@@ -100,6 +100,7 @@ import Distribution.Simple.Setup
100100
, HaddockFlags(..)
101101
, CleanFlags(..), DoctestFlags(..)
102102
, CopyFlags(..), RegisterFlags(..)
103+
, ShowBuildInfoFlags(..)
103104
, readPackageDbList, showPackageDbList
104105
, BooleanFlag(..), optionVerbosity
105106
, boolOpt, boolOpt', trueArg, falseArg
@@ -2674,7 +2675,7 @@ parsePackageArgs = traverse p where
26742675
Right pvc -> Right pvc
26752676
Left err -> Left $
26762677
show arg ++ " is not valid syntax for a package name or"
2677-
++ " package dependency. " ++ err
2678+
++ " package dependency. " ++ err
26782679

26792680
showRemoteRepo :: RemoteRepo -> String
26802681
showRemoteRepo = prettyShow
@@ -2702,17 +2703,11 @@ relevantConfigValuesText vs =
27022703
-- * Commands to support show-build-info
27032704
-- ------------------------------------------------------------
27042705

2705-
showBuildInfoCommand :: CommandUI (Cabal.ShowBuildInfoFlags, BuildExFlags)
2706+
showBuildInfoCommand :: CommandUI ShowBuildInfoFlags
27062707
showBuildInfoCommand = parent {
2707-
commandDefaultFlags = (commandDefaultFlags parent, mempty),
2708+
commandDefaultFlags = commandDefaultFlags parent,
27082709
commandOptions =
2709-
\showOrParseArgs -> liftOptions fst setFst
2710-
(commandOptions parent showOrParseArgs)
2711-
++
2712-
liftOptions snd setSnd (buildExOptions showOrParseArgs)
2710+
\showOrParseArgs -> commandOptions parent showOrParseArgs
27132711
}
27142712
where
2715-
setFst a (_,b) = (a,b)
2716-
setSnd b (a,_) = (a,b)
2717-
27182713
parent = Cabal.showBuildInfoCommand defaultProgramDb

cabal-install/main/Main.hs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -389,23 +389,6 @@ buildAction buildFlags extraArgs globalFlags = do
389389
nixShell verbosity distPref globalFlags config $ do
390390
build verbosity config' distPref buildFlags extraArgs
391391

392-
buildAction :: (BuildFlags, BuildExFlags) -> [String] -> Action
393-
buildAction (buildFlags, buildExFlags) extraArgs globalFlags = do
394-
let verbosity = fromFlagOrDefault normal (buildVerbosity buildFlags)
395-
noAddSource = fromFlagOrDefault DontSkipAddSourceDepsCheck
396-
(buildOnly buildExFlags)
397-
(useSandbox, config) <- loadConfigOrSandboxConfig verbosity globalFlags
398-
distPref <- findSavedDistPref config (buildDistPref buildFlags)
399-
-- Calls 'configureAction' to do the real work, so nothing special has to be
400-
-- done to support sandboxes.
401-
config' <-
402-
reconfigure configureAction
403-
verbosity distPref useSandbox noAddSource (buildNumJobs buildFlags)
404-
mempty [] globalFlags config
405-
nixShell verbosity distPref globalFlags config $ do
406-
maybeWithSandboxDirOnSearchPath useSandbox $
407-
build verbosity config' distPref buildFlags extraArgs
408-
409392

410393
-- | Actually do the work of building the package. This is separate from
411394
-- 'buildAction' so that 'testAction' and 'benchmarkAction' do not invoke

cabal-testsuite/src/Test/Cabal/Prelude.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import Distribution.Simple.Program.Db
2929
import Distribution.Simple.Program
3030
import Distribution.System (OS(Windows,Linux,OSX), buildOS)
3131
import Distribution.Simple.Utils
32-
( withFileContents, withTempDirectory, tryFindPackageDesc)
32+
( withFileContents, withTempDirectory, tryFindPackageDesc )
3333
import Distribution.Simple.Configure
3434
( getPersistBuildConfig )
3535
import Distribution.Version

0 commit comments

Comments
 (0)