Skip to content

Commit c44cb87

Browse files
committed
WIP: use cache file for generating jsons while building
1 parent 47ddffa commit c44cb87

File tree

2 files changed

+37
-32
lines changed

2 files changed

+37
-32
lines changed

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module Distribution.Client.CmdShowBuildInfo (
88
) where
99

1010
import Distribution.Client.Compat.Prelude
11-
( catMaybes )
11+
( catMaybes, for )
1212
import Distribution.Client.ProjectOrchestration
1313
import Distribution.Client.CmdErrorMessages
1414
import Distribution.Client.TargetProblem
@@ -32,14 +32,16 @@ import Distribution.Client.ProjectPlanning.Types
3232
import Distribution.Client.NixStyleOptions
3333
( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags )
3434
import Distribution.Client.DistDirLayout
35-
( distProjectRootDirectory )
35+
( distProjectRootDirectory, DistDirLayout (distProjectCacheDirectory) )
3636

3737
import Distribution.Simple.ShowBuildInfo
3838
import Distribution.Utils.Json
3939

4040
import Data.Either
4141
import qualified Data.Text as T
4242
import qualified Data.Text.IO as T
43+
import System.FilePath
44+
import Distribution.Types.UnitId (unUnitId)
4345

4446
showBuildInfoCommand :: CommandUI (NixStyleFlags ShowBuildInfoFlags)
4547
showBuildInfoCommand = CommandUI {
@@ -108,13 +110,13 @@ showBuildInfoAction flags@NixStyleFlags { extraFlags = (ShowBuildInfoFlags fileO
108110
buildOutcomes <- runProjectBuildPhase verbosity baseCtx buildCtx
109111
runProjectPostBuildPhase verbosity baseCtx buildCtx buildOutcomes
110112

111-
-- We can ignore the errors here, since runProjectPostBuildPhase should
112-
-- have already died and reported them if they exist
113-
let (_errs, buildResults) = partitionEithers $ Map.elems buildOutcomes
114-
115-
let componentBuildInfos =
116-
concatMap T.lines $ -- Component infos are returned each on a newline
117-
catMaybes (buildResultBuildInfo <$> buildResults)
113+
let tm = targetsMap buildCtx
114+
let units = Map.keys tm
115+
let layout = distDirLayout baseCtx
116+
let dir = distProjectCacheDirectory layout </> "buildinfo"
117+
componentBuildInfos <- for units $ \unit -> do
118+
let fp = dir </> (unUnitId unit) <.> "json"
119+
T.strip <$> T.readFile fp
118120

119121
let compilerInfo = mkCompilerInfo
120122
(pkgConfigCompilerProgs (elaboratedShared buildCtx))
@@ -135,12 +137,12 @@ showBuildInfoAction flags@NixStyleFlags { extraFlags = (ShowBuildInfoFlags fileO
135137
-- Default to silent verbosity otherwise it will pollute our json output
136138
verbosity = fromFlagOrDefault silent (configVerbosity configFlags)
137139
-- Also shut up haddock since it dumps warnings to stdout
138-
flags' = flags { haddockFlags = haddockFlags { haddockVerbosity = Flag silent }
139-
, configFlags = configFlags { Cabal.configTests = Flag True
140-
, Cabal.configBenchmarks = Flag True
141-
}
142-
}
143-
cliConfig = commandLineFlagsToProjectConfig globalFlags flags'
140+
-- flags' = flags { haddockFlags = haddockFlags { haddockVerbosity = Flag silent }
141+
-- , configFlags = configFlags { Cabal.configTests = Flag True
142+
-- , Cabal.configBenchmarks = Flag True
143+
-- }
144+
-- }
145+
cliConfig = commandLineFlagsToProjectConfig globalFlags flags
144146
mempty -- ClientInstallFlags, not needed here
145147

146148
-- | This defines what a 'TargetSelector' means for the @show-build-info@ command.

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

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,6 +1193,7 @@ buildInplaceUnpackedPackage :: Verbosity
11931193
buildInplaceUnpackedPackage verbosity
11941194
distDirLayout@DistDirLayout {
11951195
distTempDirectory,
1196+
distProjectCacheDirectory,
11961197
distPackageCacheDirectory,
11971198
distDirectory
11981199
}
@@ -1206,7 +1207,6 @@ buildInplaceUnpackedPackage verbosity
12061207
rpkg@(ReadyPackage pkg)
12071208
buildStatus
12081209
srcdir builddir = do
1209-
12101210
--TODO: [code cleanup] there is duplication between the
12111211
-- distdirlayout and the builddir here builddir is not
12121212
-- enough, we also need the per-package cachedir
@@ -1261,6 +1261,16 @@ buildInplaceUnpackedPackage verbosity
12611261
| otherwise
12621262
-> listSimple
12631263

1264+
-- Write the json to a temporary file to read it, since stdout can get
1265+
-- cluttered
1266+
let dir = distProjectCacheDirectory </> "buildinfo"
1267+
let fp = dir </> (unUnitId $ elabUnitId pkg) <.> "json"
1268+
createDirectoryIfMissing True dir
1269+
setupInteractive
1270+
buildInfoCommand
1271+
(\v -> (buildInfoFlags v) { Cabal.buildInfoOutputFile = Just fp })
1272+
buildInfoArgs
1273+
12641274
let dep_monitors = map monitorFileHashed
12651275
$ elabInplaceDependencyBuildCacheFiles
12661276
distDirLayout pkgshared plan pkg
@@ -1301,7 +1311,7 @@ buildInplaceUnpackedPackage verbosity
13011311
--
13021312
whenRepl $
13031313
annotateFailureNoLog ReplFailed $
1304-
setupInteractive replCommand replFlags replArgs
1314+
setupInteractive replCommand replFlags replArgs
13051315

13061316
-- Haddock phase
13071317
whenHaddock $
@@ -1317,22 +1327,14 @@ buildInplaceUnpackedPackage verbosity
13171327
notice verbosity $ "Documentation tarball created: " ++ dest
13181328

13191329
-- Build info phase
1320-
buildInfo <- whenBuildInfo $
1321-
-- Write the json to a temporary file to read it, since stdout can get
1322-
-- cluttered
1323-
withTempDirectory verbosity distTempDirectory "build-info" $ \dir -> do
1324-
let fp = dir </> "out"
1325-
setupInteractive
1326-
buildInfoCommand
1327-
(\v -> (buildInfoFlags v) { Cabal.buildInfoOutputFile = Just fp })
1328-
buildInfoArgs
1329-
Just <$> T.readFile fp
1330+
-- buildInfo <- whenBuildInfo $
1331+
13301332

13311333
return BuildResult {
13321334
buildResultDocs = docsResult,
13331335
buildResultTests = testsResult,
13341336
buildResultLogFile = Nothing,
1335-
buildResultBuildInfo = buildInfo
1337+
buildResultBuildInfo = Nothing
13361338
}
13371339

13381340
where
@@ -1351,7 +1353,8 @@ buildInplaceUnpackedPackage verbosity
13511353
| null (elabBuildTargets pkg)
13521354
-- NB: we have to build the test/bench suite!
13531355
, null (elabTestTargets pkg)
1354-
, null (elabBenchTargets pkg) = return ()
1356+
, null (elabBenchTargets pkg)
1357+
, null (elabBuildInfoTargets pkg) = return ()
13551358
| otherwise = action
13561359

13571360
whenTest action
@@ -1370,9 +1373,9 @@ buildInplaceUnpackedPackage verbosity
13701373
| hasValidHaddockTargets pkg = action
13711374
| otherwise = return ()
13721375

1373-
whenBuildInfo action
1374-
| null (elabBuildInfoTargets pkg) = return Nothing
1375-
| otherwise = action
1376+
-- whenBuildInfo action
1377+
-- | null (elabBuildInfoTargets pkg) = return Nothing
1378+
-- | otherwise = action
13761379

13771380
whenReRegister action
13781381
= case buildStatus of

0 commit comments

Comments
 (0)