懐かしのRuby 1.6をコンパイルする。
ソース取得
ソースは 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を上書きして泣かないように。
コメント