Just another Ruby porter,

〜2001年1月下旬〜


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

2001-01-21 (Sun)

RubyWin

雑感( 2001年2月以降)によると、RubyWinがbmingwでコンパイルできないというので試してみよう。
その前にちょっと突っ込みたいんだけど、 RubyWinの名前のつけかたが非常に興味深い。
% ls rubywin*
rubywin-src-0.0.2.3.zip  rubywin_src-0017.zip  rubywin_src-0020.zip
rubywin-src-0008.zip     rubywin_src-0018.zip
rubywin_src-0.0.2.1.zip  rubywin_src-0019.zip
とまるで一貫性がない。

_ unzip:

gcc 2.95.2ではまだDOS line endingsなソースファイルを正しく扱うことができない *1。だから
% unzip -a rubywin-src-0.0.2.3.zip
する。

_ new.h:

% cd rubywin
% mkdir mingw
% cd mingw
% ruby -rfake_i386-mingw32_1.6.2.rb ../config.rb
% make
<途中略>
/usr/local/cygwin/lib/gcc-lib/i686-pc-cygwin/2.95.2-6/../../../../\
include/g++-3/stl_algobase.h:52: new.h: No such file or directory
なるほど。new.hか。これは

/usr/local/cygwin/lib/gcc-lib/i686-pc-cygwin/2.95.2-6/include/new.h

にある。specsの*cpp:に

-iwithprefixbefore include \

が抜けてるのが原因だ。-nostdinc \の後に入れるのがよさそう。

_ stdc++:

makeしてみるとCygwin用のlibstdc++.aがリンクされてしまいエラー。 specs.msvcrtだとそうなってしまうよね。 やっぱ、これもPREFIX/mingw/libに移動しよう。あ、libgcc.aも。

_ bmingw, specs.msvcrt:

というわけで bmingw-20010121.tar.gzだ。libstdc++.a, libgcc.aの場所が変更になっているので、展開する前に
% rm -rf PREFIX/lib/gcc-lib/mingw PREFIX/mingw
したほうがいい。PREFIXはnativeなら/usr、crossなら/usr/local/cygwin。 specs.msvcrtも更新しとこう。

*1: gcc 2.95.3ではできるようになるはず。

WWWOFFLE

違った。「次」は0x3c 0x21だからだ。 試しにcacheを書き換えてみる。やはりそうだ。 うーむ。WWWOFFLEは日本語対応してるわけでもないしねえ。 Prev, Next, Recentにでもするか。

make

GNU makeがmakeという名前でインストールされてるなら全く問題ないです。 つまりFreeBSDのようにシステムではGNU makeが使われてなくても、 packagesとかにはGNU makeがgmakeという名前であるよねという話で。

2001-01-22 (Mon)

fake_TARGET.rb

名前間違ってfake-TARGET.rbでrsyncしてしまった。 fake_i386-cygwin.rbだと_と-が混ざっていてあれだなと思って、 fake-TARGET.rbにしたけど、 バージョンも埋め込みたくなって簡単に識別できるように、 fake_i386-cygwin_1.6.2.rbに戻したのだった。 で名前を変えるのを忘れてた。とりあえず名前を変えてsymlinkしとこ。 てゆうか 指摘され済みっす。どうせならどっちにも対応できるようにしとこう。 ついでに
% ruby -rfake_TARGET -s extconf.rb -target=i386-mingw32 -version=1.6.2
とできるようにしてみた。 ファイル名で情報を渡していたのにも元々ちょっと無理があったが、 グローバル変数使ったので寿命が縮んだことになる。

Cygwin DLL

そういえば年越しmakeをしたから1.1.7-1よりは新しい。 大きな違いはないと思ったけどgetrlimitが増えてるとは。 まだ Ruby Binariesは広まってないのが幸いしてると言える。 じゃ これを使ってください。 SIGCONTの件があるだけに1.1.7-1にはもう戻したくないし。 あ、1.1.8が出るまでac_cv_func_getrlimit=noしとけばいいのか。 20010122はそうした。

1.7.0

そういえばfakeなrubyは1.7.0を使っていたもんだからrbconfig.rbの中のとこ ろどころに1.7の残骸が。これじゃまずいのでruby 1.6.2リリースも作り直しだ。 てことは全部置き換えか。

xdelta

