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、mosh、Gauche等が必要になる。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すると全てのキャッシュを作り直す必要がある。