とりあえず現状を載せておきます。
brew upgrade を実行したら、php-buildでインストールしたphpの実行に失敗するようになりました。
php-buildは最新版であることを確認して、(コミットハッシュ: e2969a6) install.sh を実行しました。
結論としては CXXFLAGS='-std=c++11' を追加してビルドすると、phpが実行できるようになりました。
追記 (2017/08/28 14:52)
Fix default temporary directory for php-build on macOS by hnw · Pull Request #467 · php-build/php-build でこの問題が修正され、ビルド時に環境変数CXXFLAGS='-std=c++11'を指定しなくてもよくなりました。PHP5.3.29もビルドできるようになりました。
環境
- MacBook Pro 2016Mid
- macOS Sierra 10.12.6
- direnv で
phpのパスを設定 - ghq で php-build をインストール
現象
PHP実行
$ php -v dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib Referenced from: /Users/tenkoma/local/php/7.1.8/bin/php Reason: image not found Abort trap: 6
php-build
$ ghq look php-build
cd /Users/tenkoma/src/github.com/php-build/php-build
bash-3.2$ time YACC=$(brew --prefix bison)/bin/bison PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 7.1.8 ~/local/php/7.1.8/
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-development gets used as php.ini
[Info]: Building 7.1.8 into /Users/tenkoma/local/php/7.1.8/
[Downloading]: https://secure.php.net/distributions/php-7.1.8.tar.bz2
[Preparing]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8
^@[Compiling]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8
^@^@
-----------------
| BUILD ERROR |
-----------------
Here are the last 10 lines from the log:
-----------------------------------------
^
_Nullable
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/signal.h:106:48: note: insert '_Nonnull' if the pointer should never be null
int sigvec(int, struct sigvec *, struct sigvec *);
^
_Nonnull
352 warnings generated.
352 warnings generated.
352 warnings generated.
331 warnings generated.
-----------------------------------------
The full Log is available at '/tmp/php-build.7.1.8.20170814220930.log'.
[Warn]: Aborting build.
real 3m15.342s
user 6m5.609s
sys 1m21.761s
ビルド成功しました(追記 2017/08/16 1:22)
解決策情報をいただきました。
はじめまして。同じ症状でブログにたどり着きましたので情報共有を。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月15日
YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' phpenv install 7.1.8
で私の環境ではビルドできました。
jpeg に関しては brew upgrade で 9b が入ってくるのですが、PHPがサポートするのは 8 までのようなので、ダウングレードする必要がありそうです。https://t.co/fT2HLDbwRl
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月15日
php-build のエラーログを見るとわかりますが、c++11 サポートが必要とのことで、フラグをつける必要がありました。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月15日
詳しく追っていませんが、Xcodeのコンパイラ(Apple LLVM)のバージョンに依存すると思われます。
やってみます。まず、libjpeg のバージョンを切り替え
$ brew info libjpeg jpeg: stable 9b (bottled) Image manipulation library http://www.ijg.org /usr/local/Cellar/jpeg/8d (19 files, 708.3KB) Poured from bottle on 2016-11-19 at 12:49:23 /usr/local/Cellar/jpeg/9b (20 files, 724KB) * Poured from bottle on 2017-08-14 at 00:35:36 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/jpeg.rb $ brew switch libjpeg 8d Cleaning /usr/local/Cellar/jpeg/8d Cleaning /usr/local/Cellar/jpeg/9b 17 links created for /usr/local/Cellar/jpeg/8d
次に CXXFLAGS を指定してビルド
$ ghq look php-build
cd /Users/tenkoma/src/github.com/php-build/php-build
bash-3.2$ time YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 7.1.8 ~/local/php/7.1.8/
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-development gets used as php.ini
[Info]: Building 7.1.8 into /Users/tenkoma/local/php/7.1.8/
[Downloading]: https://secure.php.net/distributions/php-7.1.8.tar.bz2
[Preparing]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8
^@[Compiling]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/7.1.8
^@^@^@^@[xdebug]: Installing version 2.5.5
[xdebug]: Compiling xdebug in /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/xdebug-2.5.5
[xdebug]: Cleaning up.
[Info]: Enabling Opcache...
[Info]: Done
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.7.1.8.20170816011335.log
[Success]: Built 7.1.8 successfully.
real 6m12.645s
user 16m37.504s
sys 5m20.081s
bash-3.2$ php -v
PHP 7.1.8 (cli) (built: Aug 16 2017 01:18:24) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.8, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
ビルド時刻が更新されているので、ビルド成功です。
libjpegのエラーについては、ビルドしなおせば、上記のエラーは発生しなくなります(さらに追記 2017/08/18 18:27)
さらに情報をいただきました。ありがとうございます。
php-build の件で追加情報です。jpeg ですが、9b でもビルドできました。ただしGDの動作まで確認した訳ではなく、php -i で
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月17日
JPEG Support => enabled
libJPEG Version => 9 compatible
の表記を確認した程度です
先述の通り、PHP公式ドキュメントがまだアップデートされていないので、どう捉えるか、ではあると思います。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月17日
libjpeg に関してまとめると、phpenv 等を使用している場合は brew upgrade で 9b にアップデートされてしまうとビルド済みバイナリが動かなくなるので、8に戻すか過去のバイナリもビルドし直す必要がある、ということになります。
— 田口 誠 Makoto Taguchi (@petty_conan) 2017年8月17日
以上、ご報告まで。
libjpeg を元に戻してビルドし直しました。
$ brew switch libjpeg 9b Cleaning /usr/local/Cellar/jpeg/8d Cleaning /usr/local/Cellar/jpeg/9b 17 links created for /usr/local/Cellar/jpeg/9b $ ghq look php-build $ time YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 7.1.8 ~/local/php/7.1.8/ $ ~/local/php/7.1.8/bin/php -i | grep JPEG Supported filetypes => JPEG,TIFF JPEG Support => enabled libJPEG Version => 9 compatible
いただいた情報の通り、 php 実行できました。
5.4.45, 5.5.38, 5.6.31, 7.0.22, 7.1.8, 7.2beta2 までビルド成功しました。5.3.29では以下の通りビルド失敗しました。
$ time YACC=$(brew --prefix bison)/bin/bison CXXFLAGS='-std=c++11' PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j7 php-build -i development 5.3.29 ~/local/php/5.3.29/
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-development gets used as php.ini
[Info]: Building 5.3.29 into /Users/tenkoma/local/php/5.3.29/
[Downloading]: https://secure.php.net/distributions/php-5.3.29.tar.bz2
[Info]: Applying patches: /usr/local/bin/../share/php-build/patches/php-5.3.29-64bit-intl.patch
[Preparing]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/5.3.29
[Compiling]: /var/folders/pc/vq2zc_sn05v190vzzvz99bpc0000gn/T//php-build/source/5.3.29
^@
-----------------
| BUILD ERROR |
-----------------
Here are the last 10 lines from the log:
-----------------------------------------
^
_Nullable
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/stdio.h:475:6: note: insert '_Nonnull' if the pointer should never be null
FILE *funopen(const void *,
^
_Nonnull
330 warnings generated.
330 warnings generated.
330 warnings generated.
331 warnings generated.
-----------------------------------------
The full Log is available at '/tmp/php-build.5.3.29.20170818191216.log'.
[Warn]: Aborting build.
real 2m24.479s
user 3m19.952s
sys 1m30.081s
今後5.3を使う必要に迫られない限り、放置でいこうかと思います。