on 481c2da help sign in
elk/Build.hs
46 lines 1.5 kB history raw
1-- This file compiles all library and runtime code
2-- into compiler/elm-runtime.js. It then rebuilds the compiler.
3-- Run it with the command "runHaskell Build.hs".
5import System.Cmd
6import System.Directory
7import System.Exit
8import System.FilePath
9import System.IO
10import Language.Elm
12rts = "compiler" </> "elm-runtime.js"
13types = "compiler" </> "types.json"
15getFiles ext dir = do
16 contents <- map (dir </>) `fmap` getDirectoryContents dir
17 let files = filter (\f -> takeExtension f == ext) contents
18 dirs = filter (not . hasExtension) contents
19 filess <- mapM (getFiles ext) dirs
20 return (files ++ concat filess)
22appendJS file = do
23 putStrLn (dropExtension file)
24 str <- readFile file
25 length str `seq` return ()
26 appendFile rts str
28appendElm file = do
29 system ("elm --only-js " ++ file)
30 let jsFile = replaceExtension file ".js"
31 appendJS jsFile
32 removeFile jsFile
34main = do
35 writeFile rts "Elm = {}; Elm.Native = {}; Elm.Native.Graphics = {};\n\
36 \Elm.Graphics = {}; ElmRuntime = {}; ElmRuntime.Render = {}\n"
37 mapM_ appendJS =<< getFiles ".js" "libraries"
38 files <- getFiles ".elm" "libraries"
39 mapM_ appendElm files
40 mapM_ appendJS =<< getFiles ".js" "runtime"
41 putStrLn "\n+------------------------------------------+\
42 \\n| Success building runtime and libraries! |\
43 \\n+------------------------------------------+\n"
44 system ("elm-doc " ++ unwords files ++ " > " ++ types)
45 system ("cabal install compiler" </> "Elm.cabal")
46 exitSuccess