Skip to content

Commit

Permalink
Merge pull request haskell#3828 from ezyang/pr/output-profiling
Browse files Browse the repository at this point in the history
Print profiling status when displaying install plan.
  • Loading branch information
ezyang authored Sep 19, 2016
2 parents 757e84f + 52e8bfd commit 56cff2d
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions cabal-install/Distribution/Client/ProjectOrchestration.hs
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,14 @@ import Distribution.Package
import qualified Distribution.PackageDescription as PD
import Distribution.PackageDescription (FlagAssignment)
import Distribution.Simple.Setup (HaddockFlags)
import qualified Distribution.Simple.Setup as Setup
import Distribution.Simple.Command (commandShowOptions)

import Distribution.Simple.Utils (die, notice, noticeNoWrap, debug)
import Distribution.Verbosity
import Distribution.Text

import qualified Data.Monoid as Mon
import qualified Data.Set as Set
import qualified Data.Map as Map
import Data.Map (Map)
Expand All @@ -92,6 +95,7 @@ import Data.Maybe
import Data.Either
import Control.Exception (Exception(..), throwIO)
import System.Exit (ExitCode(..), exitFailure)
import qualified System.Process.Internals as Process (translate)
#ifdef MIN_VERSION_unix
import System.Posix.Signals (sigKILL, sigSEGV)
#endif
Expand Down Expand Up @@ -428,6 +432,7 @@ printPlan :: Verbosity -> ProjectBuildContext -> IO ()
printPlan verbosity
ProjectBuildContext {
elaboratedPlan,
elaboratedShared,
pkgsBuildStatus,
buildSettings = BuildTimeSettings{buildSettingDryRun}
}
Expand Down Expand Up @@ -466,6 +471,7 @@ printPlan verbosity
" (" ++ maybe "custom" display (compComponentName comp) ++ ")"
) ++
showFlagAssignment (nonDefaultFlags elab) ++
showConfigureFlags elab ++
let buildStatus = pkgsBuildStatus Map.! installedUnitId elab in
" (" ++ showBuildStatus buildStatus ++ ")"

Expand All @@ -491,6 +497,40 @@ printPlan verbosity
showFlagValue (f, False) = '-' : showFlagName f
showFlagName (PD.FlagName f) = f

showConfigureFlags elab =
let fullConfigureFlags
= setupHsConfigureFlags
(ReadyPackage elab)
elaboratedShared
verbosity
"$builddir"
-- | Given a default value @x@ for a flag, nub @Flag x@
-- into @NoFlag@. This gives us a tidier command line
-- rendering.
nubFlag :: Eq a => a -> Setup.Flag a -> Setup.Flag a
nubFlag x (Setup.Flag x') | x == x' = Setup.NoFlag
nubFlag _ f = f
-- TODO: Closely logic from 'configureProfiling'.
tryExeProfiling = Setup.fromFlagOrDefault False
(configProf fullConfigureFlags)
tryLibProfiling = Setup.fromFlagOrDefault False
(Mon.mappend (configProf fullConfigureFlags)
(configProfExe fullConfigureFlags))
partialConfigureFlags
= Mon.mempty {
configProf =
nubFlag False (configProf fullConfigureFlags),
configProfExe =
nubFlag tryExeProfiling (configProfExe fullConfigureFlags),
configProfLib =
nubFlag tryLibProfiling (configProfLib fullConfigureFlags)
-- Maybe there are more we can add
}
in unwords . ("":) . map Process.translate $
commandShowOptions
(Setup.configureCommand (pkgConfigCompilerProgs elaboratedShared))
partialConfigureFlags

showBuildStatus status = case status of
BuildStatusPreExisting -> "already installed"
BuildStatusDownload {} -> "requires download & build"
Expand Down

0 comments on commit 56cff2d

Please sign in to comment.