Just another Ruby porter,

〜2001年2月中旬〜


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

2001-02-11 (Sun)

消費期限

「かすてらサンド」とかいう菓子パンに「消費期限13.2.14」と書いてあった。

オープンソースまつり

今日は行こうと思ったけど風邪で行けそうもない。 おとなしくRubyをhackすることにしよう。

__builtin_frame_address

まつもとさんはかなり忙しそうなので、 defined(__GNUC__) && defined(__i386__)でcommitした。

DJGPP

_ ac_cv_func_getpgrp_void=yes:

結局これでcommitした。

_ y_tab.c:

djgpp用のbisonは-yオプションをつけるとy.tab.cではなくy_tab.cを作る。 djgpp/configure.batを使う場合はdjgpp/config.sedで変換されるから問題な いが、autoconfで作ったconfigureには通用しない。どうしようかな。
Cygwinみたいにdjgpp/GNUmakefile.inを用意して
include Makefile
parse.c: parse.y
        $(YACC) $< -o parse.c
でいいかなと思ったが、
GNUmakefile:3: warning: overriding commands for target `parse.c'
Makefile:157: warning: ignoring old commands for target `parse.c'
を喰らってしまう。
include Makefile
YACC := $(YACC) -o y.tab.c
でいいか。なんか変だけど。
あ、configure時にYACC='bison -y -o y.tab.c'で十分という気がしてきた。

_ VPATHの区切り:

じつはVPATHの区切りのほうがやっかいで、 colonだったりsemi-colonだったりで、 どうせなら空白にしてしまいたいところである。 って古いmakeでも空白はありなのか?
あ、これこそ
include Makefile
VPATH = $(srcdir) $(srcdir)/missing
というdjgpp/GNUmakefile.inを用意すればいいのか。

gtk+

Cygwin用にstaticなlibraryを作ろうとするが、 なんかとてつもなく大変なことになりそう。

CREA

CREAは犬の名前。

2001-02-12 (Mon)

配送の乱れ

[ruby-list:27729]がなぜか3通届く。そのうちの1通の本文は
<<< No Message Collected >>>
しかない。

mingw32版rubyのgetsが遅い

_ signalを考えない改造:

rubyの-rが遅いというよりgets自体が遅かったわけだけど、かなり致命的な遅さだ。 mswin32版を使ってる人は困ってないのだろうか?
mingw32とmswin32版と二つ同じようなものがあっても面白くないし、 mingw32版はCtrl-Cで落ちようが, sleepがCtrl-Cで止まらないと文句を言われても、 速さを取ることにしようかな。
--- rubysig.h.orig      Mon Feb 12 19:27:26 2001
+++ rubysig.h   Mon Feb 12 20:17:00 2001
@@ -15,3 +15,3 @@
 
-#ifdef NT
+#if defined NT && !defined __MINGW32__
 typedef LONG rb_atomic_t;
で作ってみた。
C:\usr\local\bin>ruby irb --noreadline
で確かめたがmingw32版はCtrl-Cで落ちることはないようだ。
C:\usr\local\bin>ruby -e 'sleep 10'
はやはりkillできないが。

_ オリジナルのmingw32版:

じゃ、計ってみよう。 用意したファイルは例によってruby-talkの1月分。
% ls -l ruby-talk.0101
-rw-r--r--   1 watanabe ruby      5663931 Feb 11 00:22 ruby-talk.0101
まずはオリジナル。
C:\usr\local\bin>ruby -rwatch -vne '' ruby-talk.0101
ruby 1.6.2 (2001-02-11) [i386-mingw32]
98.76s elasped
*1
あれ? [ruby-list:27694]よりもちょっと増えてるなあ。まあいいや。要するにものすごく時間がかかる。

_ パッチをあてたmingw32版:

続いて先のパッチをあてた場合。
C:\usr\local\bin>ruby -rwatch -vne '' ruby-talk.0101
ruby 1.6.2 (2001-02-11) [i386-mingw32]
6.75s elasped

_ Cygwin版:

