1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
module Wayland.CodeGen.BuildGen
( generateBuild
) where
import Wayland.CodeGen.Types
import Wayland.CodeGen.Utils
data ModuleInfo
= ModuleInfo { modProtocol :: !Protocol
, modInterface :: !InterfaceDesc
}
generateBuild :: [Protocol] -> String
generateBuild protocols = unlines ([ "cabal-version: 3.0"
, "name: highway-protocols"
, "version: 1.0.0"
, "synopsis: Generated bindings for some Wayland protocols."
, "build-type: Simple"
, ""
, "common warnings"
, " ghc-options: -Wall -Wno-unused-imports -Wno-dodgy-exports"
, ""
, "library"
, " import: warnings"
, " build-depends: base,"
, " hashable,"
, " bytestring,"
, " highway-wayland"
, " default-language: Haskell2010" ]
++ exposedModules (collectModules protocols))
where exposedModules [] = []
exposedModules [m] = [" exposed-modules: " ++ formatModule m]
exposedModules (m:ms) = (" exposed-modules: " ++ formatModule m ++ ",") : exposedModules' ms
exposedModules' [m] = [" " ++ formatModule m]
exposedModules' (m:ms) = (" " ++ formatModule m ++ ",") : exposedModules' ms
exposedModules' [] = []
formatModule :: ModuleInfo -> String
formatModule m = fullModule (modProtocol m) (modInterface m)
collectModules :: [Protocol] -> [ModuleInfo]
collectModules = concatMap singleProtocol
where singleProtocol p = fmap (singleInterface p) (protInterfaces p)
singleInterface p i = ModuleInfo { modProtocol = p
, modInterface = i
}
|