2

簡単にするために、システム上に特定の (Haskell 以外の) プログラム、つまり PHCPack が存在する必要があるパッケージを作成したいと考えています。

ライブラリであれば、extra-librariesフィールドを追加するだけで済みます。特定のバイナリの存在に依存するにはどうすればよいですか?

今のところ、正しい名前のバイナリが .xml にあればそれで十分ですPATH

4

1 に答える 1

1

わかりました、これが私が思いついたものです(提案について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」と呼ばれるバイナリをチェックします。

于 2013-01-20T10:23:03.103 に答える