import Distribution.PackageDescription import Distribution.Simple import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..), localPkgDescr) import Distribution.Simple.PreProcess import Distribution.Simple.Setup import System.Directory (getCurrentDirectory) import System.FilePath (()) main :: IO () main = defaultMainWithHooks hooks where hooks = simpleUserHooks {confHook = \a flags -> confHook simpleUserHooks a flags >>= rsAddDirs} rsFolder :: FilePath rsFolder = "zcash-haskell/librustzcash-wrapper" rsAddDirs :: LocalBuildInfo -> IO LocalBuildInfo rsAddDirs lbi' = do dir <- getCurrentDirectory let rustIncludeDir = dir rsFolder "target/x86_64-unknown-linux-gnu/debug" rustLibDir = dir rsFolder "target/x86_64-unknown-linux-gnu/debug" updateLbi lbi = lbi {localPkgDescr = updatePkgDescr (localPkgDescr lbi)} updatePkgDescr pkgDescr = pkgDescr {library = updateLib <$> library pkgDescr} updateLib lib = lib {libBuildInfo = updateLibBi (libBuildInfo lib)} updateLibBi libBuild = libBuild { includeDirs = rustIncludeDir : includeDirs libBuild , extraLibDirs = rustLibDir : extraLibDirs libBuild } pure $ updateLbi lbi'