なかだです。

コマンドラインから-Iで相対パスが指定された場合、-CやDir.chdirを
使うと別のディレクトリを指すことになりますが、最初に指定された
ときのまま固定のほうが使いやすいのでないでしょうか。つまり、-I
の引数はその場で絶対パスに展開する、ということです。


Index: ruby.c =================================================================== RCS file: /cvs/ruby/src/ruby/ruby.c,v retrieving revision 1.97 diff -U2 -p -r1.97 ruby.c --- ruby.c 4 Mar 2005 06:47:41 -0000 1.97 +++ ruby.c 20 Apr 2005 03:53:07 -0000 @@ -179,6 +179,7 @@ rubylib_mangle(s, l) void -ruby_incpush(path) +ruby_push_include(path, filter) const char *path; + VALUE (*filter)_((VALUE)); { const char sep = PATH_SEP_CHAR; @@ -200,9 +201,9 @@ ruby_incpush(path) while (*p == sep) p++; if (s = strchr(p, sep)) { - rb_ary_push(ary, rubylib_mangled_path(p, (int)(s-p))); + rb_ary_push(ary, (*filter)(rubylib_mangled_path(p, (int)(s-p)))); p = s + 1; } else { - rb_ary_push(ary, rubylib_mangled_path2(p)); + rb_ary_push(ary, (*filter)(rubylib_mangled_path2(p))); break; } @@ -211,8 +212,38 @@ ruby_incpush(path) } else { - rb_ary_push(rb_load_path, rubylib_mangled_path2(path)); + rb_ary_push(rb_load_path, (*filter)(rubylib_mangled_path2(path))); } } +static VALUE +identical_path(path) + VALUE path; +{ + return path; +} + +void +ruby_incpush(const char *path) +{ + ruby_push_include(path, identical_path); +} + +static VALUE +expand_include_path(path) + VALUE path; +{ + char *p = RSTRING(path)->ptr; + if (!p) return path; + if (*p == '.' && p[1] == '/') return path; + return rb_file_expand_path(path, Qnil); +} + + +void +ruby_incpush_expand(const char *path) +{ + ruby_push_include(path, expand_include_path); +} + #if defined DOSISH || defined __CYGWIN__ #define LOAD_RELATIVE 1 @@ -627,7 +658,7 @@ proc_options(argc, argv) forbid_setid("-I"); if (*++s) - ruby_incpush(s); + ruby_incpush_expand(s); else if (argv[1]) { - ruby_incpush(argv[1]); + ruby_incpush_expand(argv[1]); argc--,argv++; }
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