丁稚な日々

Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...

[直前] [最新] [直後] [Top]

Sep.4,2002 (Wed)

Revision: 1.2 (Sep.04,2002 12:24)

registry.rb/resolv.rb

_ (近況 02/09/02 のところ)
Win9Xでどうすればいいか、わかったら教えてください...

Pre-compiled

_ フルセットというと、わたなべさんやAndyさんみたいなものだと思うです。
私のはちっとも「フル」じゃないので...
(しかも、追っかけてるほんの数個の拡張ライブラリなどですら遅れ気味)

_ いや、でも、わたなべさんのはほんとに凄いです。
なんであれだけの数をあのペースで維持しつづけられるのでしょう?

Sep.6,2002 (Fri)

Revision: 1.3 (Sep.06,2002 22:53)

mswin32

_ uconv-0.4.10、vrswin-020902、vruby-020830、win32ole-0.5.1。
やっぱり遅れすぎ。
そうそう、StringIO(僕自身が考えてるのはShim全体ですが)のことは忘れてはいないのですが、ちと待ち中です。

resolv.rb

_ (近況 02/09/05 のところ)
ありがとうございます。つまり、場所は事実上決めうちでいけってことですか?
resolv.rb:450行目付近からの分はわかりませんでした。見てるresolv.rbが違うのかしらん。
というか、うちのもいつの間にか動かなくなってるなぁ。あれれ?

Sep.8,2002 (Sun)

Revision: 1.2 (Sep.10,2002 09:24)

mswin32

_ vruby-020906。

_ いくつかcommit。
time.cのやつ、わたなべさんが手を入れられているのですが、gccのバージョンによるのかなぁ? はたまた警告関連のオプション指定の問題なのかしらん。うちのgcc(2.95.3 on NetBSD)は何も言わなかったので。

resolv.rb

_ (近況 02/09/06 のところ)
なるほど。
hostsの場所を決めるのにレジストリのDataBasePathを見てたのは、レジストリを見ればWin9X系とNT系で処理を共通にできるんじゃなかろうか、という期待があったからだったように思います。
というわけで、hostsに関しては、[ruby-dev:15098]みたいにした方が単純でいいかもしれません...

_ 450行目の話は、私の手元のresolv.rbだと762行目からでした。たぶん、見てるバージョンが違うのでしょう(こっちが古いのを見てる気がします)。

Sep.9,2002 (Mon)

Revision: 1.4 (Sep.09,2002 21:33)

time.c

_ NetBSDでもHAVE_PROTOTYPEはdefineされます。
じゃあなんで? と思いながら環境を確認してみたところ...
...
cvs updateするの忘れてました。ダメすぎる。

mswin32 (StringIO)

_ roughのStringIOが更新されたので(2度ほど妨害しましたが :-P)、1.6で試してみる。
... ふむ、何事もなくコンパイルできてテストも通るですね。
shimのStringIOも更新されたので、これも1.6で試してみる。
... コンパイルできなーい。extconf.rbでmemchr()が見つからなくて、stringio.cの中のmemchr()が有効になって、string.hの宣言と一致しなくてはねられる、というパターン。
はて、なぜでしょう?

_ 困ったときはmkmf.logを確認だ。切れ目がわかりにくいんだけどね。

_ まずroughの方抜粋。

cl -Feconftest -Ic:/lan/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c   user32.lib advapi32.lib wsock32.lib
conftest.c
conftest.obj : error LNK2001: 外部シンボル "_rb_str_update" は未解決です
conftest.exe : fatal error LNK1120: 外部参照 1 が未解決です。
cl -Feconftest -Ic:/lan/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c   user32.lib advapi32.lib wsock32.lib
conftest.c
conftest.c(5) : error C2065: 'rb_str_update' : 定義されていない識別子です。
cl -Feconftest -Ic:/lan/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c   user32.lib advapi32.lib wsock32.lib
conftest.c
conftest.c(5) : error C2198: 'memchr' : 実引数が少なすぎます。
cl -Feconftest -Ic:/lan/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c   user32.lib advapi32.lib wsock32.lib
conftest.c

なんかエラーが出てますが、結果としてmemchr()はあったことになってます。
その前のrb_str_update()は見つかってないんだけど、mswin32-ruby16.libをリンクしないといけない気がするですね。ま、どっちにしろ1.6にはないのですが。

_ 続いてshimの方抜粋。

