Just another Ruby porter,

〜2002年5月下旬〜


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

2002-05-21 (Tue)

[Ruby] vsnprintf.o

MISSINGからvsnprintf.oをfilter-outするだけだと、 OBJSからは消えてないのでvsnprintf.oを作ってしまう。 じゃ、OBJSからfilter-outすればいいかというと、 すでに明示的な規則に登録されてしまうためだめ。 GNUmakefileの中でMakefileをincludeしてるから後の祭りになる。 つまり、Makefileを作るところでなんとかする必要があるわけだ。 というわけでAC_CONFIG_COMMANDS_POSTを使ってみよう。 config.statusを作った後で実行したい処理を定義できる。

AC_CONFIG_COMMANDS_POST([
case "$target_os" in
mingw*)
  sed 's/ vsnprintf\.o//' config.status >config.tmp && mv config.tmp config.status;;
esac
])

を入れてみた。いまいち気に入らないがこれでいける。

あ、よく考えてみたら、

ac_cv_func_vsnprintf=yes

だけでいいんじゃない?ぐはぁ。

configure.ac

info autoconfしてみたら

The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'.

とあった。なんか今後はconfigure.acが主流になりそうだな。

BCC32 と Win32OLE

変ですね。2行に分けても問題ないです。というか最初から2行に分けてます。 dependに関してはmkmf.rbのほうに 暗黙のルールがあるから必要ないです

あ、もうCVSのほうへ入れちゃいましたか。 そうするとsrcdirとは別のディレクトリでbuildできなくなります。

skk ML

まいったなあ。Klezだらけだよ。それでなくてもSPAMだらけだというのに。


2002-05-22 (Wed)

[Opera] blade

Operaでbladeを見るとなぜか<pre>を無視したように表示される。

[Ruby] REXML 2.3.3

更新。

[Ruby] RDoc beta 1

更新。すっかり忘れてた。

gzip_x86

確かに速い。zlibで使えるようにすればよさげ。


2002-05-23 (Thu)

Digital Mars C and C++ Compilers

コンパイル速度が速い。 手始めにarray.cをコンパイルしてみたが、ちと手強い。

Jarh,

というSubjectで

Hi,

"Itrs\037`mnsgdq\037Qtax\037g`bjdq+".split(//).each {|i| i.succ!}.join

Regards
  Peter

という内容のメールが届いた。 ruby-dev summary 17048-17127 の影響だろうか。 いや、俺にこれだけ送ってこられても困るというか、 人の作ったものを集めてるわけじゃないんで、 そこんとこよろしく。

ちょっと言わせてもらうと、これはcaesar暗号であり

print 'Whfg nabgure Ehol unpxre,'.tr('A-Za-z', 'N-ZA-Mn-za-m')

と同じタイプのものだ。というかprintをつけるように(-1点)。


2002-05-24 (Fri)

Ruby filetype plugin for the Vim editor (with matchit support)

おぉ、ifとかclassで%が使えるよー。


2002-05-25 (Sat)

GDB 5.2

最近GDBを使おうとすると

Dwarf Error: Cannot handle DW_FORM_strp in DWARF reader.

と文句言われることに気づいた。 やっぱGCC 3.1が原因だよね。 というわけでGDBを5.2に上げた。

gzip_x86 SEGV

なぜかgdb-5.2.tar.gzを展開したらgzipがSEGVになってしまう。 あ、家のPCだと問題ないな。 違いといえば会社のがglibc 2.2.2で家のが2.2.5とバージョンの違いぐらいなんだけど、 debugしようとしても、そのGDBが動かないというジレンマが。 というわけでgzipは元に戻した。

[Ruby] http-access2 F

更新。

[Ruby] date2 3.2.1

更新。

[Ruby] SOAP4R 1.4.5

更新。

[Ruby] benchmark 020425

versionが一ヶ月ずれてますね。

[Ruby] Ruby/Google 0.4.1

更新。


2002-05-26 (Sun)

[Ruby] benchmarkのバージョン

ごとけんさんからメールが来た。1.7のlib/benchmark.rbが

% lcvs st lib/benchmark.rb
===================================================================
File: benchmark.rb      Status: Up-to-date

   Working revision:    1.2     Thu Apr 25 12:33:49 2002
   Repository revision: 1.2     /src/ruby/lib/benchmark.rb,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)

なのであれでいいんだそうです。

OpenSSL 0.9.6d

早速./config sharedしてみると

