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 <[email protected]> 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 _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