% xdelta --help
xdelta: usage: xdelta COMMAND [OPTIONS] [ARG1 ARG2 ...]
xdelta: COMMAND is one of:
xdelta:   delta     Produce a delta from ARG1 to ARG2 producing ARG3
xdelta:   info      List details about delta ARG1
xdelta:   patch     Patch file ARG2 with ARG1 producing ARG3
xdelta: OPTIONS are:
xdelta:   -v, --version
xdelta:   -V, --verbose
xdelta:   -h, --help
xdelta:   -n, --noverify
xdelta:   -p, --pristine
xdelta:   -m, --maxmem=SIZE  Set the buffer size limit, e.g. 640K, 16M
xdelta:   -[0-9]    Compression level: 0=none, 1=fast, 6=default, 9=best
ちゃんと-9も指定できるのであった。 delta時だけでなくpatch時にも有効。

Makefile.cross

xdeltaを作る際、現在はシェルスクリプトではなく Makefile.crossを用意して
% make -f ../Makefile.cross xdelta
としている。 今現在のディレクトリ構造はこんな感じ。
Makefile.cross install-cross, tar+gz作成, xdelta作成用Makefile
ruby16/ cvs co してある場所
cygwin/ target i386-cygwin の作業場
djgpp/  target i386-msdosdjgpp の作業場
mingw/  target i386-mingw32 の作業場

101 Misconceptions ...

なんか非常に盛り上がってるようだけど、すでに読む気なし。 さらにとどめを刺すように一通一通が長くなっている。

2001-01-23 (Tue)

UPX

今までに何度かupxって単語を使っていたけど、 これを見ると

the Ultimate Packer for eXecutables

の略らしい。ふーん、そうだったのか。

_ lzexe, diet:

要するに実行可能ファイルを実行できる形のまま圧縮してしまう優れものだ。 10年ぐらい前にパソコン通信してた人なら覚えているかもしれないが、 lzexeとかdietとかそういう類のやつ。

_ DLLも圧縮:

これのすごいとこは自分が知ってる実行形式なら圧縮できる点。 つまりLinux上でWindowsの実行ファイルも圧縮できる。 さらにWindowsのDLLも圧縮できる。この圧縮率がまた驚異的。
% ls -l cygwin-ruby16.dll*
-rwxr-xr-x   1 watanabe ruby       567808 Jan 23 01:29 cygwin-ruby16.dll
-rw-r--r--   1 watanabe ruby       228625 Jan 23 01:30 cygwin-ruby16.dll.bz2
-rw-r--r--   1 watanabe ruby       243903 Jan 23 01:29 cygwin-ruby16.dll.gz-9
-rwxr-xr-x   1 watanabe ruby       221696 Jan 23 01:29 cygwin-ruby16.dll.upx
なんとbzip2に勝ってる。しかもこのままDLLとして使えるのだ *1

_ upx+gzip:

試しにupxしてからgzip -9すると
% ls -l cygwin-ruby16.dll.upx.gz-9 
-rw-r--r--   1 watanabe ruby       209079 Jan 23 01:45 cygwin-ruby16.dll.upx.gz-9
さらに小さくなる。つまりパッケージ化するときもupxしたほうが小さくなる。 ただしXdeltaを考えなければ。

*1: もちろんmv cygwin-ruby16.dll{.upx,}は必要だけど。

.htaccess

~eban/public_html/ruby/.htaccessは現在こんな感じ。
#IndexOptions DescriptionWidth=*
IndexOptions NameWidth=*
HeaderName HEAD.html
ReadmeName README.html
IndexIgnore README.html HEAD.html .htaccess *~ *.bak i386-*
AddDescription "<a href=http://www.xcf.berkeley.edu/~jmacd/xdelta.html>xdelta</a>" xdelta.exe
AddDescription "<a href=http://www.ruby-lang.org/en/raa-list.rhtml?name=eruby>eruby</a>" eruby-*-i386-*.tar.gz
AddDescription "Binary Delta" *.xdelta
AddDescription "<a href=http://www.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/ruby/>CVS Snapshot</a>" ruby-[^-]*-*-i386-*.tar.gz
AddDescription "<a href=http://www.ruby-lang.org/en/download.html>Current Release</a>" ruby-[^-]*-i386-*.tar.gz
AddDescription "bmingw package" bmingw-*.tar.gz
AddDescription "<a href=http://cygwin.com/snapshots/>Cygwin DLL</a>" cygwin1*.dll
AddDescription "<a href=http://cygwin.com/>Cygwin Home</a>" cygwin
AddDescription "<a href=http://www.mingw.org/>MinGW Home</a>" mingw
AddDescription "<a href=http://delorie.com/djgpp/>DJGPP Home</a>" djgpp
AddDescription "Ruby Binaries" binaries
IndexOptions DescriptionWidth=*はApache 1.3.10以降じゃないと使えない。 i386-*は
% ln -s cygwin i386-cygwin
% ln -s mingw i386-mingw32
% ln -s djgpp i386-msdosdjgpp
のsymlinkを隠すため。このsymlinkは Makefile.crossとrsyncの-aオプションを考えると、こうするのが一番簡単だと思うので。

