diff options
author | Ian Lynagh <igloo@earth.li> | 2006-11-12 21:47:41 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2006-11-12 21:47:41 +0000 |
commit | c5b205781e3774ccd467898e2253701725d58434 (patch) | |
tree | c845fdbaf65bc2007f4be1ec031805908581b6e6 /Setup.hs | |
parent | 961ff2adbf3a9243ddcfabc7dc328393ca47f1fa (diff) |
make Setup suitable for building the libraries with GHC
Diffstat (limited to 'Setup.hs')
-rw-r--r-- | Setup.hs | 50 |
1 files changed, 48 insertions, 2 deletions
@@ -1,6 +1,52 @@ + module Main (main) where -import Distribution.Simple (defaultMainWithHooks, defaultUserHooks) +import Data.List +import Distribution.Simple +import Distribution.PackageDescription +import Distribution.PreProcess +import Distribution.Setup +import Distribution.Simple.LocalBuildInfo +import System.Environment main :: IO () -main = defaultMainWithHooks defaultUserHooks +main = do args <- getArgs + let (ghcArgs, args') = extractGhcArgs args + let hooks = defaultUserHooks { + buildHook = add_ghc_options ghcArgs + $ buildHook defaultUserHooks } + withArgs args' $ defaultMainWithHooks hooks + +extractGhcArgs :: [String] -> ([String], [String]) +extractGhcArgs args + = let f [] = ([], []) + f (x:xs) = case f xs of + (ghcArgs, otherArgs) -> + case removePrefix "--ghc-option=" x of + Just ghcArg -> + (ghcArg:ghcArgs, otherArgs) + Nothing -> + (ghcArgs, x:otherArgs) + in f args + +removePrefix :: String -> String -> Maybe String +removePrefix "" ys = Just ys +removePrefix (x:xs) (y:ys) + | x == y = removePrefix xs ys + | otherwise = Nothing + +type Hook a = PackageDescription -> LocalBuildInfo -> Maybe UserHooks -> a + -> IO () + +add_ghc_options :: [String] -> Hook a -> Hook a +add_ghc_options args f pd lbi muhs x + = do let lib' = case library pd of + Just lib -> + let bi = libBuildInfo lib + opts = options bi ++ [(GHC, args)] + bi' = bi { options = opts } + in lib { libBuildInfo = bi' } + Nothing -> error "Expected a library" + pd' = pd { library = Just lib' } + f pd' lbi muhs x + |