Skip to content

Commit f320e6e

Browse files
committed
incorporate checkTimestamps into fortran-src ModFile module
1 parent cb0cb91 commit f320e6e

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

src/Language/Fortran/Util/ModFile.hs

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,27 @@ module Language.Fortran.Util.ModFile
5151
, genModFile, regenModFile, encodeModFile, decodeModFile
5252
, StringMap, DeclMap, ParamVarMap, DeclContext(..), extractModuleMap, extractDeclMap
5353
, moduleFilename, combinedStringMap, combinedDeclMap, combinedModuleMap, combinedTypeEnv, combinedParamVarMap
54-
, genUniqNameToFilenameMap )
54+
, genUniqNameToFilenameMap
55+
, TimestampStatus(..), checkTimestamps )
5556
where
5657

58+
import Control.Monad.State
59+
import Data.Binary (Binary, encode, decodeOrFail)
60+
import qualified Data.ByteString.Lazy.Char8 as LB
5761
import Data.Data
58-
import Data.Maybe
5962
import Data.Generics.Uniplate.Operations
6063
import qualified Data.Map.Strict as M
61-
import Data.Binary (Binary, encode, decodeOrFail)
62-
import Control.Monad.State
64+
import Data.Maybe
6365
import GHC.Generics (Generic)
64-
-- import qualified Data.ByteString.Char8 as B
65-
import qualified Data.ByteString.Lazy.Char8 as LB
66-
67-
import qualified Language.Fortran.Util.Position as P
6866
import qualified Language.Fortran.AST as F
6967
import qualified Language.Fortran.Analysis as FA
68+
import qualified Language.Fortran.Analysis.BBlocks as FAB
69+
import qualified Language.Fortran.Analysis.DataFlow as FAD
7070
import qualified Language.Fortran.Analysis.Renaming as FAR
7171
import qualified Language.Fortran.Analysis.Types as FAT
72-
import qualified Language.Fortran.Analysis.DataFlow as FAD
73-
import qualified Language.Fortran.Analysis.BBlocks as FAB
72+
import qualified Language.Fortran.Util.Position as P
73+
import System.Directory
74+
import System.FilePath
7475

7576
--------------------------------------------------
7677

@@ -304,3 +305,23 @@ extractParamVarMap pf = M.fromList cvm
304305
, st@F.StParameter {} <- universeBi bs :: [F.Statement (FA.Analysis a)]
305306
, (F.DeclVariable _ _ v _ _) <- universeBi st :: [F.Declarator (FA.Analysis a)]
306307
, Just con <- [FA.constExp (F.getAnnotation v)] ]
308+
309+
-- | Status of mod-file compared to Fortran file.
310+
data TimestampStatus = NoSuchFile | CompileFile | ModFileExists FilePath
311+
312+
-- | Compare the source file timestamp to the fsmod file timestamp, if
313+
-- it exists.
314+
checkTimestamps :: FilePath -> IO TimestampStatus
315+
checkTimestamps path = do
316+
pathExists <- doesFileExist path
317+
modExists <- doesFileExist $ path -<.> modFileSuffix
318+
case (pathExists, modExists) of
319+
(False, _) -> pure NoSuchFile
320+
(True, False) -> pure CompileFile
321+
(True, True) -> do
322+
let modPath = path -<.> modFileSuffix
323+
pathModTime <- getModificationTime path
324+
modModTime <- getModificationTime modPath
325+
if pathModTime < modModTime
326+
then pure $ ModFileExists modPath
327+
else pure CompileFile

0 commit comments

Comments
 (0)