ちょっと5.3系があるとうれしいかも的な状況になったので、OSX Mavericksで
php-5.3.28をビルドしてみました。すると、こんなリンクエラーになります。
$ phpenv install 5.3.28
(省略)
-----------------
| BUILD ERROR |
-----------------
Here are the last 10 lines from the log:
-----------------------------------------
_load_all_certs_from_file in openssl.o
"_sk_value", referenced from:
_zif_openssl_x509_parse in openssl.o
_zif_openssl_csr_new in openssl.o
_zif_openssl_pkcs7_verify in openssl.o
_php_openssl_parse_config in openssl.o
_php_openssl_sockop_set_option in xp_ssl.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sapi/fpm/php-fpm] Error 1
-----------------------------------------
The full Log is available at '/tmp/php-build.5.3.28.20140213005117.log'.
[Warn]: Aborting build.
対応方法
Homebrewのopensslをリンクさせればビルドできます。
- ~/.phpenv/plugins/php-build/share/php-build/definitions/5.3.28
(以下definitionファイル)の先頭、install_packageの前の行に以下を追加
configure_option -R “–with-openssl” “/usr/local/opt/openssl”
- あとは[2014-02-09-1] と同じようにビルドすればOKです。
$ CONFIGURE_OPTS="–with-pear" phpenv install 5.3.28
$ phpenv global 5.3.28 && phpenv rehash && rehash
ハマったこと
definitionファイルを編集せずに、CONFIGURE_OPTSの指定だけでビルドし
ようとしてハマりました…。
definitionファイルの最後に追加してもconfigureオプションとして認識さ
れません。
/var/tmp/php-build/source/5.3.28/config.nice
php-buildのソース(シェルスクリプトです)を追った結果、以下の行の前に
書かないとダメということが分かりました。
install_package “http://php.net/distributions/php-5.3.28.tar.bz2"
理由は単純でinstall_packageがconfigure&makeしているからです。
install_packageはシェルスクリプトの関数で、php-buildで定義されています。
~/.phpenv/plugins/php-build/bin/php-build
さらに言うと、definitionsファイルはphp-buildの中でsourceされている
だけです。
source “$DEFINITION_PATH”
じゃあもう少し頑張って、どうにかしてCONFIGURE_OPTSの指定だけでビル
ドを成功させようとしましたが、、configureのややこしさと処理の重さに
途中で力尽きました…。
definitionsファイル自体は結構柔軟に出来ていて、configureオプション
を削除したり置換できたりします。詳しくはマニュアルをどうぞ。
$ open ~/.phpenv/plugins/php-build/man/php-build.5.html
その他
--with-pear
を付けないとpecl[2014-02-09-1]
も有効にならないのですね。
そこに依存関係を付けるんだ…。