Haskell 取决于阴谋集团中的二进制存在
为了简单起见,我想编写一个包,它需要在系统上存在某个(非Haskell)程序,即PHCPack 如果它是一个库,我可以只添加一个Haskell 取决于阴谋集团中的二进制存在,haskell,cabal,Haskell,Cabal,为了简单起见,我想编写一个包,它需要在系统上存在某个(非Haskell)程序,即PHCPack 如果它是一个库,我可以只添加一个额外库字段。我如何依赖于特定二进制文件的存在 目前,如果路径中有一个具有正确名称的二进制文件,对我来说就足够了 好的,下面是我的想法(感谢n.m的建议)。我的Setup.hs(有点简单化)如下所示: import Distribution.Simple import Distribution.Simple.Utils(warn) import Distribution
额外库
字段。我如何依赖于特定二进制文件的存在
目前,如果路径中有一个具有正确名称的二进制文件,对我来说就足够了 好的,下面是我的想法(感谢n.m的建议)。我的Setup.hs(有点简单化)如下所示:
import Distribution.Simple
import Distribution.Simple.Utils(warn)
import Distribution.Verbosity(normal)
import System.FilePath(getSearchPath,(</>))
import System.Directory(doesFileExist,getPermissions,executable)
import Control.Monad(filterM,unless)
main = do
let hooks = simpleUserHooks {
preConf = \args cnfFlags -> do
info <- (preConf simpleUserHooks) args cnfFlags
checkPHC
return info
}
defaultMainWithHooks hooks
checkPHC :: IO ()
checkPHC = do
locations <- phcLocations
(if null locations then
warn normal "No PHC binary found in PATH."
else do
p <- mapM getPermissions locations
unless (any executable p) $ warn normal "PHC file found, but not executable.")
phcLocations :: IO [FilePath]
phcLocations = do
paths <- getSearchPath
filterM doesFileExist $ map (</> "phc") paths
导入分发。简单
导入分发.Simple.Utils(警告)
导入分发。详细性(正常)
导入System.FilePath(getSearchPath,())
导入System.Directory(doesFileExist、getPermissions、可执行文件)
导入控制.Monad(filterM,除非)
main=do
设hooks=simpleUserHooks{
precf=\args cnfFlags->do
信息您的软件包需要此二进制文件才能生成,还是仅仅为了正确执行?它只在执行期间需要。为什么人为地使生成失败?您不知道该软件包将如何使用。可能它将在一台计算机上生成,并在另一台计算机上使用。如果二进制文件不存在,则应警告用户可以在Setup.hs
中执行eck。