〜2003年11月下旬〜
それにしてもよくもまあそんなに書く暇があるもんだ。 今日は154通。
configureの最後の方でcmpが実行されるので、diffutilsも必要。
% ls -w70 acnf257b.zip bsn135b.zip djtzn203.zip gpp332b.zip sed407b.zip bnu214b.zip dif28b.zip fil41b.zip grep24b.zip shl2011b.zip bsh204b.zip djdev203.zip gcc332b.zip mak3791b.zip txt20b.zip
ftools.rbにもFile.cp "foo", "foo"で fooが0バイトになってしまう問題はあるわけだけど、これどうしようかな。 fileutils.rbと同じ変更をするのも芸がないし、 いっそのことfileutils.rbを使ってftools.rbを書き換えてしまうか。 なんか以前もそんなことを言ってた気がするぞ。
というわけで、test/fileutils/test_fileutils.rbをパクって test_ftools.rbを用意した。あとは実装するだけだ。
人の手でftools.rbに合わせてたりすると、 test_fileutils.rbが変更されるとそれに伴って変更したりするのが大変。 というわけで、変換スクリプトを考えたほうがよさげだ。 もしくはどうせftools.rbの機能は限られてるので、もうあれでよしとする。
出なかった。pthread問題が結構痛い。
reopenするのがふつうだけど(mswinだけでいいのかよってのは置いとくとして)、
def $stdout.write(*) end
でいいような。
class << $stdout remove_method "write" end
とすれば元に戻る。systemには効かないけど。
-ldb-4.2をチェックしてるということはBerkley DB 4.2.xが出てるということか。 週末にでも。
実にあやしげなソフトだ。 ドキュメントを読むとcppした結果をまとめて最適化し1個のソースに変換してるようだ。 GCC 3.xだとcc1がcppを兼ねてるから、 -save-tempsしても*.iは出てこないんだよなあ。
適当にファイルを作ってMakefileをincludeするか。 rubyで試そう。
% cat CMIfile include Makefile .SUFFIXES: .i .c.i: $(CC) $(CFLAGS) $(CPPFLAGS) -E $< -o $@ flat.c: $(OBJS:.o=.i) cmi *.i -o flat.c % make -f CMIfile flat.c ... Fail: substHole met an unexpected case make: *** [flat.c] Error 1
ぐはぁ。
なぜmsvcrt版rubyでFile.exist?("nul")がfalseになるのかがうささんの協力で判明。 win32/win32.cのrb_w32_stat()で_fullpath()を呼んでいるけど、 こいつが\\.\nulを返し、それを受け取ったstat()が-1を返すからだった。 しっかりしろー、msvcrt.dllよ。 _fullpath()で変換したものをstat()できなくてどうする。 ってわけで、なんで入れたんだが思い出せん_fullpath()は削除して、 ついでにFile.exist?("//host/share/.")がfalseになっていたのを直してコミット。
% mkdir tmp % ln -s tmp/symlink tmp/symlink % ln tmp/symlink tmp/symlink
としたとき、Linux, NetBSDではEEXITになり、OpenBSD, FreeBSDではENOENTになる。 test/fileutils/test_fileutils.rbのtest_lnがこのテストしていた。 OpenBSDでは
% ln -s . tmp/symlink
でEEXISTになったので、とりあえずこれでコミットしたわけだが、 今日なひさんの報告でFreeBSDではEPERMになることがわかった。 tmp/symlinkの先が.でディレクトリなのでtmp/symlink/symlinkを作ろうとしいるようだ。 チェックが甘かった。 test_lnであらかじめ作っているtmp/cptmpというファイルを使い、
% ln -s cptmp tmp/symlink
となるように変更。
http://www.unix-systems.org/version3/online.htmlから読めるんだねえ。知らなかった。早速link()を読んでみたがよくわからん。
特に問題なく起動した。それにしても2.6は今年中に出るのだろうか?
XCFLAGSはrubyやminirubyをコンパイルするときに指定したいオプションを設定。 ARCH_FLAGは主に--enable-fat-binaryしたときに有効で、 コンパイル時、リンク時、共有ライブラリを作るときに指定したいオプションを設定。 cppやcc -Eのようにプリプロセッサを起動するときには指定したくないというのがミソ。 そのあたりは [ruby-core:01819]を参照。
XCFLAGSをmkmf.rbで参照しない代わりに、DLDFLAGSへARCH_FLAGを追加。 ついでに、 [ruby-dev:22085]も考慮して、もろもろをコミット。