on master help sign in
Start generating documentation again. Does not work on all libraries yet, but should go through.
4ca3dbaEvan Czaplicki
Elm.cabal+1−1
@@ -22,7 +22,7 @@ Build-type: Custom
22
22
23Extra-source-files: changelog.txt
23Extra-source-files: changelog.txt
24Data-dir: data
24Data-dir: data
25−Data-files: elm-runtime.js interfaces.data
25+Data-files: elm-runtime.js interfaces.data docs.json
26Cabal-version: >=1.9
26Cabal-version: >=1.9
27
27
28source-repository head
28source-repository head
Setup.hs+35−11
@@ -12,6 +12,7 @@ import System.Process
12import Control.Monad
12import Control.Monad
13import qualified Data.Binary as Binary
13import qualified Data.Binary as Binary
14import qualified Data.ByteString.Lazy as BS
14import qualified Data.ByteString.Lazy as BS
15+import qualified Data.List as List
15
16
16-- Part 1
17-- Part 1
17-- ------
18-- ------
@@ -42,13 +43,20 @@ tempDir lbi = "temp"
42rts :: LocalBuildInfo -> FilePath
43rts :: LocalBuildInfo -> FilePath
43rts lbi = rtsDir lbi </> "elm-runtime.js"
44rts lbi = rtsDir lbi </> "elm-runtime.js"
44
45
46+-- The runtime is called:
47+docs :: LocalBuildInfo -> FilePath
48+docs lbi = rtsDir lbi </> "docs.json"
49+
45-- The interfaces for the Standard Libraries live in:
50-- The interfaces for the Standard Libraries live in:
46interfaces :: LocalBuildInfo -> FilePath
51interfaces :: LocalBuildInfo -> FilePath
47interfaces lbi = rtsDir lbi </> "interfaces.data"
52interfaces lbi = rtsDir lbi </> "interfaces.data"
48
53
49−-- buildDir with LocalBuildInfo points to "dist/build" (usually)
54+elm :: LocalBuildInfo -> FilePath
50elm lbi = buildDir lbi </> "elm" </> "elm"
55elm lbi = buildDir lbi </> "elm" </> "elm"
51
56
57+document :: LocalBuildInfo -> FilePath
58+document lbi = buildDir lbi </> "elm-doc" </> "elm-doc"
59+
52-- Care! This appears to be based on an unstable API
60-- Care! This appears to be based on an unstable API
53-- See: http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple.html#2
61-- See: http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple.html#2
54
62
@@ -96,7 +104,10 @@ myPostBuild as bfs pd lbi = do
96 buildInterfaces lbi elmis
104 buildInterfaces lbi elmis
97 putStrLn "Custom build step: build elm-runtime.js"
105 putStrLn "Custom build step: build elm-runtime.js"
98 buildRuntime lbi elmos
106 buildRuntime lbi elmos
107+ putStrLn "Custom build step: build docs.json"
108+ buildDocs lbi
99 removeDirectoryRecursive (tempDir lbi)
109 removeDirectoryRecursive (tempDir lbi)
110+ removeDirectoryRecursive ("libraries" </> "docs")
100 postBuild simpleUserHooks as bfs pd lbi
111 postBuild simpleUserHooks as bfs pd lbi
101
112
102
113
@@ -107,6 +118,7 @@ compileLibraries lbi = do
107 createDirectoryIfMissing True rts
118 createDirectoryIfMissing True rts
108 out_c <- canonicalizePath temp -- temp (root folder)
119 out_c <- canonicalizePath temp -- temp (root folder)
109 elm_c <- canonicalizePath (elm lbi) -- dist/build/elm/elm
120 elm_c <- canonicalizePath (elm lbi) -- dist/build/elm/elm
121+ doc_c <- canonicalizePath (document lbi) -- dist/build/elm-doc/elm-doc
110 rtd_c <- canonicalizePath rts -- data
122 rtd_c <- canonicalizePath rts -- data
111
123
112 let make file = do
124 let make file = do
@@ -118,11 +130,11 @@ compileLibraries lbi = do
118 arg = Just [("Elm_datadir", rtd_c)]
130 arg = Just [("Elm_datadir", rtd_c)]
119 handle <- runProcess elm_c args Nothing arg Nothing Nothing Nothing
131 handle <- runProcess elm_c args Nothing arg Nothing Nothing Nothing
120 exitCode <- waitForProcess handle
132 exitCode <- waitForProcess handle
133+ rawSystem doc_c [file]
121 return ( out_c </> replaceExtension file "elmo"
134 return ( out_c </> replaceExtension file "elmo"
122 , out_c </> replaceExtension file "elmi")
135 , out_c </> replaceExtension file "elmi")
123
136
124 setCurrentDirectory "libraries"
137 setCurrentDirectory "libraries"
125− print =<< getCurrentDirectory
126 files <- getFiles ".elm" "."
138 files <- getFiles ".elm" "."
127 files <- unzip `fmap` mapM make files
139 files <- unzip `fmap` mapM make files
128 setCurrentDirectory ".."
140 setCurrentDirectory ".."
@@ -145,11 +157,23 @@ buildInterfaces lbi elmis = do
145buildRuntime :: LocalBuildInfo -> [FilePath] -> IO ()
157buildRuntime :: LocalBuildInfo -> [FilePath] -> IO ()
146buildRuntime lbi elmos = do
158buildRuntime lbi elmos = do
147 createDirectoryIfMissing True (rtsDir lbi)
159 createDirectoryIfMissing True (rtsDir lbi)
160+ let rts' = rts lbi
148− writeFile (rts lbi) "var Elm = {}; Elm.Native = {}; Elm.Native.Graphics = {};\n\
161+ writeFile rts' "var Elm = {}; Elm.Native = {}; Elm.Native.Graphics = {};\n\
149− \var ElmRuntime = {}; ElmRuntime.Render = {};\n"
162+ \var ElmRuntime = {}; ElmRuntime.Render = {};\n"
150− mapM_ (appendJS lbi) =<< getFiles ".js" "libraries"
163+ mapM_ (appendTo rts') =<< getFiles ".js" "libraries"
151− mapM_ (appendJS lbi) elmos
164+ mapM_ (appendTo rts') elmos
152− mapM_ (appendJS lbi) =<< getFiles ".js" "runtime"
165+ mapM_ (appendTo rts') =<< getFiles ".js" "runtime"
166+
167+buildDocs :: LocalBuildInfo -> IO ()
168+buildDocs lbi = do
169+ createDirectoryIfMissing True (rtsDir lbi)
170+ let docs' = docs lbi
171+ writeFile docs' "[\n"
172+ json <- getFiles ".json" ("libraries" </> "docs")
173+ let appends = map (appendTo docs') json
174+ addCommas = List.intersperse (appendFile docs' ",\n")
175+ sequence_ (addCommas appends)
176+ appendFile docs' "\n]"
153
177
154getFiles ext dir = do
178getFiles ext dir = do
155 contents <- map (dir </>) `fmap` getDirectoryContents dir
179 contents <- map (dir </>) `fmap` getDirectoryContents dir
@@ -158,8 +182,8 @@ getFiles ext dir = do
158 filess <- mapM (getFiles ext) dirs
182 filess <- mapM (getFiles ext) dirs
159 return (files ++ concat filess)
183 return (files ++ concat filess)
160
184
161−appendJS lbi file = do
185+appendTo :: FilePath -> FilePath -> IO ()
162− putStrLn (dropExtension file)
186+appendTo destination source = do
163− str <- readFile file
187+ str <- readFile source
164 length str `seq` return ()
188 length str `seq` return ()
165− appendFile (rts lbi) str
189+ appendFile destination str