Ruby を Subversion からチェックアウトしてコンパイル

ruby の trunk をそろそろ使い始めようと思い、CentOS 5 で試してみる

$ mkdir -p ~/svn/ruby
$ cd ~/svn/ruby
$ svn co http://svn.ruby-lang.org/repos/ruby/trunk
$ cd trunk
$ ./configure --prefix=~/local

ってあれ。configureない。なので autoconf したら

$ autoconf
configure.in:5: error: Autoconf version 2.60 or higher is required
configure.in:5: the top level
autom4te: /usr/bin/m4 failed with exit status: 63

がーん。CentOS5じゃコンパイルできんのか。

てわけで autoconf の最新版を入手。

$ cd ~/src
$ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.63.tar.gz
$ tar -xzf autoconf-2.63.tar.gz
$ cd autoconf-2.63
$ ./configure --prefix=~/local
configure: error: expected an absolute directory name for --prefix: ~/local

フォオオオオ

このへんのレイヤのこと判らないのばればれ。

$ ./configure --prefix=`echo ~/local`
$ make
$ make install

やっと成功。これで autoconf 使えるはず。

$ cd ~/svn/ruby/trunk
$ ~/local/bin/autoconf

これも成功。

$ cd ~/svn/ruby/trunk
$ ./configure --prefix=`echo ~`/local/ --program-suffix=_trunk
$ make
(略)
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb  "./tool/transcode-tblgen.rb" -vo "enc/trans/big5.c" "enc/trans/big5.trans"
/home/kat/svn/ruby/trunk/lib/optparse.rb:1626: [BUG] Segmentation fault
ruby 1.9.2dev (2009-03-14 trunk 22957) [i686-linux]

ちょ。SEGVった。

報告すべきなんだろうかこれ。

1.9をでやっても起きない。

$ svn co http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0
$ cd v1_9_1_0/
$ ./configure --prefix=`echo ~`/local/ --program-suffix=1.9
$ make
$ make install
$ ~/local/bin/ruby1.9 -e 'puts "hello"'
hello

まぁ基本的にrubyの内部コード見たかっただけなのでこれでも良い。

$ ~/local/bin/ruby1.9 --dump=insn -e 'puts "hello"'
== disasm: <RubyVM::InstructionSequence:<main>@-e>======================
0000 trace            1                                               (   1)
0002 putnil
0003 putstring        "hello"
0005 send             :puts, 1, nil, 8, <ic>
0011 leave

仕上げに PATH に ~/local/bin を入れておく。

とりあえず目的達成。