簡単にするために、システム上に特定の (Haskell 以外の) プログラム、つまり PHCPack が存在する必要があるパッケージを作成したいと考えています。
ライブラリであれば、extra-libraries
フィールドを追加するだけで済みます。特定のバイナリの存在に依存するにはどうすればよいですか?
今のところ、正しい名前のバイナリが .xml にあればそれで十分ですPATH
。
わかりました、これが私が思いついたものです(提案についてnmに感謝します)。私の(やや単純化された) 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
PATH で「phc」と呼ばれるバイナリをチェックします。