保科です。 On Sat, Nov 14, 1998 at 12:31:28AM +0900, Motoyuki Kasahara <m-kasahr / sra.co.jp> wrote: > 笠原です。 > > あああ、これは私のパッチが原因だと思います。 > (詳しくは ChangeLog をご参照下さい。) 見てみました。笠原さんのパッチは今後ともずっとinstruby.rbに含まれて いるべきものと思います。 > rbconfig.rb 自体には手は入れてないので、こっちは分かりません。 はい。ちょっと書き方が足りなかったのですが、rbconfig.rbそのものは 共通で1byteも変ってません。 ただ、instruby.rbの先頭で、 require "rbconfig" include Config というような記述があり、rbconfig.rbにズラッと書かれている CONFIG["bindir"] = ... の類が参照されているのですが、これらの代入文としての評価がすでに 終ってしまっているような感じでして、instruby.rb側で一生懸命なにかを 代入しても、CONFIG[]の内容が変化していないように見える、ということです。 ですので、例として、rbconfig.rb の方には > CONFIG["exec_prefix"] = "#{CONFIG[\"prefix\"]}" という記述があるのですが、instrubyの方で prefix になにかを代入 たとえば prefix = "/tmp" などとしたとしても、CONFIG["exec_prefix"] も /tmp になるか、というと ならないようだ、と書きたかったのです。わかりにくいですね(笑) > > -bindir = CONFIG["bindir"] > > -libdir = CONFIG["libdir"] + "/" + ruby_install_name > > +bindir = prefix + "/bin" > > +libdir = prefix + "/lib/" + ruby_install_name > > archdir = libdir+"/"+CONFIG["arch"] > > -mandir = CONFIG["mandir"] + "/man1" > > +mandir = prefix + "/man/man1" > > う〜ん。逆にこうしてしまうと、configure の --libdir とか --mandir, > --bindir が無効になってしまうのですよね。1.1c6 までがそうだったので、 > パッチ作って採用して貰ったのですが。 これにはRedHatというかrpm作成側の一方的な都合が絡んでいますから、 必ずしもrubyの配布物にパッチとして含めてくれ、というつもりはないです。 rpmをご存知ない方もいらっしゃるでしょうから、パッケージ作成作業の 簡単な流れを説明させてください。 rpmを作るには必ずspecファイルというものが必要です。レシピです。 通常は、ソースを展開し、パッチなどを(あれば)あて、普通に人手ですると 同じように、 ./configure --prefix=/usr make などとしてconfigure、makeします。そしてインストールするわけですが、 この際には直接、目的の位置にインストールするのではなく/var/tmpなどの 一時的な位置にインストールします。仮想インストールなどと言うときも あるようです。 無事にinstallが終わると、最終的に/var/tmp以下にできているusrだのlib だのといったディレクトリ構成も含めて固め、rpmとなります。ですから 実際の位置である /usr/lib や /usr/bin にファイルを配置するのは、 作成されたrpmをインストールするrpmコマンド(ややこしい)の仕事に なるのです。 tarballで通常配布されているソースに含まれたMakefileを使って、そのまま make installで配置されるということにはならないのです。 で、こういった仮想的なinstallをruby-1.1c7で実行しようとすると、 make prefix=/var/tmp install となるのですが、これができません。上記のような事情で、ruby 1.1c7の instruby.rbではinstall時に指定されたprefixを読んではいますが、内部 ではどこにも反映されず、rbconfig.rbの内容をそのまま使ってしまう からです。 かといって、./configure 時にprefix=/var/tmp などと指定してmake しちゃうと、それらはrbconfig.rbに保存されますし、installした後でも /var/tmp の下をrubyが見にきてしまいます。そこにはrpmの作成中しか ものは置いてないので全然動かない、ということに… 結局、configure時のprefixと、make install時のprefixに異なるものが 指定されたときにも解釈してくれるようなinstruby.rbがrpm化の際には 都合が良い、というところに落着きます。 ということで最初にもどって、笠原さんのパッチをそのまま使ってて ください(赤帽の都合は無視してもらっても結構です)と書いたのは、 普通にtarballからmakeしてデフォルト以外のディレクトリ構成で installする人は、えぐち@エスアンドイーさんが別メールでおっしゃる ように、configure時に調整済で、installは素直にそのままでしょうし、 rpm化する際には、specファイルの中で意識して、今回のようにパッチなりを あててしまえば、閉じたものになりますから。 ただ1点だけ、libruby.so が今のinstruby.rbだと /usr/local/lib/ruby に 置かれます。1.1c6では/usr/local/lib に置かれていました。 通常、/usr/local/lib/rubyなどの固有なディレクトリは/etc/ld.so.conf には書かれていないので、ldconfigは見にきませんよね。 これは何か事情があってこうなっているのですか? ruby-jedがlibruby.so のDynamic Linkに失敗するので、rpmの方ではlib直下に入るように変えて (というか戻して)しまいました。 -- Toru Hoshina Network Associates,Inc. Pacific Rim, Software Engineer. http://www.best.com/~hoshina PGP fingerprint : 95 73 1C 26 C6 9E 28 86 BA 32 34 CA FC 9B DC 6D