今更MinGW 2009.06(8) wget
wgetは猫研パックツールキットでも使用しているhttp/ftpダウンロードツールだ。オプションを指定することで、かなり細かな制御も行える。猫研パックでは--max-redirectのオプションを使用するためにMinGWに用意されているバージョンは使用しなかったが、wgetはmingwPORTに必要であり、wget自身のmingwPORTも存在するのでビルド・インストール方法を紹介する。
ソースの入手
各アーカイブは/srcに展開しよう。
ビルド
GCC4系でビルドをする場合、wgetのソースが行儀の悪い書き方をしている部分があるので、それを修正する必要がある。src/mswindows.cの331〜332行目で
(void *)_SetThreadExecutionState = GetProcAddress ((HINSTANCE)mod, "SetThreadExecutionState");
となっている箇所を
_SetThreadExecutionState = (DWORD (WINAPI *)(DWORD))GetProcAddress ((HINSTANCE)mod, "SetThreadExecutionState");
に書き換えよう。これはcast-as-lvalueと呼ばれる記法で、修正前のコードは_SetThreadExecutionStateをvoid*と見なすことでGetProcAddressの戻り値を適切な関数ポインタ型でキャストせずとも代入できるようにしている。大量にGetProcAddressする場合にはいちいち関数ポインタ型を気にしなくてよいので楽なのだが、よい書き方ではないのでGCC4からは弾かれるようになった。
なお、猫研パックではこの修正はパッチで行っている。
あとは今更MinGW2008年春版の今更MinGW(2)で解説しているとおりにすればビルドは可能だが、ここではmingwPORTに任せっきりにせず、自分でビルドコマンドを打ってみる。
pushd wget-1.9.1 patch -p1 -N < mingwPORT/mingwPORT.patch ./configure --prefix=/mingw --disable-nls BLDDIR=. . mingwPORT/mingwPORT.afterconfigure make LIBS=-lws2_32 exeext=.exe CFLAGS="-O3 -s -mms-bitfields -march=i686" make install exeext=.exe popd
コマンドはmingwPORTから抜き出したものだ。LIBS=-lws2_32はwinsock2のライブラリをリンクする指示で、exeext=.exeは実行ファイルのサフィックスを指定している。CFLAGSの-mms-bitfieldsはC言語のビットフィールドをマイクロソフト流に配置する、という意味だ。mingwport.afterconfigureが行っているのはMinGW向けの修正で、src/config.hに追加の#defineを行っている。
最終更新時間:2009年06月25日 21時30分20秒