only rebuild grammar when source has been modified

This commit is contained in:
Rachel Lambda Samuelsson 2022-01-23 13:58:15 +01:00
parent c25ca6c0cb
commit e7160485b6
2 changed files with 21 additions and 5 deletions

View File

@ -3,16 +3,31 @@ import System.Process
import System.Environment
import System.Directory
libdir :: String
libdir = "src"
target :: String
target = "src/Hm"
source :: String
source = "hm.cf"
regenerateGrammar :: IO ()
regenerateGrammar = do
callProcess "bnfc" ["-d", "--text-token", "--functor", source]
removePathForcibly target
renameDirectory "Hm" target
main :: IO ()
main = do
(a:_) <- getArgs
if a == "build"
then do
callProcess "bnfc" ["-d", "--text-token", "--functor", "hm.cf"]
removePathForcibly (libdir <> "/Hm")
renameDirectory "Hm" (libdir <> "/Hm")
b <- doesDirectoryExist target
if not b
then regenerateGrammar
else do
sourceDate <- getModificationTime source
targetDate <- getModificationTime target
if sourceDate >= targetDate
then regenerateGrammar
else pure ()
else pure ()
defaultMain

View File

@ -18,6 +18,7 @@ custom-setup
, Cabal >= 2.4
, process >= 1
, directory >= 1
, time >= 1
library
ghc-options: -Werror=incomplete-patterns -Wall -fno-warn-name-shadowing