きしもとと申します

手元の FreeBSD 環境 (Heimdal (Kerberos 5 の実装のひとつ) がインストール
されています) で、ports の sylpheed-3.1.1 をビルドすると、以下のように
コンパイルが失敗します(途中、長い行を継続にしています)。

if cc -DHAVE_CONFIG_H -I. -I. -I.. -DG_LOG_DOMAIN=\"Sylpheed\" -D_THREAD_SAFE 
-D_REENTRANT -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include 
-I/usr/local/include/atk-1.0 -I/usr/local/include/cairo 
-I/usr/local/include/gdk-pixbuf-2.0 -I/usr/local/include/pango-1.0 
-I/usr/local/include/gio-unix-2.0/ -I/usr/local/include 
-I/usr/local/include/glib-2.0 -I/usr/local/include/pixman-1 
-I/usr/local/include/freetype2    -I/usr/local/include/gpgme 
-I/usr/local/include -I/usr/local/include -I../libsylph 
-DLOCALEDIR=\""/usr/local/share/locale"\" 
-DMANUALDIR=\""/usr/local/share/doc/sylpheed/manual"\" 
-DFAQDIR=\""/usr/local/share/doc/sylpheed/faq"\" 
-DPLUGINDIR=\""/usr/local/lib/sylpheed/plugins"\" 
-DTARGET_ALIAS=\""amd64-portbld-freebsd8.2"\" -DSYSCONFDIR=\""/usr/local/etc"\" 
-I/usr/local/include  -O2 -pipe -fno-strict-aliasing  -I/usr/local/include \
-D_THREAD_SAFE -D_REENTRANT -I/usr/local/include/gtkspell-2.0 
-I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include 
-I/usr/local/include/atk-1.0 -I/usr/local/include/cairo 
-I/usr/local/include/gdk-pixbuf-2.0 -I/usr/local/include/pango-1.0 
-I/usr/local/include/gio-unix-2.0/ -I/usr/local/include 
-I/usr/local/include/glib-2.0 -I/usr/local/include/pixman-1 
-I/usr/local/include/freetype2   -D_REENTRANT -I/usr/local/include/dbus-1.0 
-I/usr/local/include/dbus-1.0/include -I/usr/local/include/glib-2.0   
-D_REENTRANT -I/usr/local/include/glib-2.0   -MT ldif.o -MD -MP -MF 
".deps/ldif.Tpo" \
  -c -o ldif.o `test -f 'ldif.c' || echo './'`ldif.c; \
then mv -f ".deps/ldif.Tpo" ".deps/ldif.Po"; \
else rm -f ".deps/ldif.Tpo"; exit 1; \
fi
ldif.c: In function 'ldif_conv_base64':
ldif.c:638: error: too many arguments to function 'base64_decode'
gmake[4]: *** [ldif.o] Error 1
gmake[4]: Leaving directory 
`/export/ports/mail/sylpheed3/work/sylpheed-3.1.1/src'
gmake[3]: *** [all-recursive] Error 1
gmake[3]: Leaving directory 
`/export/ports/mail/sylpheed3/work/sylpheed-3.1.1/src'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory 
`/export/ports/mail/sylpheed3/work/sylpheed-3.1.1/src'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/export/ports/mail/sylpheed3/work/sylpheed-3.1.1'
gmake: *** [all] Error 2
*** Error code 1
                                                                                
                                         Stop in /export/ports/mail/sylpheed3.
*** Error code 1
                                                                                
                                         Stop in /export/ports/mail/sylpheed3.

原因は、Heimdal をインストールすると作られる
/usr/local/include/base64.h が存在するために、意図しない形でそちらが
インクルードされてしまっているためです。

一時的に /usr/local/include/base64.h をリネームするなどするか、以下の
パッチでインクルードファイルの探索順を変えて、回避して無事ビルド
できました。しかし(続く)

$ cat files/patch-src-Makefile.in
--- src/Makefile.in.ORG 2011-08-17 13:13:09.000000000 +0900
+++ src/Makefile.in     2011-08-17 13:13:29.000000000 +0900
@@ -345,11 +345,11 @@

 INCLUDES = \
        -DG_LOG_DOMAIN=\"Sylpheed\" \
+       -I$(top_srcdir)/libsylph \
        $(GTK_CFLAGS) \
        $(GDK_PIXBUF_CFLAGS) \
        $(GPGME_CFLAGS) \
-       -I$(includedir) \
-       -I$(top_srcdir)/libsylph
+       -I$(includedir)

 @NATIVE_WIN32_FALSE@SYLPHEED_RES =

(続き)しかし、この Makefile の修正による回避が適切なものか、私には判断
できません。また、調べてみたところ Fedora のパッケージでは、基本的に
/usr/local ではなく /usr 直下にインストールするためか、
/usr/include/ライブラリ名/なんとか.h という形でヘッダファイルは
インストールするようになっており、このような事故は起きにくいように
なっていました。そのように、ヘッダファイルのインストール側で解決する
ほうがいいのかもしれません。

ともあれ、全く別のプログラムで他にも1例、全く同じパターンでビルドに
失敗する例を確認しており(未報告)、知識の共有のため、ということで
ポストします。

メールによる返信