import Distribution.Simple
import Distribution.PackageDescription
import IO
import Directory

main = defaultMainWithHooks emptyUserHooks { preBuild = preBuildHook,
                                             preClean = preCleanHook }

preBuildHook _ _ = do
  pd <- readPackageDescription "unbounded.cabal"
  h <- openFile "version.h" WriteMode
  let version = case pd of
                  PackageDescription 
                   { package = PackageIdentifier { pkgVersion = v } }
                       -> showVersion v
  hPutStrLn h "/* GENERATED FILE -- DO NOT EDIT */"
  hPutStrLn h ("#define UNBOUNDED_VERSION \"" ++ version ++ "\"")
  hClose h
  return emptyHookedBuildInfo

preCleanHook _ _ = do removeFile "version.h"
                      return emptyHookedBuildInfo
