[commit: Cabal] master: Add support to SetupWrapper for logging setup output to a handle (c4668fd)
Ian Lynagh
igloo at earth.li
Fri Jun 24 01:56:32 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/c4668fd4bcd29af7825b0ff13d7156bbfe667b7f
>---------------------------------------------------------------
commit c4668fd4bcd29af7825b0ff13d7156bbfe667b7f
Author: Duncan Coutts <duncan at haskell.org>
Date: Wed Jul 30 12:48:51 2008 +0000
Add support to SetupWrapper for logging setup output to a handle
or for using a diiferent initial working directory. We already
need to use a different working dir and this would allow us to
spawn multiple setup processes for parallel builds each with
their own working dir. Also, we want to be able to capture the
output of builds. At the moment our internal logging framework
is not capable of redirecting, but if we launch a process we
redirect its output to a file. This should be useful for build
reporting where we want logs for each individual package.
>---------------------------------------------------------------
cabal-install/Distribution/Client/Install.hs | 4 ++-
cabal-install/Distribution/Client/SetupWrapper.hs | 24 +++++++++++++++++---
2 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs
index 40d6e0f..9aeb6f5 100644
--- a/cabal-install/Distribution/Client/Install.hs
+++ b/cabal-install/Distribution/Client/Install.hs
@@ -159,7 +159,9 @@ installWithPlanner planner verbosity packageDB repos comp conf configFlags insta
useProgramConfig = conf,
useDistPref = Cabal.fromFlagOrDefault
(useDistPref defaultSetupScriptOptions)
- (Cabal.configDistPref configFlags)
+ (Cabal.configDistPref configFlags),
+ useLoggingHandle = Nothing,
+ useWorkingDir = Nothing
}
dryRun = Cabal.fromFlag (installDryRun installFlags)
miscOptions = InstallMisc {
diff --git a/cabal-install/Distribution/Client/SetupWrapper.hs b/cabal-install/Distribution/Client/SetupWrapper.hs
index 538bdce..22cfde1 100644
--- a/cabal-install/Distribution/Client/SetupWrapper.hs
+++ b/cabal-install/Distribution/Client/SetupWrapper.hs
@@ -47,7 +47,7 @@ import Distribution.Simple.GHC
import qualified Distribution.Simple.PackageIndex as PackageIndex
import Distribution.Simple.PackageIndex (PackageIndex)
import Distribution.Simple.Utils
- ( die, debug, cabalVersion, defaultPackageDesc, comparing
+ ( die, debug, info, cabalVersion, defaultPackageDesc, comparing
, rawSystemExit, createDirectoryIfMissingVerbose )
import Distribution.Text
( display )
@@ -57,6 +57,9 @@ import Distribution.Verbosity
import System.Directory ( doesFileExist, getModificationTime )
import System.FilePath ( (</>), (<.>) )
import System.IO.Error ( isDoesNotExistError )
+import System.IO ( Handle )
+import System.Exit ( ExitCode(..), exitWith )
+import System.Process ( runProcess, waitForProcess )
import Control.Monad ( when, unless )
import Control.Exception ( evaluate )
import Data.List ( maximumBy )
@@ -69,7 +72,9 @@ data SetupScriptOptions = SetupScriptOptions {
useCompiler :: Maybe Compiler,
usePackageIndex :: Maybe (PackageIndex InstalledPackageInfo),
useProgramConfig :: ProgramConfiguration,
- useDistPref :: FilePath
+ useDistPref :: FilePath,
+ useLoggingHandle :: Maybe Handle,
+ useWorkingDir :: Maybe FilePath
}
defaultSetupScriptOptions :: SetupScriptOptions
@@ -78,7 +83,9 @@ defaultSetupScriptOptions = SetupScriptOptions {
useCompiler = Nothing,
usePackageIndex = Nothing,
useProgramConfig = emptyProgramConfiguration,
- useDistPref = defaultDistPref
+ useDistPref = defaultDistPref,
+ useLoggingHandle = Nothing,
+ useWorkingDir = Nothing
}
setupWrapper :: Verbosity
@@ -264,7 +271,16 @@ externalSetupMethod options verbosity pkg bt mkargs = do
where cabalPkgid = PackageIdentifier "Cabal" cabalLibVersion
invokeSetupScript :: [String] -> IO ()
- invokeSetupScript args = rawSystemExit verbosity setupProgFile args
+ invokeSetupScript args = case useLoggingHandle options of
+ Nothing -> rawSystemExit verbosity setupProgFile args
+ Just logHandle -> do
+ info verbosity $ unwords (setupProgFile : args)
+ info verbosity $ "Redirecting build log to " ++ show logHandle
+ process <- runProcess setupProgFile args
+ (useWorkingDir options) Nothing
+ Nothing (Just logHandle) (Just logHandle)
+ exitCode <- waitForProcess process
+ unless (exitCode == ExitSuccess) $ exitWith exitCode
-- ------------------------------------------------------------
-- * Utils
More information about the Cvs-libraries
mailing list