Skip to content
Snippets Groups Projects
Commit 81429d8c authored by Ross Paterson's avatar Ross Paterson
Browse files

--configure-option and --ghc-option are now provided by Cabal

parent 1b862e36
No related branches found
No related tags found
No related merge requests found
module Main (main) where
import Data.List
import Distribution.Simple
import Distribution.PackageDescription
import Distribution.Setup
import Distribution.Simple.LocalBuildInfo
import System.Environment
main :: IO ()
main = do args <- getArgs
let (ghcArgs, args') = extractGhcArgs args
(_, args'') = extractConfigureArgs args'
hooks = defaultUserHooks {
buildHook = add_ghc_options ghcArgs
$ buildHook defaultUserHooks }
withArgs args'' $ defaultMainWithHooks hooks
extractGhcArgs :: [String] -> ([String], [String])
extractGhcArgs = extractPrefixArgs "--ghc-option="
extractConfigureArgs :: [String] -> ([String], [String])
extractConfigureArgs = extractPrefixArgs "--configure-option="
extractPrefixArgs :: String -> [String] -> ([String], [String])
extractPrefixArgs the_prefix args
= let f [] = ([], [])
f (x:xs) = case f xs of
(wantedArgs, otherArgs) ->
case removePrefix the_prefix x of
Just wantedArg ->
(wantedArg:wantedArgs, otherArgs)
Nothing ->
(wantedArgs, x:otherArgs)
in f args
removePrefix :: String -> String -> Maybe String
removePrefix "" ys = Just ys
removePrefix _ "" = Nothing
removePrefix (x:xs) (y:ys)
| x == y = removePrefix xs ys
| otherwise = Nothing
type Hook a = PackageDescription -> LocalBuildInfo -> UserHooks -> a -> IO ()
add_ghc_options :: [String] -> Hook a -> Hook a
add_ghc_options args f pd lbi uhs 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 uhs x
main = defaultMainWithHooks defaultUserHooks
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