Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 取决于阴谋集团中的二进制存在_Haskell_Cabal - Fatal编程技术网

Haskell 取决于阴谋集团中的二进制存在

Haskell 取决于阴谋集团中的二进制存在,haskell,cabal,Haskell,Cabal,为了简单起见,我想编写一个包,它需要在系统上存在某个(非Haskell)程序,即PHCPack 如果它是一个库,我可以只添加一个额外库字段。我如何依赖于特定二进制文件的存在 目前,如果路径中有一个具有正确名称的二进制文件,对我来说就足够了 好的,下面是我的想法(感谢n.m的建议)。我的Setup.hs(有点简单化)如下所示: import Distribution.Simple import Distribution.Simple.Utils(warn) import Distribution

为了简单起见,我想编写一个包,它需要在系统上存在某个(非Haskell)程序,即PHCPack

如果它是一个库,我可以只添加一个
额外库
字段。我如何依赖于特定二进制文件的存在


目前,如果路径中有一个具有正确名称的二进制文件,对我来说就足够了

好的,下面是我的想法(感谢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。