X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Setup.hs;h=14b3bc134de5f2e9e795551326f7ecf3a7373f0a;hb=133214952cec403789daff11a0ad8ba038ee3291;hp=693b16d5bbd5b9d6437dccf5b0deb3af3cf83305;hpb=c75ef63814e0ecd51d8b8a4b2d580f6ab426d9ca;p=haskell-directory.git diff --git a/Setup.hs b/Setup.hs index 693b16d..14b3bc1 100644 --- a/Setup.hs +++ b/Setup.hs @@ -1,43 +1,20 @@ -{- -We need to do some ugly hacks here as base mix of portable and -unportable stuff, as well as home to some GHC magic. --} - module Main (main) where -import Control.Monad import Data.List +import Distribution.Simple import Distribution.PackageDescription import Distribution.Setup -import Distribution.Simple import Distribution.Simple.LocalBuildInfo -import Distribution.Simple.Utils -import System.Cmd import System.Environment -import System.FilePath -import System.Info main :: IO () main = do args <- getArgs let (ghcArgs, args') = extractGhcArgs args - (confArgs, args'') = extractConfigureArgs args' + (_, args'') = extractConfigureArgs args' hooks = defaultUserHooks { - confHook = add_extra_deps - $ confHook defaultUserHooks, - postConf = add_configure_options confArgs - $ postConf defaultUserHooks, - buildHook = build_primitive_sources - $ add_ghc_options ghcArgs - $ filter_modules_hook - $ buildHook defaultUserHooks, - makefileHook = add_ghc_options ghcArgs - $ filter_modules_hook - $ makefileHook defaultUserHooks, - regHook = add_extra_libs - $ regHook defaultUserHooks, - instHook = filter_modules_hook - $ instHook defaultUserHooks } + buildHook = add_ghc_options ghcArgs + $ buildHook defaultUserHooks } withArgs args'' $ defaultMainWithHooks hooks extractGhcArgs :: [String] -> ([String], [String]) @@ -66,26 +43,6 @@ removePrefix (x:xs) (y:ys) | otherwise = Nothing type Hook a = PackageDescription -> LocalBuildInfo -> UserHooks -> a -> IO () -type ConfHook = PackageDescription -> ConfigFlags -> IO LocalBuildInfo -type PostConfHook = Args -> ConfigFlags -> PackageDescription -> LocalBuildInfo - -> IO () - --- type PDHook = PackageDescription -> ConfigFlags -> IO () - -build_primitive_sources :: Hook a -> Hook a -build_primitive_sources f pd lbi uhs x - = do when (compilerFlavor (compiler lbi) == GHC) $ do - let genprimopcode = joinPath ["..", "..", "utils", - "genprimopcode", "genprimopcode"] - primops = joinPath ["..", "..", "compiler", "prelude", - "primops.txt"] - primhs = joinPath ["GHC", "Prim.hs"] - primopwrappers = joinPath ["GHC", "PrimopWrappers.hs"] - maybeExit $ system (genprimopcode ++ " --make-haskell-source < " - ++ primops ++ " > " ++ primhs) - maybeExit $ system (genprimopcode ++ " --make-haskell-wrappers < " - ++ primops ++ " > " ++ primopwrappers) - f pd lbi uhs x add_ghc_options :: [String] -> Hook a -> Hook a add_ghc_options args f pd lbi uhs x @@ -99,60 +56,3 @@ add_ghc_options args f pd lbi uhs x pd' = pd { library = Just lib' } f pd' lbi uhs x -add_configure_options :: [String] -> PostConfHook -> PostConfHook -add_configure_options args f as cfs pd lbi - = f (as ++ args) cfs pd lbi - -filter_modules_hook :: Hook a -> Hook a -filter_modules_hook f pd lbi uhs x - = let build_filter = case compilerFlavor $ compiler lbi of - GHC -> forGHCBuild - _ -> isPortableBuild - lib' = case library pd of - Just lib -> - let ems = filter build_filter (exposedModules lib) - in lib { exposedModules = ems } - Nothing -> error "Expected a library" - pd' = pd { library = Just lib' } - in f pd' lbi uhs x - -isPortableBuild :: String -> Bool -isPortableBuild s - | "GHC" `isPrefixOf` s = False - | "Data.Generics" `isPrefixOf` s = False - | otherwise = s `notElem` ["Foreign.Concurrent", "System.Process"] - -forGHCBuild :: String -> Bool -forGHCBuild = ("GHC.Prim" /=) - -add_extra_deps :: ConfHook -> ConfHook -add_extra_deps f pd cf - = do lbi <- f pd cf - case compilerFlavor (compiler lbi) of - GHC -> - do -- Euch. We should just add the right thing to the lbi - -- ourselves rather than rerunning configure. - let pd' = pd { buildDepends = Dependency "rts" AnyVersion - : buildDepends pd } - f pd' cf - _ -> - return lbi - -add_extra_libs :: Hook a -> Hook a -add_extra_libs f pd lbi uhs x - = let pd' = if (os == "mingw32") && (compilerFlavor (compiler lbi) == GHC) - then case library pd of - Just lib -> - let lib_bi = libBuildInfo lib - lib_bi' = lib_bi { extraLibs = "wsock32" - : "msvcrt" - : "kernel32" - : "user32" - : "shell32" - : extraLibs lib_bi } - lib' = lib { libBuildInfo = lib_bi' } - in pd { library = Just lib' } - Nothing -> error "Expected a library" - else pd - in f pd' lbi uhs x -