LoginSignup
27
26

More than 5 years have passed since last update.

Ruby 2.1.1 / 2.0.0をreadline 6.3の環境でもインストールするには

Last updated at Posted at 2014-04-24

更新:readline 6.3.5以上でpatchなしインストールが可能になったようです

Homebrewの場合は5/10に6.3.5になりました。
readline 6.3.5 · d62a6cf · Homebrew/homebrew

Ruby 2.1.1 を rbenv で入れようとするとビルドがコケる。
brew な readline が 6.3.3 にいつの間にか上がってて、それだとマズいらしい。
と思ったら brew 側の readline が 6.3.5 に上がってた。
のと、Rubyも2.1.2 が出てた。
なんか素直に2.1.1も2.1.2も入った。
atton.blog: rbenv と readline でゴニョゴニョした話

ということでこの記事は古くなりました。
ご利用ありがとうございました。

'14/6/24追記:コンパイラがgccだとインストールに失敗するそうです

Rubyのインストール時にはLLVMベースのコンパイラ(llvm-gcc-4.2 or clang)を使う必要があるようで、僕の環境ではgcc 4.7.3がデフォルトに設定されていました。
Mavericksのデフォルトではgccはclangにエイリアスされているため、大方の人はここではつまづかないであろうと思われます
Macでrbenv install 2.x.xに失敗する - Qiita

(以下は元の記事)

はじめに

readline 6.3.3でもRuby 2.1.1がインストールできたのでその情報をアップしておきます。
(追記:2.0.0-p451でもインストールできるpatchを作りました。またそのpatchは2.0.0の他のバージョンでもOKでした。)

いつ頃から影響が出ているか

(日本時間)
MacのhomebrewだとreadlineのFormulaが'14/4/14に6.2.4から6.3.3に更新されました。
GNUのbug-readline MLでは[Bug-readline] Readline-6.3 Official Patch 3が'14/4/1に出ています。
readlineのせいでRubyがうまくインストールできない、という記載は4月半ばぐらいから出てきています。

Ruby 2.1.1インストール

次のように、patchを当ててインストールすれば問題ありません。
OpenSSLもインストールするようにしています。

curl -sSL https://gist.github.com/mislav/a18b9d7f0dc5b9efc162.txt | env CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install --patch 2.1.1

(多分そんなひとは少ないと思いますが)OpenSSLが不要であれば
--with-openssl-dir=`brew --prefix openssl`
オプションを削ってください。

またviを使うとかQtを使いたいとかいうことで--enable-sharedにしておきたい場合(私ですがw)には

curl -sSL https://gist.github.com/mislav/a18b9d7f0dc5b9efc162.txt | env CONFIGURE_OPTS="--enable-shared --with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install -f --patch 2.1.1

とすれば大丈夫です。ちなみに、Rubyを上書きしたいので-fオプションも入れています。

Ruby 2.0.0インストール

いまのところ、どこにもpatchが無いので直ぐにはできません。
(なんとかしてpatchを作ってみたいとも思ってますが)
現状ではreadlineを6.2.4にしてからインストールしてください。

Ruby 2.0.0用のpatchできました^^ このpatchはMacに限らず汎用になると思います(未確認ですが)。2.0.0-p451/p353/p247/p195/p0全てで使えました。
冒頭のreadlineとOpenSSLを使ってのインストールの場合は

curl -sSL https://gist.github.com/riocampos/b2669b26016207224f06.txt | env CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install --patch 2.0.0-p451

でいけます。
--enable-sharedオプションを付けたい場合に関しては省略しておきます。同じ手順で問題なくインストールできます。

Ruby 1.9.3のインストールは

readline 6.3.3でもpatchを当てずにインストール可能です。

インストールが失敗する原因

原因は
Readline patch ported from Ruby trunk to help 2.1.1 compile on Arch linux
に記載されていますが

rl_hook_func_t is available since readline-4.2 (2001).
Function is removed at readline-6.3 (2014).
However, editline (NetBSD 6.1.3, 2014) doesn't have rl_hook_func_t.

6.3以降で削除されてしまったためです。

お断り

基本的にはMac(Mavericks 10.9.2)でhomebrew/rbenvを使っている環境です。当初はMacユーザ向けに書いていたのですが、書いているうちに環境依存性が薄れてきました。
ので、readline 6.3とRuby 2.x.xとの関連ということでエントリします(タイトルが度々変わってしまい申し訳ないです)。

参考エントリ

おまけ

27
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
26