Haskell PlatformをUbuntu 13.04に導入する

あらまし

本来Ubuntuでは最新にこだわりさえしなければ

sudo apt-get install haskell-platform

で済むのだが、今回13.04 raringを今日2013年6月1日に導入するという事態に関して言うと最大限面倒。

  • Haskell Platformは現在のバージョンが2013.2なのだが、13.04リリース時はひとつ前のものでghc 7.6に対応していなかった。にもかかわらずUbuntughc 7.4ではなくghc 7.6をパッケージとして採用したためにHaskell Platformが収録されないというふざけた事態に。
  • しかもその肝心のghc 7.6は7.6.2で、haskell platformの導入要件である7.6.3を満たしていなかった。ghcから入れる必要がある。
  • ghcのバイナリパッケージはgmp10じゃなくてgmp3に依存するので使えない。

要はどっちもソースから入れないといけないわけですね。bootstrapのGHCあるだけマシか…

つべこべ言ってないでGHCをビルドする

まずは下ごしらえをしよう

# 依存ライブラリを事前に導入, ghcもbootstrapに必要なので導入
sudo apt-get install devscripts equivs build-essentials ghc
# これでghc依存のライブラリをまとめたdebができる
mk-build-deps ghc
# これをインストールすればいいんだけど、dpkgは依存の解析をしないのでコケる
sudo dpkg -i ghc-build-deps_7.6.2-1ubuntu1_amd64.deb
# で、apt-getで修復をかけると依存するライブラリが全部ごっそり入る
sudo apt-get install -f

ではいよいよビルドだ。

tar xf ghc-7.6.3-src.tar.bz2
cd ghc-7.6.3
./configure --prefix=/usr/local/opt/ghc-7.6.3
make
sudo make install

今思えば/usr/localに直接放り込んだほうが早かったが、後の祭りである。

Haskell Platformの導入

# 何故かは知らないがOpenGLが必要らしい
sudo apt-get install freeglut3-dev
./configure --with-ghc=/usr/local/opt/ghc-7.6.3/bin/ghc --with-ghc-pkg=/usr/local/opt/ghc-7.6.3/bin/ghc-pkg --with-hsc2hs=/usr/local/opt/ghc-7.6.3/bin/hsc2hs
make
sudo make install

シンボリックリンク

なぜかGHCを変なところに入れてしまったのでリンクを貼っておく。

for i in /usr/local/opt/ghc-7.6.3/bin/*; do
    sudo ln -s $i /usr/local/bin/`basename $i`
done

hsenv導入

依存関係の衝突が一番怖いので、とりあえずhsenvを入れておいて、アプリケーションごとに違う環境を使おう

cabal install hsenv