packages feed

stb-image-0.1.2: Setup.lhs

#! /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 }
>