----------------------------------------------------------------------------- -- | -- Module : Main -- Copyright : Thomas Hallgren -- -- Maintainer : Malcolm Wallace -- Stability : Stable -- Portability : All -- -- Main program for 'Older', a helper utility to calculate the dynamic -- part of the dependencies when rebuilding a project. (If module A has -- a static dependency on module B, and module B is re-built, then module -- A should only be rebuilt if B's interface has changed.) ----------------------------------------------------------------------------- module Main(main) where import System import Time #ifdef __HBC__ import FileStat #endif #if defined(__NHC__) || defined(__GLASGOW_HASKELL__) import Directory (getModificationTime, doesFileExist) #endif data When = Never | At ClockTime main = getArgs >>= \ args -> case args of [] -> error "Usage: older file.o file1.t ... filen.t" fs -> filemodtime [] fs >>= \ (tobj : ts) -> putStr (if or (map (isOlder tobj) ts) then "1\n" else "0\n") filemodtime acc [] = return (reverse acc) filemodtime acc (f:fs) = readTime f >>= (\t-> filemodtime (t:acc) fs) --mtime = itos 0 . head . drop (10::Int) . words -- where -- itos a (x:xs) | isDigit x = itos (a*10+ord x - ord '0') xs -- itos a _ = a #ifdef __HBC__ readTime f = catch (getFileStat f >>= \sf -> return (At (st_mtime sf))) (\_ -> return Never) #endif #if defined(__NHC__) || defined(__GLASGOW_HASKELL__) readTime f = doesFileExist f >>= \so-> if so then getModificationTime f >>= \mt -> return (At mt) else return Never #endif -- mtime (dev,inode,mode,uid,size,atime,time) = time -- readTime f ok = statFile f (\_ -> ok Never) (\sf -> ok (At (mtime sf))) isOlder Never _ = True isOlder _ Never = False isOlder (At t1) (At t2) = t1 < t2