ブートストラップ実行可能ファイルを別のパッケージとしてリリースするのが最も簡単な解決策だと思います。カスタム プリプロセッサを Cabal と統合する方法については、利用可能な指示があります。
そうしたくない場合は、プリプロセッサを の一部にしてみてくださいSetup.hs
(ビルド タイプを ! に設定することを忘れないでくださいCustom
)。構成ステップ中にプリプロセッサーを実行できます。これがどのように行われるかを見てくださいwxcore
。
これが実際の例です(の後にパターン化されていますwxcore
):
Setup.hs
:
import Distribution.Simple
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Setup
import Distribution.PackageDescription
import Control.Monad (forM_)
import System.Directory (copyFile)
import System.FilePath (replaceExtension)
main :: IO ()
main = defaultMainWithHooks simpleUserHooks { confHook = myConfHook }
-- Replace 'copyFile' with more complicated logic.
runMyPreprocessor :: FilePath -> IO ()
runMyPreprocessor abcFile = copyFile abcFile (replaceExtension abcFile ".hs")
myConfHook :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags
-> IO LocalBuildInfo
myConfHook (pkgDesc, hbi) flags = do
let extraSrc = extraSrcFiles . packageDescription $ pkgDesc
forM_ extraSrc runMyPreprocessor
confHook simpleUserHooks (pkgDesc, hbi) flags
my-preprocessor.cabal
:
name: my-preprocessor
version: 0.1.0.0
build-type: Custom
cabal-version: >=1.8
extra-source-files: Main.abc
executable my-preprocessor
main-is: Main.hs
build-depends: base < 5
Main.abc
:
module Main
where
main :: IO ()
main = putStrLn "Hello"