elm/Build.hs

46 lines
No EOL
1.5 KiB
Haskell

-- This file compiles all library and runtime code
-- into compiler/elm-runtime.js. It then rebuilds the compiler.
-- Run it with the command "runHaskell Build.hs".
import System.Cmd
import System.Directory
import System.Exit
import System.FilePath
import System.IO
import Language.Elm
rts = "compiler" </> "elm-runtime.js"
types = "compiler" </> "types.json"
getFiles ext dir = do
contents <- map (dir </>) `fmap` getDirectoryContents dir
let files = filter (\f -> takeExtension f == ext) contents
dirs = filter (not . hasExtension) contents
filess <- mapM (getFiles ext) dirs
return (files ++ concat filess)
appendJS file = do
putStrLn (dropExtension file)
str <- readFile file
length str `seq` return ()
appendFile rts str
appendElm file = do
system ("elm --only-js " ++ file)
let jsFile = replaceExtension file ".js"
appendJS jsFile
removeFile jsFile
main = do
writeFile rts "Elm = {}; Elm.Native = {}; Elm.Native.Graphics = {};\n\
\Elm.Graphics = {}; ElmRuntime = {}; ElmRuntime.Render = {}\n"
mapM_ appendJS =<< getFiles ".js" "libraries"
files <- getFiles ".elm" "libraries"
mapM_ appendElm files
mapM_ appendJS =<< getFiles ".js" "runtime"
putStrLn "\n+------------------------------------------+\
\\n| Success building runtime and libraries! |\
\\n+------------------------------------------+\n"
system ("elm-doc " ++ unwords files ++ " > " ++ types)
system ("cabal install compiler" </> "Elm.cabal")
exitSuccess