2001-01-24 (Wed)

RubyWin

makeできるようになってすっかり安心しきっていたが、 インストールしてないことに今になって気づく。 おそらくこうなることを予期していたのであろう。

_ make install:

% cd rubywin/mingw
% make install
ruby ./install.rb
ruby: No such file to load -- ./install.rb (LoadError)
make: *** [install] Error 1
あれ?これって入ってなかったんだっけ? とりあえずmkdir mingw cygwin対策 パッチ。crossのときは
% make install
ruby ../install.rb
と実行されてしまいnative linuxのPREFIXである/usr/localへインストールされる。 それではまずいのでRUBYOPT1, RUBYOPT2を追加したわけだけど、 これは美しくなさすぎ。もっとうまい方法を考えたい。
% make install \
  RUBYOPT1='-rfake_TARGET -s' \
  RUBYOPT2='-target=i386-mingw32'
ruby -rfake_TARGET -s ../install.rb -target=i386-mingw32
../SciLexer.dll -> /home/watanabe/dist/i386-mingw32/usr/local/bin/SciLexer.dll
chmod 0755 /home/watanabe/dist/i386-mingw32/usr/local/bin/SciLexer.dll
rubywin.exe -> /home/watanabe/dist/i386-mingw32/usr/local/bin/rubywin.exe
chmod 0755 /home/watanabe/dist/i386-mingw32/usr/local/bin/rubywin.exe
../rwlib/rwirb.rb -> /home/watanabe/dist/i386-mingw32/usr/local/bin/rwlib/rwirb.rb
chmod 0644 /home/watanabe/dist/i386-mingw32/usr/local/bin/rwlib/rwirb.rb
../rwlib/rwinit.rb -> /home/watanabe/dist/i386-mingw32/usr/local/bin/rwlib/rwinit.rb
chmod 0644 /home/watanabe/dist/i386-mingw32/usr/local/bin/rwlib/rwinit.rb
うーむ。ここにインストールしちゃうとばらばらにするの大変だなあ。 と思って20世紀はてんこもりになっちゃったんだけど。 どうせFile.install経由になるから、すげかえて記録すればいいか。

_ Makefile.cross:

じっとMakefile.crossを見ると

usr/local/bin/ruby*.exe

だけが問題のような気がする。ここは

usr/local/bin/ruby.exe
usr/local/bin/rubyw.exe

にすべきか? rubyw.exeはDJGPPにはないからDLLと同じと考えればいいか。 というわけでDLLの存在で判断することにした( Makefile.cross)。例によってばりばりGNU make依存。

明日から三日降り続くかもと言われてもねえ。

2001-01-25 (Thu)

Win32OLE

次は Win32OLEをmakeしよう。

_ make:

% unzip -a win32ole-0.1.9.zip
% cd win32ole
% mkdir cygwin mingw
% cd cygwin
% ruby -rfake_TARGET.rb -s ../extconf.rb -target=i386-cygwin
% make
% make site-install
ですんなりwin32ole.soがインストールされる。MinGWも同様。
% cd mingw
% ruby -rfake_TARGET.rb -s ../extconf.rb -target=i386-mingw32
% make
% make site-install
makeのターゲットでsite-installを指定すると

PREFIX/lib/ruby/site_ruby/VERSION/TARGET

へインストールされる。


2001-01-26 (Fri)

RubyWin

Cygwin版RubyWinを立ち上げて、IRBを起動しこれをexitしないで、 すぐにRubyWinを終了させるとSEGVるようだ。
% rubywin
(eval): warning: already initialized constant STDOUT
(eval): warning: already initialized constant STDERR
(eval): warning: already initialized constant STDIN
C:\CYGWIN\USR\LOCAL\BIN\rwlib\rwirb.rb:7: [BUG] Segmentation fault
ruby 1.6.2 (2001-01-23) [i386-cygwin]
      0 [sig] rubywin 199481 stackdump: Dumping stack trace to RUBYWIN.EXE.stackdump
