#!/usr/bin/env runhaskell \begin{code} {- OPTIONS_GHC -Wall #-} import Control.Monad (liftM2, mplus) import Data.List (isPrefixOf) import Distribution.PackageDescription import Distribution.Simple import Distribution.Simple.LocalBuildInfo import Distribution.Simple.Program import Distribution.Verbosity main = defaultMainWithHooks simpleUserHooks { hookedPrograms = [mysqlConfigProgram], confHook = \pkg flags -> do lbi <- confHook simpleUserHooks pkg flags bi <- mysqlBuildInfo lbi return lbi { localPkgDescr = updatePackageDescription (Just bi, []) (localPkgDescr lbi) } } mysqlConfigProgram = (simpleProgram "mysql_config") { programFindLocation = \verbosity -> liftM2 mplus (findProgramLocation verbosity "mysql_config") (findProgramLocation verbosity "mysql_config5") } mysqlBuildInfo :: LocalBuildInfo -> IO BuildInfo mysqlBuildInfo lbi = do let mysqlConfig = fmap words . rawSystemProgramStdoutConf normal mysqlConfigProgram (withPrograms lbi) include <- mysqlConfig ["--include"] libs <- mysqlConfig ["--libs"] return emptyBuildInfo { extraLibDirs = map (drop 2) . filter ("-L" `isPrefixOf`) $ libs , extraLibs = map (drop 2) . filter ("-l" `isPrefixOf`) . filter (/= "-lmygcc") $ libs , includeDirs = map (drop 2) include } \end{code}