R6RS Macros and R6RS librariesを今度こそ移植する の4

この方法でビルドしたバイナリをmake installしないこと
簡単なキャッシュ機構を導入し、moshのバイナリにランタイムを内蔵できるようにした。これにより、expanderをコンパイルする時間を省けるので、元のmosh程度には高速に起動する。

ビルド

まず、/usr/local/share/mosh/0.2.0/lib/match.scmを修正する。

(only (rnrs) define-syntax syntax-rules _ ... vector? define if let ...

(rnrs)

これをやらないと、(match)ライブラリでvectorをマッチできない。
gitリポジトリmoshをビルドするためには、re2cやautoconf、moshGauche等が必要になる。fatmoshをビルドする場合、moshのバージョンはそれほど新しくなくても正常に動作する。

git clone git://github.com/okuoku/mosh
git checkout fatmosh #(今はデフォルトブランチをfatmoshにしてるので不要)
autoreconf -ifv
cd ext/fatmosh
make inject-nmosh
cd ../../
make
mkdir cache

まだfatmoshのinjectがall-tests.scmを作らないのでそこで失敗する。
ビルドされたmoshはpsyntaxの代わりにR6RS Macros and R6RS librariesを含んでいる。

oku@sandbox ~/repos/mosh $ ./mosh
nmosh top program
nmosh>

キャッシュ機構

元の実装にバージョン管理機構が含まれているため、不正なライブラリをロードするとちゃんとエラーになる。
ただし、そこからライブラリのリビルドに持って行くことは今のところ出来ない。キャッシュは./cache/*に行われる。基本的に、一度make inject-nmoshすると全てのキャッシュを作り直す必要がある。