小松です。
In message of [ruby-list:15883] Re: cannot install ruby-gtk into FreeBSD 2.2.x
on 1999/8/5 01:02:20 matz / netlab.co.jp (Yukihiro Matsumoto) wrote:
|定数 RUBY_INTERPRETER に rb_argv0 の値を入れるだけで良いんで
|すか? それなら一瞬ですが、それが本当に欲しいものなのかしら?
本当に欲しいものはrubyを起動するためのフルパスなんですが、
全ての場合に正しいパスを取得するのは、OSにその機能がない
限り無理だと思います。
たとえば、以下のようなwhich.rbが失敗する例とか。
ということで、適当な妥協点を見つけたいなと思っています。
それはそれとして、perlの$^X相当の機能は欲しいと (^^;
$^Xとフルパスの両方が取れるともっとうれしい。
OSのサポートとしては、たとえばWin32ならGetModuleFileName()
というAPIがあります。
% cat rubywrap.c
int main(int argc, char *argv[])
{
chdir("/usr/local/lib/ruby/1.3");
if (execvp("ruby", argv) < 0) {
perror("execvp");
return 1;
}
return 0;
}
% gcc -o rubywrap rubywrap.c
% pwd
/tmp
% ./rubywrap -ve 'puts RUBY_INTERPRETER; puts Dir.pwd'
ruby 1.3.6 (1999-07-28) [sparc-solaris2.5.1]
./rubywrap
/usr/local/lib/ruby/1.3
% ( cd /usr/local/lib/ruby/1.3 ; which.rb ./rubywrap )
%
# そういえばwhich.rbで、PATHをsplitした要素が""なら「.」とみなす
# というのが入ってない。
|また、インタプリタへの生の引数が欲しいって話も聞こえたような
|気がするんですが。
そちらは
cd /usr/local/bin
./ruby -X/home/lang/ruby-ext/gtk extconf.rb
のような例では、カレントディレクトリを特定できないので
すくなくとも今回の目的のためにはつかえません。
絶対パスで起動してもらうか、起動時のカレントディレクトリを
とれるようにするか、rubyのフルパスが取れるようにするか……
# でも欲しいと思う方はいるでしょうね。
# 欲しい方はリクエストしましょう。
--
小松克行 / Katsuyuki Komatsu <komatsu / sarion.co.jp>