diff options
| -rw-r--r-- | src/Hakyll/Core/UnixFilter.hs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/Hakyll/Core/UnixFilter.hs b/src/Hakyll/Core/UnixFilter.hs index e9a2cc1..fd3c335 100644 --- a/src/Hakyll/Core/UnixFilter.hs +++ b/src/Hakyll/Core/UnixFilter.hs @@ -19,7 +19,7 @@ import System.Exit (ExitCode (..)) import System.IO (Handle, hClose, hFlush, hGetContents, hPutStr, hSetEncoding, localeEncoding) import System.Process -import System.Info +import qualified System.Info as System -------------------------------------------------------------------------------- import Hakyll.Core.Compiler @@ -105,9 +105,17 @@ unixFilterIO :: Monoid o -> i -> IO (o, String, ExitCode) unixFilterIO writer reader programName args input = do - let pr = if os == "mingw32" - then shell $ unwords (programName : args) - else proc programName args + -- The problem on Windows is that `proc` is that it is unable to execute + -- batch stubs (eg. anything created using 'gem install ...') even if its in + -- `$PATH`. A solution to this issue is to execute the batch file explicitly + -- using `cmd /c batchfile` but there is no rational way to know where said + -- batchfile is on the system. Hence, we detect windows using the + -- `System.Info` module and then instead of using `proc` to create the + -- process, use `shell` instead which will be able to execute everything + -- `proc` can, and this can deal with batch files as well. + let pr = if System.os == "mingw32" + then shell $ unwords (programName : args) + else proc programName args (Just inh, Just outh, Just errh, pid) <- createProcess pr |
