@@ -9,8 +9,10 @@ import Happstack.Server
9import Happstack.Server.Compression
9import Happstack.Server.Compression
10import System.Directory
10import System.Directory
11import System.Environment
11import System.Environment
12import System.FilePath
13import System.FilePath
13import System.Process
14import System.Process
14import qualified Language.Elm as Elm
16import qualified Language.Elm as Elm
15import Paths_elm_server
17import Paths_elm_server
@@ -36,10 +38,18 @@ serveElm :: FilePath -> ServerPartT IO Response
36serveElm fp = do
38serveElm fp = do
37 guard (takeExtension fp == ".elm")
39 guard (takeExtension fp == ".elm")
38 let file = tail fp
40 let file = tail fp
39− liftIO $ rawSystem "elm" [ "--make" ,"--runtime=" ++ runtime
40− , "--cache-dir=elm-server-cache", file ]
41+ args = [ "--make" ,"--runtime=" ++ runtime, "--cache-dir=elm-server-cache", file ]
42+ (_, stdout, _, handle) <- liftIO $ createProcess $ (proc "elm" args) { std_out = CreatePipe }
43+ exitCode <- liftIO $ waitForProcess handle
41 liftIO $ removeDirectoryRecursive "elm-server-cache"
44 liftIO $ removeDirectoryRecursive "elm-server-cache"
45+ case (exitCode, stdout) of
46+ (ExitFailure _, Just out) ->
47+ do str <- liftIO $ hGetContents out
48+ badRequest $ toResponse str
49+ (ExitFailure _, Nothing) ->
50+ badRequest $ toResponse "See command line for error message."
42− serveFile (asContentType "text/html") ("build" </> replaceExtension file "html")
52+ serveFile (asContentType "text/html") ("build" </> replaceExtension file "html")
44serveLib :: FilePath -> [Char] -> ServerPartT IO Response
54serveLib :: FilePath -> [Char] -> ServerPartT IO Response
45serveLib libLoc fp = do
55serveLib libLoc fp = do