import Data.Maybe
import Data.Monoid
import System.Directory
import Distribution.Simple
import Distribution.Simple.Setup
import Distribution.Simple.Utils (rawSystemExit)
import Distribution.PackageDescription
import Distribution.Verbosity
import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..), InstallDirs(..), absoluteInstallDirs)
main =
defaultMainWithHooks hooks
where
hooks =
simpleUserHooks {
confHook = theConfHook
}
theConfHook :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags -> IO LocalBuildInfo
theConfHook (description, buildInfo) flags = do
localBuildInfo <- confHook simpleUserHooks (description, buildInfo) flags
make (fromFlag (configVerbosity flags))
updateLocalBuildInfo localBuildInfo
make :: Verbosity -> IO ()
make verbosity =
do
rawSystemExit verbosity "mkdir" ["-p", "dist/build"]
rawSystemExit verbosity "cp" ["-a", "foreign/libpg_query", "dist/build/libpg_query"]
rawSystemExit verbosity "env" ["CFLAGS=-D_LIB", "make", "--directory=dist/build/libpg_query", "libpg_query.a"]
updateLocalBuildInfo :: LocalBuildInfo -> IO LocalBuildInfo
updateLocalBuildInfo =
def
where
def x =
do
path <- getCurrentDirectory
return (addExtraLibDir (path <> "/dist/build/libpg_query") x)
where
updatePackageDescription fn localBuildInfo =
localBuildInfo { localPkgDescr = fn (localPkgDescr localBuildInfo) }
updateLibrary fn =
updatePackageDescription (\x -> x { library = fmap fn (library x) })
updateLibBuildInfo fn =
updateLibrary (\x -> x { libBuildInfo = fn (libBuildInfo x) })
updateExtraLibDirs fn =
updateLibBuildInfo (\x -> x { extraLibDirs = fn (extraLibDirs x) })
addExtraLibDir path =
updateExtraLibDirs (\x -> path : x)