著作一覧 |
いろいろ要求されるものの関連がわからずに時間がかかったので、rubiniusを作るためのメモを残す。
後で必要になるものをまず用意する(素のOSXの場合)。
Xcode。これは当然。
portコマンドを作る。結局、これがなければ後の作業がとんでもなく大変になる。
pkgもあるが、作っても良いかも。svnのリリースレポジトリのタグリストから今ならrelease_1_8__2を取り出す。svn export http://svn.macports.org/repository/macports/tags/release_1_8_2
。Make用ディレクトリはbaseなのでcd base
する。このままだと/optにインストールされて面倒なので、--prefixを使ってインストールしたい場所にしておく。cf)./configure --prefix=$HOME
。そこまでできたら、make install
。--prefix=/usr/localとかしたら、当然sudoする。
portができたら、いろいろportする。
port -d selfupdate
port install nkf
port install git-core
(長時間注意)
rakeとgemが新しくないといろいろ困ることになるので、OSXデフォルトのrubyを利用する前提で、全部更新する。
sudo gem update --system
sudo gem install rake
(複数のrubyがいり混ざった環境だと、/usr/bin/rubyを見に行ったりされることがある(どれか忘れた)ので厄介なことになる)
gitが手に入ったので、rubiniusを取り出す。
mkdir git;cd git
git clone git://github.com/evanphx/rubinius.git
cd rubinius
./configure --prefix=$HOME
rake install
$HOMEを指定した場合、rubiniusは、$HOME/rubinius/にインストールされる。現在のバージョンだとコマンド(rbx)は$HOME/rubinius/1.0/binにインストールされるので、PATHに加えておく。
はまったところ。
途中でいろいろportを入れたりいじったので、$HOME/includeや$HOME/libが正しく参照されていなかったらしく、rake時にはOSXに最初から入っているlibiconvを参照して、しかし実行時にはportが入れたlibiconvを参照して、動作しなかった。
rubinius/1.0/lib/iconv.rbを開くと、attach_functionで参照する関数名が乗っているので、iconv -> libiconv
のように、関数名の先頭にlibを付けるか、または実行時にロードするlibiconvを/usr/lib/libiconvに変えるように設定する(が、面倒なので直接iconv.rbを修正した)。
使いたい関数やマクロが定義されていないので、いろいろ直す必要がある。
基本は、rb_funcallを使うこと。
いずれにしろMRI互換レイヤーみたいなものは、rb_funcallで実装されているので同じことだ。
互換レイヤのソースディレクトリは、vm/capi。
特に、RHASH_TBLは「1」にdefineされているので、そのままではmakeできなくなる。#if defined(RUBINIUS)
する。
rbx irb
盲点だった。
ジェズイットを見習え |