import Distribution.Simple import Distribution.Simple.Setup import Distribution.Simple.LocalBuildInfo import Distribution.PackageDescription import System.IO import System.Exit import System.Process import Control.Monad import System.FilePath import System.Directory main :: IO () main = defaultMainWithHooks simpleUserHooks { postBuild = myPostBuild } myPostBuild :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO () myPostBuild args flags pd lbi = do putStrLn "Custom build step: compiling debuggerInterface.elm" buildInterface concatJS lbi postBuild simpleUserHooks args flags pd lbi concatJS :: LocalBuildInfo -> IO () concatJS lbi = do megaJS <- concat `fmap` mapM readFile jsFiles _ <- putStrLn "Writing composite debugger.js" writeFile ("assets" "debugger.js") megaJS jsFiles :: [FilePath] jsFiles = map (\name -> "assets" "_reactor" name) [ "debuggerInterface.js" , "toString.js" , "core.js" , "reactor.js" ] buildInterface :: IO () buildInterface = do (exitCode, out, err) <- readProcessWithExitCode "elm-make" [ "--yes", "frontend" "debuggerInterface.elm" ] "" case exitCode of ExitSuccess -> renameFile "elm.js" ("assets" "_reactor" "debuggerInterface.js") ExitFailure _ -> do hPutStrLn stderr ("Failed to build debuggerInterface.elm\n\n" ++ out ++ err) exitFailure