Firemacs

Windows では Firefox を使うわけだが、Safari と違ってキーバインドが Emacs じゃないので、blog のエントリを書くときなんかにいちいち腹が立つわけです。
というわけで、Firemacs 入れた。
幸せ。
… あ、Safari 入れればいいの?

libz & libbz2 on MinGW

ファイルタイプを識別するために一度 open() してちょっと読んだものを lseek() で頭に戻して、gzdopen() とか BZ2_bzdopen() とかしていたのだけど、Windows ではなんだかうまく動かなくて、gzread() とかするといきなり EOF になる。なんてこった! gzopen() とか BZ2_bzopen() は問題なく動く。
せっかく open() したファイルハンドルを捨てるのはもったいない、というエコロジー精神は、Windows の世界では通用しないらしいです。しょぼーん、と思ってたら、gzdopen() は open() するときに O_BINARY を足してやればいいみたい。でも、BZ2_bzdopen() は、一度 read() して lseek() したらうまくいかなかった…
さて、プログラム直しますか。

Cygwin で MinGW のクロスビルド環境

Mac には MinGW の環境を入れていて、すごく便利なんだが、Cygwin にも入れることにした。Cygwin のパッケージでもなんとかなりそうなんだけど、やっぱり自分で作ったほうが安心なので、自分で ~/mingw に作ることに。
[ ライブラリやヘッダファイルを展開 ]
$ mkdir ~/mingw
$ cd ~/mingw
$ tar xzvf ~/compile/mingw-runtime-3.14.tar.gz
$ tar xzvf ~/compile/w32api-3.11.tar.gz
[ binutils 作る ]
$ cd ../compile/
$ tar xjvf binutils-2.18.tar.bz2
$ mkdir build-binutils
$ cd build-binutils
$ ../binutils-2.18/configure –prefix=/home/yasu/mingw –target=i386-pc-mingw32
$ make
$ make install
automake, autoconf, bison をインストールしないとだめ。bison がないと変なところでエラーが出てとまる。
[ gcc 作る ]
$ ../gcc-4.0.4/configure –program-prefix=i386-pc-migw32- –program-suffix=-4.0.4 –with-gcc –with-gnu-ld –with-gnu-as –target=i386-pc-mingw32 –prefix=/home/yasu/mingw –enable-threads –disable-nls –enable-languages=c,c++ –disable-win32-registry –disable-shared –enable-sjis-exceptions –with-headers=/home/yasu/mingw/include –with-libs=/home/yasu/mingw/lib –with-build-time-tools=/home/yasu/mingw/bin
$ make
$ make install
MinGW native のはまだ make が通らないのに、こっちは一発だった。余裕。
動くかはまだチェックしてない。

Windows Vista で MinGW

Windows Vista で開発環境を整備。
– MinGW-5.1.3 (with g++ and MinGW make)
– MSYS-1.0.10
をいれた。MSYS はもっと新しい snapshot が出ているのだけど、ソースしかないのでびびって入れられなかった(笑)。
で、gcc + g++ はいつもどおり自分で build する。/mingw/include を /usr/include にリンクしないとだめなのは昔と同じだが、cc1 の入っているところ (/mingw/libexec/gcc/mingw32/3.4.5) にも path を通さないと、gcc が動かなかった…
% ln -s /mingw/include /usr/include
% export PATH=$PATH:/mingw/libexec/gcc/mingw32/3.4.5
% ../gcc-4.0.4/configure –with-gcc –with-gnu-ld –with-gnu-as –host=mingw32
–target=mingw32 –prefix=/gcc4.0.4 –enable-threads –disable-nls –enable-lan
guages=c,c++ –disable-win32-registry –disable-shared –enable-sjls-exceptions
% make
で、順調にいくかと思ったのだが、途中で生成される genmodes というプログラムの挙動がおかしくて、ディスクを埋め尽くすほど巨大なヘッダファイルをいくつも作ってしまい、途中で build を中止するはめに。調べてみると、genconf.c では printf() の format string に %n が使われており、これは printf で出力する文字が何桁あるか調べるためのものだ (しらなかった)。しかし、最近はセキュリティ上のリスクがあるので使わないようにしよう、ということで Vista から使えなくなった模様。この場合対応する変数は更新されないから、おかしな値になって、巨大なファイルができてしまうようだ。幸いにして、genmodes.c で %n が使われているところは printf の返り値を使って書き直せるので、なんとかなる感じ。ちなみに2箇所だ。
MSYS があれば MinGW の中で生きていけるとはいえ、Cygwin のほうが何かと便利なので、明日は Cygwin で動く MinGW の build 環境を作ってみようと思う。