ソース取得
ソースは http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_6 にある。
コンパイル
$ autoconf $ ./configure --program-suffix=-1.6 $ make miniruby
ここまでは良い。問題は添付拡張ライブラリのコンパイルである。
lib/mkmf.rb
61行目付近にある rm_f がうまく動作しない。conftestで作成するバンドルのところで転ける。システムにとってはライブラリファイルだけどUNIXインターフェースにとってはディレクトリ、という状況を想定してないのだろう。
面倒なので、こう書き換える
def rm_f(*files) system 'rm', '-rf', *files return # .... もとの実装 end
ext/extmk.rb
44行目付近にあるrm_fが同じく
rbconfig.rb
まず、12行目のsrcdir。 /path/to/checkout/dir/'.' とか、余計な '.' が付いているので削除する。
それから、あちこちによく分からない |#!!#| という記号が付いているので全部削除する。
readline
readlineのヘッダと整合性がとれてなくてコンパイルできないっぽい。直すのが面倒なので捨てる。
ext/readline/extconf.rb の9行目を
if false and have_header("readline/readline.h") and
と無効にしてしまう。
ext/readlineのディレクトリ丸ごと消すのでも良いと思う。
make
ここまででmakeできる。
make install
make installすると、ftools.rbが見つからなくてinstruby.rbが転ける。Makefileを編集して、installのルールのminirubyを実行してるやつに、" -Ilib "を足す。
./miniruby$(EXEEXT) -Ilib $(srcdir)/instruby.rb --mantype=$(MANTYPE) $(DESTDIR)
それから、ruby_install_nameがなくて nil + String で例外が起きる。これを避けるためにrbconfig.rbを編集する。
CONFIG["RUBY_INSTALL_NAME"] = "ruby-1.6"
とか書いてある行があるので、これをコピーして
CONFIG["ruby_install_name"] = "ruby-1.6"
みたいな行を作る。
これでmake installできる。
おことわり
言うまでもないけど、くれぐれも自己責任で。うっかりruby 1.8を上書きして泣かないように。