〜2002年9月上旬〜
318通。とうとう300を越えたか。全然 ピークではなかった。 そのうち韓国からは104通って、増えた分のほとんどは韓国からかよ。 最近ドイツ語のspamも定期的に来る。 必ずjpegの画像ファイルもつけてくるから非常に欝陶しい。
0.9.14以下とはバイナリ互換がない。
% cmp Makefile{~,} cmp: can't resolve symbol '__fxstat'
折角なので があだになったか。 くやしいので、diffutils 2.8.1を-staticで作っておく。
% CFLAGS=-Os CC='/usr/i386-linux-uclibc/usr/bin/gcc -static' \ ./configure --prefix=/usr --disalble-nls
% bk clone http://linux.bkbits.net:8080/linux-2.5 linus-2.5
でcloneを作ってみたが、
ChangeSet@1.134, 2002-02-05 15:57:59-08:00, torvalds@athlon.transmeta.com v2.4.15 -> v2.5.0 - fork off 2.5.0, change version numbers TAG: v2.5.0
なので、2.4.16以降はcloneできない。 2.4.15以前もtagを打ってないからcloneできないか。 素直にlinux-2.4をcloneするしかないな。 repositoryごとcloneするんだから、どっちにも入っていて欲しい。
sqliteコマンドでreadlineが効いてない。config.logを見てみると
configure:13365: gcc -o conftest -Os conftest.c -lreadline >&5 /usr/lib/libreadline.so: undefined reference to `tgetnum' /usr/lib/libreadline.so: undefined reference to `tgoto' 省略
とtermcap相当のlibraryをlinkしてないのが原因らしい。 AC_CHECK_LIB(termcap, tgetent)をconfigure.acに 追加してみた。
% ldd =sqlite libsqlite.so.0 => /usr/local/lib/libsqlite.so.0 (0x40015000) libreadline.so.4 => /usr/lib/libreadline.so.4 (0x40057000) libncurses.so.5 => /lib/libncurses.so.5 (0x4007b000) libc.so.6 => /lib/libc.so.6 (0x400bc000) libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x401d7000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
あ、libtermcap.so.2はlibncurses.so.5へのsymlinkだったのか。
% ls -l /lib/libtermcap.so.2 lrwxrwxrwx 1 root root 15 Jul 7 2001 /lib/libtermcap.so.2 -> libncurses.so.5
extmk.rb.inでmkmf.rbをrequireするということは、 Config::CONFIGを使うことになってしまう。
rbconfig.rbの位置はext/extmk.rbから相対で".."と決め打ちしないといけないことに気づく。
mkmf.rbのCPPに
CPP = "#{CONFIG['CPP']} -E ..."
と-Eが埋まっているのは変だ。これは間違いだな。CPPFLAGSも使ってない。 一方extmk.rb.inは
CPP = "@CPP@ @CPPFLAGS@ ..."
と問題なし。たぶんmkmf.rbをいじるのを忘れたんだろう。
extmk.rb.inの頭に
$force_static = nil $install = nil $destdir = nil $clean = nil
を入れよう。
extmk.rbの$topdirは実際にmakeを起動しているディレクトリ。 mkmf.rbの$topdirはruby.hがあるディレクトリ。
mkmf.rbのCONFIGはConfig::MAKEFILE_CONFIGであって、Config::CONFIGではない。 MAKEFILE_CONFIGは$(FOO)を展開しない。
今日はここまで。とりあえず@FOO@を退治したので、extmk.rb.inとextmk.rbは全く同じものになる。
rm_f, try_link*, try_cpp, egrep_cpp, try_run, install_rb, append_library, have_library, find_library, have_func, have_header, find_executable, arg_config, with_config, create_header, dir_config
これだけの関数をmkmf.rbに追い出した。残る大物はcreate_makefileだが、これはちょっと無理そう。
なんかどこかで見たことある顔だと思っていたんだが、 そうか、ワカゾーはチビノリダーだ。あぁ、すっきりした。
というわけで、commitしたわけだが、-Eの件はすっかり忘れてた。 なかださんのパッチがコミットされてからいじろう。
さて、extmk.rbはどこに置くのがいいのだろう?
更新。
xsystemも$0にextmk.rbが含まれているかどうかを判断すればいいだけだった。 $extmkを新設しよう。
ぐはぁ。source directoryでもちゃんとmake installまでできるかちゃんとチェックしないと。 あ、元々install_rbの引数も違うのであった。
--enable-eucとかが指定できるようになった。
% i386-cygwin-ruby ../extconf.rb --enable-euc --enable-sjis \ --enable-win32api
新しいメーリングリスト。ruby-ext MLの英語版といった感じか? 結局
ruby-list と ruby-talk ruby-dev と ruby-core ruby-ext と ruby-modules
と全部名前が違うじゃん。
ruby-modulesじゃなくてruby-developerという名前のMLだった。
確かmethod cacheの高速化のための初期化に時間がかかってるいるはず。 未だにP5 133MHzのLinux boxだとこんな感じだ。
% time ruby-1.6.6 -v ruby 1.6.6 (2001-12-26) [i386-linux] ruby-1.6.6 -v 0.10s user 0.04s system 113% cpu 0.124 total % time ruby-1.6.7 -v ruby 1.6.7 (2002-09-05) [i386-linux] ruby-1.6.7 -v 0.46s user 0.04s system 107% cpu 0.464 total
と1.6.7だと遅い。 でもP5 200MHzのWindows 98よりは倍以上速いようだ。 PC UNIXを勧めたほうがよかったりして。
ついでにpythonとperlも計ってみる。
% time python -V Python 2.2 python -V 0.01s user 0.01s system 1204% cpu 0.002 total % time perl -v This is perl, v5.8.0 built for i586-linux Copyright 1987-2002, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using `man perl' or `perldoc perl'. If you have access to the Internet, point your browser at http://www.perl.com/, the Perl Home Page. perl -v 0.10s user 0.02s system 134% cpu 0.089 total
まぁ、なにもしないわけだしこんなもんだよね。
奇数月6日にKLEZは破壊活動を開始するらしい。つまり明日は注意。
確かに あのパッチではdependがなければ作るというMakefileになるが、 それじゃdependが更新されないからやっぱ駄目じゃん。
さらに新しいMLが誕生。
ドイツから突然メールがくる。 googleでnullmailerについて調べてたら、なんかよくわからんが解決してるようじゃん。 日本語じゃなくて英語で説明してくれという内容だ。 2001年10月15日 と その翌日 なんだけど、 ま、日本語が読めなくてもあのコマンド実行例で理解してくれないなら、 英語で説明しても無駄だと思う。といいつつも返事は書いた。
autoconf 2.5xだと--targetを指定すると、program_prefixが設定される。
test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}-
この直前でprogram_prefixがNONEだったら''にしちゃえばいいか。 configure.in的にはこんな感じで。
+if test "$program_prefix" = NONE; then + program_prefix= +fi AC_CANONICAL_TARGET
Time to retire st_* and replace it with Judy?というSubjectのスレッドもあるけど、 移植性に問題ありのような。makeすると
if [[ ! -d "src/linux_ia32/product/intermed" ]]; then
てな感じで、ashじゃだめだし、ソースのコメントもCだけど//だし。
何の役にも立たなかったようで、結局qmailをインストールしたらうまくいったらしい。
loggingが別になったし、$logとかがグローバルになってるのもなんだし、moduleにしよう。
module Logging @log = nil @logfile = 'mkmf.log' @orgerr = $stderr.dup @orgout = $stdout.dup def self::open @log ||= File::open(@logfile, 'w') $stderr.reopen(@log) $stdout.reopen(@log) yield ensure $stderr.reopen(@orgerr) $stdout.reopen(@orgout) end def self::logfile file @logfile = file if @log @log.close @log = nil end end end
extmk.rb側でextconf.rbをloadする直前に
Logging::logfile 'mkmf.log'
とすれば、ext/*/mkmf.logとなる。
log fileを残すようになった今、$DEBUG対応は外してもよさそう。 その代わりに$VERBOSE時にmessageを表示するようにした。 ついでに
% RUBYOPT=-v make
したときのwarningをすべて取り除いた。
extmk.rbの実行はMakefileにはこう書かれている。
@./miniruby$(EXEEXT) -Cext extmk.rb
その昔は
@cd ext; ../miniruby$(EXEEXT) extmk.rb
となっていたわけだが、これはcommand.comと非常に相性が悪い。 で、
@./miniruby$(EXEEXT) -Xext extmk.rb
となって、現在の-Cextに至る。
さてsource tree側にあるext/extmk.rbを実行するには
@./miniruby$(EXEEXT) -Cext $(srcdir)/ext/extmk.rb
で良さそうだが、srcdirは相対pathのままだったりするので使えない。 autoconf 2.5からはabs_srcdirがあるのでこれを使えばいいが、 そもそも-Cextじゃなくてextmk.rb内でDir::chdir('ext')すればいいとも言える。 なにしろextmk.rbを実行するときは必ず-Cextしてるんだから。
現在のlogはこんな感じだ。
601531 Win32API/mkmf.log 30451 curses/mkmf.log 5729 dbm/mkmf.log 2077 dl/mkmf.log 1391 etc/mkmf.log 1279 gdbm/mkmf.log 5271 iconv/mkmf.log 2932 pty/mkmf.log 28707 readline/mkmf.log 15908 socket/mkmf.log 866 syslog/mkmf.log 114236 tcltklib/mkmf.log 939 win32ole/mkmf.log 811317 total
try_cppするとheaderのサイズ分だけ増える。 エラーメッセージだけわかればいいので、conftest.iへ捨てることにする。
255 Win32API/mkmf.log 2346 curses/mkmf.log 4940 dbm/mkmf.log 1765 dl/mkmf.log 1391 etc/mkmf.log 251 gdbm/mkmf.log 252 iconv/mkmf.log 1321 pty/mkmf.log 1242 readline/mkmf.log 6521 socket/mkmf.log 388 syslog/mkmf.log 299 tcltklib/mkmf.log 939 win32ole/mkmf.log 21910 total
かなりすっきりした。
更新。mingw32だとtests/marshal.rbが失敗するのでcloseするようにした。
--- tests/marshal.rb~ 2002-08-13 13:17:08.000000000 +0000 +++ tests/marshal.rb 2002-09-08 05:21:29.000000000 +0000 @@ -275,2 +275,3 @@ assert_equal(nil, $bdb.close, "<close>") + assert_equal(true, $env.close, "<close>") assert_kind_of(BDB::Btree, $bdb = BDB::AZ.open("tmp/aa", nil, "w"), "<sh>")
そのまま、ext/socket/extconf.rbからlib/mkmf.rbへ移動。 try_linkの代わりにtry_compileを使う。 ext/etc/extconf.rbでegrep_cppの代わりにhave_struct_memberを使う。
新たに作った。
def macro_defined?(macro, src, opt="") try_cpp(src + <<EOP, opt) #ifndef #{macro} # error #endif EOP end
ext/socket/extconf.rbではegrep_cppじゃなくてこれを使う。 これでegrep_cppを使ってるとこはない。
GCC 3.2だとwarningになります。
time.c: In function `rb_time_timeval': time.c:191: warning: comparison of distinct pointer types lacks a cast
dfreeとtime_freeの型が違うので。と思ったらGCC 2.95.3でも同じですね。
% cat foo.c foo() { void (*vv)(void *) = 0; void (*vi)(int *) = 0; vv == vi; } % gcc -dumpversion 3.2 % gcc -c foo.c foo.c: In function `foo': foo.c:6: warning: comparison of distinct pointer types lacks a cast % /usr/bin/gcc -dumpversion 2.95.3 % /usr/bin/gcc -c foo.c foo.c: In function `foo': foo.c:6: warning: comparison of distinct pointer types lacks a cast
とするとNetBSDではHAVE_PROTOTYPESがdefineされないのかな?
mingw32だと<sys/stat.h>でS_I?USRが定義されてるので、
#include "ruby.h" #include <sys/stat.h>
という順番ではredefineになってしまうんだけど、mswin32だと問題ないんだろうか? あ、 S_IWRITEなのか。#if !defined S_I?USR && !defined __MINGW32__ しとこう。
web.archive.orgしてみると ここに残ってました。
compile_dirは削除すべきか?
というよりversionがbeta-1-1となっているのがきっとまずいんだと思うけど、 rdocのこの変なversionのつけかたを止めるかなあ。 もっと変にして00beta-1-1にしてみるのはどうだろう? ついでに余計な-1をつけなくてもいいようにしたいなあ。
setup.iniの順番は自分でも笑ってしまった。 生成スクリプトを見ると/\d+/が/d+/になってるし。それじゃソートされないよ。
一瞬浜崎あゆみのTrustかと思う。Trustって木村貴志だったのか。 木村貴志と言えば最近はmoveばっかりでFavorite Blueはどうなってるんだ? と思ったらとっくに解散してたか。