import Distribution.Simple import System.Process import System.Environment import System.Directory 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 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