世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2008年01月24日

Ruby 1.6.8 on MacOSX Leopard

懐かしの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を上書きして泣かないように。

トラックバック

http://yugui.jp/articles/744/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system