すがブロ

sugamasaoのhatenablogだよ

Rubyの先っちょ(2.0.dev)をビルドする

Jenkins でビルドして test-all を実行するまでの手順メモ

Rubyの trunk が 2.0 になったことだし、ビルドしたくて手が震えてしまいますよね!! そんなあなたのための備忘録です。

環境
  • Mac OSX 10.6.8 SnowLeopard
  • autoconf 2.68(このエントリを書いた時点では2.61でやっていたけど、最新版にアップデートした)
    • ports で入れた 2.64? を使っていた時、Rubyの ./configure --with-openssl-dir オプションが正しく認識されてなかったのだけど、uninstall して OS にデフォルトでインストールされている方*1を使ったらうまく動作した 最新版の 2.68 をパッケージでインストールした
    • 下記のURLから最新版の2.68をインストールすることができた

手順

  1. Ruby を チェックアウトします(git か svn か使いたい方で)
  2. cd ruby
  3. /usr/local/bin/autoconf # このコマンドで configure ファイルを作る
  4. ./configure --prefix=$HOME/rubies/ruby_20111024 --with-openssl-dir=/opt/local --with-libyaml-dir=/opt/local
    • openssl と libyaml はデフォルトでは入ってなかったので別途portsを使ってインストールを行った。そのため、インストール先を指定する必要がある
  5. make
    • make時に "Please install yaml" のような記述があるものは、別途 ports 等でインストールする必要がある。
  6. make test-all

test-all で必要になって追加インストールしたもの

  • ports で install しているので、configure の --with オプションで利用するパスは /opt/local になる
    • sudo port install openssl
    • sudo port install libyaml
jenkins でCI環境を作るときに必要なもの

実行ユーザがdaemonで、$HOMEが /var/root になっていて書き込み権限まわりでうまくいかなかった。しかたなく、HOMEの値をちょっと退避させて対応を行った。

Jenkinsでビルドするときのスクリプトはこんな感じ。
ちなみに、チェックアウト先の "ローカルモジュールディレクトリ" は ruby_src に指定してある。

ORG_HOME=${HOME}
HOME=${JENKINS_HOME}
DIR=`pwd`
mkdir -p ruby
cd ruby_src
/usr/local/bin/autoconf
./configure --prefix=${DIR}/ruby --with-openssl-dir=/opt/local --with-libyaml-dir=/opt/local
make
make test-all
HOME=${ORG_HOME}

※ pkg でインストールした最新版である 2.68 の autoconf を使うために、絶対パスで実行するように修正しました*2

ちなみに

上記の設定で Jenkins 上ではきちんとビルドできるようになったのだけど、自分のターミナルから実行すると

 71) Failure:
test_read_mode(TestIO_M17N) [/Users/sugamasao/rubies/ruby_src/test/ruby/test_io_m17n.rb:1552]:
<"a\nb\nc\n\x{C2A2}"> expected but was
<"a\nb\nc\n蔵">.

 72) Failure:
test_pipe(TestIO_M17N) [/Users/sugamasao/rubies/ruby_src/test/ruby/test_io_m17n.rb:707]:
<nil> expected but was
<#<Encoding:UTF-8>>.

こんな感じで エンコード周り(と思われる箇所)のエラーがでてしまう。
LANGの設定かなぁと思って設定しないで*3実行してみたのだけど、状態変わらず。。。どこの設定を変えればいいのか教えて下しあ!!

*1:2.61ね

*2:パスの通っている方は 2.61 なのであった

*3:空にしたり、unsetしたり