Skip to content

Instantly share code, notes, and snippets.

@lspitzner
Created May 25, 2016 19:21
Show Gist options
  • Save lspitzner/c363dbd5abcfe64bcd303264ac8b7d33 to your computer and use it in GitHub Desktop.
Save lspitzner/c363dbd5abcfe64bcd303264ac8b7d33 to your computer and use it in GitHub Desktop.
haskell/Cabal/Setup.hs for buildnumber module auto-generation
import Distribution.Simple
import Distribution.PackageDescription
import Distribution.Simple.Program
import Distribution.Simple.Command
import Distribution.Simple.PreProcess
import Distribution.Simple.Setup
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.BuildPaths
import Distribution.Simple.BuildTarget
import System.Process
import System.Directory
import System.FilePath ( (</>), (<.>) )
import System.Environment ( getArgs )
main = do
let hooks = simpleUserHooks
{ instHook = \pkgdescr lbi userhooks instflags -> do
buildNoAction lbi
instHook simpleUserHooks pkgdescr lbi userhooks instflags
-- , buildHook = \pkgdescr lbi userhooks buildflags -> do
-- buildNoAction lbi
-- buildHook simpleUserHooks pkgdescr lbi userhooks buildflags
, postConf = \_args _confflags _pkgdescr lbi -> do
buildNoAction lbi
}
defaultMainWithHooks hooks
buildNoAction :: LocalBuildInfo
-> IO ()
buildNoAction lbi = do
-- putStrLn "Generating build number file and module."
let dir = autogenModulesDir lbi
createDirectoryIfMissing True dir
let buildNoModulePath = dir </> "BuildNo_examplepackage.hs"
buildNo <- (read :: String -> Int) <$> readProcess "buildno" [] ""
writeFile buildNoModulePath
$ unlines
[ "module BuildNo_examplepackage"
, " ( buildNo"
, " )"
, "where"
, ""
, ""
, ""
, "import Prelude ( Int )"
, ""
, ""
, ""
, "buildNo :: Int"
, "buildNo = " ++ show buildNo
]
return ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment