〜2001年6月下旬〜
RedHat系とは書かれていたが実際はkondaraらしい。
いつまでもCygwin 1.1.8-2でもないだろうってというわけで、 1.3.2-1を用意した。ってそれは一昨日だったか。
configure時のオプションが表示されるようになった。
% gcc -v Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/3.0/specs Configured with: ../configure --enable-languages=c,c++ \ --enable-shared --with-system-zlib --enable-sjlj-exceptions \ --enable-version-specific-runtime-libs --enable-c-mbchar --enable-threads Thread model: posix gcc version 3.0
結局中田さんの対応版を取り込んだ。 富豪な人は試してみるべし。
ドイツで行方不明ときたか。そりゃ残念だ。
まさかRubyがこれを使ってるとは思わなかったな。 だから中田さん提案の
{ struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 100000; rb_thread_wait_for(&tv); }
をそのまま#if defined __CYGWIN__, #endifで包んだわけだけど、 実際のrb_thread_wait_forはstruct timevalを受け付けるようになっている。 Win98で試したらここで止まってしまった。 あれ?てことは遅いマシンでも一度はEINPROGRESSになるのか。 で、次のconnect(2)が分かれ目で、 速いマシンだとsocketのsetupがまだ終わってないこともあるわけだ。
sortもできるようになっている。 asortという名前だけど、sortという名前だとあまりにありがちで、 そういう名前のfunctionを作っている可能性は十分にある。
更新。
0.0.3.2からVPATHがなくなったのはなぜ?面倒だ。
結局cygwin-1.1.8-2とgcc-2.95.3-5の組み合わせにすることにした。
% tar xfvz cygwin-1.1.8-2-src.tar.gz % tar xfv gcc-2.95.3-5-src.tar.bz2 --us=bzip2 % mkdir build; cd build % lndir ../cygwin-1.1.8-2 % ln -s ../gcc-2.95.3-5/{gcc,libio,libstdc++} . % mkdir obj; cd obj % CFLAGS=-Os CXXFLAGS=-Os ../configure \ --target=i686-pc-cygwin \ --prefix=/usr/local/cygwin \ --enable-languages=c,c++ % make % make install tooldir=/usr/local/cygwin % vi /usr/local/cygwin/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/specs
最終的なspecsは これ 。
そうか。MAJOR番号を越えたら-Vはもう保証されないのか。結構痛いな。
% cat main.c /* #include <stdio.h> */ main(){} % gcc -V 2.95.3 -c main.c main.c:1: parse error before `/'
何が起こっているのかと思ったらこういうことらしい。
% gcc -V 2.95.3 -v -c main.c Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/specs Configured with: ../configure --enable-languages=c,c++ \ --enable-shared --with-system-zlib --enable-sjlj-exceptions \ --enable-version-specific-runtime-libs --enable-c-mbchar --enable-threads Thread model: posix gcc driver version 3.0 executing gcc version 2.95.3 /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/cc1 -lang-c -v \ -D__GNUC__=2 -D__GNUC_MINOR__=95 -D__GNUC_PATCHLEVEL__=3 -D__ELF__ \ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ \ -D__unix -D__linux -Asystem(posix) -D__NO_INLINE__ -D__STDC_HOSTED__=1 \ -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di586 -Dpentium \ -D__i586 -D__i586__ -D__pentium -D__pentium__ main.c -quiet -dumpbase \ main.c -version -o /tmp/cc9k0dCc.s cc1: Invalid option `-v' GNU C version 2.95.3 20010315 (release) (i586-pc-linux-gnu) compiled by \ GNU C version 2.95.3 20010315 (release). main.c:1: parse error before `/'
GCC 3.0はcc1自身がcppの機能を持っているんだよね。 だからいきなりcc1を起動しちゃう。うーむ。 -traditional-cppでいけるかなと思ったら、これはtradcpp0を起動しようとする。
% ln /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/{cpp0,tradcpp0}
としても、今度は
% gcc -V 2.95.3 -traditional-cpp -c main.c cc1: Invalid option `-fpreprocessed'
と余計なオプションをつけてくれる。だめじゃん。
info gccすると
However, since no real work is done in the driver program, it usually does not matter that the driver program in use is not the one for the specified target. It is common for the interface to the other executables to change incompatibly between compiler versions, so unless the version specified is very close to that of the driver (for example, `-V 3.0' with a driver program from GCC version 3.0.1), use of `-V' may not work; for example, using `-V 2.95.2' will not work with a driver program from GCC 3.0.
ということだ。
結論。古いgccをgcc-2.95.3にrenameだ。残しといてよかった。
キャンセル分300台だそうだ。注文開始は6/27 20:00だから先走らないように。
0.1秒待ってもまだEINVALになることがあるらしい。 中田さんからとりあえず10回は繰り返す案が出たけど、 確かにきちっとsetup完を待ちたいよね。一日考えよう。
仕事でIPv6に関わることになった。まずはUSAGIだ。 てゆうかLinuxのIPv6がいつのまにか取り残されていたなんて知らなかったなあ。
まだ迷ってる。 さっさと入れて試してもらったほうがいいかな。 もしくはrescueしてもらって何回失敗するか数えてもらうとか。
以前にも 書いたが、
StructがCの構造体のイメージで扱えると便利だよね。
Win32API拡張ライブラリ的には'P'じゃなくて'S'を用意して、
その直後にpackのtemplateを書いてもらえば少しは楽になるのかな。
struct foo { int a; int b; };
みたいなのなら
'Sii'
と指定する。ここにきて配列になってる欠点が利点に。んなわけないか。 あ、なぜ配列なのかというとPerlのWin32::APIをそのまま移植したから。
アラインメントの問題もあるからそれほど楽にはなってない気も。
なにげなく~/.skk-recordの最後の行を見ると
Fri Apr 26 16:16:24 1991 登録: 6 確定: 62 確定率: 90% 語数: 2
とあった。おお、10年経ってる。
Linux JapanにPlamo 2.2がついてきたから入れ換える。 /boot/grub/menu.lstを見るといままではPlamo 2.0b1だったらしい。 一年半ぐらい使ってたかな。
reiserfsにしようかと思ったが、どうもインストーラには選ぶとこなし。
30分ぐらいで終わる。