module Main where
import Distribution.Simple
import Distribution.Simple.Setup
import Distribution.Simple.Utils (rawSystemExit)
import Distribution.PackageDescription
import System.Directory (doesFileExist, withCurrentDirectory)
import Control.Monad (unless)
import qualified Distribution.Verbosity as V
type PreSDistHook = (Args -> SDistFlags -> IO HookedBuildInfo)
updatePreSDistHook :: (PreSDistHook -> PreSDistHook) -> UserHooks -> UserHooks
updatePreSDistHook update hooks@UserHooks{ preSDist = old } = hooks { preSDist = update old }
configureSQLCipher :: PreSDistHook -> PreSDistHook
configureSQLCipher originalHook args flags@SDistFlags{ sDistVerbosity = verbosity } = do
withCurrentDirectory "sqlcipher" $
unlessFileExist "sqlite3.c" $ do
let verbosity' = fromFlagOrDefault V.normal verbosity
rawSystemExit verbosity' "./configure"
[ "--disable-tcl"
, "--enable-tempstore"
, "CFLAGS=-DSQLITE_HAS_CODEC"
, "LDFLAGS=-lcrypto"]
rawSystemExit verbosity' "make" []
originalHook args flags
where
unlessFileExist filePath action = doesFileExist filePath >>= flip unless action
main :: IO ()
main = defaultMainWithHooks $ updatePreSDistHook configureSQLCipher autoconfUserHooks