cygwin で doxygen-1.5.2 をコンパイルしてインストールするよのまとめ

id:CCG さんよりトラックバックを受けて、以前書いたエントリをまとめなおしてパッチにしました!

結論

下のパッチを当てると ./configure && make && make install でインストールを完了できます!

パッチ

doxygen-1.5.2_cygwin.patch とかでファイルとして保存して使ってください!

diff -uNr doxygen-1.5.2/configure doxygen-1.5.2.new/configure
--- doxygen-1.5.2/configure	2007-04-04 03:45:31.000000000 +0900
+++ doxygen-1.5.2.new/configure	2007-05-31 02:11:16.861358700 +0900
@@ -214,10 +214,7 @@
     UNIX_SV:4.2*)
       f_platform=unixware-g++
       ;;
-    Cygwin:*)
-      f_platform=win32-g++
-      ;;
-    CYGWIN:*)
+    Cygwin*|CYGWIN*)
       f_platform=win32-g++
       ;;
     *MiNT:*)
diff -uNr doxygen-1.5.2/src/doxygen.pro.in doxygen-1.5.2.new/src/doxygen.pro.in
--- doxygen-1.5.2/src/doxygen.pro.in	2007-02-21 03:27:35.000000000 +0900
+++ doxygen-1.5.2.new/src/doxygen.pro.in	2007-05-31 01:51:43.810462200 +0900
@@ -26,7 +26,7 @@
 win32-borland:LIBS         += qtools.lib png.lib md5.lib doxygen.lib doxycfg.lib shell32.lib 
 win32-borland:TMAKE_LFLAGS += -L..\lib -L$(BCB)\lib\psdk
 win32:TMAKE_CXXFLAGS       += -DQT_NODLL
-win32-g++:LIBS             = -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 
+win32-g++:LIBS             = -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 -liconv
 win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions -fno-rtti
 INCLUDEPATH                += ../qtools ../libpng ../libmd5 .
 #win32-g++:INCLUDEPATH      -= ../libpng
diff -uNr doxygen-1.5.2/src/portable.cpp doxygen-1.5.2.new/src/portable.cpp
--- doxygen-1.5.2/src/portable.cpp	2007-03-14 01:58:17.000000000 +0900
+++ doxygen-1.5.2.new/src/portable.cpp	2007-05-31 01:58:38.140388700 +0900
@@ -373,7 +373,7 @@
 size_t portable_iconv (void *cd, const char** inbuf,  size_t *inbytesleft, 
                                        char** outbuf, size_t *outbytesleft)
 {
-#if (defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION==0x0109))
+#if (defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109))
 #define CASTNEEDED(x) (x)
 #else
 #define CASTNEEDED(x) (char **)(x)

パッチの当て方

以下のリンクから doxygen のソース tar をダウンロードします。

http://ftp.stack.nl/pub/users/dimitri/doxygen-1.5.2.src.tar.gz

tar と patch ファイルを同じディレクトリにおきます。

$ ls -lF
-rwxr-xr-x   1 yagita None  3599976 Apr 28 22:31 doxygen-1.5.2.src.tar.gz*
-rw-r--r--   1 yagita None     1790 May 31 02:15 doxygen-1.5.2_cygwin.patch

doxygen-1.5.2.src.tar.gz を展開します。

$ tar zxf doxygen-1.5.2.src.tar.gz

パッチをあてます。

$ patch -p0 < doxygen-1.5.2_cygwin.patch
patching file doxygen-1.5.2/configure
patching file doxygen-1.5.2/src/doxygen.pro.in
patching file doxygen-1.5.2/src/portable.cpp

コンパイル & インストールします。

$ cd doxygen-1.5.2
$ ./configure && make && make install

やったことまとめ

こんな風にやりましたが、もっといい方法があったら情報ください!

configure win32-g++ ってするのがめんどくさー
どうやら uname -s の結果を使って cygwin だったら〜を判定しようとしてる風だったので configure をパッチのように修正しました。
libiconv をリンク対象として追加
以前のエントリを書いてるときには気づいてなかったのですが、doxygen.exe をコンパイルする Makefile である、Makefile.doxygen ファイルの生成元である doxygen.pro.in ファイルがあり、そちらで -liconv を追加するようにしました。これはid:CCGさんのエントリで気づきました。サンクス!
portable.cpp のコンパイルエラー回避
cygwin 環境で /usr/include/iconv.h をみると以下のように定義されていたのと、iconv() の第二引数は const char ** だったのでパッチのように修正しました。
#define _LIBICONV_VERSION 0x010B    /* version number: (major<<8) + minor */