在构建应用程序后,是否可以告诉Cabal运行某些命令?
我希望例如使用脚本生成一些.hs
文件,并在构建之后将其他一些文件复制到dist/build/app
目录。
答案 0 :(得分:3)
是。请查看postInst
及相关类型/操作。
以下是一个快速示例,您可以通过相关操作来了解更多内容。
这将执行各种.sh脚本,复制文件等。在cabal构建之后。
absoluteInstallDirs
告诉你cabal放置其他文件的位置
你需要它。
希望这有帮助!
import Distribution.Simple
import Distribution.Simple.LocalBuildInfo
import System.Process
import System.Exit
main = defaultMainWithHooks fixpointHooks
fixpointHooks = simpleUserHooks { postInst = buildAndCopyFixpoint }
buildAndCopyFixpoint _ _ pkg lbi
= do putStrLn $ "Post Install: " ++ show binDir -- , libDir)
executeShellCommand "./configure"
executeShellCommand "./build.sh"
executeShellCommand $ "chmod a+x external/fixpoint/fixpoint.native "
executeShellCommand $ "cp external/fixpoint/fixpoint.native " ++ binDir
executeShellCommand $ "cp external/z3/lib/libz3.* " ++ binDir
where
allDirs = absoluteInstallDirs pkg lbi NoCopyDest
binDir = bindir allDirs ++ "/"
executeShellCommand cmd = putStrLn ("EXEC: " ++ cmd) >> system cmd >>= check
where
check (ExitSuccess) = return ()
check (ExitFailure n) = error $ "cmd: " ++ cmd ++ " failure code " ++ show n
fixpointHooks = simpleUserHooks { postInst = buildAndCopyFixpoint }