TL;DR
- PHP は Autoconf で構成されているので、必要なパッケージを入れて
./configureとmakeを実行すれば、ソースコードからビルドできる。 - バグを報告するときはデバッグビルドが便利である。
内容
ビルドの基本
Docker で環境を作り、実際にビルドしてみる。PHP は Autoconf で構成されているので、./configure スクリプトを実行してからビルドする。Debian 12 では最低限 gcc、pkg-config、libxml2-dev、libsqlite3-dev、make のパッケージが必要である。
ビルド構成の変更
ビルド構成は ./configure のオプションで変える。オプションの一覧は --help で確認できる。一部の機能はコンパイル時に有効にしておかないと、後から有効にするのが面倒になる。Docker 公式イメージ(Docker Library)の Dockerfile が参考になる。競合が起きなければ、サードパーティの拡張機能を組み込むこともできる。
コンパイラの選び方
PHP は C99 に準拠しているので、C99 に対応するコンパイラであれば、clang などでもコンパイルできる。ただし、既存の PHP は gcc の拡張である GRV(Global Register Variables)に大きく依存しているので、clang ではパフォーマンスが落ちる。一方で clang はデバッグ情報が豊富なので、開発中に切り替えるのはよい。コンパイラのオプションも変えられる。
デバッグビルド
SEGV などのバグを報告するときは、デバッグビルドが便利である。コンパイラの最適化を無効にし、内部のアサーションを有効にするので、コアダンプやスタックトレースを解析しやすくなる。
ただし、コンパイラの最適化が原因のバグは、デバッグビルドでは再現しないことがある。「デバッグビルドでは再現しない」ことも有益な情報なので、報告するときに一緒に伝えるとよい。
ビルド情報の埋め込み
PHP 8.4 から、ビルド時に環境変数でビルドに関する情報を埋め込めるようになった。