CabalによるHackageへのアップロードとSetup.hsの使い方
CabalでHackageにパッケージを上げたのでやり方をまとめておきます。
0.Hackageのアカウントを用意する
Hackageはダウンロードなら誰にでも出来るようになっていますが、アップロードするにはアカウントが必要になります。説明を読んで、ross@soi.city.ac.ukに(英語で)ユーザ名と初期パスワードをもらいましょう。
1.cabalファイルとSetup.hsの生成
次に、cabalコマンドを使って必要なファイルを.tar.gz形式のパッケージにまとめます。まずはアップロードしたいプロジェクトのディレクトリ内で
$ cabal init
をすると、パッケージ名や作者名を対話的に設定してくれます。この設定ファイルはプロジェクト名.cabalという名前で保存されますが、同時にSetup.hsというHaskellコードも生成されます。これはプロジェクトをビルドするために使うものです。
2.cabalファイルの修正
.cabalファイルは自動的に生成されますが、ほとんどの場合はここから手動で手直しをする必要があると思います。runhaskellコマンドを下のように進めていって順に問題点を洗い出しましょう。
$ runhaskell Setup.hs configure
$ runhaskell Setup.hs build
$ runhaskell Setup.hs install
この時によく使いそうな.cabalの項目は
- description: パッケージの詳しい説明
- extra-source-files: 追加のソースコード
- data-files: 画像などの添付データ
- build-depends: 依存しているパッケージ
- ghc-options: GHCに与えるオプション
の辺りかと思います。
詳しい.cabalとSetup.hsのドキュメントはUser's Guideにあります。詰まったときにはFAQも参考になります。
3.パッケージのチェックとアーカイブ
パッケージが無事ビルドできるようになったら、最後のチェックをします。
$ cabal check
これでパッケージの設定におかしなところがないかをチェックしてくれます。この作業はHackageのウェブサイトでも登録なしに可能です。
チェックが済んだらパッケージを.tar.gzにまとめます。
$ runhaskell Setup.hs sdist
これでdistディレクトリに完成したパッケージが出来るはずです。
4.パッケージのアップロード
最後にパッケージのアップロードです。
$ cabal upload パッケージ.tar.gz
ユーザ名とパスワードを求められるので、それを入力すればアップロード完了です。この作業もウェブサイトで出来ますが、なぜかcabalを使った方がかなり速いようです。
アップロードが終われば自分のパッケージをcabalからインストールできるようになっているはずです。
$ cabal update
$ cabal install パッケージ名
補足
cabalによるインストール時にはビルドしたバイナリとデータフォルダが別の位置に置かれるため、データフォルダのある場所からバイナリを起動する必要があるようです。
http://haskell.g.hatena.ne.jp/horaguchi/20080922/1222087909
また、それでは困るという場合にはこの辺りが参考になりそうです。
Accessing data files from package code