2012-09-24 10 views
12

HaskellプロジェクトをHackageにアップロードするためにCabalizeしたいと思います。ブートストラップ実行可能ファイルを構築する標準の.hsファイルと、ブートストラップ実行可能ファイルによって処理されてプロダクション実行可能ファイルを構築する.hsファイルを生成する8つの非標準の.lhsファイルで構成されています。Cabalパッケージでブートストラップ実行ファイルを構築して使用する方法

言い換えれば、私のプロジェクトは、それ自身で書かれたカスタムリテラルプリプロセッサ(HTMLマークアップ、コードグルーミング、ここでのドキュメント)です。これは、生産バージョンのリテラートコードを翻訳できるブートストラップバージョンに依存しますが、一般的な使用には適していません。だからブートストラップのバージョンを別のパッケージにしないでください。ここで一度だけ使用されることを意図しています。

私はCabalで可能ですがCabalの精神ではないMakefileを使用しています。カバールの一般性を最大限に引き出す、これを行うきれいな方法は何ですか?私は、Distribution.Simpleを書き直すか、Makefileを使うのに足りない、オンラインドキュメントの中で、これに関する提案は見ていません。

答えて

7

私はブートストラップの実行可能ファイルを別のパッケージとしてリリースするのが最も簡単な解決策であり、instructions available on how to integrate your custom preprocessor with 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" 
+0

ニース!私は今これを実験しています。私のブートストラッププリプロセッサコードはかなり短いです。 1つのオプションは私が単にSetup.hsにそれを含めることです! – Syzygies

関連する問題