Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

以下情報提供に基づく追記

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

studist
「伝えることを、もっと簡単に」をミッションにビジュアルSOPマネジメントプラットフォームのBtoB SaaS「Teachme Biz」を開発・運営するスタートアップ
https://medium.com/studist-dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした