From: nobu.nakada@... Date: 2001-07-23T23:05:19+09:00 Subject: [ruby-dev:14002] Re: library search path なかだです。 At Mon, 23 Jul 2001 01:00:03 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > すいません。これだけ大きなパッチだともうちょっと説明していた > だかないと挙動を全部追いきれません。なんかあちこちいじってあ > るし。 すいません、あいかわらず分かりにくくて。だいたいいくつか書き 忘れてましたし。 (1) requireでファイルを探すときにアーキテクチャ名をパスの一部と して追加する。 rb_find_file_noext()を拡張、拡張子のリストを外部から指定で きるようにする(名前も変更)。 (2) 拡張子が指定されていないときは各ディレクトリごとに拡張子を 付加して検索する。 拡張子はrb_f_require()から条件によって与える。 ex. $(dir1)/$(arch)/foo.rb $(dir1)/$(arch)/foo.$(DLEXT) $(dir1)/$(arch)/foo.$(DLEXT2) $(dir1)/foo.rb $(dir1)/foo.$(DLEXT) $(dir1)/foo.$(DLEXT2) $(dir2)/$(arch)/foo.rb $(dir2)/$(arch)/foo.$(DLEXT) $(dir2)/$(arch)/foo.$(DLEXT2) $(dir2)/foo.rb $(dir2)/foo.$(DLEXT) $(dir2)/foo.$(DLEXT2) (3) .soや.oが指定されたときも同様に各ディレクトリごとにDLEXT ->DLEXT2の順に検索する。 .rbを除く以外は(2)と同様。 ex. 変更前 $(dir1)/foo.$(DLEXT) $(dir2)/foo.$(DLEXT) $(dir1)/foo.$(DLEXT2) $(dir2)/foo.$(DLEXT2) 変更後 $(dir1)/foo.$(DLEXT) $(dir1)/foo.$(DLEXT2) $(dir2)/foo.$(DLEXT) $(dir2)/foo.$(DLEXT2) (4) 拡張子が指定されているときはその名前自体をprovideする。 rb_provide_feature()で拡張子を付け変えるのではなく、必要な 場合はrb_f_require()で追加する。 (5) アーキテクチャ名はconfigureで指定する。 とりあえず、追加したりできるように$LOAD_ARCHという変数に保 持。一応rbconfig.rbにも設定。 (6) パス名がマルチバイトの一部としてdirectory separaterを含んで いても正しく処理する。 ruby.cのマクロとCheng氏のパッチ[ruby-dev:13847]から流用。 (7) 不必要なdirectory separaterを追加しない。 ほとんどの環境では問題にならないが、DOS/Windowsでは問題にな ることがあるので。 (8) パス名に\0は含めない。 なんとなくヤバそうというか、Stringとしての操作とchar*として の操作に不整合が生じそうだったし、だいたいそんなものが含ま れてたらおかしいはずだから。 まぁこんなとこで、内容は合点していただけたでしょうか。 # 善し悪しやら採否やらはおいといて。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