freebsd 8.0(amd64) + php 4.4.9 で コンパイルエラー

freebsd 8.0 (に限らないみたいですが) に php 4.4.9 をインストールした際にコンパイルエラーが出てしまうようです。

–with-gd \
–with-freetype \
–with-freetype-dir=/usr/local/include/freetype2/freetype \
–with-png-dir=/usr/local/lib/ \
–with-jpeg-dir=/usr/local/lib/

gd と with-png-dir 辺りのオプションをつけているとエラーがでるようです。

エラー内容はこんな感じ

ext/gd/libgd/gd_png.o(.text+0xabc): In function `gdImageCreateFromPngCtx’:
/home/user/src/php-4.4.9/ext/gd/libgd/gd_png.c:139: undefined reference to `png_check_sig’
*** Error code 1

php bugを検索したところ一発で理解。libpngが1.4.0以上だと起こるらしいです。

> pkg_info | grep png
png-1.4.1_1 Library for manipulating PNG images
pngcrush-1.7.10 An optimizer for PNG files

というわけでパッチを作成。
こんな感じで大丈夫。

— php-4.4.9/ext/gd/libgd/gd_png.c.org 2010-04-28 17:00:15.000000000 +0900
+++ php-4.4.9/ext/gd/libgd/gd_png.c 2010-04-28 17:05:21.000000000 +0900
@@ -136,7 +136,7 @@
* have used slightly more general png_sig_cmp() function instead
*/
gdGetBuf(sig, 8, infile);
– if (!png_check_sig (sig, 8)) { /* bad signature */
+ if (png_sig_cmp (sig, 0, 8)) { /* bad signature */
return NULL;
}

上記パッチのダウンロードはこちら

解凍した php-4.4.9 の ディレクトリに、適当なファイルでpatchを作成して
patch < ./gd_png.patch(任意のファイル名) でパッチ当て完了。 無事にコンパイルできました。