Gentoo Haskell Overlay 使うときの基本的な設定

最近なにやらDebian勢が「Haskell使うならDebian」と猛プッシュしてきててアレなので,Gentoo勢としての話を少々.

Debian勢が現時点のcabalが持つ脆弱なhackage間依存性解決やcabalが干渉できないhackage外パッケージとの依存性解決をaptでカバーしているように,Gentoo勢もportageでカバーしている部分がある.今後cabalが強い子になってhackage間依存性解決能力が高まってくるとしても,hackage外パッケージとの依存性解決についてはどうしても考慮せざるを得ないので,今後もシステム固有のパッケージシステムが仲介を果たす必要は残っていくのではないかと思う.

Gentooにおいては,通常以下のようにlaymanでHaskell Overlay入れてからのHaskell Platform入れが定石になるだろう.

# emerge -v layman
# layman -S
# layman -a haskell
# nano -w /etc/make.conf
+source "/var/lib/layman/make.conf"
# emerge -v haskell-platform

この際,後々の開発作業を考慮すると,Haskell Platformをemergeする前にやっといたほうがいい設定が2つある.もちろん開発しない場合はこの限りではない.

ひとつ,USEフラグでprofileを有効にしておく.これが無いとインストールされるパッケージのプロファイル版が入らないので,もし開発中パフォーマンスに何か問題あったときにプロファイルが取れなくなる.

# nano -w /etc/make.conf
+USE="${USE} profile"

ひとつ,cabalを--enable-shared付きでconfigureされるようにしておく.これが無いと前回の記事のように共有ライブラリを作る(-dynamicオプション付きでビルドする)必要がある場合,ビルドできなくなる.

# nano -w /etc/make.conf
+CABAL_EXTRA_CONFIGURE_FLAGS=--enable-shared

それぞれcabal configのlibrary-profilingやsharedのTrue相当をemerge時に反映させる設定となる.通常版(*.hi),profile版(*.p_hi),shared版(*.dyn_hi)をそれぞれ作るようになるので,emergeがちょっと遅くなるが,Gentoo使いには「だから何?」程度の日常だろう.

その他何か設定が必要になったとき詳細は/usr/portage/eclass/haskell-cabal.eclassを眺めるとなんとなく知ることができる.