Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/41d28fe060e00600a3c1328739d4830a35b69bd8 >--------------------------------------------------------------- commit 41d28fe060e00600a3c1328739d4830a35b69bd8 Author: Duncan Coutts <[email protected]> Date: Fri Aug 8 12:54:01 2008 +0000 Implement --build-reports flag >--------------------------------------------------------------- cabal-install/Distribution/Client/Install.hs | 46 ++++++++++++++++++------- 1 files changed, 33 insertions(+), 13 deletions(-) diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs index 2449fbf..6430639 100644 --- a/cabal-install/Distribution/Client/Install.hs +++ b/cabal-install/Distribution/Client/Install.hs @@ -17,14 +17,16 @@ module Distribution.Client.Install ( import Data.List ( unfoldr ) +import Data.Maybe + ( isJust ) import Control.Exception as Exception ( handle, Exception ) import Control.Monad ( when, unless ) import System.Directory - ( getTemporaryDirectory, doesFileExist ) + ( getTemporaryDirectory, doesFileExist, createDirectoryIfMissing ) import System.FilePath - ( (</>), (<.>) ) + ( (</>), (<.>), takeDirectory ) import System.IO ( openFile, IOMode(AppendMode) ) @@ -40,6 +42,8 @@ import qualified Distribution.Client.InstallPlan as InstallPlan import Distribution.Client.InstallPlan (InstallPlan) import Distribution.Client.Setup ( InstallFlags(..), configureCommand, filterConfigureFlags ) +import Distribution.Client.Config + ( defaultLogsDir ) import Distribution.Client.Tar (extractTarGzFile) import Distribution.Client.Types as Available ( UnresolvedDependency(..), AvailablePackage(..) @@ -83,7 +87,8 @@ import Distribution.System ( buildOS, buildArch ) import Distribution.Text ( display ) -import Distribution.Verbosity (Verbosity, showForCabal, verbose) +import Distribution.Verbosity as Verbosity + ( Verbosity, showForCabal, verbose ) import Distribution.Simple.BuildPaths ( exeExtension ) data InstallMisc = InstallMisc { @@ -149,13 +154,14 @@ installWithPlanner planner verbosity packageDB repos comp conf configFlags insta printDryRun verbosity installPlan unless dryRun $ do + logsDir <- defaultLogsDir installPlan' <- executeInstallPlan installPlan $ \cpkg -> installConfiguredPackage configFlags cpkg $ \configFlags' apkg -> installAvailablePackage verbosity apkg $ \pkg mpath -> installUnpackedPackage verbosity (setupScriptOptions installed) miscOptions configFlags' installFlags - pkg mpath useLogFile + pkg mpath (useLogFile logsDir) let buildReports = BuildReports.fromInstallPlan installPlan' BuildReports.storeAnonymous buildReports @@ -175,9 +181,13 @@ installWithPlanner planner verbosity packageDB repos comp conf configFlags insta useLoggingHandle = Nothing, useWorkingDir = Nothing } - useLogFile :: Maybe (PackageIdentifier -> FilePath) - useLogFile = fmap substLogFileName - (Cabal.flagToMaybe (installLogFile installFlags)) + useLogFile :: FilePath -> Maybe (PackageIdentifier -> FilePath) + useLogFile logsDir = fmap substLogFileName logFileTemplate + where + logFileTemplate + | Cabal.fromFlagOrDefault False (installBuildReports installFlags) + = Just $ logsDir </> "$pkgid" <.> "log" + | otherwise = Cabal.flagToMaybe (installLogFile installFlags) substLogFileName path pkg = fromPathTemplate . substPathTemplate env . toPathTemplate @@ -375,7 +385,7 @@ installUnpackedPackage verbosity scriptOptions miscOptions -- Configure phase onFailure ConfigureFailed $ do - setup configureCommand (filterConfigureFlags configFlags) + setup configureCommand configureFlags -- Build phase onFailure BuildFailed $ do @@ -399,26 +409,36 @@ installUnpackedPackage verbosity scriptOptions miscOptions return (Right (BuildOk docsResult testsResult)) where + configureFlags = filterConfigureFlags configFlags { + Cabal.configVerbosity = Cabal.toFlag verbosity' + } buildCommand = Cabal.buildCommand defaultProgramConfiguration buildFlags _ = Cabal.emptyBuildFlags { Cabal.buildDistPref = Cabal.configDistPref configFlags, - Cabal.buildVerbosity = Cabal.toFlag verbosity + Cabal.buildVerbosity = Cabal.toFlag verbosity' } shouldHaddock = Cabal.fromFlagOrDefault False (installDocumentation installConfigFlags) haddockFlags _ = Cabal.emptyHaddockFlags { Cabal.haddockDistPref = Cabal.configDistPref configFlags, - Cabal.haddockVerbosity = Cabal.toFlag verbosity + Cabal.haddockVerbosity = Cabal.toFlag verbosity' } installFlags _ = Cabal.emptyInstallFlags { Cabal.installDistPref = Cabal.configDistPref configFlags, - Cabal.installVerbosity = Cabal.toFlag verbosity + Cabal.installVerbosity = Cabal.toFlag verbosity' } + verbosity' | isJust useLogFile = max Verbosity.verbose verbosity + | otherwise = verbosity setup cmd flags = do logFileHandle <- case useLogFile of Nothing -> return Nothing - Just logFileName -> fmap Just $ - openFile (logFileName (packageId pkg)) AppendMode + Just mkLogFileName -> do + let logFileName = mkLogFileName (packageId pkg) + logDir = takeDirectory logFileName + unless (null logDir) $ createDirectoryIfMissing True logDir + logFile <- openFile logFileName AppendMode + return (Just logFile) + setupWrapper verbosity scriptOptions { useLoggingHandle = logFileHandle , useWorkingDir = workingDir } _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
