Bug #1924: マルチバイト文字を含んだパス内で ruby をビルドすると make install で失敗する
http://redmine.ruby-lang.org/issues/show/1924

起票者: Kenta Murata
ステータス: Open, 優先度: Normal
Target version: 1.9.x
ruby -v: ruby 1.9.2dev (2009-08-11 trunk 24495) [i686-linux]

マルチバイト文字を含んだパス内で ruby をビルドすると make install で失敗します。

$ make install
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb  ./tool/rbinstall.rb --make="make" --dest-dir="" --extout=".ext" --mflags="" --make-flags="" --data-mode=0644 --prog-mode=0755 --installed-list .installed.list --mantype="doc"
/home/muraken/src/るびぃ/ruby.git/lib/tempfile.rb:7:in `require': /home/muraken/src/るびぃ/ruby.git/lib/delegate.rb:140: invalid multibyte character: /\A\/home\/muraken\/src\/るびぃ\/ruby.git\/lib\/delegate.rb:\d+:in `method_missing'\z/ (SyntaxError)
        from /home/muraken/src/るびぃ/ruby.git/lib/tempfile.rb:7:in `<top (required)>'
        from ./tool/rbinstall.rb:15:in `require'
        from ./tool/rbinstall.rb:15:in `<main>'
make: *** [do-install-nodoc] エラー 1
$ pwd
/home/muraken/src/るびぃ/ruby.git


マルチバイト文字を含んだパスにインストールされた ruby でも同じ現象が発生します。

$ ~/る/bin/ruby -v -rdelegate -e ''
ruby 1.9.2dev (2009-08-11 trunk 24495) [i686-linux]
-e:0:in `require': /home/muraken/る/lib/ruby/1.9.1/delegate.rb:140: invalid multibyte character: /\A\/home\/muraken\/る\/lib\/ruby\/1.9.1\/delegate.rb:\d+:in `method_missing'\z/ (SyntaxError)


以下の変更で治ります。

diff --git a/lib/delegate.rb b/lib/delegate.rb
index 5fc0caf..d0b732a 100644
--- a/lib/delegate.rb
+++ b/lib/delegate.rb
@@ -137,7 +137,7 @@ class Delegator
         target.__send__(m, *args, &block)
       end
     rescue Exception
-      $@.delete_if{|s| %r"\A#{__FILE__}:\d+:in `method_missing'\z"o =~ s}
+      $@.delete_if{|s| %r"\A#{Regexp.quote(__FILE__)}:\d+:in `method_missing'\z"o =~ s}
       ::Kernel::raise
     end
   end


----------------------------------------
http://redmine.ruby-lang.org