PHP
phpenv
php-build

Macのphpenv(php-build)でビルドしようとしたら出るエラーと解決まとめ

Mac(Mojave)でPHPをビルドしようとしたらかなり行き詰まったので、
ついでに出てくるErrorとWarningを片っ端から書いてみようじゃないかという記事。

今回はPHP7.3.0, 5.6.40, 5.5.38をビルドします。
この辺りがインストールできれば7.2, 7.1, 7.0, 5.4はインストールできるみたいです。
5.3.xはビルドできないのですがそれについては省略。

TL;DT

列挙したら本当に長くなったのでまとめました。
これのコピペで大丈夫だと思います。

# php7.3.0のビルドに必要
brew install bison re2c libxml2 libjpeg libpng icu4c libzip autoconf automake
echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
exec $SHELL -l

# Mojaveなら必要
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

#php5.6.40のビルドには追加で必要
brew install libmcrypt

#php5.5.38のビルドにはあると良さそう
brew install bison@2.7
echo 'export PATH="/usr/local/opt/bison@2.7/bin:$PATH"' >> ~/.bash_profile
exec $SHELL -l

php7.3.0(7.x)

configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: ).

bisonのバージョンが低いと言われていますね。
brew install bison しましょう。

configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

re2cのバージョンが低いと言われています。
brew install re2c でOK。

configure: error: Cannot find OpenSSL's

また、OpenSSLのenp.hが見つかりませんと出ていますがlibxml2が必要です。 これが一つ目の罠です

brew install libxml2 します。

configure: error: Cannot find zlib

zlibが見つからないと言われますが、MojaveだとmacOS SDK headerがないらしいです。
https://polidog.jp/2018/11/28/mojave_phpenv/

Mojave環境でビルドするときの最大の罠です。
(ググってもXcode-select installしろという記事ばかりひっかかりました)

上記の記事にもある通り、下記のコマンドでヘッダーをインストールしましょう
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

configure: error: jpeglib.h not found.

libjpegをインストールしましょう。

configure: error: png.h not found.

libpngをインストールしましょう

configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.

icu4cをインストールしましょう

configure: error: Please reinstall the libzip distribution

libzipをインストールしましょう。

note: insert '_Nonnull' if the pointer should never be null

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
int     sigvec(int, struct sigvec *, struct sigvec *);
                                                   ^
                                                    _Nullable
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.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
211 warnings generated.
ld: warning: directory not found for option '-L/usr/local/opt/zlib/lib'
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
-----------------------------------------

automake と autoconfをインストールするとBUILD ERRORとしてはでなくなるっぽいです。
(でもビルドログ見たらやっぱり出てるっぽい。謎)

[Success]: Built 7.3.0 successfully.

これで7.3.0のビルドがBUILD ERRORなしでできるようになったと思います。

5.6.40 インストール

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

libmcryptをインストールしましょう。

[Success]: Built 5.6.40 successfully.

これで5.6.40のビルドがBUILD ERRORなしでできるようになると思います。

5.5.38 インストール

そのままビルドしてもビルドできるのですが、
実はビルドログに下記のようなWARNINGが出ているのでもう一手間加えておくと良いかもしれません。

configure: WARNING: bison versions supported for regeneration of the Zend/PHP parsers: 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7 (found: 3.2).

php5.5のビルドにbisonが3.xではperserが再作成できないらしいです。
brew install bison@2.7して echo 'export PATH="/usr/local/opt/bison@2.7/bin:$PATH"' >> ~/.bash_profile
しましょう。

以前はbrewからインストールできる2.7.1ではこの警告が消えなかったのですが、
いつのまにかbison2.7.1でも問題なくなったようです。
やったね!

[Success]: Built 5.5.38 successfully.

これで5.5.38のビルドが特にBUILD ERRORなしでできるようになると思います。

その他

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
Error: You have not agreed to the Xcode license. Please resolve this by running:
  sudo xcodebuild -license accept
Error: You have not agreed to the Xcode license. Please resolve this by running:
  sudo xcodebuild -license accept
configure: error: in `/var/tmp/php-build/source/7.3.0':
configure: error: C compiler cannot create executables
See `config.log' for more details
-----------------------------------------

一度もxCodeを起動してないと出るかも。
先にHomebrewをインストールしていれば一緒にインストールされるので滅多に見ないです。

まとめ

Mojaveになってzlibが見つからないエラーがマジで罠で、数日悩みました。
他にもやるたびに悩むので一度まとめてみたかった次第。
参考になればと思います。
また、こんなエラーが出るなどあればコメントいただければ嬉しいです。