関連するカバルパッケージを管理するためのベストプラクティスは何ですか?
質問
Haskellで書かれたデータフローベースの最適化ライブラリに取り組んでいます。今では、ライブラリを2つのピースに分割する必要がある可能性が高いようです。
a 芯 最小限のビルド依存関係を備えたピース。あれを呼べ
hoopl-core
.a 満杯 ピース、それを呼んでください
hoopl
, 、PrettyPrinter、QuickCheckなどのパッケージに追加の依存関係がある場合があります。
Glasgow Haskellコンパイラは hoopl-core
, 、そのため、コンパイラをブートストラップすることはそれほど難しくありません。他のコンパイラは追加のグッズを取得します hoopl
. 。パッケージ hoopl
依存します hoopl-core
.
Debianパッケージツールは、単一のソースツリーから複数のパッケージを構築できます。不運にも カバルはまだそのレベルの洗練に到達していません. 。ただし、同様の問題を抱える他のライブラリまたはアプリケーションデザイナーがいる必要があります(たとえば、コアライブラリ用のパッケージ、コマンドラインインターフェイス用の別のパッケージ、GUIインターフェイス用の別のパッケージ)。
Cabalを使用して複数の関連するHaskellパッケージを構築および管理するための現在のベストプラクティスは何ですか?
解決
2つのパッケージを別々のサブディレクトリに入れて、 Makefile
このようなもので:
.PHONY: all hoopl hoop-core
all : hoopl
hoopl : hoopl-core
cd hoopl && cabal build && cabal register --inplace
hoopl-core
cd hoopl-core && cabal build && cabal register --inplace
これは、最初にHoopl-Coreを構築して登録することでプロセスをブートストラップしたことを前提としています(--inplace
)そして建物 hoopl
. 。 MakeFileを使用して、これをさらに自動化できます。
ご存知のように、GHCの同様の機能が必要な場合、代わりに独自のビルドシステムを書きました;-)それをお勧めしません。技術的には、GHCビルドシステムから必要なピースを抽出し、再利用可能なフレームワークを作成することが可能だと思います...
他のヒント
2つのパッケージをソースコントロールリポジトリの個別のサブディレクトリに入れ、2つの個別のCABALファイルを使用します。
ファイルを移動するときは、ソース制御システムの移動操作を使用して、履歴を適切に追跡するようにしてください。