make Setup suitable for building the libraries with GHC
authorIan Lynagh <igloo@earth.li>
Sun, 12 Nov 2006 21:46:56 +0000 (21:46 +0000)
committerIan Lynagh <igloo@earth.li>
Sun, 12 Nov 2006 21:46:56 +0000 (21:46 +0000)
Setup.hs
haskell98.cabal

index 9a994af..9fff242 100644 (file)
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,52 @@
+
+module Main (main) where
+
+import Data.List
 import Distribution.Simple
 import Distribution.Simple
-main = defaultMain
+import Distribution.PackageDescription
+import Distribution.PreProcess
+import Distribution.Setup
+import Distribution.Simple.LocalBuildInfo
+import System.Environment
+
+main :: IO ()
+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
+
index d01ac77..599ec60 100644 (file)
@@ -20,3 +20,6 @@ exposed-modules:
        Bits, CError, CForeign, CString, CTypes, ForeignPtr, Int,
        MarshalAlloc, MarshalArray, MarshalError, MarshalUtils, Ptr,
        StablePtr, Storable, Word
        Bits, CError, CForeign, CString, CTypes, ForeignPtr, Int,
        MarshalAlloc, MarshalArray, MarshalError, MarshalUtils, Ptr,
        StablePtr, Storable, Word
+-- We need to set the package name to haskell98 (without a version number)
+-- as it's magic.
+ghc-options: -package-name haskell98