构建命令后的Cabal(Haskell构建系统)

时间:2013-07-12 19:08:49

标签: haskell build compilation cabal post-processing

在构建应用程序后,是否可以告诉Cabal运行某些命令?

我希望例如使用脚本生成一些.hs文件,并在构建之后将其他一些文件复制到dist/build/app目录。

1 个答案:

答案 0 :(得分:3)

是。请查看postInst及相关类型/操作。

Distribution.Simple.UserHooks

以下是一个快速示例,您可以通过相关操作来了解更多内容。 这将执行各种.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 }