〜2002年4月下旬〜
なにげなくCygwinのmirror siteを見に行くとディレクトリ構成が変わっていた。 latest, contribはreleaseという1個のディレクトリに統合されたようだ。 ほぅ。release/XFree86というディレクトリまである。
have_struct_memberを使うべきだったか?
have_struct_member("sockaddr_storage", "ss_family", /mswin32|mingw/ =~ RUBY_PLATFORM ? nil : %w[sys/types.h netdb.h string.h sys/socket.h])
うーむ。あまりうれしくない。 それはそれとしてtry_compileってなかったのか。
cache missした場合どのくらい遅くなるのか、Rubyをmakeして計ってみた。
% time make make 889.25s user 59.64s system 97% cpu 16:11.20 total % rm -rf ~/.ccache/* % vi config.cache # ac_cv_prog_CCとac_cv_prog_CPPにccacheをprefix % ./cofnig.cache % time make make 893.82s user 64.05s system 98% cpu 16:09.27 total
変わらないよ。なぜに?
更新。
いっそのことMichal Rokosさんにはcommitterになってもらうのがいいという気も。
typoがあって常にsockaddr_storageがないことになってました。
最近mortgageという単語を含むsubjectのspamが多い。
gcc.gnu.org::で公開してるのはCVSのrepositoryだった。 cygwinだと
gcc.gnu.org::src-cvs/winsup/
にある。これを取ってくるということは結局CVSupと変わりないんだよね。
Rubyもrsync serverで公開するってのはどうだろう? CVSだとfirewallに阻まれるとかあるし。 commit権がない人にはrsyncで十分のような気も。
というわけで
% rsync -auvz --delete --progress gcc.gnu.org::cygwin-ftp/'[rs]*' .
でmirrorしてみる。lftpgetでmirrorするよりは速い。
なぜだか今日はメールの量が少なかった。いつもの半分ぐらいだ。
来ました。ありがとうございます。 連休前というのがなかなかぴったりの時期だ。 欄外に JARH が載ってるのでよろしく。 自分も何が選ばれたのか知らないので楽しみ。
更新。
更新。
1.7のsample/test.rbの最後にあるコードなんだけど、MinGW版rubyでSEGVになる。
class S def initialize(a) @a = a end end l=nil 100000.times { l = S.new(l) }
1.6.6あたりで実行してもSEGVだ。うぅむ。
これってvirusだよね。困ったもんだな。
LINKは$hdrdirじゃなくて$topdirにする。 じゃなくて、%sにして topdirを外から与える。
require 'mkmf'
の後に再度
$topdir = File.expand_path("..")
しとけばよさそう。そういった意味ではLINKはブロックになってると、 評価された時点での変数の値を参照できて都合よさげ? なんとなく [ruby-list:34885] から始まる話の逆のような気も。
install_rbの引数に互換性がない。 あ、この中で閉じてると思えば別に構わないか。
なんとかなりそう?
GNU ldのChangeLogによるとstack sizeがいつのまにか32MBから2MBに変更されてた。
2001-06-05 Danny Smith <danny_r_smith_2001@yahoo.co.nz> * emultempl/pe.em (init): Reduce default stack reserve to 0x200000.
とりあえず以前のように32MB確保しとく。
Gackt面白すぎ。
また止まってるらしい。がくっとメールの量が減るのでなんとなくわかる。
create_makefileを一行ずつ比較してみた。mkmf.rbでは
lib.sub!(/-l(.*)/, '"lib\1.a"')
で、extmk.rbは
lib.sub!(/-l(.*)/, %%"lib\\1.#{$LIBEXT}"%)
となっているのが気になる。 $LIBEXTという存在が悩ましい。 OBJEXTやEXEEXTと基本的には同じものなので、 rbconfig.rbにあるべきか? とりあえずはmkmf.rbへ移動だな。
STDOUT.flushが多用されてるのにも気づいた。これもsyncで良さそう。
LINKとCPPの$topdirは関数にするだけで十分だと気づく。
そういえばdefflagはdeffileに名前を変えるべきだったか? でもmswin32ではflagとして使うかもしれないし、このままにしとこう。
LIBRUBYARGの処理も微妙に違うなあ。
うーむ。なかなか進まん。
グローバル変数が多いよねえ。やはりcreate_makefileがかなりやっかいだ。 これだけはextmk.rbに残すという手もあるが、それは負けだ。 てゆかかなり負け気味ではある。
それより1.7のmkmf.rbを見てたらクロスの環境が心配になってきた。 そっちの確認のほうが先だな。
NArrayが標準添付になるかもしれないので、DJGPPでコンパイルしてみる。 sincosでエラーになる。あまり聞いたことのない関数だが、NArrayでは
void sincos(double x, double *s, double *c);
を期待してる模様。一方DJGPPでは
void sincos(double *s, double *c, double x);
なので引数が違う。 /usr/include/bits/mathinline.hやdietlibcのmath.hを見るとDJGPPが間違っているようだ。 これはちょっといやだな。
@niftyのFLINUXでの情報によるとpatch 2.5.3だとDOS line endingsなパッチファイルも
(Stripping trailing CRs from patch.)
という警告だけでちゃんと処理するらしい。 というわけで最新らしいpatch 2.5.4に上げてみた。
bcc対応のパッチを見てて、 どうせならlibtoolのimpgen.cをRubyへ移植してみたらどうだろうと思い作ってみた。
あ、これってDLLのsymbolだけなのか。だめじゃん。
try_cppの結果は標準エラー出力だけのほうがいいな。
更新。
変なところ。-Eが別の意味になっている。-o, -eの後には空白があってはいけない。 chcp 437してもメッセージが日本語のまま。 Makefileの中では{}が特別な意味を持つ。あ、これはmakeの話。
MIME-Versionとかmultipartとかのヘッダを削除してしまうのなら、 最初から受け付けなくてもいいんじゃないかな。 この手のうっとうしいvirusとか、こわれてしまうパッチとか来てもうれしくないし。
とりあえずあと一ヶ月やめるかどうか考えよう。