〜2001年2月中旬〜
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でいいか。なんか変だけど。
include Makefile VPATH = $(srcdir) $(srcdir)/missingというdjgpp/GNUmakefile.inを用意すればいいのか。
--- 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できないが。
% 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]よりもちょっと増えてるなあ。まあいいや。要するにものすごく時間がかかる。
C:\usr\local\bin>ruby -rwatch -vne '' ruby-talk.0101 ruby 1.6.2 (2001-02-11) [i386-mingw32] 6.75s elasped
% ruby -rwatch -vne '' ruby-talk.0101 ruby 1.6.2 (2001-02-11) [i386-cygwin] 2.85s elaspedで、もっと速い。
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だと遅かったりするんだけど。
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を用意した。
#ifndef HAVE_LSTAT #define lstat rb_sys_stat #endifを追加した。
C:\usr\local\bin>ruby -rwatch -vne '' ruby-talk.0101 ruby 1.6.2 (2001-02-13) [i386-mingw32] 6.7s elaspedと 昨日のいんちきパッチの結果と同じぐらいの処理時間になる。
現在のML配信状況:停止中
とある。あれ?まだ始まってないのかと納得。 がいくらなんでも遅いよなと、よーく見ると
*配信状況の変更は、「個人設定の変更」で行えます。
とある。え、じゃこの停止中はおいらの現在の状況なの? がーん。配信しないがデフォルトなのか。 rubyist MLにはすでに20通ほどあった。
libpng, zlib, jpeg-6b, FreeType 2.x
あたりがあればいいようだ。 CygwinだとFreeTypeを除けばcontribにあるような気がする。 MinGWへ移植しよう。
./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しとく。 今日はここまで。
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で見えないようにしているので、 そのあたりはよろしく。
% bindkey "^U" backward-kill-lineでokです。
libncurses.dll.a libncurses.aの両方が存在する場合、 リンク時に-lncursesと指定するとlibncurses.dll.aが優先してリンクされる。 libncurses.aをリンクしたければ-staticが必要になる。 -staticを追加してもいいんけど、単純に
% sudo mv /usr/local/cygwin-local/lib/libncurses.dll.a{,.orig}しておくことにした。
have_library("ncurses", "tgetnum") or have_library("termcap", "tgetnum") or have_library("curses", "tgetnum")という順番だからncursesが先に見つかってしまう。
% 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')がない。追加しよう。
curses.o(.text+0x45):curses.c: undefined reference to `_imp__stdscr'を喰らう。ncurses_dll.hを見るとNCURSES_STATICをdefineしないと __declspec(dllimport)するのがデフォルトになってる。 これだと-staticをつけたところで何も変わらないわけで、 相変わらずCygwinってやつはやることが中途半端だ。
% 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
% 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 compilinglongも同じなので例によって
ac_cv_sizeof_int=4 ac_cv_sizeof_long=4も追加。
% makeテストプログラムを作るところでぼろぼろとXをリンクしようするエラーが。 うーむ。libだけあればいいから
% make ttlib % cd lib; sudo make -f arch/unix/Makefile installする。
% 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するところだが、これでうまくいくようだ。
% 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
% i386-mingw32-ruby extconf.rb \ --with-ttf \ --with-freetype \ --with-jpeg \ --with-gd-dir=/usr/local/mingwdoc/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で表示された。成功だ。
% 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
% 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
% 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することにする。
% 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
% 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すんなり通る。
% 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だった。
% CC='gcc -mno-cygwin -mwin32' ./configure i386-mingw32てな感じで試してたりするのだが、残念なことに
... ./temacs -batch -l loadup dumpで
このプログラムは不正な処理を行ったので強制終了されます。を喰らってしまう。というよりどのファイルをリンクすればいいのか、 いまいちわかってないあたりで既に負けてる。 やはりemacs-20.7-gcc-tar.gzを参考にしたほうがいいんだろう。