わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Cygwinでrbenv install 2.0.0-devがエラー

気をよくして,

  • rbenv install 2.2.0-dev

を実行すると,また別のエラーが発生しました.
エラーメッセージは:

make: *** No rule to make target '.ext/include/x86_64-cygwin/ruby/config.h', needed by 'main.o'.  中止.

問題解決のヒントになったのは,次の情報でした.

r40755以降、Solarisでは、以下のように .ext/include/アーキテクチャ/ruby/config.h が作成されません。

原因は、r40755にて以下の行が./tool/ifchange に追加されたためです。
(略)
この tool/ifchangeは #!/bin/sh なのに、基本的な/bin/shでは解釈できない(bash依存?)記述が追加されたため、Solarisのようにピュアな/bin/shを持つOSでは、そこで処理がストップし、しかしconfigureではエラーを検知できないらしく、そのままconfig.hが作成されないままconfigureが正常終了してしまうのが原因のようです。

Bug #8524: r40755以降 No rule to make target `.ext/include/sparc64-solaris2.10/ruby/config.h でビルドできない - Ruby trunk - Ruby Issue Tracking System

そこで,Emacsで /tmp/ruby-build.年月日時分秒.たぶんプロセスID/ruby-2.2.0-dev/tool/ifchange を開いてみました.コードは変更(バグフィックス)されていました.先頭は「#!/bin/sh」ですが,これを「#!/bin/bash」に置き換えても,うまくいきません.
ログファイル(/tmp/ruby-build.年月日時分秒.たぶんプロセスID.log)に,また別のヒントがありました.

./tool/ifchange: line 3: $'\r': command not found
./tool/ifchange: line 4: set: -: invalid option
set: usage: set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]

着目したのは「\r」です.改行コードCRが入っていたためのエラーに,思えてきました.
Emacsでifchangeを見直すと,改行コードがCR+LFになっていました.
これをLFにしましょう.C-x C-m fそしてutf-8-unixとEnterを打ち込んで変更してから,保存しました.
ただ,エラーはmake時に出ていますが,上で引用したとおり,configure時の不具合により .ext/include/x86_64-cygwin/ruby/config.h が生成されなかったのでした.なのでconfigureからやり直さないといけません.
Emacsで ../Makefile*1を開き,「prefix = 」の右の値をコピーしてから,シェルで

  • cd /tmp/ruby-build.年月日時分秒.たぶんプロセスID/ruby-2.2.0-dev
  • ./configure --prefix=先ほどコピーした値

を実行して,しばらく待つと,config.hが作られ,makeも通りました.


追記:似たスペックの他のPC(そしてCygwin)で

  • rbenv install 2.2.0-dev

は問題なく通りました.
改行コードを設定しているのは,~/.gitconfig だったぞと思い浮かび,

  • git config --global core.autocrlf true
  • rbenv install 2.2.0-dev

を実行すると,エラーになりました.
ということで,rbenvやRubyのソースには不具合がなく,gitの処理で*2,改行コードをCR+LFに変えていたのが原因でした.これに気づいて

  • git config --global --unset core.autocrlf

を実行し,設定を取り除きました.

*1:ifchangeからの相対パスです.絶対パスだと /tmp/ruby-build.年月日時分秒.たぶんプロセスID/ruby-2.2.0-dev/Makefile です.

*2:rbenv installの出力には「Cloning https://github.com/ruby/ruby.git...」と表示されますし.