解決はできていないんだが、とりあえず現象だけを記録しておく。
現象はこの記事のタイトルどおり。
Ruby 1.9.2 をビルドする際に、パッケージを展開したディレクトリのパス名に空白が入っていると make test
で失敗する。
「Macintosh HD 2」という名前に空白がふくまれていた
以下に失敗する際の実行結果を示す。ここで ~/tools
というディレクトリはシンボリックリンクで、実際の場所は /Volumes/Macintosh HD 2/Users/mnbi/tools
だ。「Macintosh HD 2
」に空白文字がふくまれている。
[imac] mnbi% cd ruby-1.9.2-p0 [~/tools]
[imac] mnbi% ./configure --enable-shared --enable-pthread
checking build system type... i386-apple-darwin10.4.1
checking host system type... i386-apple-darwin10.4.1
checking target system type... i386-apple-darwin10.4.1
checking for gcc... gcc
[...snip...]
Generating RI...
Files: 515
Classes: 1088 ( 654 undocumented)
Constants: 1364 ( 1141 undocumented)
Modules: 251 ( 147 undocumented)
Methods: 7645 ( 2873 undocumented)
53.47% documented
Elapsed: 44.6s
[imac] mnbi% make test [~/tools/ruby-1.9.2-p0]
./tool/rubytest.rb:19:in ``': No such file or directory - \
/Volumes/Macintosh HD 2/Users/mnbi/tools/ruby-1.9.2-p0/ruby \
/Volumes/Macintosh HD 2/Users/mnbi/tools/ruby-1.9.2-p0/sample/test.rb \
(Errno::ENOENT)
from ./tool/rubytest.rb:19:in `<main>'
make: *** [yes-test-sample] Error 1
この「Macintosh HD 2
」というのは、SDD + HDD という iMac の構成の HDD の側に付けられているボリューム名だ。これが、そのままマウントポイントにもなっているため、パス名に空白文字が現れることになる。
tool/rubytest.rb に問題があるようだ
エラーメッセージからわかるとおり、原因の1つは tool/rubytest.rb にある。
(ruby-1.9.2-p0/tool/rubytest.rb より)
18: srcdir = File.expand_path('..', File.dirname(__FILE__))
19: `#{ruby} #{srcdir}/sample/test.rb`.each_line do |line|
20: if line =~ /^end of test/
19 行目のバッククォートによる外部コマンド呼び出しで、パス中の空白文字がシェルに対してエスケープされないまま渡ることでエラーが起きる。
バッククォートの中の 2 つの要素をそれぞれシングルクォートで挟んでみれば、ある程度は通るものの、途中からエラーが出る。エラーの原因はやはりパス名中の空白によりファイルを見つけられないことで起きている。まだ、どこか他にも問題が残っているらしい。
以下がその実行結果。test_attr.rb
以降のテストはすべてエラーになってしまう。
[imac] mnbi% make test [~/tools/ruby-1.9.2-p0] sample/test.rb:assignment ............................................\ ......................................................................\ ......................................................................\ ......................................................................\ ......................................................................\ ................................................ sample/test.rb:condition .. sample/test.rb:if/unless ... sample/test.rb:case ..... sample/test.rb:while/until ........ sample/test.rb:exception .......... sample/test.rb:array ....................................... sample/test.rb:hash ........................... sample/test.rb:iterator ..............................................\ ................................................................. sample/test.rb:float .................................................\ ............................... sample/test.rb:bignum ............................... sample/test.rb:string & char .........................................\ ..................... sample/test.rb:assignment .......... sample/test.rb:call ...... sample/test.rb:proc ......... sample/test.rb:signal .. sample/test.rb:eval ............................. sample/test.rb:system ......... sample/test.rb:const ..... sample/test.rb:clone ..... sample/test.rb:marshal .... sample/test.rb:pack .... sample/test.rb:math .. sample/test.rb:struct ...... sample/test.rb:variable ........... sample/test.rb:trace ... sample/test.rb:defined? ............ sample/test.rb:alias ...... sample/test.rb:path ....................... sample/test.rb:gc .... test succeeded test_attr.rb EE test_autoload.rb EEEEEEEEEEE test_block.rb EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [...snip...] #1 test_attr.rb:1:in `<top (required)>': No such file or directory \ - /Volumes/Macintosh HD 2/Users/mnbi/tools/ruby-1.9.2-p0/ruby \ -I/Volumes/Macintosh HD 2/Users/mnbi/tools/ruby-1.9.2-p0/lib -W0 \ bootstraptest.tmp.rb [ruby-core:14641] [...snip...]
と、今日はここまで。パス名に空白文字のふくまれない場所でビルドすればテストもすべて通るから大きな問題ではない。だから、この先を解析することはないかも。
ちなみに、ruby-1.8.7-p302 ではこの現象は起きない。テストの仕組みが変わったようだ。
関連リンク
- Ruby 1.9.2リリース (Ruby 公式サイト)
0 件のコメント:
コメントを投稿