Skip to content

Commit ff192d2

Browse files
authored
Merge of #11339
2 parents 131fb0d + 4e1d389 commit ff192d2

13 files changed

Lines changed: 130 additions & 9 deletions

File tree

Cabal/Cabal.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ library
100100
Distribution.Compat.Prelude.Internal
101101
Distribution.Compat.Process
102102
Distribution.Compat.Stack
103+
Distribution.Compat.SysInfo
103104
Distribution.Compat.Time
104105
Distribution.Make
105106
Distribution.PackageDescription.Check
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{-# LANGUAGE CPP #-}
2+
3+
module Distribution.Compat.SysInfo
4+
( fullCompilerVersion
5+
) where
6+
7+
import Data.Version (Version)
8+
import qualified System.Info as SI
9+
10+
fullCompilerVersion :: Version
11+
#if MIN_VERSION_base(4,15,0)
12+
fullCompilerVersion = SI.fullCompilerVersion
13+
#else
14+
fullCompilerVersion = SI.compilerVersion
15+
#endif

Cabal/src/Distribution/Make.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ defaultMainHelperWithHandles verbHandles args = do
105105
case commandParse of
106106
_
107107
| fromFlag (globalVersion flags) -> printVersion
108+
| fromFlag (globalFullVersion flags) -> printFullVersion
108109
| fromFlag (globalNumericVersion flags) -> printNumericVersion
109110
CommandHelp help -> printHelp help
110111
CommandList opts -> printOptionsList opts
@@ -122,6 +123,16 @@ defaultMainHelperWithHandles verbHandles args = do
122123
hPutStrLn outHandle $
123124
"Cabal library version "
124125
++ prettyShow cabalVersion
126+
printFullVersion =
127+
hPutStrLn outHandle $
128+
"Cabal library version "
129+
++ prettyShow cabalVersion
130+
++ cabalGitInfo'
131+
++ "\nwith "
132+
++ cabalCompilerInfo
133+
cabalGitInfo'
134+
| null cabalGitInfo = []
135+
| otherwise = ' ' : cabalGitInfo
125136
progs = defaultProgramDb
126137
commands =
127138
[ configureCommand progs `commandAddAction` configureAction verbHandles

Cabal/src/Distribution/Simple.hs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ defaultMainHelperWithHandles verbHandles hooks args =
329329
case commandParse of
330330
_
331331
| fromFlag (globalVersion globalFlags) -> printVersion
332+
| fromFlag (globalFullVersion globalFlags) -> printFullVersion
332333
| fromFlag (globalNumericVersion globalFlags) -> printNumericVersion
333334
CommandHelp help -> printHelp help
334335
CommandList opts -> printOptionsList opts
@@ -347,7 +348,16 @@ defaultMainHelperWithHandles verbHandles hooks args =
347348
hPutStrLn outHandle $
348349
"Cabal library version "
349350
++ prettyShow cabalVersion
350-
351+
printFullVersion =
352+
hPutStrLn outHandle $
353+
"Cabal library version "
354+
++ prettyShow cabalVersion
355+
++ cabalGitInfo'
356+
++ "\nwith "
357+
++ cabalCompilerInfo
358+
cabalGitInfo'
359+
| null cabalGitInfo = []
360+
| otherwise = ' ' : cabalGitInfo
351361
progs = addKnownPrograms (hookedPrograms hooks) defaultProgramDb
352362
addAction
353363
:: CommandUI flags

Cabal/src/Distribution/Simple/Setup/Global.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import Distribution.Utils.Path
4444
-- | Flags that apply at the top level, not to any sub-command.
4545
data GlobalFlags = GlobalFlags
4646
{ globalVersion :: Flag Bool
47+
, globalFullVersion :: Flag Bool
4748
, globalNumericVersion :: Flag Bool
4849
, globalWorkingDir :: Flag (SymbolicPath CWD (Dir Pkg))
4950
}
@@ -53,6 +54,7 @@ defaultGlobalFlags :: GlobalFlags
5354
defaultGlobalFlags =
5455
GlobalFlags
5556
{ globalVersion = Flag False
57+
, globalFullVersion = Flag False
5658
, globalNumericVersion = Flag False
5759
, globalWorkingDir = NoFlag
5860
}
@@ -101,6 +103,13 @@ globalCommand commands =
101103
globalVersion
102104
(\v flags -> flags{globalVersion = v})
103105
trueArg
106+
, option
107+
[]
108+
["full-version"]
109+
"Print the version, Git revision if available, and compiler information"
110+
globalFullVersion
111+
(\v flags -> flags{globalFullVersion = v})
112+
trueArg
104113
, option
105114
[]
106115
["numeric-version"]

Cabal/src/Distribution/Simple/Utils.hs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
module Distribution.Simple.Utils
3434
( cabalVersion
3535
, cabalGitInfo
36+
, cabalCompilerInfo
3637

3738
-- * logging and errors
3839
, dieNoVerbosity
@@ -213,6 +214,7 @@ import Distribution.Compat.Internal.TempFile
213214
import Distribution.Compat.Lens (Lens', over)
214215
import Distribution.Compat.Prelude
215216
import Distribution.Compat.Stack
217+
import Distribution.Compat.SysInfo as SIC
216218
import Distribution.ModuleName as ModuleName
217219
import Distribution.Simple.Errors
218220
import Distribution.Simple.PreProcess.Types
@@ -244,6 +246,7 @@ import Data.Typeable
244246

245247
import qualified Control.Exception as Exception
246248
import Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime)
249+
import qualified Data.Version as DV
247250
import Distribution.Compat.Process (proc)
248251
import Foreign.C.Error (Errno (..), ePIPE)
249252
import qualified GHC.IO.Exception as GHC
@@ -294,6 +297,7 @@ import System.IO.Error
294297
import System.IO.Unsafe
295298
( unsafeInterleaveIO
296299
)
300+
import qualified System.Info as SI
297301
import qualified System.Process as Process
298302
import qualified Text.PrettyPrint as Disp
299303

@@ -331,20 +335,35 @@ cabalGitInfo = if giHash' == ""
331335
else concat [ "(commit "
332336
, giHash'
333337
, branchInfo
334-
, ", "
335-
, either (const "") giCommitDate gi'
338+
, either (const "") ((", " ++) . giCommitDate) gi'
336339
, ")"
337340
]
338341
where
339342
gi' = $$tGitInfoCwdTry
340343
giHash' = take 7 . either (const "") giHash $ gi'
344+
branch = either id giBranch gi'
341345
branchInfo | isLeft gi' = ""
342-
| either id giBranch gi' == "master" = ""
343-
| otherwise = " on " <> either id giBranch gi'
346+
| branch == "master" = ""
347+
| otherwise = " on " <> branch
344348
#else
345349
cabalGitInfo = ""
346350
#endif
347351

352+
-- |
353+
-- `Cabal` compiler information, reported by `--version-full` but otherwise
354+
-- unused.
355+
cabalCompilerInfo :: String
356+
cabalCompilerInfo =
357+
concat
358+
[ SI.compilerName
359+
, " "
360+
, intercalate "." (map show (DV.versionBranch SIC.fullCompilerVersion))
361+
, " on "
362+
, SI.os
363+
, " "
364+
, SI.arch
365+
]
366+
348367
-- ----------------------------------------------------------------------------
349368
-- Exception and logging utils
350369

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ instance Semigroup SavedConfig where
359359
combinedSavedGlobalFlags =
360360
GlobalFlags
361361
{ globalVersion = combine globalVersion
362+
, globalFullVersion = combine globalFullVersion
362363
, globalNumericVersion = combine globalNumericVersion
363364
, globalConfigFile = combine globalConfigFile
364365
, globalConstraintsFile = combine globalConstraintsFile

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ import qualified Hackage.Security.Util.Pretty as Sec
8181
-- | Flags that apply at the top level, not to any sub-command.
8282
data GlobalFlags = GlobalFlags
8383
{ globalVersion :: Flag Bool
84+
, globalFullVersion :: Flag Bool
8485
, globalNumericVersion :: Flag Bool
8586
, globalConfigFile :: Flag FilePath
8687
, globalConstraintsFile :: Flag FilePath
@@ -103,6 +104,7 @@ defaultGlobalFlags :: GlobalFlags
103104
defaultGlobalFlags =
104105
GlobalFlags
105106
{ globalVersion = Flag False
107+
, globalFullVersion = Flag False
106108
, globalNumericVersion = Flag False
107109
, globalConfigFile = mempty
108110
, globalConstraintsFile = mempty

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ import Distribution.Simple.Program.Db (reconfigurePrograms)
226226
import qualified Distribution.Simple.Setup as Cabal
227227
import Distribution.Simple.Utils
228228
( VerboseException
229+
, cabalCompilerInfo
229230
, cabalGitInfo
230231
, cabalVersion
231232
, createDirectoryIfMissingVerbose
@@ -351,6 +352,8 @@ mainWorker args = do
351352
_
352353
| fromFlagOrDefault False (globalVersion globalFlags) ->
353354
printVersion
355+
| fromFlagOrDefault False (globalFullVersion globalFlags) ->
356+
printFullVersion
354357
| fromFlagOrDefault False (globalNumericVersion globalFlags) ->
355358
printNumericVersion
356359
CommandHelp help -> printCommandHelp help
@@ -421,6 +424,13 @@ mainWorker args = do
421424
printErrors errs = dieNoVerbosity $ intercalate "\n" errs
422425
printNumericVersion = putStrLn $ display cabalInstallVersion
423426
printVersion =
427+
putStrLn $
428+
"cabal-install version "
429+
++ display cabalInstallVersion
430+
++ "\ncompiled using version "
431+
++ display cabalVersion
432+
++ " of the Cabal library "
433+
printFullVersion =
424434
putStrLn $
425435
"cabal-install version "
426436
++ display cabalInstallVersion
@@ -429,6 +439,10 @@ mainWorker args = do
429439
++ display cabalVersion
430440
++ " of the Cabal library "
431441
++ cabalGitInfo'
442+
++ "\nwith "
443+
-- it's impossible for cabal-install to have been built with a different compiler
444+
-- from Cabal, so just reuse its info
445+
++ cabalCompilerInfo
432446
where
433447
cabalInstallGitInfo'
434448
| null cabalInstallGitInfo = ""

cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,7 @@ convertToLegacySharedConfig
984984
globalFlags =
985985
GlobalFlags
986986
{ globalVersion = mempty
987+
, globalFullVersion = mempty
987988
, globalNumericVersion = mempty
988989
, globalConfigFile = projectConfigConfigFile
989990
, globalConstraintsFile = mempty

0 commit comments

Comments
 (0)