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がうまく動かない場合は、下記のような別実装を試すのも手かと思います。