import Distribution.Simple
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Utils
+import Distribution.Simple.Program
+import Distribution.Version
import System.Cmd
import System.FilePath
import System.Exit
makefileHook = build_primitive_sources
$ makefileHook defaultUserHooks,
haddockHook = build_primitive_sources
- $ haddockHook defaultUserHooks }
+ $ add_prim
+ $ haddockHook defaultUserHooks }
defaultMainWithHooks hooks
type Hook a = PackageDescription -> LocalBuildInfo -> UserHooks -> a -> IO ()
maybeUpdateFile primopwrappers_tmp primopwrappers
f pd lbi uhs x
+add_prim_to_pd pd = pd { library = Just lib' }
+ where
+ lib' = case library pd of
+ Just lib -> lib { exposedModules = "GHC.Prim" : exposedModules lib }
+ Nothing -> error "Expected a library"
+
+add_prim :: Hook a -> Hook a
+add_prim f pd lbi uhs x = do
+ let mbHaddockProg = lookupProgram haddockProgram (withPrograms lbi)
+ case mbHaddockProg of
+ Nothing -> f pd lbi uhs x
+ Just haddockProg -> do
+ let
+ Just version = programVersion haddockProg
+ pd' = if version < Version [2,0] [] then add_prim_to_pd pd else pd
+ f pd' lbi uhs x
+
-- Replace a file only if the new version is different from the old.
-- This prevents make from doing unnecessary work after we run 'setup makefile'
maybeUpdateFile :: FilePath -> FilePath -> IO ()