結局のところMoshを使うにはどうすれば良いのか

(警告 ; 以下の記述はすべて64bitユーザランドLinuxをインストールしていることを前提としている。もし、少ない労力でmoshをインストールしたいのなら、32bitのx86 debianあるいはubuntuユーザランドを準備することを薦める。BSDや他のアーキテクチャでは検証していない。)

追記

  • --hostオプションを使ってconfigureした方が好ましいので、修正した。gentooであれば、gcc-config -lで選択できるhostが一覧できる。crossdevを使って追加で導入する必要があるかもしれない。
  • また、それに伴いMakefileの修正はもう不要になった。但し、GMPの場所は別途指定する必要がある。これは将来的に--with-gmpで指定できるようになる(はず)。

追記

このセットアップは、

というディレクトリ構成で、Gentoo Linux、crossdevでの32bitコンパイラにおける手法を書いている。通常のシチュエーションであれば、--hostやCFLAGSの追加は不要で、単純にconfigureしてmake、make installという通常の手順でインストールすることができる。

リリース版のmoshのインストール

SVN版のmoshをビルドするにはmoshが要るので、まずはmoshを入手してインストールする。
システムが32bitであれば正常にビルドできるが、64bitではエラーになる。

TextualInputPort.cpp: In constructor 'scheme::TextualInputPort::TextualInputPort(scheme::BinaryInputPort*, scheme::Transcoder*)':
TextualInputPort.cpp:58: error: call of overloaded 'ucs4string(NULL)' is ambiguous
ucs4string.h:57: note: candidates are: scheme::ucs4string::ucs4string(const ucs4char*)
ucs4string.h:56: note: scheme::ucs4string::ucs4string(int, ucs4char)
ucs4string.h:53: note: scheme::ucs4string::ucs4string(const scheme::ucs4string&)

通常のLinuxならば32bit版のライブラリと実行インフラ(multilib)を備えるので、単純にコンパイラコマンドラインに-m32を付与すればよい。

  1. http://code.google.com/p/mosh-scheme/downloads/list からソースコードを入手
  2. CFLAGS=-m32 CXXFLAGS=-m32 ./configure --prefix=/opt/mosh-rel
    • ./configure --host=i686-pc-linux-gnu --prefix=/opt/mosh-rel
    • --hostを使うほうが好ましいので修正
  3. gc-7.1alpha3に行って、Makefileを修正し、CFLAGSに-m32を足す。
  4. 普通にビルド&インストール

(32bit ABIの) Gnu MPのインストール

(通常の人間はこのセクションを読み飛ばせる)
最近のmoshGNU MPライブラリに依存しており、通常のLinuxは32bit版の周辺ライブラリをデフォルトでは提供していない。
先のCFLAGSの直接指定に拠る方法ではなく、GNU MPには組み込みの32bit ABIサポートがあるため、32bit ABIでビルドするために以下のようにする。

  • ./configure ABI=32 --enable-cxx --prefix=/opt/gmp32

あとは通常通りにインストールすればよい。
既に64bit版のGMPをインストールしている可能性もあるので十分に注意する。特に他の目的で32bit版のGMPを使う予定が無ければ、prefixはmoshと同一でも問題無い。

SVN版のmoshのインストール

以下r764r781に関して。

  1. http://code.google.com/p/mosh-scheme/source/checkoutSVNコマンドラインがあるので実行する
  2. CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-L/opt/gmp32/lib ./configure --prefix=/opt/mosh
    • CFLAGS=-I/opt/gmp32/include CXXFLAGS=-I/opt/gmp32/include LDFLAGS=./configure --host=i686-pc-linux-gnu --prefix=/opt/mosh
    • --hostを使用した方が好ましいので修正
  3. 先ほどと同じようにMakefileを修正
  4. 先ほどインストールしたmoshをソースツリー中にコピー(ビルド中に./moshで呼ぶため。。) 不要となった。
  5. ビルド

oku@localhost ~/mosh/mosh-scheme-read-only $ uname -a
Linux localhost 2.6.21-xen #3 SMP Mon May 26 09:54:02 JST 2008 x86_64 Intel(R) Core(TM)2 CPU 6700 @ 2.66GHz GenuineIntel GNU/Linux
oku@localhost ~/mosh/mosh-scheme-read-only $ mosh -t
Running 1848/1858 (9 ToDo)
=== 1 error(s) =========
(nan? (rationalize +inf.0 +inf.0)) : expected #t but got #f.