zsh: abort (core dumped)  rubywin
warningは remove_constantModule#remove_const *1すれば消えるけど、 この場合は$stdout, $stderr, $stdinを使ったほうがいいかな。
*1: 2001-01-30修正

2001-01-27 (Sat)

Wine

Wineを先週取ってきたことを今頃になって思い出す。

_ configure と make:

% CFLAGS=-Os ./configure  --enable-dll
% make depend && make
configureすると最後に

Configure finished. Do 'make depend && make' to compile Wine.

と出るのでそれに従う。 面倒なら./tools/wineinstallを使うほうがいい。

_ 遅い:

2時間経ってもまだ終わらない。P5 133MHzじゃねえ。その間「秘密」を見る。 と書いたら終わった。

_ 遅い遅い:

% time wine -- ./ruby -v
Building font metrics. This may take some time...
<フォントのエラーメッセージが延々続く>
err:ntdll:RtlpWaitForCriticalSection Critical section 0x400fe370 wait timed out, retrying (60 sec) fs=020f
fixme:keyboard:X11DRV_KEYBOARD_DetectLayout Your keyboard layout was not found!
Instead of using closest match (United States keyboard layout (phantom key version)) for scancode mapping.
Please define your layout in windows/x11drv/keyboard.c and submit them
to us for inclusion into future Wine releases.
See documentation/keyboard for more information.
fixme:winsock:_get_sock_fd handle 65535 is not a socket (GLE 6)
fixme:winsock:_get_sock_fd handle 65535 is not a socket (GLE 6)
fixme:console:SetConsoleCtrlHandler (0x7800f585,1) - no error checking or testing yet
ruby 1.6.2 (2001-01-23) [i386-mingw32]
wine -- ./ruby -v  8.13s user 2.24s system 2% cpu 6:22.22 total
まいったなあ。6分もかかるのか。 フォント関係は2回目からは出ないからもうちょっと改善されるけど。
% time wine -- ./ruby -v
err:ntdll:RtlpWaitForCriticalSection Critical section 0x400fe370 wait timed out, retrying (60 sec) fs=020f
fixme:keyboard:X11DRV_KEYBOARD_DetectLayout Your keyboard layout was not found!
Instead of using closest match (United States keyboard layout (phantom key version)) for scancode mapping.
Please define your layout in windows/x11drv/keyboard.c and submit them
to us for inclusion into future Wine releases.
See documentation/keyboard for more information.
fixme:winsock:_get_sock_fd handle 65535 is not a socket (GLE 6)
fixme:winsock:_get_sock_fd handle 65535 is not a socket (GLE 6)
fixme:console:SetConsoleCtrlHandler (0x7800f585,1) - no error checking or testing yet
ruby 1.6.2 (2001-01-23) [i386-mingw32]
wine -- ./ruby -v  7.96s user 1.74s system 15% cpu 1:02.03 total
それでも1分だ。 あ、なんか60 sec待ってるってメッセージに出てるね。 ソースを見るとWaitFroSingleObjectで5秒待ってタイムアウトしたら60秒待ち、 さらにタイムアウトしたら5分待つという感じになってる。 てことはこのメッセージは5秒後に出てるわけか。 試しにhello worldをCで書いて実行してみると40秒ぐらいかかる。 fixmeは--debugmsg fixme-allすれば表示されなくなるけど、 errは無視したからって速くなるわけでもないしねえ。

_ ntdll:

