@@ -1,12 +1,15 @@
11{-# LANGUAGE CPP #-}
22import Control.Monad
33import Data.IORef
4+import Control.Exception (SomeException, catch)
45
56import Distribution.Simple
7+import Distribution.Simple.BuildPaths (autogenModulesDir)
68import Distribution.Simple.InstallDirs as I
79import Distribution.Simple.LocalBuildInfo as L
810import qualified Distribution.Simple.Setup as S
911import qualified Distribution.Simple.Program as P
12+import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile)
1013import Distribution.PackageDescription
1114import Distribution.Text
1215
@@ -60,6 +63,13 @@ usesGMP flags =
6063 Just False -> False
6164 Nothing -> True
6265
66+isRelease :: S.ConfigFlags -> Bool
67+isRelease flags =
68+ case lookup (FlagName "release") (S.configConfigurationsFlags flags) of
69+ Just True -> True
70+ Just False -> False
71+ Nothing -> False
72+
6373-- -----------------------------------------------------------------------------
6474-- Clean
6575
@@ -82,6 +92,7 @@ idrisClean _ flags _ _ = do
8292
8393idrisConfigure _ flags _ local = do
8494 configureRTS
95+ generateVersionModule
8596 where
8697 verbosity = S.fromFlag $ S.configVerbosity flags
8798 version = pkgVersion . package $ localPkgDescr local
@@ -92,6 +103,23 @@ idrisConfigure _ flags _ local = do
92103 -- the file after configure.
93104 configureRTS = make verbosity ["-C", "rts", "clean"]
94105
106+ -- Put the Git hash into a module for use in the program
107+ -- For release builds, just put the empty string in the module
108+ generateVersionModule = do
109+ gitHash <- catch (readProcess "git" ["rev-parse", "--short", "HEAD"] "")
110+ (\e -> let e' = (e :: SomeException) in return "PRE")
111+ let hash = takeWhile (/= '\n') gitHash
112+ let versionModulePath = autogenModulesDir local </> "Version_idris" Px.<.> "hs"
113+ createDirectoryIfMissingVerbose verbosity True (autogenModulesDir local)
114+ rewriteFile versionModulePath (versionModuleContents hash)
115+
116+ versionModuleContents h = "module Version_idris where\n\n" ++
117+ "gitHash :: String\n" ++
118+ if isRelease (configFlags local)
119+ then "gitHash = \"\"\n"
120+ else "gitHash = \"-git:" ++ h ++ "\"\n"
121+
122+
95123-- -----------------------------------------------------------------------------
96124-- Build
97125