@@ -1,12 +1,15 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2import Control.Monad
2import Control.Monad
3import Data.IORef
3import Data.IORef
4+import Control.Exception (SomeException, catch)
5import Distribution.Simple
6import Distribution.Simple
7+import Distribution.Simple.BuildPaths (autogenModulesDir)
6import Distribution.Simple.InstallDirs as I
8import Distribution.Simple.InstallDirs as I
7import Distribution.Simple.LocalBuildInfo as L
9import Distribution.Simple.LocalBuildInfo as L
8import qualified Distribution.Simple.Setup as S
10import qualified Distribution.Simple.Setup as S
9import qualified Distribution.Simple.Program as P
11import qualified Distribution.Simple.Program as P
12+import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile)
10import Distribution.PackageDescription
13import Distribution.PackageDescription
11import Distribution.Text
14import Distribution.Text
@@ -60,6 +63,13 @@ usesGMP flags =
60 Just False -> False
63 Just False -> False
61 Nothing -> True
64 Nothing -> True
66+isRelease :: S.ConfigFlags -> Bool
68+ case lookup (FlagName "release") (S.configConfigurationsFlags flags) of
63-- -----------------------------------------------------------------------------
73-- -----------------------------------------------------------------------------
@@ -82,6 +92,7 @@ idrisClean _ flags _ _ = do
83idrisConfigure _ flags _ local = do
93idrisConfigure _ flags _ local = do
84 configureRTS
94 configureRTS
95+ generateVersionModule
86 verbosity = S.fromFlag $ S.configVerbosity flags
97 verbosity = S.fromFlag $ S.configVerbosity flags
87 version = pkgVersion . package $ localPkgDescr local
98 version = pkgVersion . package $ localPkgDescr local
@@ -92,6 +103,23 @@ idrisConfigure _ flags _ local = do
92 -- the file after configure.
103 -- the file after configure.
93 configureRTS = make verbosity ["-C", "rts", "clean"]
104 configureRTS = make verbosity ["-C", "rts", "clean"]
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)
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"
95-- -----------------------------------------------------------------------------
123-- -----------------------------------------------------------------------------