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 環境を作ってみようと思う。

Windows Vista

ThinkPad X60s を手に入れた。仕事用。
Windows Vista が入っており、ちょっとおっかなびっくり。でも、だいたい仕事環境ができた。
– Firefox と Thunderbird をインストール (ほんとはEmacsでメール読み書きしたいんだが)
– Cygwin
– MinGW
– キーボードを英語配列にして ctrl と caps を入れ替え
など。わりと開発専用な感じで使うので、office とかは一切入れないかも。
キーボードは少し小さくて、手が余る感じだが、やっぱり打ちやすい。いいですね!
で、Windows Vista を少し使ってみた感じでは、
– 思ったほど重たくない (メモリが 3G あるからかもしれん)
– 思ったほどフォントがきれいでない (Mac 使いだからかもしれん)
– 思ったほどいけてないユーザインタフェイスではない (Microsoftにしてはがんばってる)
といった感じ。ま、しばらく使ったら重たくなったりしそうだけどなー。

信州行ってきた

新年に信州いくのは恒例になりつつあるような。
今年は日本人数名に留学生4人が加わって珍道中だった。
みんなそれなりに日本語も英語も話せるのでコミュニケーションには問題がないものの、日本語と英語と中国語が飛び交って謎な空間でした。
中央線の車内にて。


お昼は飯島市鼎の、お気に入りのカフェ。

向かいの菓匠「赤門や」さんでお抹茶とお菓子。

夜は飯島食堂!

留学生チームにはうどんが人気。

夜は温泉につかり、UNO を中国に布教して (笑) 、さっさと寝ました。UNO なんて、何年ぶりだろう。おもしろかった。夜は雪が降り、露天風呂がいい感じでした。
翌日の朝はマイナス7度。だけど天気がよくて、雪も解けました。めでたい。
宿はいつもの陣屋さんだったわけだが、「部屋から山がきれいでスイスに行ったときみたいだ。日本にきてから泊まったホテルでいちばんいいね!」というお褒めの言葉をいただきました。わーい。

田切の、吉瀬に渡る橋のところで、みんな木曽駒をバックに写真撮影。

伊那の漆戸醸造さんで「井の頭」の蔵を見学させていただきました。突然だったのに、ありがとうございました。


最後は甲府の「小作」でほうとう。食べてばっかりだな。

zlib (.gz) と bzlib

[ 識別方法 ]
RFC1952によると、gzip ファイルの最初の2バイトは 0x1f, 0x8b で、それに続く 1 バイトが 0x08 (0x00-0x07 が予約されているが、使われていない模様) と決まっている。
bzip2 の場合は、最初の3バイトは ‘BZh’ で、4 バイト目が 0x31-0x39 (bzip2 -X で指定した圧縮の effort level) だ。
[ zlib の使い方 ]
Zlib Manual をみれば簡単。使いそうな関数としては、
– gzFile gzopen (const char *path, const char *mode);
– gzFile gzdopen (int fd, const char *mode);
– int gzread (gzFile file, voidp buf, unsigned len);
– int gzwrite (gzFile file, const voidp buf, unsigned len);
– int gzeof (gzFile file);
– int gzclose (gzFile file);
あたり。便利です。オープンしたファイルが .gz format じゃない場合、gzread はただの read() になる。
つかいかたは bzlib もほとんど同じ。

MT4

やっと MovableType を 4 に upgrade した。
Backend を Berkeley DB から MySQL に変更し (SPAM comment の削除とかがめちゃめちゃ速くなった!)、テンプレートを MT4 のものに差し替え、かなり時間がかかった。つかれた…
しかしまあ、移行のための script はかなりよくできており、肝心のコンテンツが壊れたりしないのがすごいところだ。

ATOK Sync + .Mac

ATOK Sync というツールがあって、ツールは無料だけど使うには Justsystem の Internet Disk サービスを申し込まなきゃダメ、みたいな説明になっているのだが、実は DAV なサーバがあれば使えるっぽい。つまり、.Mac のアカウントでも使えそうだ。
というわけで、設定のところで
サーバ URL: http://idisk.mac.com/ユーザ名
を設定してやったら、ちゃんと辞書のファイルが iDisk 上に作成されて、同期ができるようになった。たぶん Windows でも、.Mac のアカウント持ってれば使えるはずだ。いいね!