Skip to content
Snippets Groups Projects
Commit c5b20578 authored by Ian Lynagh's avatar Ian Lynagh
Browse files

make Setup suitable for building the libraries with GHC

parent 961ff2ad
No related branches found
No related tags found
No related merge requests found
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment