hnwの日記

php-buildが便利だという話を補足します

php-buildについて、先日のPHP BLT #1で下記のようなLTをしました(発表時のものに追記してあります)。



とはいえプレゼンだけでは伝わらない内容もあったと思うので、補足する内容を書きます。

独自のdefinitionファイルをどう作るか

php-buildでは独自のdefinitionファイルを作れるのが便利です。僕は下記のような内容で~/.phpenv/plugins/php-build/share/php-build/definitions/7.0.0RC8-zts-debugというファイルを作っています。git管理下のディレクトリに絶対commitしないファイルを作ることになってしまいますが、コンフリクトしない名前で作る分には良いことにします。

export CFLAGS="-g"
export PHP_BUILD_KEEP_OBJECT_FILES="on"
configure_option "--enable-maintainer-zts"
configure_option -D "--disable-debug"
configure_option "--enable-debug"
source $(find_definition "7.0.0RC8")


こうすることでphpenv install 7.0.0RC8-zts-debugのようにして独自にビルドしたPHPを管理できて便利です。


definitionファイルはシェルスクリプトなので、環境変数を設定することもできます。また、最後の行のように書けば既存のdefinitionファイルの内容を取り込むこともできます。

ビルド時のオブジェクトファイルを消さない方法

ところで、php-buildはビルドが終わると勝手にmake cleanするような挙動になっています。gdbなどのデバッガをアタッチして使うような状況を考えると、オブジェクトファイルは残しておきたいですよね。


最近の修正で、下記のように環境変数をセットすることでオブジェクトファイルを残すことができるようになりました(上のdefinitionファイルの例でも利用しています)。

$ PHP_BUILD_KEEP_OBJECT_FILES=“on" phpenv install 7.0.0RC8


また、下記のようにすればビルド時のmakeがmake -j4になります。

$ PHP_BUILD_EXTRA_MAKE_ARGUMENTS="-j4" phpenv install 7.0.0RC8


環境変数名が長々しくてイマイチなので、コマンドラインオプションでも指定できるようにしたいところですね…。そんなPull Requestをいずれ投げたいと思っています。

phpenvがrbenvとコンフリクトする件について

資料中でオススメしているCHH/phpenvはrbenvとうまく共存できないことがあるようです。僕の手元では共存できているようなので謎ですけど…。


CHH版のphpenvがうまく動かない場合は、下記のような別実装を試すのも手かと思います。

まとめ

そんなこんなで、php-buildの紹介LTをしました。


そもそも何でこの話題でLTをしたかというと、僕が直近でPHP7のRC版が出るたびにPHPをビルドしていてphp-buildを使いまくっていたからです。使っていると不満も出て来てPull Requestを投げたりもしたんですが、中の人の反応がかなり速いのも好感度が高いですね。


ビルドでハマるのって誰にとっても嬉しくないことなので、このプロジェクトにノウハウを反映していけたら良いと思っています。