2013/02/25

rbenv で --enable-shared な ruby 2.0.0-p0 をビルドする

ruby 2.0.0-p0 が 昨日リリースされましたねー。

私は rbenv で ruby を管理しているので、rbenv の ruby installer の ruby-build への反映待ち プラス、 ruby-build を brew で入れてるので brew への反映待ちということで今日試してみることに。 というかこう見ると依存酷い。

あと、Vim で rubyinterp を使うためには dylib が必要なので、 --enable-shared な 2.0.0-p0 が欲しいところ。なのでビルドしてみた。

環境

  • OS X Mountain Lion
  • XCode 4.6 + Command Line Tools
  • rbenv 0.4.0
  • ruby-build 20130224 

結論

$ RUBY_CONFIGURE_OPTS="--enable-shared" rbenv install 2.0.0-p0
とりあえず結論から先に書くと、RUBY_CONFIGURE_OPTS を使えば良い様子。
以下、格闘のログだのぼやきだの。

 

格闘ログとかぼやきとかつぶやき


atton.blog: ruby 1.9.3 の rubyinterp を有効にした最新の Vim を brew でビルドする で書いたように

$ CONFIGURE_OPTS="--enable-shared" rbenv install 2.0.0-p0 
じゃダメな様子。

1.9系列の yaml みたいに、2.0.0 では openssl を rbenv が依存の解決として入れてくれるのだけれど、 openssl の configure にも --enable-shared が渡っちゃって configure が落ちる。
openssl は shared ってオプションがあるらしいので、そっちに合わせると、今度は ruby の configure が通らない。

どーしたものかしてると 2.0.0-rc2 のビルドが通らない的な issue を見つける。
そこでは openssl の path とか gcc とか cc の話もあるのだけれど
2.0.0-rc2 build failed · Issue #290 · sstephenson/ruby-build · GitHub
RUBY_CONFIGURE_OPTS=--with-openssl-dir=`brew --prefix openssl`  ...
 というのを発見。

RUBY_CONFIGURE_OPTS 使えば良いのかなー、と思って試してみる。
この issue 的に brew の openssl を使いたかったからかもしれないけれど、 --with-openssl-dir も指定する必要があるらしい。
けれど私は brew で入れてる訳じゃないのでどーしたものか。
とりあえず、試しに openssl-dir は無視して
$ RUBY_CONFIGURE_OPTS="--enable-shared" rbenv install 2.0.0-p0
する。通った。なんか怖い。
一応、 configure のオプションを見るために ruby-build に echo 挟んだつもりなのだけれど全く出ていない。なんか怖い。
でもちゃんと dylib ある。うーん。
%ls ~/.rbenv/versions/2.0.0-p0/lib/
libruby.2.0.0-static.a    libruby.2.0.dylib    pkgconfig
libruby.2.0.0.dylib    libruby.dylib        ruby
rbenv とか ruby-build がどこで作業してるのか分からないので configure の log 見られないし、ruby が見てる openssl のバージョン確認もできそうにない。
 ちなみにコマンド打つと出てくる openssl は Mac のデフォルトの様子

%which openssl
/usr/bin/openssl
%openssl version
OpenSSL 0.9.8r 8 Feb 2011

うーむ。 ruby-build 側の openssl でちゃんと build されてるかな。 気になる。
とりえあず、openssl の version が低くて bundle install がコケる事例 があるらしいので、逆に bundle install できたら良いかな、と思ってその辺も試す。

まずは 2.0.0-p0 を使うように
$ rbenv global 2.0.0-p0

とりあえず github から 本家 rails を clone。んで、bundle install 前にバージョン確認
%ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0]
%gem -v
2.0.0
大丈夫そう。
念のため gem の version を update
%gem update --system
Latest version currently installed. Aborting.
最新。
いざ bundle install と思ったら
%bundle install
rbenv: bundle: command not found

The `bundle' command exists in these Ruby versions:
  1.9.2-p320
  1.9.3-p194
入ってない。入れる。
%gem install bundle
さらにもう一度 bundle install と思ったら
%bundle install
Bundler is not compatible with Ruby 2.0 or Rubygems 2.0.
Please upgrade to Bundler 1.3 or higher.
なんか 2.0互換無いっぽい。gem install bundle で入った bundler は  1.2.4 で
Ruby 2.0 で bundler を使うには 1.3 以降を入れたら良い らしい。ので
$ gem install bundler --version '1.3.0.pre'
いざもう一度 bundle install。
いろいろ入ったので大丈夫っぽい。 mysql の native extention の compile はコケたけれどこれは bundler 側の問題じゃないよね……?
bundle install できたので openssl も有効であると勝手に判断。最低限、古くはなさそう。
一応 irb で requre 'openssl'  すると true 返ってきたから良いのかな。
その辺分かる方いたら教えて欲しいです。 ruby が見てる openssl の path 表示方法とか。

という訳でなんだかんだしながら --enable-shared な 2.0.0-p0 のビルド完了。
2.0.0 でほげほげする前に大分時間食った感。
brew だと brew install ruby --enable-shared とかで良いのかな。 rbenv さんもその辺サポートしてくんないかな。
あと、1.9.3だと gcc のversion は組込みだと落ちたのに、2.0.0だと通ったのも気になる。大丈夫かな。

まー、今のところ問題無し。何もしてないので問題の発生しようも無いけれど。

0 件のコメント:

コメントを投稿