Operating system: i586-whatever-linux2
[: (GCC): unknown operand
[: (GCC): unknown operand

となんか変。GCC 3.1は--versionが豪華になってるね。

% gcc --version
gcc (GCC) 3.1
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
% gcc-3.0.4 --version
3.0.4

こうしてみた。

--- config.orig	2002-03-16 01:47:23.000000000 
+++ config	2002-05-26 19:00:57.000000000 
@@ -385,7 +385,7 @@
 if [ "$GCCVER" != "" ]; then
   CC=gcc
   # then strip off whatever prefix Cygnus prepends the number with...
-  GCCVER=`echo $GCCVER | sed 's/^[a-z]*\-//'`
+  GCCVER=`echo $GCCVER | sed 's/^[-a-z() ]*//i;1q'`
   # peak single digit before and after first dot, e.g. 2.95.1 gives 29
   GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
 else

要するに3.0.4なら30に、3.1なら31になればいい。 sed 1qは1行目で終わりという意味で、結局head -1と同じ。 ついでにConfigureのlinux-elfの-m486を-march=i586に変更。

OpenSSH 3.2.3p1

更新。


2002-05-27 (Mon)

lftp 2.5.2

更新。

今日のskk ML

Klezが3通、そのVirus Alertが×3で9通、spamが1通。 unsubscribeすべきか?


2002-05-28 (Tue)

perl -D

突然perl -Dしたくなった。が、-DDEBUGGINGつきでmakeしてないのでできない。 GCCも3.1になったしこれで試そう。

% ./Configure -des -Dcc=gcc

途中所々に出る

cc1: warning: changing search order for system directory "/usr/local/include"
cc1: warning:   as it has already been specified as a non-system directory

cpp0: warning: changing search order for system directory "/usr/local/include"
cpp0: warning:   as it has already been specified as a non-system directory

が気になる。

どうもGCC 3.1はdefaultのinclude directoryを-Iで指定するとこんな警告を出すようだ。

% touch foo.c
% gcc -I/usr/local/include -c foo.c
cc1: warning: changing search order for system directory "/usr/local/include"
cc1: warning:   as it has already been specified as a non-system directory

Rubyは絶妙なタイミングで-I/usr/local/includeを外したと言える。

% make
make: *** No rule to make target `<built-in>', needed by `miniperlmain.o'.  Stop.

む?なんだろう?どうも-Eで余計なものが増えたようだ。

% gcc -E - </dev/null
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "<stdin>"

makedepend.SHに<stdin>と同じように<built-in>と<command line>も追加。 *.SHをいじったら

% ./Configure -S

を実行する。config.shができてれば最初から実行する必要はない。 makedepend.SHなので

% make depend

も実行してmakefileも更新した。 Perlの場合Makefileとmakefileを扱うのでちょっと面倒。

makeしてみるとpp_sys.cで

pp_sys.c: In function `Perl_pp_sysread':
pp_sys.c:1499: incompatible type for argument 5 of `recvfrom'
...

というエラーになる。struct sockaddrのcastが尽くエラーになってる。 /usr/include/sys/socket.hを見ると__SOCKADDR_ARGがまずそう。 本来なら

#if defined __cplusplus || !__GNUC_PREREQ (2, 7) || !defined __USE_GNU
# define __SOCKADDR_ARG         struct sockaddr *__restrict
# define __CONST_SOCKADDR_ARG   __const struct sockaddr *
#else

このelseのほうになるはずなんだけどなあ。あ、__attribute__か? config.hを確認してみるとHASATTRIBUTEがdefineされてない。 これが原因のようだ。Configureでは

if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
  if $contains 'warning' attrib.out >/dev/null 2>&1; then
    echo "Your C compiler doesn't fully support __attribute__."
    val="$undef"
  else
    echo "Your C compiler supports __attribute__."
    val="$define"
  fi
else

という感じでcheckしているので、つまりwarningがあったらだめってことだ。 ぐはぁ。やはりあの警告を何とかしないといけない。

思考錯誤して

% ./Configure -des -Dcc=gcc -Dlocincpth=

でいいかと思ったけど効果なし。locincpthをクリアするタイミングが難しそう。 今回はPolicy.shを使うことにした。-DDEBUGGINGもつけてこんな感じだ。

cc='gcc'
optimize='-Os'
ccflags='-DDEBUGGING'
locincpth=''

これでmake testもAll tests successfulになった。

[Ruby] REXML 2.3.4

更新。2.3.xは[test]にして2.2.xを[curr]にしたほうがいいかなあ。

[Cygwin] zsh 4.0.4-1, ccache 1.9-1

zshccache が追加されたのはいいが、最近 cygwin-announce ML のほうにアナウンスされないのがちょっと不便。


2002-05-29 (Wed)

Linux 2.5.18

2.5系列はなぜかがんがんteenyが上がる。 いつの間にか2.4に追いついた。 というわけで試してみる。SWSUSPが使いたいというのもあるが。 dj1もあてとこう。

いきなりmake menuconfigで

Generating include/linux/version.h
expr: syntax error

と止まってしまう。なんか待ってるようだ。C-dで先に進んだ。でも

mv: missing file argument
Try `mv --help' for more information.
make: *** [include/linux/version.h] Error 1

なのでぜんぜんだめだ。

Makefileを見るとこの.が怪しい。

@. scripts/mkversion_h $@ $(KERNELRELEASE) $(VERSION) $(PATCHLEVEL) $(SUBLEVEL)

やっぱashかなあ。

% make SHELL=/bin/sh menuconfig

だと

Generating include/linux/version.h
expr: syntax error

で、

% make SHELL=/bin/zsh menuconfig
zsh: no matches found: s/arm.*/arm/
Makefile:170: arch//Makefile: No such file or directory
make: *** No rule to make target `arch//Makefile'.  Stop.

なので、ashが原因らしい。ぐはぁ。 Makefileの中でなぜ.を使う必要があるのかわからん。 CONFIG_SHELLは一体何のためにあるんだ?

make bzImageしてみるとvmlinuxを作るところで

init/init.o: In function `rd_load_image':
init/init.o(.text.init+0xfe7): undefined reference to `change_floppy'
init/init.o: In function `rd_load_disk':
init/init.o(.text.init+0x111b): undefined reference to `change_floppy'

というエラーに。 change_floppyが定義されてるinit/do_mounts.cを見ると

#if defined(BLOCK_DEV_RAM) || defined(CONFIG_BLK_DEV_FD)
static void __init change_floppy(char *fmt, ...)

となってるが、ここは

#if defined(CONFIG_BLK_DEV_RAM) || defined(CONFIG_BLK_DEV_FD)
static void __init change_floppy(char *fmt, ...)

が正解。ってこんな単純なミスがあろうとは。 フロッピーをモジュールにする人はあまりいないのだろう。

続いて

aic7xxx_linux.c:2829: unknown field `abort' specified in initializer
aic7xxx_linux.c:2829: unknown field `reset' specified in initializer
aic7xxx_linux.c:2829: duplicate initializer
aic7xxx_linux.c:2829: (near initialization for `driver_template.slave_attach')
aic7xxx_linux.c:2829: duplicate initializer
aic7xxx_linux.c:2829: (near initialization for `driver_template.bios_param')

というエラー。 drivers/scsi/aic7xxx/aic7xxx_linux_host.hのAIC7XXXからabortとresetを削除してみる。 いけてるようだ。ま、いけてなくてもモジュールだから後でなんとでもなるだろう。

bootしてみると各種daemonを起動するとこでfreezeしてしまう。うーむ。

gcc -Wall

つまりこういうことです。

% echo 'static char foo[] = "";' >foo.c
% gcc -Wall -c foo.c
foo.c:1: warning: `foo' defined but not used
% echo 'const static char foo[] = "";' >foo.c
% gcc -Wall -c foo.c                         
%

2002-05-30 (Thu)

skk ML

100KB以上またはVirus Alertというsubjectのメールははじくようになった。 virusが来なくなった分、逆にspamが目立つ。

spam

128KBにぎりぎり届かないか。こういうのはなんか悔しい。

Linux 2.5.19

出たようだが、全然直ってない。逆にエラーが増えてる。

suspend.c:303: `tq_disk' undeclared (first use in this function)
suspend.c:303: (Each undeclared identifier is reported only once
suspend.c:303: for each function it appears in.)

もうちょっと待つか。


2002-05-31 (Fri)

spam

おいおい。今日1日で24通来たぞ。どうなってんだ?

XSLT処理系

XMLを吐くソフトがあるんだけど全く改行をつけてくれない。とても見辛い。 というわけでXSLTだ。って処理系は何がいいんだろう? 簡単に試せるのはCygwinのパッケージになってるlibxsltのxsltprocだ。 で、 こんなの を作った。

% tr -d '\n' <indent.xsl |sed 's/> *</></g' | \
  xsltproc indent.xsl - |cmp indent.xsl -
%

というわけでいいみたい。


<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!