ghc-6.8.2のコンパイル

なんでもbreakpointとか設定できたりなんやりでおいしいらしい。
これは試してみるしかないべ、ghc6.8

ということでコンパイルしてみたのだが、どうもうまくゆかん。
というエントリ。
一応解決。


ということで何も考えずGHCのとこからghc-6.8.2-src.tar.bz2とghc-6.8.2-src-extralibs.tar.bz2をおとしてくる。
ソース、ソース。
で、何も考えず

$ ./configure
$ m
$ sudo make install

#mは"make -j3"のエイリアスなのだ!


で、試しにghciを起動...。
...タブ保管できねぇ。つーかバックスペースが"^?"に...。


どうみてもreadlineが死んでるっぽい。


とりあえずコンパイル済みのbinaryパッケージでもつかってみるか、ということで再びGHCのとこからghc-6.8.2-i386-unknown-linux.tar.bz2をおとしてみる。
で、

$ ./configure
$ ./sudo make install

#コンパイル済みだからmakeはいらんのです!


で、試しにghciを起動。

/usr/local/lib/ghc-6.8.2/ghc-6.8.2: error while loading shared libraries: libreadline.so.4: cannot open shared object file: No such file or directory

ぬ、readline4使ってんのか!!
とはいえurpmiには"libreadline5"しかないし...

ってかインストール元に書いてあったね

Note: You need the libreadline.so.4 and libncurses.so.5 libraries to use this. Newer Linux distributions come with libreadline.so.5 only (e.g. SuSE 9.2), so we have provided a readline4 compatiblity RPM for this case.

とか思いつつググってると

ln -s libreadline.so.5 libreadline.so.4

したら動いた、とか。
...いいのか?それ?

とりあえずやってみた

$ cd /lib
$ sudo -s libreadline.so.{5,4}

#bash方言丸出しなのです!
で、ghciを起動と...。

GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help
Loading package base ... linking ... done.
Prelude>
Display all 472 possibilities? (y or n)

動いたよ...。ちゃんとtabで補完効くし。


まぁ、これだと嫌なので、どうにかしたい、とか思ってたらなんかreadline5のghc-6.8.2ができた。
ghcってそれ自身をコンパイルするのにghc自体が必要らしいので、↑のようにシンボリックリンク作ったまま、ソースの方をもいっちょコンパイルしたらできた、のかな?
色々やってたんで分からない...。
とりあえず、偽libreadline4でコンパイル済みghcを動かして、それからさらにソースをコンパイル
checking whether ghc has readline package... yes
とかでれば多分ok

$ ldd /usr/local/lib/ghc-6.8.2/ghc-6.8.2
        linux-gate.so.1 =>  (0xffffe000)
        libreadline.so.5 => /lib/libreadline.so.5 (0xb7f35000)
        libncurses.so.5 => /lib/libncurses.so.5 (0xb7eed000)
        libutil.so.1 => /lib/libutil.so.1 (0xb7ee9000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7ee5000)
        libm.so.6 => /lib/i686/libm.so.6 (0xb7ec0000)
        libgmp.so.3 => /usr/lib/libgmp.so.3 (0xb7e84000)
        librt.so.1 => /lib/i686/librt.so.1 (0xb7e7b000)
        libpthread.so.0 => /lib/i686/libpthread.so.0 (0xb7e64000)
        libc.so.6 => /lib/i686/libc.so.6 (0xb7d24000)
        /lib/ld-linux.so.2 (0xb7f7e000)

あとは作ったlibreadline.so.4のシンボリックリスト消してやればおっけ。


んー。readline4をいれてやってもいいのかな?
まぁ、動いたのでよしとしよう。