cabalコマンドを使う際の注意点

 cabal installコマンドは,パッケージのインストールに必要な手順を簡略化してくれます。しかし,こうした簡略化はまだ完全ではありません。例えば,Haskell Platform 2010.1.0.0でのcabal installでは,FFIを利用するパッケージの依存関係を十分に解決することはできません。cabalでは,指定した場所にあるバイナリをインストールするための方法を提供していないため,Setup.hsやSetuo.lhsを自分でカスタマイズしない限り,FFIを使った関数の呼び出しに必要なCやC++のライブラリを自動的にインストールできないからです。FFIを利用するパッケージをインストールする場合は,FFIで呼び出すライブラリをあらかじめシステムにインストールしておく必要があります。

 インストールしたいパッケージがFFIを使っている場合,そのパッケージのHackageDBのページを見て,パッケージをビルドするのに必要な情報がないか調べましょう。例えば,hmatrixパッケージやwxHaskellのwxパッケージでは,パッケージをビルド/インストールする方法を記したドキュメントがWebページに置いてあります。HackageDBのページには,これらへのリンクが張られています。

 情報が見あたらない場合には,HackageDB内のソース・ファイルのアーカイブやソース・ファイルのバージョン管理を行っているリポジトリにドキュメントがないかどうか探してみましょう。作者のページにインストール方法に関する情報がある場合もあります(参考リンク)。

 加えて,FFIを使用するパッケージでは,Windows固有の問題に直面することもあります。

 FFIを使ってOSのAPIや外部ライブラリの関数を呼び出すようなパッケージでは,多くの場合,利用可能なAPIを調べるのにconfigureを使用します。しかし,configureはUnixを想定しているため,Windowsのコマンドプロンプトでは使用できません。Windowsのコマンドプロンプトを使ってconfigureを使用しているパッケージをインストールしようとすると,以下のようなエラー・メッセージが表示されて処理が中断されることになります。

$ cabal install network-2.2.1.6
Resolving dependencies...
Configuring network-2.2.1.6...
cabal: The package has a './configure' script. This requires a Unix
compatibility toolchain such as MinGW+MSYS or Cygwin.
cabal: Error: some packages failed to install:
network-2.2.1.6 failed during the configure step. The exception was:
ExitFailure 1

 Windowsでは,MinGWMSYSをインストールして,MSYS上でcabal installコマンドを使用することになります。なお,MinGW/MSYSの代わりにCygwinを使うことも考えられますが,GHCはMinGWのgccを使って作成されているため,Cygwinでは不具合があるようです。MinGW/MSYSを使うのが無難でしょう。

 cabalには,ほかにも多くのコマンドやオプションが用意されています。それらについては--helpオプションを使って調べてください。cabalに対して単に--helpオプションを使用した場合にはcabalの使い方に関する全般的な説明が表示されます。cabalの各コマンドに対して--helpオプションを使用した場合には,そのコマンドの使い方の説明が表示されます。

 なお,cabalのconfigureコマンドやinstallコマンドで提供されているオプションの多くは,Cabalパッケージに由来します。そうしたオプションについて調べる場合にはCabalパッケージのドキュメントも参考になります。