From 3cbd1dca8f8e1e714dffbbc377cf724e09372ad7 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Tue, 20 Nov 2007 10:20:42 +0000 Subject: [PATCH] Only overwrite GHC/Prim.hs and GHC/Primopwrappers.hs if they change This avoids make doing unnecessary work after 'setup makefile'. --- Setup.hs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) 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 -- 1.7.10.4