cl -Feconftest -IC:/LAN/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c  mswin32-ruby16.lib  user32.lib advapi32.lib wsock32.lib
conftest.c
LINK : fatal error LNK1104: ファイル "mswin32-ruby16.lib" を開けません。
cl -Feconftest -IC:/LAN/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c  mswin32-ruby16.lib  user32.lib advapi32.lib wsock32.lib
conftest.c
conftest.c(5) : error C2065: 'rb_str_update' : 定義されていない識別子です。
cl -Feconftest -IC:/LAN/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c  mswin32-ruby16.lib  user32.lib advapi32.lib wsock32.lib
conftest.c
conftest.c(5) : error C2198: 'memchr' : 実引数が少なすぎます。
cl -Feconftest -IC:/LAN/ruby-1.6/lib/ruby/1.6/i586-mswin32 -nologo -DNT=1 -Zi -MD -O2b2xg- -G5   -nologo  conftest.c  mswin32-ruby16.lib  user32.lib advapi32.lib wsock32.lib
conftest.c
LINK : fatal error LNK1104: ファイル "mswin32-ruby16.lib" を開けません。

あり、こっちはmswin32-ruby16.libをリンクしに行ってます。でも失敗してる... ということは、環境変数LIB絡みなんでしょう。

_ そこで、もう一度双方のextconf.rbを比較。
ふむ、shim側だと、$libsCONFIG["LIBRUBYARG"]を追加してます。
これはこれで正しいと思うのですが(rough側にも必要な気がするけどどうなのだろう?)、ライブラリ検索パスが更新されないからリンクに失敗しちゃうんですな。
うーん、ということは、むしろfind_libraryでrubyのライブラリを検索すべきなんじゃないかなぁ。これだと対象関数がマクロのときまずいのかな。

_ というわけで、解決策はよくわかってません。
mkmf.rbはやっぱり難しいです。

mswin32 (StringIO) 続き

_ なかださんが$LIBPATHもいじってみるという変更を加えてくださったので、改めて確認。
... だめだなぁ。両方memchr()を見つけられなくなっちゃいました。
理由は

LINK : fatal error LNK1104: ファイル "mswin32-ruby16.lib" を開けません。

です。

_ というわけで調査。
えーと、CONFIG["libdir"]の中身は、と... $(exec_prefix)/lib
あれ、これってrequire 'rbconfig'が終わった時点で$(hoge)は展開されてるんじゃなかったっけ?
... あう、CONFIGって、Config::CONFIGじゃなくて、Config::MAKEFILE_CONFIGなのか。
ということは、自前で展開するか、Config::CONFIGにするか、どっちかにしなきゃいかん、と。

_ しかし、これを対応してもまだダメ。
さらに調べていくと... あ、子プロセス(この場合はコンパイラ)に環境変数が伝播してません。ダメじゃん。
これ、私がいつぞやcommitした、環境変数のメモリリーク対応が原因だなぁ、きっと。
CVSを確認すると... う、1.6.6からこれが組み込まれてるのか。
1.7はCreateProcess()してるからもちろんこれでいいんだけど、1.6はspawn*e()を使ってるから、引数のenvironをちゃんとすげかえてやらなきゃいけないのね。大ポカだな...

mswin32 (StringIO) まとめ

_ 環境変数伝播問題は、CVSにはcommitしました。なので、明日以降のstable-snapshotと将来の1.6系releaseは大丈夫。1.7系はもともと大丈夫です。

_ StringIOは、今日以降の1.6でなら、extconf.rbのCONFIG["libdir"]Config::CONFIG["libdir"]にするなりConfig.expand(CONFIG["libdir"])にするなりすればOKです。
... あ、今、これを書いてる間になかださんがcommitしてくださいました。

_ 今日より前の1.6の場合は、えーとえーと、まだどうやって救えばいいか思いついてません。ごめんなさい。

_ 派生的な話題として、1.7では環境変数LIBを使うのはやめてlibに/libpathオプションを渡すようにしよう、という方針が出ました。
こうすると、たぶん、mkmf.rbもちょっとすっきりするんでないかと。

Sep.10,2002 (Tue)

Revision: 1.2 (Sep.10,2002 09:23)

被捕捉アンテナ類
[\ay antenna (testing)] [Ant] [Antenna-Julia] [LayserあんてなV2] [nAntenna] [nuance de Antenna] [Rabbit's Antenna] [Read List] [Ruby hotlinks 五月雨版 (るるりん。)] [してたま (私的アンテナ with たまてばこ)] [ただのあんてな] [ちゃらんぽらん] [でこぽんリンク] [なよろアンテナ] [にっきトレーサー] [偽善者あんてな - 2nd season -] [湘南日記放送局(SDB)] [はてなの各アンテナ]