id:eel3:20120615:1339768796 にてMinGWでzlibをビルドした理由はlibpngを使う為だ。
zlibと同様にlibpngのバイナリもLibPng for Windowsで入手できるものの、こちらも微妙に古い。しかもセキュリティホールが残っているバージョンだ。そこでlibpngも最新版をMinGW*1でビルドすることにした。
当初はlibpng-1.5.10を使う予定だったものの、諸事情によりlibpng-1.2.49に変更した。どちらも一通りビルドしたので記録を残しておく。
なおソースコードは双方ともhttp://www.libpng.org/pub/png/libpng.htmlから入手した。
libpng-1.2.49
libpng-1.2.49.tar.xzを取得。伸張・展開するとlibpng-1.2.49というディレクトリができるので、コマンドプロンプトでその中に入る。
libpngをビルドするにはconfigureを使う方法とscripts以下のMakefileを叩く方法がある。今回はMakefileを使う。MinGWでビルドする為にscripts/makefile.mingwが用意されている。
make -f scripts\makefile.mingw ZLIBINC=..\..\zlib\inc ZLIBLIB=..\..\zlib\lib
先ほどビルドしたzlibのヘッダとライブラリの位置をZLIBINCとZLIBLIBで指定している。システムのヘッダ、ライブラリのディレクトリにインストール済みの場合は指定する必要はない。
zlibと同様にlibpngも汎用に使う訳ではないので、make installせずに手動で必要なファイルをコピーする。対象となるファイルは以下の通り:
- libpng.a
- libpng.def
- libpng.dll.a
- libpng.pc
- libpng12.dll
- libpng-config
- png.h
- pngconf.h
若干必要か不要か怪しいファイルがある……。静的リンクする場合はlibpng.a、DLLを使う場合はlibpng.dll.aを使う。
libpng-1.5.10
libpng-1.5.10.tar.xzを取得。伸張・展開するとlibpng-1.5.10というディレクトリができるので、コマンドプロンプトでその中に入る。
1.5.10のビルドにもconfigureを使う方法とscripts以下のMakefileを叩く方法がある。今回もMakefileを使うものの、1.5.10にはMinGWでビルドする為のMakefileが用意されていない*2。そこでGCC用のMakefileで代用する。
make -f scripts\makefile.gcc ZLIBINC=..\..\zlib\inc ZLIBLIB=..\..\zlib\lib
ZLIBINC、ZLIBLIBについては1.2.49と同じ。
注意点として、GCC用のMakefileで代用した為かDLLはビルドできない。試してはいないけどVisual Studioのプロジェクトも用意されているので、そちらを使えばDLLを作れそうだ。
1.2.49と同様にmake installせずに手動で必要なファイルをコピーする。対象ファイルは以下の通り:
- libpng.a
- png.h
- pngconf.h
- pnglibconf.h
必要なヘッダファイルが1つ増えている点に注意。pnglibconf.hはビルド時に生成されるようだ。