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
で、試しに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をいれてやってもいいのかな?
まぁ、動いたのでよしとしよう。