module Hmake where import System.Cmd import System.Directory import Control.Monad type Dependency = String type Target = String outOfDate :: String -> String -> IO Bool outOfDate dep target = do tgtExist <- doesFileExist target if (not tgtExist) then return True else liftM2 (>) (getModificationTime dep) (getModificationTime target) deps ->> cmd = \target -> do xdeps <- deps isOutOfDate <- (sequence (map (\dep -> outOfDate dep target) xdeps)) >>= return.or case isOutOfDate of True -> putStrLn (target ++ " is out of date with its dependencies") False -> putStr "" if isOutOfDate then ((cmd xdeps target) >> return target) else return target tcmd >>- target = (tcmd target) >> return [target] ccompile deps target = system("gcc -c " ++ (head deps) ++ " -o " ++ target) link deps target = system("gcc " ++ (head deps) ++ " -o " ++ target)