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 <evp.h>

また、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をインストールしていれば一緒にインストールされるので滅多に見ないです。


# 以下情報提供に基づく追記
## configure: error: C++ preprocessor "/lib/cpp" fails sanity check



```
phpenv install 7.3.4
(...)
configure: error: in `/var/tmp/php-build/source/7.3.4':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
```

> どうやら依存関係のicu4cがclang系でビルドされているにもかかわらずgnu系でビルドしようとするのが原因のようです。
> 以下のようにフラグを設定するとうまくビルドできました。

```
 CC='/usr/bin/gcc' CXX='/usr/bin/g++' CXXFLAGS='/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/' CXXCPP='/Library/Developer/CommandLineTools/usr/bin/cpp -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/' phpenv install 7.3.4
```

thx @Akashi_SN

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