Skip to content

Commit

Permalink
exec: use POSIX 'execve' system call (#527)
Browse files Browse the repository at this point in the history
  • Loading branch information
borsboom committed Jul 28, 2015
1 parent 97f1e54 commit 46bae2d
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions src/Stack/Exec.hs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
Expand All @@ -7,15 +8,21 @@

module Stack.Exec where

import Control.Exception.Lifted
import Control.Monad.Reader
import Control.Monad.Logger
import Control.Monad.Catch hiding (try)
import Control.Monad.Trans.Control (MonadBaseControl)
import Data.Streaming.Process (ProcessExitedUnsuccessfully(..))
import Stack.Types

#ifdef mingw32_HOST_OS
import Control.Exception.Lifted
import Data.Streaming.Process (ProcessExitedUnsuccessfully(..))
import System.Exit
import System.Process.Run
import System.Process.Run (callProcess)
#else
import System.Process.Read (envHelper, preProcess)
import System.Posix.Process (executeFile)
#endif

-- | Default @EnvSettings@ which includes locals and GHC_PACKAGE_PATH
defaultEnvSettings :: EnvSettings
Expand All @@ -36,10 +43,15 @@ plainEnvSettings = EnvSettings
-- | Execute a process within the Stack configured environment.
exec :: (HasConfig r, MonadReader r m, MonadIO m, MonadLogger m, MonadThrow m, MonadBaseControl IO m)
=> EnvSettings -> String -> [String] -> m b
exec envSettings cmd args = do
exec envSettings cmd0 args = do
config <- asks getConfig
menv <- liftIO (configEnvOverride config envSettings)
e <- try (callProcess Nothing menv cmd args)
#ifdef mingw32_HOST_OS
e <- try (callProcess Nothing menv cmd0 args)
liftIO $ case e of
Left (ProcessExitedUnsuccessfully _ ec) -> exitWith ec
Right () -> exitSuccess
#else
cmd <- preProcess Nothing menv cmd0
liftIO $ executeFile cmd False args (envHelper menv)
#endif

0 comments on commit 46bae2d

Please sign in to comment.