kazu-h に投稿

cygwinを使用しないネイティブwin32環境、mingw + gtk+win32-devel環境でのビルドに挑戦。

・mingwのインストール(MinGW-3.1.0-1.exe)
・msys-1.0のインストール(MSYS-1.0.10.exe)
・msys-autoconf-2.59.tar.bz2、msys-automake-1.8.2.tar.bz2、msys-libtool-1.5.tar.bz2を
msysルート配下に展開。
・gtk+win32-develのインストール
[url=http://gladewin32.sourceforge.net/]Glade/GTK+ for Windows[/url]から
gtk+win32-devel-2.6.7-rc1をダウンロードしインストール。
インストール先はc:/msys/1.0/GTKとした。(msys側からは/GTKに見える)

ここまででsylpheed-1.9.12のビルドに必要なGTK+関連のファイルが殆どそろう。

・configure、make
pkg-configのチェックのところでlibglib-2.0.0.dllが見つからずに終了
→LD_LIBRARY_PATH、LD_RUN_PATHに/GTK/binを設定してもNG。
/GTK/binにパスが通すことで認識させられた。
libiconv_set_relocation_prefixのエラーダイアログが出て終了してしまう。
→別のツールが使っている、/windows/system32/iconv.dllとの衝突のためリネームしてとりあえず回避
CPPFLAGS='-I/GTK/include' ./configure --prefix=/usr、にてconfigure、makeするが
src/smtp.hにてnetdb.hが無いというエラー。
→#include <>と#include <>だけが書かれた/mingw/include/netdb.hを作成。
・gtkconfigure
CPPFLAGS='-I/GTK/include' gtkconfigure --prefix=/usr --disable-gpgme、を実行。
・コンパイルエラーを順次解消。
src/main.cにてsignal(SIGPIPE,...)呼び出しでSIGPIPEが宣言されてないというエラー。
→winsockにはSIGPIPEの機能は無いのでsignal(SIGPIPE,..)の呼び出しごとコメントアウト。
src/addrindex.h:89にてAddressInterface* interface;というメンバ宣言に文法エラー。
→メンバ変数名にinterfaceを使っていたのが原因。ainterfaceに変更。
src/addrindex.cについても同様に置換。
src/filter.c:32にてregex.hが無いというエラー。
→glibcで用意されるファイル。glibcを使用しないmingw環境には存在しない。
http://gnuwin32.sourceforge.net/packages/regex.htmよりregexパッケージを取得インストール
libregexを使用するようにLDFLAGSを調整。
src/action.c:38にてsys/wait.hが無いというエラー
→glibcで用意されるファイル。glibcを使用しないmingw環境には存在しない。
waitpid()関数の呼び出しをcwait()置き換えるsys/wait.hを作成した。
また、sys/wait.h内ではaction.cで使用される_O_BINARYを定義するためにfcntl.hをインクルードさせている。
src/prefs_common.cにてstruct定義エラー
→src/addrindex.h同様にstructの構造体名にinterfaceを使用していたのが原因。pinterfaceに置換。
src/addressitem.h、src/addressbook.cにてstruct定義エラー
→src/addrindex.h同様にstructの構造体名にinterfaceを使用していたのが原因。すべてainterfaceに置換。
src/addressadd.cにてstruct定義エラー
→src/addrindex.h同様にstructの構造体名にinterfaceを使用していたのが原因。すべてainterfaceに置換。
:
ICONV_CONST未定義エラー
→src/MakefileのCPPFLAGSに-DICONV_CONST="const"を追加。
sys/socket.h、sys/un.hが無いというエラー
→linuxの/usr/include/sys/un.hに倣ってsocketaddr_unを定義した/ming/include/sys/un.hを作成。
:
fcntl()関数未定義エラーなど
→glibcを使用しないmingw環境に存在しないもの多数。
→手詰まり

libcの代わりにnewlibのインストール
→ビルド、インストール、sylpheedのconfigureまでは出来たがコンパイルでmingwの標準関数とことごとく衝突。
→手詰まり

glibcのインストール
http://gnuwin32.sourceforge.net/packages/glibc.htmからglibc-docのソースをダウンロード
中にmakefile.mingwがあるが、実行にはglibc-2.2.5のソースが必要。
http://directory.fsf.org/all/glibc.htmlからglibc-2.2.5.tar.gzをダウンロード、展開。
→makefile.mingwのconfigureの実行行に--srcdir=glibc-2.2.5の展開先を追加してmake
→gccが見つからないためにエラー
→makefile.mingwのconfigureで--host=i386-pc-noneを指定しているのだが、mingw32未対応のため
none以外指定できない。
→手詰まり

まとめ : mingw32では現状手詰まり。

・netdb.h由来の関数をwinsock由来の関数に置き換える。
→/mingw/include/netdb.h
・SIGPIPEの未定義を解消する。
→src/main.c
・変数名や構造体メンバ名などにinterfaceを使っている箇所を変更する。
→src/addrindex.h、src/addrindex.c、src/prefs_conmmon.c、src/addressitem.h、src/addressitem.c、
src/addressadd.c
・gnuwin32のregexライブラリをインストールする。
・waitpid関数をcwait関数に置き換える。
→/mingw/include/sys/wait.h
・configureの実行
→CPPFLAGS='-I/GTK/include' gtkconfigure --prefix=/usr

category