Cygwin版だと
% ruby -rwatch -vne '' ruby-talk.0101
ruby 1.6.2 (2001-02-11) [i386-cygwin]
2.85s elasped
で、もっと速い。
エミュレーションのかたまりとも言えるCygwin版より遅いというのは、 にわかには信じ難いのだが。

_ DJGPP版:

ついでにDJGPP版の結果。
C:\usr\local\bin>djgpp-ruby -rwatch -vne '' ruby-talk.0101
ruby 1.6.2 (2001-02-11) [i386-msdosdjgpp]
1.98s elasped
やっぱ、Win98ではdjgpp版が一番速いか。NTだと遅かったりするんだけど。

*1:
module Watch
  def self.start
    @start = Time.now
  end
  def self.stop
    @stop = Time.now
  end
  def self.interval
    @stop - @start
  end
  at_exit do
    Watch::stop
    print Watch::interval, "s elasped\n"
  end
end
Watch::start
というwatch.rbを用意した。

2001-02-13 (Tue)

たけ(tk)印の Ruby 日記

w3mで見ようとするとSEGVる。見るなってことか。

lstat

今日の変更でdir.cにlstatが入った。例によって
#ifndef HAVE_LSTAT
#define lstat rb_sys_stat
#endif
を追加した。

lazy mswin32/mingw32

このパッチをあてると
C:\usr\local\bin>ruby -rwatch -vne '' ruby-talk.0101
ruby 1.6.2 (2001-02-13) [i386-mingw32]
6.7s elasped
昨日のいんちきパッチの結果と同じぐらいの処理時間になる。

2001-02-14 (Wed)

風邪

調子悪し。

RubyWin 0.0.2.6

RAAでは新しくなったようだけど、見に行くと0.0.2.6のままだった。 0.0.2.7の間違いかと思い探りを入れてみたがNot Foundだった。

青木ぷろだくつ

ごっそり更新されているので少しずつ作っていこう。

2001-02-15 (Thu)

rubyist ML

一昨日入ったはずなんだけど、全然メールが来ない。 Rubyな人が二日もメールを出さないなんてありえないわけで、 MyPageで確認したら、赤信号の隣に

現在のML配信状況:停止中

とある。あれ?まだ始まってないのかと納得。 がいくらなんでも遅いよなと、よーく見ると

*配信状況の変更は、「個人設定の変更」で行えます。

とある。え、じゃこの停止中はおいらの現在の状況なの? がーん。配信しないがデフォルトなのか。 rubyist MLにはすでに20通ほどあった。

Ruby/GD

なんとなく次はRuby/GDにしたくなった。 というわけでまずはlibraryをmakeだ。 gd-1.8.4のreadme.txtを見ると

libpng, zlib, jpeg-6b, FreeType 2.x

あたりがあればいいようだ。 CygwinだとFreeTypeを除けばcontribにあるような気がする。 MinGWへ移植しよう。

libpng

1.0.9が最新。これはconfigureを使わない。 scripts/にどっさりMakefileが用意されている。 scripts/makefile.cygwinがあるのでこれをベースにbmingw用に書き換えよう。 これがその差分。 おもむろにmakeするとpngtest*.exeができるので、 pngtest.pngと共にWin98にscpして実行してみる。
./pngtest
Testing libpng version 1.0.9
   with zlib   version 1.1.3

 libpng version 1.0.9 - January 31, 2001
   Copyright (c) 1998-2001 Glenn Randers-Pehrson
   Copyright (c) 1996, 1997 Andreas Dilger
   Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 library (10009): libpng version 1.0.9 - January 31, 2001 (header)
 pngtest (10009): libpng version 1.0.9 - January 31, 2001 (header)
 sizeof(png_struct)=572, sizeof(png_info)=288
Testing pngtest.png:
 Pass 0: rwrwrwrwrwrwrwrwrw
 Pass 1: rwrwrwrwrwrwrwrwrw
 Pass 2: rwrwrwrwrwrwrwrw
 Pass 3: rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
 Pass 4: rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
 Pass 5: rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
         rwrwrwrw
 Pass 6: rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
         rwrwrwrwrw
 PASS (9782 zero samples)
 Filter 0 was used 21 times
 Filter 1 was used 15 times
 Filter 2 was used 52 times
 Filter 3 was used 10 times
 Filter 4 was used 33 times
 tIME = 7 Jun 1996 17:58:08 +0000
libpng passes test
いけてるようだ。sudo make installする。 libpng.dll.aもインストールされるがDLLが必要になるのでrenameしとく。 今日はここまで。

2001-02-16 (Fri)

x

たとえば ruby-1.6.2-20010216-i386-cygwin.xdeltaは
ruby-1.6.2-i386-cygwin.tar.gz
ruby-1.6.2-20010216-i386-cygwin.tar.gz
の差分だが、一番近々である
ruby-1.6.2-20010215-i386-cygwin.tar.gz
ruby-1.6.2-20010216-i386-cygwin.tar.gz
の差分は
x
という名前で置いてある。 というか実際はxをrsyncしてheliumへ転送し、 helium上でxdelta delta -9して更新している。 置いてあるというより消してないと言うべきだが、 もし毎回追っかけてる奇特な人がいるなら活用できるかも。 あ、xはIndexIgnoreで見えないようにしているので、 そのあたりはよろしく。

zsh

わたしも最近はzsh使いなので区別しなくて全く問題ないっつーか、 元々はtcsh使いなのでC-uで全部消えたほうがいいんだけど、 bashのような挙動にしたければ
% bindkey "^U" backward-kill-line
でokです。

2001-02-17 (Sat)

ncurses

_ Andyさんからのメール:

昨日PragmaticなAndyさんからメールが来た。 irbでカーソルキーが動かないという。 時差の関係上寝てる間にもう一通メールが来てて、 ncursesのcygncurses5.dllがないのが原因だったらしい。 なるほど。 Cygwinのパッケージを全部インストールしてる環境では再現しないわけだ。 あ、curses拡張ライブラリも含めるために、 ncurses関係をクロスの環境へコピーしたんだけど、 readlineはtermcapじゃなくてncursesがリンクされるようになったわけか。 そのときにlibncurses.dll.aを残していたのが敗因だ。

_ libncurses.dll.aとlibncurses.a:

一昨日にもちょっと書いたけど
libncurses.dll.a
libncurses.a
の両方が存在する場合、 リンク時に-lncursesと指定するとlibncurses.dll.aが優先してリンクされる。 libncurses.aをリンクしたければ-staticが必要になる。 -staticを追加してもいいんけど、単純に
% sudo mv /usr/local/cygwin-local/lib/libncurses.dll.a{,.orig}
しておくことにした。

_ readline拡張ライブラリ:

readline的にはtermcapで十分という気もするが、
have_library("ncurses", "tgetnum") or
  have_library("termcap", "tgetnum") or
  have_library("curses", "tgetnum")
という順番だからncursesが先に見つかってしまう。

_ curses拡張ライブラリ:

いっそのことncursesは見つからないとこに置いといて --with-ncurses-dirで指定することにしようかな。
% cd /usr/local/cygwin-local
% sudo mkdir -p ncurses/{include,lib}
% sudo mv lib/libncurs* ncurses/lib
% sudo mv include/*curs* ncurses/include
として
--with-ncurses-dir=/usr/local/cygwin-local/ncurses
でどうだろう?と思ったがext/curses/extconf.rbには
dir_config('ncurses')
がない。追加しよう。

_ NCURSES_STATIC:

configureしてmakeすると
curses.o(.text+0x45):curses.c: undefined reference to `_imp__stdscr'
を喰らう。ncurses_dll.hを見るとNCURSES_STATICをdefineしないと __declspec(dllimport)するのがデフォルトになってる。 これだと-staticをつけたところで何も変わらないわけで、 相変わらずCygwinってやつはやることが中途半端だ。
ncurses_dll.hを書き換えてあらかじめdefineすることにした。

freecom

livedoorは専用の接続ソフトが必要で、 Linuxじゃ使えないというのが実は最大の難点だった。 やっと freecomのアクセスポイントに大宮が追加されたので加入した。 これでLinuxからもokさ。 が、sshとかしてみるとすごく遅い。 どうもDNSのタイムアウトまで待たされてるような感じ。逆引きだな。 新しすぎてまだ更新されてないんだろう。あと一週間ぐらいの辛抱かな。 てゆうかxDSLが使えないとこがすでに負けてる。

2001-02-18 (Sun)

jpeg-6b

_ configure:

毎度お馴染のオプションだ。
% CC='i686-pc-cygwin-gcc -bmingw' \
  CFLAGS=-Os \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  NM=i686-pc-cygwin-nm \
  LD=i686-pc-cygwin-ld \
  ./configure \
  --prefix=/usr/local/mingw \
  --target=i386-mingw32 \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux
できあがったMakefileを見ると
AR= ar rc
となってる。 makefile.cfg *1に直接埋まっているから、 configure時にAR=i686-pc-cygwin-arしても無駄だった。 しょうがないからmake時に指定する。
% make AR='i686-pc-cygwin-ar rc'
% sudo make install-lib

*1: なぜかMakefile.inという名前ではない。

FreeType

_ freetype-1.3.1:

% CC='i686-pc-cygwin-gcc -bmingw' \
  CFLAGS=-Os \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  NM=i686-pc-cygwin-nm \
  LD=i686-pc-cygwin-ld \
  ./configure \
  --prefix=/usr/local/mingw \
  --target=i386-mingw32 \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux
...
checking size of int... configure: \
  error: can not run test program while cross compiling
longも同じなので例によって
ac_cv_sizeof_int=4 ac_cv_sizeof_long=4
も追加。
% make
テストプログラムを作るところでぼろぼろとXをリンクしようするエラーが。 うーむ。libだけあればいいから
% make ttlib
% cd lib; sudo make -f arch/unix/Makefile install
する。

_ freetype-2.0.1:

% cd builds/unix
% CC='i686-pc-cygwin-gcc -bmingw' \
  CFLAGS=-Os \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  NM=i686-pc-cygwin-nm \
  LD=i686-pc-cygwin-ld \
  ./configure \
  --prefix=/usr/local/mingw \
  --target=i386-mingw32 \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux
% cd -
% make
% sudo make install
本来ならまず
% make setup
するところだが、これでうまくいくようだ。

gd-1.8.4

じゃ、いよいよgdだ。これにはconfigureがなくMakefileがあるのみ。 ranlibも直に埋まってるなあ。その辺をマクロ化しとく。 てゆうか*.oだのlibgd.aが既にあるのはなぜだ? make cleanしてから配布してくれ。
% make \
  COMPILER='i686-pc-cygwin-gcc -bmingw' \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  INCLUDEDIRS='-I. -I/usr/local/mingw/include/freetype2 \
  -I/usr/local/mingw/include/freetype' \
  LIBDIRS='-L. -L/usr/local/mingw/lib' \
  CFLAGS='-Os -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBTTF'
% su make INSTALL_LIB=/usr/local/mingw/lib \
  INSTALL_INCLUDE=/usr/local/mingw/include \
  INSTALL_BIN=/usr/local/mingw/bin install

ruby-GD-0.7.2

% i386-mingw32-ruby extconf.rb \
  --with-ttf \
  --with-freetype \
  --with-jpeg \
  --with-gd-dir=/usr/local/mingw
doc/INSTALL.jaを見ると--with-xpmもある。しまったな。libxpmも後で作ろう。 まいいや。
% make
% upx GD.so
% make site-install
% cat >../ruby-GD.contents
DOC= Changes TODO doc readme.* readme.ja sample
CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/GD.so
% make -f ../Makefile.pack PACKAGE=ruby-GD VERSION=0.7.2 TARGET=i386-mingw32
できあがったGD.soをWin98で試す。 sample/gdtestttf.rbのfontpathを"c:/windows/FONTS/times.ttf"にして
C:\cygwin\home\watanabe>ruby gdtestttf.rb >hoge.png

C:\cygwin\home\watanabe>start hoge.png
すると
Ruby/GD version 0.7.2
とななめにTrueTypeで表示された。成功だ。

2001-02-19 (Mon)

FreeType 1.3.1

_ Cygwin:

% CC='i686-pc-cygwin-gcc' \
  CFLAGS=-Os \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  NM=i686-pc-cygwin-nm \
  LD=i686-pc-cygwin-ld \
  ac_cv_sizeof_int=4 \
  ac_cv_sizeof_long=4 \
  ./configure \
  --prefix=/usr/local/cygwin-local \
  --target=i686-pc-cygwin \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux \
  --without-x
% make ttlib
% cd lib; sudo make -f arch/unix/Makefile install

FreeType 2.0.1

_ Cygwin:

% cd builds/unix
% CC='i686-pc-cygwin-gcc' \
  CFLAGS=-Os \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  NM=i686-pc-cygwin-nm \
  LD=i686-pc-cygwin-ld ac_cv_sizeof_int=4 ac_cv_sizeof_long=4 \
  ./configure \
  --prefix=/usr/local/cygwin-local \
  --target=i686-pc-cygwin \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux \
--without-x
% cd -
% make
% sudo make install

gd-1.8.4

_ Cygwin:

% make \
  COMPILER='i686-pc-cygwin-gcc' \        
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  INCLUDEDIRS='-I. -I/usr/local/cygwin-local/include/freetype2 \
  -I/usr/local/cygwin-local/include/freetype \
  -I/usr/local/cygwin-local/include' \
  LIBDIRS='-L. -L/usr/local/cygwin-local/lib' \
  CFLAGS='-Os -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBTTF'
...
gd_jpeg.c: In function `gdImageCreateFromJpegCtx':
gd_jpeg.c:348: structure has no member named `progressive_mode'
うーむ。 エラーになってしまった。 原因をつきとめるのも面倒なのでjpegは自分でmakeすることにする。

jpeg-6b

_ Cygwin:

MakefileはMinGWのときと同じように書き換えた。
% CC='i686-pc-cygwin-gcc' \
  CFLAGS=-Os \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  NM=i686-pc-cygwin-nm \
  LD=i686-pc-cygwin-ld \
  ./configure \
  --prefix=/usr/local/cygwin-local \
  --target=i386-cygwin \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux 
% make AR='i686-pc-cygwin-ar rc'
% sudo make install-lib

ふたたびgd-1.8.4

% make \
  COMPILER='i686-pc-cygwin-gcc' \
  AR=i686-pc-cygwin-ar \
  RANLIB=i686-pc-cygwin-ranlib \
  INCLUDEDIRS='-I. -I/usr/local/cygwin-local/include/freetype2 \
  -I/usr/local/cygwin-local/include/freetype \
  -I/usr/local/cygwin-local/include' \
  LIBDIRS='-L. -L/usr/local/cygwin-local/lib' \
  CFLAGS='-Os -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBTTF'
% sudo make INSTALL_LIB=/usr/local/cygwin-local/lib \
  INSTALL_INCLUDE=/usr/local/cygwin-local/include \
  INSTALL_BIN=/usr/local/cygwin-local/bin install
すんなり通る。

ruby-GD-0.7.2

_ Cygwin:

% mkdir cygwin; cd cygwin
% i386-mingw32-ruby ../extconf.rb \
  --with-ttf \
  --with-freetype \
  --with-jpeg \
  --with-gd-dir=/usr/local/cygwin-local
% make
% upx GD.so
% make site-install
% cd ..
% make -f ../Makefile.pack PACKAGE=ruby-GD VERSION=0.7.2 TARGET=i386-cygwin 
同じようにgdtestttf.rbで試したらokだった。

2001-02-20 (Tue)

GNOME on Cygwin

ただしWindows上のX Serverが必要だ。

Meadowをgcc -mno-cygwinで

こっそりMeadowを
% CC='gcc -mno-cygwin -mwin32' ./configure i386-mingw32
てな感じで試してたりするのだが、残念なことに
...
./temacs -batch -l loadup dump
このプログラムは不正な処理を行ったので強制終了されます。
を喰らってしまう。というよりどのファイルをリンクすればいいのか、 いまいちわかってないあたりで既に負けてる。 やはりemacs-20.7-gcc-tar.gzを参考にしたほうがいいんだろう。

win32ole 0.2.4, rubywin 0.0.2.7

更新。

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