前々回 に拡張モジュールを Windows でビルドするついでに PHP 本体を拡張機能を全て無効にしてビルドしましたが、今度は拡張機能を出来るだけ有効にして PHP をビルドします。
なお、前々回とディレクトリ構成を変えていますが深い意味はありません*1。
依存ライブラリ
拡張機能や Apache などの sapi を有効にするためには、それらが依存しているヘッダやライブラリが必要になりますが、下記に主要なものがまとまったアーカイブがあるため個別に探してくる必要はないようです。
ここから deps-5.3-vc9-x86.7z をダウンロードしておきます。
ビルド環境の準備
http://windows.php.net/downloads/php-sdk/ からダウンロードした php-sdk-binary-tools-20110915.zip を「c:\php-sdk」に解凍します。
PHP ソースファイルを「c:\php-sdk\php-5.3.14」に解凍します。
deps-5.3-vc9-x86.7z を「c:\php-sdk\deps」に解凍します。
次のようなディレクトリ構成になります。
C:\php-sdk\ bin\ ... deps\ bin\ include\ lib\ sybase\ templates\ php-5.3.14\ ... script\ ... share\ ...
ビルド
コマンドプロンプトを起動して「C:\php-sdk\php-5.3.14\」に移動します。
ビルド用の環境変数を設定します。
"C:\php-sdk\bin\phpsdk_setvars.bat" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
ビルドします。
buildconf configure --enable-snapshot-build --enable-debug-pack --disable-calendar nmake nmake snap
configure オプション・nmake ターゲット
--enable-snapshot-build
PHP の snapshot ビルド用のオプションで、可能な限り全てのオプションを ON にして、ビルドエラーを無視します。
依存ライブラリのある拡張機能は、そのライブラリを deps に配置していれば有効になるし、なければ無効になります。
--enable-debug-pack
プログラムデータベース(PDB)を作成します。「--enable-snapshot-build」で有効になるオプションに含まれているため、指定しなくても有効です。「--disable-debug-pack」で無効化するとビルドが早くなります、多分。
なお、デバッグビルドする場合は「--enable-debug」を指定するのですが「--enable-debug-pack」と同時に指定することは出来ないため「--enable-snapshot-build」を指定しつつデバッグビルドする場合は「--disable-debug-pack」を指定して明示的に無効にする必要があります。
configure --enable-snapshot-build --disable-debug-pack --enable-debug --disable-calendar
--disable-calendar
カレンダー拡張機能を無効にします。有効にすると下記のようなエラーになってビルド出来なかったので無効にしました。
ext\calendar\jewish.c : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防
ぐために、ファイルを Unicode 形式で保存してください。
ext\calendar\jewish.c(324) : error C2001: 定数が 2 行目に続いています。
ext\calendar\jewish.c(325) : error C2001: 定数が 2 行目に続いています。
ext\calendar\jewish.c(326) : error C2001: 定数が 2 行目に続いています。
ext\calendar\jewish.c(327) : error C2001: 定数が 2 行目に続いています。
NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.exe"' : リターン コード '0x2'
Stop.
*1:phpsdk_buildtree.bat は使わなくても良いような気がしたので