From: Simon Marlow Date: Tue, 20 Nov 2007 10:20:42 +0000 (+0000) Subject: Only overwrite GHC/Prim.hs and GHC/Primopwrappers.hs if they change X-Git-Tag: 2008-05-28~113 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=3cbd1dca8f8e1e714dffbbc377cf724e09372ad7;p=ghc-base.git Only overwrite GHC/Prim.hs and GHC/Primopwrappers.hs if they change This avoids make doing unnecessary work after 'setup makefile'. --- diff --git a/Setup.hs b/Setup.hs index 79c60e9..40033bd 100644 --- a/Setup.hs +++ b/Setup.hs @@ -13,6 +13,8 @@ import Distribution.Simple.LocalBuildInfo import Distribution.Simple.Utils import System.Cmd import System.FilePath +import System.Exit +import System.Directory main :: IO () main = do let hooks = defaultUserHooks { @@ -40,12 +42,26 @@ build_primitive_sources f pd lbi uhs x "primops.txt"] primhs = joinPath ["GHC", "Prim.hs"] primopwrappers = joinPath ["GHC", "PrimopWrappers.hs"] + primhs_tmp = addExtension primhs "tmp" + primopwrappers_tmp = addExtension primopwrappers "tmp" maybeExit $ system (genprimopcode ++ " --make-haskell-source < " - ++ primops ++ " > " ++ primhs) + ++ primops ++ " > " ++ primhs_tmp) + maybeUpdateFile primhs_tmp primhs maybeExit $ system (genprimopcode ++ " --make-haskell-wrappers < " - ++ primops ++ " > " ++ primopwrappers) + ++ primops ++ " > " ++ primopwrappers_tmp) + maybeUpdateFile primopwrappers_tmp primopwrappers 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 () +maybeUpdateFile source target = do + r <- rawSystem "cmp" ["-s" {-quiet-}, source, target] + case r of + ExitSuccess -> return () + ExitFailure _ -> copyFile source target + removeFile source + filter_modules_hook :: Hook a -> Hook a filter_modules_hook f pd lbi uhs x = let lib' = case library pd of