module CabalCargs.Format
( format
) where
import CabalCargs.CompilerArgs (CompilerArgs(..))
import CabalCargs.Formatting (Formatting(..))
import Data.Maybe (maybeToList)
import Data.List (foldl')
format :: Formatting -> CompilerArgs -> [String]
format Ghc cargs = concat [ formatHsSourceDirs $ hsSourceDirs cargs
, ghcOptions cargs
, map ("-X" ++) (defaultExtensions cargs)
, map ("-X" ++) (defaultLanguage cargs)
, map ("-optP" ++) (cppOptions cargs)
, map ("-optc" ++) (ccOptions cargs)
, map ("-L" ++) (extraLibDirs cargs)
, map ("-l" ++) (extraLibraries cargs)
, formatIncludeDirs $ includeDirs cargs
, formatIncludes $ includes cargs
, formatBuildDepends $ buildDepends cargs
, maybe [] (\db -> ["-package-conf=" ++ db]) (packageDB cargs)
, formatHsSourceDirs $ autogenHsSourceDirs cargs
, formatIncludeDirs $ autogenIncludeDirs cargs
, formatIncludes $ autogenIncludes cargs
]
where
formatBuildDepends [] = []
formatBuildDepends deps = map ("-package=" ++) deps
formatHsSourceDirs = map ("-i" ++)
formatIncludeDirs = map ("-I" ++)
formatIncludes incs = reverse $ foldl' addInclude [] incs
where
addInclude incs inc = ("-optP" ++ inc) : ("-optP-include") : incs
format Hdevtools cargs = (map ("-g" ++) (format Ghc cargs)) ++ socket
where
socket = maybe [] (\s -> ["--socket=" ++ s]) (hdevtoolsSocket cargs)
format Pure cargs = concat [ hsSourceDirs cargs
, ghcOptions cargs
, defaultExtensions cargs
, defaultLanguage cargs
, cppOptions cargs
, cSources cargs
, ccOptions cargs
, extraLibDirs cargs
, extraLibraries cargs
, ldOptions cargs
, includeDirs cargs
, includes cargs
, buildDepends cargs
, maybeToList $ packageDB cargs
, autogenHsSourceDirs cargs
, autogenIncludeDirs cargs
, autogenIncludes cargs
, maybeToList $ hdevtoolsSocket cargs
]