Just another Ruby porter,

〜2002年9月上旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2002-09-01 (Sun)

8月のspam

318通。とうとう300を越えたか。全然 ピークではなかった。 そのうち韓国からは104通って、増えた分のほとんどは韓国からかよ。 最近ドイツ語のspamも定期的に来る。 必ずjpegの画像ファイルもつけてくるから非常に欝陶しい。

[Linux] uClibc 0.9.15

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

[Linux] BitKeeper

% 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 2.7.1

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

[Ruby] Win32OLE 0.5.1

更新。


2002-09-02 (Mon)

[Ruby] mkmf.rb and extmk.rb

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だが、これはちょっと無理そう。

カロリーメイト

なんかどこかで見たことある顔だと思っていたんだが、 そうか、ワカゾーはチビノリダーだ。あぁ、すっきりした。


2002-09-03 (Tue)

[Ruby] mkmf.rb and extmk.rb

というわけで、commitしたわけだが、-Eの件はすっかり忘れてた。 なかださんのパッチがコミットされてからいじろう。

さて、extmk.rbはどこに置くのがいいのだろう?

[Ruby] druby 1.3.7

更新。


2002-09-04 (Wed)

[Ruby] mkmf.rb and extmk.rb

xsystemも$0にextmk.rbが含まれているかどうかを判断すればいいだけだった。 $extmkを新設しよう。

ぐはぁ。source directoryでもちゃんとmake installまでできるかちゃんとチェックしないと。 あ、元々install_rbの引数も違うのであった。

[Ruby] Uconv 0.4.10

--enable-eucとかが指定できるようになった。

% i386-cygwin-ruby ../extconf.rb --enable-euc --enable-sjis \
  --enable-win32api

[Ruby] New list: ruby-modules - for module developers...

新しいメーリングリスト。ruby-ext MLの英語版といった感じか? 結局

ruby-list と ruby-talk
ruby-dev と ruby-core
ruby-ext と ruby-modules

と全部名前が違うじゃん。


2002-09-05 (Thu)

[Ruby] ruby-developers

ruby-modulesじゃなくてruby-developerという名前のMLだった。

[Ruby] 起動時間

確か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

まぁ、なにもしないわけだしこんなもんだよね。

KLEZ

奇数月6日にKLEZは破壊活動を開始するらしい。つまり明日は注意。


2002-09-06 (Fri)

[Ruby] Re: [RFC] mkmf.rb: dependencies

確かに あのパッチではdependがなければ作るというMakefileになるが、 それじゃdependが更新されないからやっぱ駄目じゃん。

[Ruby] ruby-doc ML

さらに新しいMLが誕生。

nullmailer problem in your diary

ドイツから突然メールがくる。 googleでnullmailerについて調べてたら、なんかよくわからんが解決してるようじゃん。 日本語じゃなくて英語で説明してくれという内容だ。 2001年10月15日その翌日 なんだけど、 ま、日本語が読めなくてもあのコマンド実行例で理解してくれないなら、 英語で説明しても無駄だと思う。といいつつも返事は書いた。


2002-09-07 (Sat)

[Ruby] --targetとprogram_prefix

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

[Ruby] Judy

Time to retire st_* and replace it with Judy?というSubjectのスレッドもあるけど、 移植性に問題ありのような。makeすると

if [[ ! -d "src/linux_ia32/product/intermed"        ]]; then

てな感じで、ashじゃだめだし、ソースのコメントもCだけど//だし。

nullmailer problem in your diary

何の役にも立たなかったようで、結局qmailをインストールしたらうまくいったらしい。


2002-09-08 (Sun)

[Ruby] mkmf.rbのlog

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をすべて取り除いた。

[Ruby] -Cext

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してるんだから。

[Ruby] CPPの出力結果

現在の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

かなりすっきりした。

[Ruby] bdb 0.3.4

更新。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>")

[Ruby] have_struct_member

そのまま、ext/socket/extconf.rbからlib/mkmf.rbへ移動。 try_linkの代わりにtry_compileを使う。 ext/etc/extconf.rbでegrep_cppの代わりにhave_struct_memberを使う。

[Ruby] macro_defined?

新たに作った。

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を使ってるとこはない。

[Ruby]time.c

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されないのかな?


2002-09-09 (Mon)

[Ruby] WEBRick 1.2.2

更新。

[Ruby] S_IRUSR, S_IWUSR, S_IXUSR

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__ しとこう。

[Ruby] Ruby/lv

web.archive.orgしてみると ここに残ってました。


2002-09-10 (Tue)

[Ruby] compile_dir

compile_dirは削除すべきか?

[cygwin][ruby] package

というよりversionがbeta-1-1となっているのがきっとまずいんだと思うけど、 rdocのこの変なversionのつけかたを止めるかなあ。 もっと変にして00beta-1-1にしてみるのはどうだろう? ついでに余計な-1をつけなくてもいいようにしたいなあ。

setup.iniの順番は自分でも笑ってしまった。 生成スクリプトを見ると/\d+/が/d+/になってるし。それじゃソートされないよ。

上戸彩 Pureness

一瞬浜崎あゆみのTrustかと思う。Trustって木村貴志だったのか。 木村貴志と言えば最近はmoveばっかりでFavorite Blueはどうなってるんだ? と思ったらとっくに解散してたか。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!