aboutsummaryrefslogtreecommitdiffhomepage
path: root/Setup.hs
diff options
context:
space:
mode:
authorGravatar Ian Lynagh <igloo@earth.li>2006-11-12 21:47:41 +0000
committerGravatar Ian Lynagh <igloo@earth.li>2006-11-12 21:47:41 +0000
commitc5b205781e3774ccd467898e2253701725d58434 (patch)
treec845fdbaf65bc2007f4be1ec031805908581b6e6 /Setup.hs
parent961ff2adbf3a9243ddcfabc7dc328393ca47f1fa (diff)
make Setup suitable for building the libraries with GHC
Diffstat (limited to 'Setup.hs')
-rw-r--r--Setup.hs50
1 files changed, 48 insertions, 2 deletions
diff --git a/Setup.hs b/Setup.hs
index 60804b2..9fff242 100644
--- a/Setup.hs
+++ b/Setup.hs
@@ -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
+