packages feed

extism-1.2.0.0: Setup.lhs

This file was generated by `cargo-cabal`, its goal is to define few hooks to
call `cargo` on the fly and link correctly the generated library.

While it's an acceptable hack as this project is currently a prototype, this
should be removed before `cargo-cabal` stable release.

> import Data.Maybe
> import qualified Distribution.PackageDescription as PD
> import Distribution.Simple
>   ( Args,
>     UserHooks (confHook, preConf),
>     defaultMainWithHooks,
>     simpleUserHooks,
>   )
> import Distribution.Simple.LocalBuildInfo
>   ( LocalBuildInfo (localPkgDescr),
>   )
> import Distribution.Simple.Setup
>   ( BuildFlags (buildVerbosity),
>     ConfigFlags (configVerbosity),
>     fromFlag,
>   )
> import Distribution.Simple.UserHooks
>   ( UserHooks (buildHook, confHook),
>   )
> import Distribution.Simple.Utils (rawSystemExit)
> import System.Directory (getCurrentDirectory)
>
> main :: IO ()
> main =
>   defaultMainWithHooks
>     simpleUserHooks
>       { confHook = rustConfHook
>       , buildHook = rustBuildHook
>       }

This hook could be remove if at some point, likely if this issue is resolved
https://github.com/haskell/cabal/issues/2641

> rustConfHook ::
>   (PD.GenericPackageDescription, PD.HookedBuildInfo) ->
>   ConfigFlags ->
>   IO LocalBuildInfo
> rustConfHook (description, buildInfo) flags = do
>   localBuildInfo <- confHook simpleUserHooks (description, buildInfo) flags
>   let packageDescription = localPkgDescr localBuildInfo
>       library = fromJust $ PD.library packageDescription
>       libraryBuildInfo = PD.libBuildInfo library
>   dir <- getCurrentDirectory
>   return localBuildInfo
>     { localPkgDescr = packageDescription
>       { PD.library = Just $ library
>         { PD.libBuildInfo = libraryBuildInfo
>           { PD.extraLibDirs = (dir ++ "/target/release") :
>                               (dir ++ "/target/debug") :
>             PD.extraLibDirs libraryBuildInfo
>     } } } }

It would be nice to remove this hook ot some point, e.g., if this RFC is merged
in Cabal https://github.com/haskell/cabal/issues/7906

> rustBuildHook ::
>   PD.PackageDescription ->
>   LocalBuildInfo ->
>   UserHooks ->
>   BuildFlags ->
>   IO ()
> rustBuildHook description localBuildInfo hooks flags = do
>   putStrLn "******************************************************************"
>   putStrLn "Call `cargo build --release` to build a dependency written in Rust"
>   -- FIXME: add `--target $TARGET` flag to support cross-compiling to $TARGET
>   -- rawSystemExit (fromFlag $ buildVerbosity flags) "cargo" ["build","--release"]
>   rawSystemExit (fromFlag $ buildVerbosity flags) "bash" ["./scripts/download-or-build.sh"]
>   putStrLn "... `rustc` compilation seems to succeed 🦀! Back to Cabal build:"
>   putStrLn "******************************************************************"
>   putStrLn "Back to Cabal build"
>   buildHook simpleUserHooks description localBuildInfo hooks flags

This handy automation (particularly useful when you want to quickly prototype
without having to spawn manually `cargo` commands) is disabled by default.
Feel free to re-enable it while debugging your library, but I discourage you
strongly to publish anything on Hackage that contains this hook!