#! /usr/bin/env runhaskell > > {-# LANGUAGE FlexibleInstances #-} > > import Control.Monad > import Data.Maybe > import Data.List > import Data.Version > import Distribution.Simple > import Distribution.Simple.LocalBuildInfo > import Distribution.Simple.Configure > import Distribution.Simple.Setup > import Distribution.Package > import Distribution.PackageDescription > import Distribution.Text > import Text.PrettyPrint.HughesPJ > > -- for Cabal 1.4 compatibility > instance Text [Char] where > parse = undefined > disp = text > > addToBuildInfo opts binfo = binfo { cppOptions = cppOptions binfo ++ opts } > addToLibrary opts lib = lib { libBuildInfo = addToBuildInfo opts (libBuildInfo lib) } > addToExecutable opts exe = exe { buildInfo = addToBuildInfo opts (buildInfo exe) } > addToPkgDesc opts pkgdesc = pkgdesc > { library = liftM (addToLibrary opts) (library pkgdesc) > , executables = map (addToExecutable opts) (executables pkgdesc) > } > addToLocalBuildInfo opts lbinfo = lbinfo > { localPkgDescr = addToPkgDesc opts (localPkgDescr lbinfo) } > > -- we detect the base version and add a respective #define > myPostConf args flags pkgdesc locbuildinfo = do > let distPref = fromFlag $ configDistPref flags > deps = packageDeps locbuildinfo > base = fromJust $ find (\pkg -> display (packageName pkg) == "base") deps > ver = versionBranch (pkgVersion base) > major = head ver > opts = [ "-DBASE_MAJOR_VERSION=" ++ show major ] > newlocbuildinfo = addToLocalBuildInfo opts locbuildinfo > putStrLn $ "base version = " ++ concat (intersperse "." $ map show ver) > writePersistBuildConfig distPref newlocbuildinfo > > main = do > defaultMainWithHooks $ > simpleUserHooks { postConf = myPostConf } >