気をよくして,
- 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 に追加されたためです。
Bug #8524: r40755以降 No rule to make target `.ext/include/sparc64-solaris2.10/ruby/config.h でビルドできない - Ruby trunk - Ruby Issue Tracking System
(略)
この tool/ifchangeは #!/bin/sh なのに、基本的な/bin/shでは解釈できない(bash依存?)記述が追加されたため、Solarisのようにピュアな/bin/shを持つOSでは、そこで処理がストップし、しかしconfigureではエラーを検知できないらしく、そのままconfig.hが作成されないままconfigureが正常終了してしまうのが原因のようです。
そこで,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 = 」の右の値をコピーしてから,シェルで
を実行して,しばらく待つと,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
を実行し,設定を取り除きました.