diff options
Diffstat (limited to 'src/CabalHelper/Compiletime')
-rw-r--r-- | src/CabalHelper/Compiletime/Process.hs | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/CabalHelper/Compiletime/Process.hs b/src/CabalHelper/Compiletime/Process.hs index 948d455..34404ab 100644 --- a/src/CabalHelper/Compiletime/Process.hs +++ b/src/CabalHelper/Compiletime/Process.hs @@ -40,32 +40,45 @@ import CabalHelper.Compiletime.Types import CabalHelper.Compiletime.Log readProcess' :: Verbose => FilePath -> [String] -> String -> IO String -readProcess' exe args inp = do - vLog $ intercalate " " $ map formatProcessArg (exe:args) - outp <- readProcess exe args inp +readProcess' exe args inp = + readProcessStderr Nothing [] exe args inp + +readProcessStderr :: Verbose => Maybe FilePath -> [(String, EnvOverride)] + -> FilePath -> [String] -> String -> IO String +readProcessStderr mcwd env exe args inp = do + logProcessCall mcwd env exe args + env' <- execEnvOverrides env + outp <- readCreateProcess (proc exe args) + { cwd = mcwd + , env = if env == [] then Nothing else Just env' + } inp vLog $ unlines $ map ("=> "++) $ lines outp return outp - -- | Essentially 'System.Process.callProcess' but returns exit code, has -- additional options and logging to stderr when verbosity is enabled. callProcessStderr' :: Verbose => Maybe FilePath -> [(String, EnvOverride)] -> FilePath -> [String] -> IO ExitCode -callProcessStderr' mwd env exe args = do - let cd = case mwd of - Nothing -> []; Just wd -> [ "cd", formatProcessArg wd++";" ] - vLog $ intercalate " " $ - cd ++ map formatProcessArg (map (\(k,v) -> k ++ "=" ++ show v) env ++ exe:args) - +callProcessStderr' mcwd env exe args = do + logProcessCall mcwd env exe args env' <- execEnvOverrides env (_, _, _, h) <- createProcess (proc exe args) { std_out = UseHandle stderr , env = if env == [] then Nothing else Just env' - , cwd = mwd + , cwd = mcwd } waitForProcess h +logProcessCall :: Verbose => Maybe FilePath -> [(String, EnvOverride)] + -> FilePath -> [String] -> IO () +logProcessCall mcwd env exe args = do + vLog $ intercalate " " $ cd ++ env_args ++ map formatProcessArg (exe:args) + where + env_args = map (\(k,v) -> k ++ "=" ++ show v) env + cd = case mcwd of + Nothing -> []; Just cwd -> [ "cd", formatProcessArg cwd++";" ] + execEnvOverride :: EnvOverride -> String -> String execEnvOverride (EnvPrepend x) y = x ++ y execEnvOverride (EnvAppend y) x = x ++ y |