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 -Wno-overlapping-patterns" , "" , "library" , " import: warnings" , " build-depends: base," , " hashable," , " mtl," , " 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 }