ntdllはnativeを使えばいいという気もする。
% ldd /usr/local/bin/wine             
        libntdll.so => /usr/local/lib/libntdll.so (0x4001a000)
        libwine.so => /usr/local/lib/libwine.so (0x40117000)
        libwine_unicode.so => /usr/local/lib/libwine_unicode.so (0x4012d000)
        libncurses.so.5 => /usr/local/lib/libncurses.so.5 (0x401f5000)
        libutil.so.1 => /lib/libutil.so.1 (0x40235000)
        libdl.so.2 => /lib/libdl.so.2 (0x40238000)
        libc.so.6 => /lib/libc.so.6 (0x4023b000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
だめだ。リンクされてる。

.htaccess

.htaccessはIndexIgnoreに登録しなくても最初から.??*が登録されてるので、 たしかに書いても意味はないと言えばないんだけど。 Forbiddenになっちゃうからここで公開したというか。 あ、こうしとけばいいのか。
<Files .htaccess>
    Order allow,deny
    allow from all
</Files>
でもどうすればIndexIgnoreから外せる? とりあえず ここから見えるようにしとこう。

三日間降らなかった代わりにまとめて降ってるんだろうか。 それにしても休みの日を狙って降らなくても。 買いそびれた極道編は月曜だな。amazonに注文しとけばよかった。
〜DO AS INFINITY/DESIREを聴きながら〜

2001-01-28 (Sun)

command.comとcmd.exe

WinMeにもcmd.exeは付属してないそうだけど、実は psdk-x86.49.cabの中にあるWin95Cmd_Exe.95CE7C64_A68D_11D2_A852_00C04FC2A854が使える。 これをwin95cmd.exeとかcmd.exeに名前を変えればいい。 psdk-x86.49.cabは10MBぐらいあるので気合いを入れるように。 Win95Cmd_Exe.後略は300KBぐらいなので、 これだけが目的だとすると割に合わないかもしれない。
ruby:~ % ssh wjarh
Fanfare!!!
You are successfully logged in to this server!!!
JARH:~ % PROMPT='$p$g' win95cmd
Microsoft Windows 2000 [Version 4.10.0000]
(C) Copyright 1985-1999 Microsoft Corp.

C:\cygwin\home\watanabe>
command.comだとほとんどハング状態だったけど、 win95cmd.exeだとほとんど問題ない。 コマンドラインのエコーバックが返ってくるのは気にしないことにしよう。
メッセージにはWindows 2000と出てるから2000用なのか。

_ cd windows:

でもなんか挙動が変だ。
C:\>dir w*.
dir w*.
 Volume in drive C has no label.
 Volume Serial Number is XXXX-XXXX

 Directory of C:\

98/06/29  15:10         <DIR>          WINDOWS
               0 File(s)              0 bytes
               1 Dir(s)      64,290,816 bytes free

C:\>cd windows
cd windows
アクセスは拒否されました。

C:\>cd \windows
cd \windows

C:\WINDOWS>
なぜに拒否される?しかも拒否するまでちょっと時間がかかる。

_ 2> out:

だいたいNTのcmd.exeと同じなので2>も使える。
C:\>ruby -e '$stderr.print "stderr\n"' >nul
ruby -e '$stderr.print "stderr\n"' >nul
stderr

C:\>ruby -e '$stderr.print "stderr\n"' 2>nul
ruby -e '$stderr.print "stderr\n"' 2>nul

C:\>

[ruby-talk:9986]

これって単に
C:\>command.com /c c:/usr/local/bin/ruby -v
command.com /c c:/usr/local/bin/ruby -v

C:\>win95cmd /c c:/usr/local/bin/ruby -v
win95cmd /c c:/usr/local/bin/ruby -v
ruby 1.6.2 (2001-01-23) [i386-mingw32]

C:\>c:/usr/local/bin/ruby -v
c:/usr/local/bin/ruby -v
ruby 1.6.2 (2001-01-23) [i386-mingw32]

の違いじゃないのかな。cmd.exeは不思議なことに/も受け付ける。

ML

ruby-talk MLも10000通を越えた。 気づいてなかったがruby-dev MLも半年前に越えている。

RubyUnit 0.3.3a

% ruby -rfake_TARGET -s install.rb -target=i386-cygwin
% ruby -rfake_TARGET -s install.rb -target=i386-mingw32
% ruby -rfake_TARGET -s install.rb -target=i386-msdosdjgpp

Makefile.pack

packingのための Makefile.packを作った。 たとえば
DOC=ChangeLog README ToDo doc_* makehtml.rb sample test*
CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/runit \
usr/local/bin/runtest.rb \
usr/local/bin/c2t.rb
のような../rubywin.contentsを用意しといて
% make -f ../Makefile.pack PACKAGE=rubyunit VERSION=0.3.3a TARGET=i386-cygwin
% make -f ../Makefile.pack PACKAGE=rubyunit VERSION=0.3.3a TARGET=i386-mingw32
% make -f ../Makefile.pack PACKAGE=rubyunit VERSION=0.3.3a TARGET=i386-msdosdjgpp
という感じで一気にtar+gzipまで作る。
これで基本的にはfoo.contentsを作ればいいわけだ。ほんとか?

昨日の雪は夕方には雨へと変わったのでかなり溶けた。 が、また週末に降るという噂も。
〜move/Gamble Rumbleを聴きながら〜

2001-01-29 (Mon)

strscan 0.6.1

_ i386-cygwin:

% ruby -rfake_TARGET -s setup.rb -target=i386-cygwin config
% cd ext/cscan
% ruby -rfake_TARGET -s extconf.rb -target=i386-cygwin
% cd ../..
% ruby -rfake_TARGET -s setup.rb -target=i386-cygwin setup
% upx ext/cscan/cscan.so
% ruby -rfake_TARGET -s setup.rb -target=i386-cygwin install
青木さんのsetup.rbはfake_TARGET.rbだと騙されないのか、 ext/以下を処理してくれないので手でextconf.rbを実行する。

_ strscan.contents:

DOC=LGPL README.en README.ja doc.en doc.ja
これだけでokなはず.
% make -f ../Makefile.pack PACKAGE=strscan VERSION=0.6.1 TARGET=i386-cygwin
...
tar: Cannot add file usr/local/lib/ruby/site_ruby/1.6/i386-cygwin/strscan.so: \
  No such file or directory
...
うーむ。まいったね。strscan.soじゃなくてcscan.soなんだなあ。 というわけでstrscan.contentsは
DOC=LGPL README.en README.ja doc.en doc.ja
CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/cscan.so
に変更。今度はokだ。

_ i386-mingw32:

続いてi386-mingw32の前にclean.
% ruby -rfake_TARGET -s setup.rb -target=i386-cygwin clean
% rm config.save
config.saveが残ってると前回にsetupしたものが使われてしまうので注意。
% ruby -rfake_TARGET -s setup.rb -target=i386-mingw32 config
% cd ext/cscan
% ruby -rfake_TARGET -s extconf.rb -target=i386-mingw32
% cd ../..
% ruby -rfake_TARGET -s setup.rb -target=i386-mingw32 setup
% upx ext/cscan/cscan.so
% ruby -rfake_TARGET -s setup.rb -target=i386-mingw32 install
とここのメッセージを見てて、 scanner.rb, strscan.rb, rscan.rbの存在を忘れていたことに気づく。 またstrscan.contentsの修正。
DOC=LGPL README.en README.ja doc.en doc.ja
CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/cscan.so \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/scanner.rb \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/strscan.rb \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/rscan.rb
ああ、cygwin版作り直しじゃん。てゆうかsetup.rbは
% mkdir cygwin mingw
% cd cygwin
% ruby -rfake_TARGET -s ../setup.rb -target=i386-cygwin setup
てなことを許してくれないからいちいちcleanしなきゃいけないんだよね。
それはそれとしてパッケージを完成させとく。
% make -f ../Makefile.pack PACKAGE=strscan VERSION=0.6.1 TARGET=i386-mingw32

racc 1.3.6

_ i386-cygwin:

% ruby -rfake_TARGET -s setup.rb -target=i386-cygwin config
% cd ext/cparse
% ruby -rfake_TARGET -s extconf.rb -target=i386-cygwin
% cd ../strscanso
% ruby -rfake_TARGET -s extconf.rb -target=i386-cygwin
% cd ../..
% ruby -rfake_TARGET -s setup.rb -target=i386-cygwin setup
% vi bin/racc/racc
% rm bin/racc/racc.bak
% upx ext/*/*.so
% ruby -rfake_TARGET -s setup.rb -target=i386-cygwin install
あ、strscan 0.6.1は入れなくてもいいのか。
setup時に

setting #! line to "#!/home/watanabe/dist/i386-cygwin/usr/local/bin/ruby"

となるのでbin/racc/raccを書き換えてからinstall。

_ racc.contents:

DOC=BUGS.* FILES LGPL README.* doc.* misc sample
CONTENTS=\
usr/local/bin/racc \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/scanner.rb \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/strscan.rb \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/amstd \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/racc \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/racc \
usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/strscan.so
こんどは一発だ。
% make -f ../Makefile.pack PACKAGE=racc VERSION=1.3.6 TARGET=i386-cygwin

_ i386-mingw32:

例によってcleanしてrmしてから。
% ruby -rfake_TARGET -s setup.rb -target=i386-mingw32 config
% cd ext/cparse 
% ruby -rfake_TARGET -s extconf.rb -target=i386-mingw32
% cd ../strscanso 
% ruby -rfake_TARGET -s extconf.rb -target=i386-mingw32
% cd ../..
% ruby -rfake_TARGET -s setup.rb -target=i386-mingw32 setup
% vi bin/racc/racc
% rm bin/racc/racc.bak
% upx ext/*/*.so
% ruby -rfake_TARGET -s setup.rb -target=i386-mingw32 install
% make -f ../Makefile.pack PACKAGE=racc VERSION=1.3.6 TARGET=i386-mingw32

REQUEST TO REMOVE SEQUENCE # IN SUBJECT

そんなこと要求する前にReferenceなりIn-Reply-Toなりつけてよ、お願いだから。
〜矢井田瞳/I'm here saying nothingを聴きながら〜

2001-01-30 (Tue)

ML

また、遅れてる。 [ruby-list:27349]

Date: Mon, 29 Jan 2001 00:28:30 +0900

なのにrimnetに届いたのが

Mon, 29 Jan 2001 01:24:26 +0900 (JST)

だ。1時間かかってる。 結局このメールを見たのは会社に着いてからでおかげで録画予約できず。残念。 って昨日の話だね。

ML(2)

ruby-dev MLに出したメールがなかなか返ってこないのでheliumでmailqしてみた。
Tue Jan 30 14:58:20  ruby-talk-admin@netlab.co.jp
Tue Jan 30 15:14:38  ruby-talk-admin@netlab.co.jp
Tue Jan 30 14:58:23  ruby-list-admin@netlab.co.jp
Tue Jan 30 14:58:22  ruby-talk-admin@netlab.co.jp
Tue Jan 30 15:00:03  ruby-dev-admin@netlab.co.jp
Tue Jan 30 15:10:02  ruby-talk-admin@netlab.co.jp
Tue Jan 30 15:14:52  ruby-talk-admin@netlab.co.jp
Tue Jan 30 15:09:53  ruby-talk-admin@netlab.co.jp
Tue Jan 30 14:58:26  ruby-list-admin@netlab.co.jp
Tue Jan 30 14:58:28  ruby-talk-admin@netlab.co.jp
Tue Jan 30 14:58:25  ruby-talk-admin@netlab.co.jp
14:58:2Xになぜか集中している。 15:00:03のおいらのメールはこれで待ちに入ったのか13分もかかった。 Postfixってこういうのは捌き切れないのかな?

極道編

結局amazonにした。なぜか今月も送料無料じゃん。 ついでにBRAIN VALLEY(瀬名秀明)の下巻も。

OptionParser

いつの間にかインストーラがついてる。とりあえずいつものようにやってみよう。

_ i386-cygwin:

% ruby -rfake_TARGET -s install.rb -target=i386-cygwin
optparse.rb -> /home/watanabe/dist/i386-cygwin/usr/local/lib/ruby/site_ruby/optparse.rb
chmod 0644 /home/watanabe/dist/i386-cygwin/usr/local/lib/ruby/site_ruby/optparse.rb
Makerules, GNUmakefileを見ると他にもインストールされるようだが、 全部まとめてDOCに入れてごまかすことにする。

_ optparse.contents:

DOC=ChangeLog GNUmakefile MANIFEST Makerules README.* cmd-ls.rb cmd.rb \
getopts.test getopts.test.en install.rb \
optparse optparse.*.rd optparse.rlog opttest.rb
CONTENTS=usr/local/lib/ruby/site_ruby/optparse.rb
これだとoptparse.rbを除いて全部がDOCになるけど、いいのかそれで?

_ pack:

% make -f ../Makefile.pack PACKAGE=optparse VERSION=0.7.9 TARGET=i386-cygwin

_ 依存してない:

ここでOptionParserはTARGETに依存してないことに気づく。 じゃMinGWとDJGPPはsymlinkで十分か。
% cd ~/helium/public_html/ruby/binaries/mingw
% ln -s ../cygwin/optparse-0.7.9-i386-cygwin.tar.gz optparse-0.7.9-i386-mingw32.tar.gz
% cd ../djgpp
% ln -s ../cygwin/optparse-0.7.9-i386-cygwin.tar.gz optparse-0.7.9-i386-msdosdjgpp.tar.gz

Wine

--disable-debug --disable-traceすれば少しは速くなるのだろうか? 2時間待ってみよう。
% make clean
% time make
...
make  4516.65s user 314.24s system 95% cpu 1:24:00.23 total
おお、早く終わった。
% time wine -- ruby -v
err:ntdll:RtlpWaitForCriticalSection Critical section 0x400e3550 \
  wait timed out, retrying (60 sec) fs=020f
ruby 1.6.2 (2001-01-23) [i386-mingw32]
wine -- ruby -v  6.99s user 1.54s system 14% cpu 58.256 total
心持ち速くなった。--debugmsg fixme-allしなくてすむだけか。

2001-01-31 (Wed)

rdtool 0.6.6

準備は整ったのでrdtoolだ。

_ i386-cygwin:

% ruby -rfake_TARGET -s rdtoolconf.rb -target=i386-cygwin
% make
% make install
% cat ../rdtool.contents
DOC=HISTORY README.html README.rd README.rd.ja doc rmi2html.rb utils
CONTENTS=usr/local/bin/rd2 \
usr/local/lib/ruby/site_ruby/1.6/rd/*
% make -f ../Makefile.pack PACKAGE=rdtool VERSION=0.6.6 TARGET=i386-cygwin

_ i386-mingw32, i386-msdosdjgpp:

これも依存しないのでsymlink。
% cd ~/helium/public_html/ruby/binaries/mingw
% ln -s ../cygwin/rdtool-0.6.6-i386-cygwin.tar.gz rdtool-0.6.6-i386-mingw32.tar.gz
% cd ../djgpp
% ln -s ../cygwin/rdtool-0.6.6-i386-cygwin.tar.gz rdtool-0.6.6-i386-msdosdjgpp.tar.gz

rdtool 0.6.7

なぜかタイミングよくリリースされる。

_ i386-cygwin:

% ruby -rfake_TARGET -s rdtoolconf.rb -target=i386-cygwin
% make
% make install
% make -f ../Makefile.pack PACKAGE=rdtool VERSION=0.6.6 TARGET=i386-cygwin
あとはsymlinkを張っておしまい。0.6.6は削除。

raccふたたび

このままだとDJGPPにraccが入ってないのでエラーになる。
% ruby -rfake_TARGET -s setup.rb -target=i386-msdosdjgpp config \
  --without=ext/cparse,ext/strscanso --ruby-path=/usr/local/bin/ruby
そうか。--ruby-pathで指定すればいいんだね。
% ruby -rfake_TARGET -s setup.rb -target=i386-msdosdjgpp setup
entering setup phase...
setting #! line to "#!/usr/local/bin/ruby"
setup.rb: skip ext/cparse(raccrt) by user option
setup.rb: skip ext/strscanso(strscan) by user option
setup done.
% ruby -rfake_TARGET -s setup.rb -target=i386-msdosdjgpp install
%  make -f ../Makefile.pack PACKAGE=racc VERSION=1.3.6 TARGET=i386-msdosdjgpp
...
tar: Cannot add file \
  usr/local/lib/ruby/site_ruby/1.6/i386-msdosdjgpp/racc: \
  No such file or directory
tar: Cannot add file \
  usr/local/lib/ruby/site_ruby/1.6/i386-msdosdjgpp/strscan.so: \
  No such file or directory
...
DJGPPは*.soが作られないからtarが文句を言うけど、気にしない。

Cygwin 1.1.8

問題多過ぎ。Win95/98/Meで一度も試さないでリリースしてるとしか思えない。

_ windres:

結局 -mwin32が使えるかどうかを調べざるを得ない状況に。 windresが内部的にgcc -Eで呼び出しているから、 ここには-mwin32がどうしても必要。 というわけでconfigure.in, cygwin/GNUmakefileで対応した。

_ -mno-cygwin:

-mno-cygwinはmsvcrtが対象となった。 libgcc.aからimpure_ptrがなくなった。 それはよろこばしいことだがspecsに-D__MSVCRT__がない。 emacs 21.0.96はこれでこける。 emacsの場合はそれ以前にやることも多々あるんだけど。

_ opendir:

どうも、libmingw32.aのopendirが変だ。
../ruby16/win32/resource.rb:16:in `open': Not a directory - \
  "C:/cygwin/home/watanabe/ruby/mingw16" (Errno::ENOTDIR)
        from ../ruby16/win32/resource.rb:16:in `find'
        from ../ruby16/win32/resource.rb:28
        from ../ruby16/win32/resource.rb:28:in `each'
        from ../ruby16/win32/resource.rb:28
make: *** [mingw32-ruby16.dll.rc] Error 1
しかたないので-lbmingwに登場してもらう。 ってことはbmingw packageはまだ必要だな。

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