packages feed

elm-reactor-0.2: Setup.hs

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