MavericksでPHP5.3.28をphp-buildする話
昨日CROSS2014でしたね、たのしかったですね。
しかし多分次は出禁やで…。
教訓。「マイクは音がならないとつらいし、出演者にもマイクがないとつらい」
libtoolがない
まずはこいつ
----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- #define Z_STRVAL(zval) (zval).value.str.val ^ In file included from /var/tmp/php-build/source/5.3.28/Zend/zend_execute.c:1295: Zend/zend_vm_execute.h:30142:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ 4 warnings generated. ld: library not found for -lltdl clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [sapi/fpm/php-fpm] Error 1 -----------------------------------------
これはlibtool がはいってないので、Homebrewでbrew install libtoolすればいいだけですね、簡単です。
opensslがダメ
次のやつがちょっと難問
----------------- | 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 -----------------------------------------
ログとか色々みたら、既存のOpenSSLがうまいこといってないやつだ。
brew install opensslしたわけですよ、でもこれkeg-onlyですからね、デフォルトのやつと置き換わってくれるわけではない。
brew link --force openssl
でforceしろやってのが一般回答っぽいんだけど、あんま好きな解決策ではない。
で、php-buildってのは /var/tmp/php-build/source/5.3.28 とかにソースがおちるので、そこに移動して、config.statusをみると、configureオプションがみれる。たとえばこういうの
./configure --with-config-file-path=/Users/uzulla/.phpenv/versions/5.3.28/etc --with-config-file-scan-dir=/Users/uzulla/.phpenv/versions/5.3.28/etc/conf.d --prefix=/Users/uzulla/.phpenv/versions/5.3.28 --libexecdir=/Users/uzulla/.phpenv/versions/5.3.28/libexec --without-pear --with-gd --enable-sockets --with-jpeg-dir=/usr --enable-exif --enable-zip --with-zlib --with-zlib-dir=/usr --with-kerberos --with-openssl --with-mcrypt=/usr --enable-soap --enable-xmlreader --with-xsl --enable-ftp --enable-cgi --with-curl=/usr --with-tidy --with-xmlrpc --enable-sysvsem --enable-sysvshm --enable-shmop --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pdo-sqlite --enable-pcntl --enable-mbstring --disable-debug --enable-fpm --enable-bcmath --with-libedit --with-png-dir=/usr/X11
こいつをコピーして、brewではいったopensslのディレクトリを/usr/local/Cellar/openssl/から確認して
--with-openssl=/usr/local/Cellar/openssl/1.0.1f
ここんところだけこうかきかえた、configureを実行して、あとはmake; make test; make install;すれば行けます。
とりあえずmake testでOpenssl関連エラーでてないので、だいじょうぶそうです。
あとは/var/tmp/php-build/source/5.3.28/php.ini-developmentをコピーしましょう
cp php.ini-development /Users/uzulla/.phpenv/versions/5.3.28/etc/php.ini
ということでforce linkしないでいいかんじにやる情報でした。