Macでphpenvによるphpのインストールにハマりにハマった件



MacのPHPを別のバージョンに切り替えたいなぁということがあったので
phpenvを使ってインストールしようとしたら BUILD ERROR と怒られました。

ログを見てそれぞれ対処ましたが、むっちゃ時間がかかったので
今後のためにここに残していきます。

## 遭遇したエラーたち

bisonのバージョンが対応してないと怒られてます。bisonってなにさ...

	configure: WARNING: This bison version is not supported for ...
re2cってのがなかったんでしょうか...

	configure: WARNING: You will need re2c 0.13.4 or later if ...
mcrypt.hがない？インストールするのはlibcmryptでいいのかな？

	configure: error: mcrypt.h not found. Please reinstall libmcrypt.
上の3つに対応したら別のエラーが出た（しんどい）

		_Nullable
とか

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

とか



## 最初のエラー

phpのインストールになんでこんなエラーが出るのかがわからないけど、とりあえず一つづつ対応するしかないですよね

	-----------------------------------------
	configure: WARNING: This bison version is not 	supported for regeneration of the Zend/PHP parsers 	(found: 2.3, min: 204, excluded: 3.0).
	configure: WARNING: You will need re2c 0.13.4 or 	later if you want to regenerate PHP parsers.
	configure: error: mcrypt.h not found. Please reinstall libmcrypt.
	-----------------------------------------


## bison対応
とりあえずバージョンが違うようなのでアップデートを試みます
やり方を調べるとbrewを使ってインストールするといいらしいが
単純にインストールするだけではダメでした。
bisonのバージョンが高すぎてphpのビルドに失敗します。

	PHP :: Bug #69055 :: Bison 3.0.2 not supported : https://bugs.php.net/bug.php?id=69055


調べるとバージョンは2.7じゃないとだめみたいだけど
Homebrewはデフォルトでバージョン指定ができなくなっているので設定をかえます。
こちらの記事を参考にさせていただきました。
[Macのbrewで旧バージョンのアプリをインストールする - Qiita](https://qiita.com/LowSE01/items/c518f61a8998ba6e4ea8)

	brew tap homebrew/versions
	brew search bison
	
ログの結果が参考サイトと違ったけど、ログの記述に合わせて次のコマンドを実行

	brew install bison@2.7

ログの言う通りにパスを通します。zshをつかっているので~/.zshrcに設定してますが、他のシェルを使ってるなら置き換えてください。

	echo 'export PATH="/usr/local/opt/bison@2.7/bin:$PATH"' >> ~/.zshrc

これでbisonについては怒られなくなりました。


## re2c対応
字句解析ツール？PHPのビルドに必要とのことなのでとりあえずインストール
これはすんなり怒られなくなりました。

	brew install re2c


## libmcrypt対応
ログを見ると

	mcrypt.h not found. Please reinstall libmcrypt.

とりあえずlibmcrypt入れろと言われてるので入れます

	brew install libmcrypt

これで怒られなくなると思ったら、よくわからんログ吐いてBuildできません。

	-----------------------------------------
			  _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
	/var/tmp/php-build/source/5.6.9/ext/openssl/openssl.c:44:10: fatal error: 'openssl/evp.h' file not found
	#include <openssl/evp.h>
			 ^
	330 warnings and 1 error generated.
	make: *** [ext/openssl/openssl.lo] Error 1
	-----------------------------------------



まったく意味がわからないので調べると次の記事が参考になりました。ありがとうございます。
[phpenvでPHPをインストールする。](https://qiita.com/mossaky/items/e53143a8c41ac1dc0616)

opensslは入ってたのでとりあえずlibxml2なるものをインストールします

	brew install libxml2
ログの言う通りパスを設定します。設定先は使ってるシェルに合わせます

	echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc

これで解決かと思いきやまた違うメッセージ（心が折れかかる）

	-----------------------------------------
														_Nonnull
	352 warnings generated.
	PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
	Configuring for:
	PHP Api Version:         20131106
	Zend Module Api No:      20131226
	Zend Extension Api No:   220131226
	Cannot find autoconf. Please check your autoconf installation and the
	$PHP_AUTOCONF environment variable. Then, rerun this script.
	-----------------------------------------


次の記事に助けられました。ありがとうございます。
[phpenv+php-build環境によるphpバージョン管理~Mac（Yosemite）編~](https://qiita.com/omega999/items/c5b1c177331f8d342efd)

autoconfというのが必要みたいなのでインストール。記事にならってついでにautomakeも入れました。

	brew install autoconf
	brew install automake


## 結果
ものすごい時間かかりますができました。

	phpenv install 5.6.9
	　　... 割愛 ...
	[Success]: Built 5.6.9 successfully.


涙がでますね。