小松です。

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>