ふと思い立って、sylpheedをビルドしてみることにした。
ビルド手順についてはhttp://sylpheed.sraoss.jp/wiki/index.php?Sylpheed%2FWin32が詳しい。
いくつか現状にそぐわないところがあるのでそのへんは適宜読みかえて環境を準備。
home以下のtrunkディレクトリを用意して、ソースコードをまずはチェックアウト。
リビジョンはr2217。
configure.in:88: warning: macro `AM_PATH_GLIB_2_0' not found in library configure.in:92: warning: macro `AM_PATH_GTK_2_0' not found in library configure.in:112: warning: macro `AM_GLIB_GNU_GETTEXT' not found in library configure.in:151: warning: macro `AM_PATH_GPGME' not found in library libtoolize: putting auxiliary files in `.'. libtoolize: copying file `./ltmain.sh' libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree. libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. libsylph/Makefile.am: installing `./depcomp' configure.in: installing `./ylwrap' configure.in:88: error: possibly undefined macro: AM_PATH_GLIB_2_0 If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation. configure.in:92: error: possibly undefined macro: AM_PATH_GTK_2_0 configure.in:112: error: possibly undefined macro: AM_GLIB_GNU_GETTEXT configure.in:151: error: possibly undefined macro: AM_PATH_GPGME
何も考えずにautogen.shを実行するといろいろ怒られるので、aclocalにGTKのパスを指定してあげることにする。
aclocal -I ac -I c:/GTK/share/aclocal \ && libtoolize --force --copy \ && autoheader \ && automake --add-missing --foreign --copy \ && autoconf \ && ./configure $@
すると以下のようにAM_PATH_GPGMEが見付からないというエラーが出ます。
configure.in:151: warning: macro `AM_PATH_GPGME' not found in library libtoolize: putting auxiliary files in `.'. libtoolize: copying file `./ltmain.sh' libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree. libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. configure.in:151: error: possibly undefined macro: AM_PATH_GPGME If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation.
とりあえずac/missingから*.m4をacディレクトリにコピーしてから再度autogen.shを実行してみます。
sylpheed 2.7.1 GnuPG : no JPilot : no LDAP : no OpenSSL : yes iconv : yes compface : no IPv6 : yes GtkSpell : no Oniguruma : no The binary will be installed in /usr/local/bin Configure finished, type 'make' to build.
Onigurumaは有効にしたいので、onig-5.9.1を--prefix=/mingwでビルドインストールする。
で、trunk/makewin32.shを実行してみる。
sylpheed 2.7.1 GnuPG : no JPilot : no LDAP : no OpenSSL : yes iconv : yes compface : no IPv6 : no GtkSpell : no Oniguruma : yes The binary will be installed in /home/khayashi/dist/bin Configure finished, type 'make' to build.
Onigurumaを無事検出できているのがわかります。
ではmakeしてみます。
/bin/sh ../libtool --tag=CC --mode=link gcc -mtune=pentium3 -O3 -mms-bitfields -mwindows -I/mingw/include -version-info 0:1:0 -export-dynamic -no-undefined -export-symbols libsylph-0.def -o libsylph-0.la -rpath /home/khayashi/dist/lib account.lo base64.lo codeconv.lo customheader.lo displayheader.lo filter.lo folder.lo html.lo imap.lo mbox.lo md5.lo md5_hmac.lo mh.lo news.lo nntp.lo pop.lo prefs.lo prefs_account.lo prefs_common.lo procheader.lo procmime.lo procmsg.lo quoted-printable.lo recv.lo session.lo smtp.lo socket.lo ssl.lo stringtable.lo sylmain.lo unmime.lo utils.lo uuencode.lo virtual.lo xml.lo syl-marshal.lo -Lc:/GTK/lib -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -lws2_32 -lssl32 -leay32 -L/mingw/lib -lonig *** Warning: This system can not link to static lib archive /mingw/lib/libonig.la. *** I have the capability to make that library automatically link in when *** you link to this library. But I can only do this if you have a *** shared version of the library, which you do not appear to have. libtool: link: /mingw/bin/nm .libs/account.o .libs/base64.o .libs/codeconv.o .libs/customheader.o .libs/displayheader.o .libs/filter.o .libs/folder.o .libs/html.o .libs/imap.o .libs/mbox.o .libs/md5.o .libs/md5_hmac.o .libs/mh.o .libs/news.o .libs/nntp.o .libs/pop.o .libs/prefs.o .libs/prefs_account.o .libs/prefs_common.o .libs/procheader.o .libs/procmime.o .libs/procmsg.o .libs/quoted-printable.o .libs/recv.o .libs/session.o .libs/smtp.o .libs/socket.o .libs/ssl.o .libs/stringtable.o .libs/sylmain.o .libs/unmime.o .libs/utils.o .libs/uuencode.o .libs/virtual.o .libs/xml.o .libs/syl-marshal.o | sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*_\([_A-Za-z][_A-Za-z0-9]*\)\{0,1\}$/\1 _\2 \2/p' | /bin/sed -e '/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //' | sort | uniq > .libs/libsylph-0.exp libtool: link: if test "x`/bin/sed 1q .libs/libsylph-0.def`" = xEXPORTS; then cp .libs/libsylph-0.def .libs/libsylph-0-0.dll.def; else echo EXPORTS > .libs/libsylph-0-0.dll.def; cat .libs/libsylph-0.def >> .libs/libsylph-0-0.dll.def; fi libtool: link: gcc -mtune=pentium3 -shared .libs/libsylph-0-0.dll.def .libs/account.o .libs/base64.o .libs/codeconv.o .libs/customheader.o .libs/displayheader.o .libs/filter.o .libs/folder.o .libs/html.o .libs/imap.o .libs/mbox.o .libs/md5.o .libs/md5_hmac.o .libs/mh.o .libs/news.o .libs/nntp.o .libs/pop.o .libs/prefs.o .libs/prefs_account.o .libs/prefs_common.o .libs/procheader.o .libs/procmime.o .libs/procmsg.o .libs/quoted-printable.o .libs/recv.o .libs/session.o .libs/smtp.o .libs/socket.o .libs/ssl.o .libs/stringtable.o .libs/sylmain.o .libs/unmime.o .libs/utils.o .libs/uuencode.o .libs/virtual.o .libs/xml.o .libs/syl-marshal.o -Lc:/GTK/lib -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 /mingw/lib/libintl.dll.a -L/mingw/lib /mingw/lib/libiconv.dll.a -lws2_32 -lssl32 -leay32 -mtune=pentium3 -mms-bitfields -mwindows -o .libs/libsylph-0-0.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libsylph-0.dll.a Creating library file: .libs/libsylph-0.dll.a.libs/filter.o:filter.c:(.text+0x997): undefined reference to `reg_set_encoding' .libs/filter.o:filter.c:(.text+0x9af): undefined reference to `regcomp' .libs/filter.o:filter.c:(.text+0x9d8): undefined reference to `regexec' .libs/filter.o:filter.c:(.text+0x9e2): undefined reference to `regfree
あっさりリンクエラーになっています。
というわけで、Onigurumaをスタティックでリンクしないように再ビルドします。
oni-5.9.1/Makefileを以下のように修正します。-no-undefined をつける、ということですね。
libonig_la_LDFLAGS = -no-undefined -version-info $(LTVERSION)
あとは、flexやbisonも必要です。
- bison-2.4.1-1-msys-1.0.11-bin.tar.lzma
- flex-2.5.35-1-msys-1.0.11-bin.tar.lzma
- libregex-1.20090805-1-msys-1.0.11-dev.tar.lzma
- libregex-1.20090805-1-msys-1.0.11-dll-1.tar.lzma
上記パッケージをtar --lzma -xvfとかで展開しときます。
test -f quote_fmt_lex.c || /bin/sh ../ylwrap quote_fmt_lex.l .c quote_fmt_lex.c -- /bin/sh /home/kenhys/Project/sylpheed/trunk/missing --run flex make[2]: *** [quote_fmt_lex.c] Error 1
bison,flexをインストールしたあと、上記エラーが出ることがありますが、makewin32.shを再実行してみてください。
これでビルドしたsylpheed.exeが起動せず。
c:/GTKからlibglib-2.0-0.dllをコピーして、元のintl.dllをlibintl-8.dllにしてしのいだ。