PHP 7.4 が2019年11月28日にリリースされて、 phpenv + php-build では2019年12月10日に PHP 7.4 が追加されたようなので、早速 macOS にインストールしてみたけど、結構てこずったので、私がインストールできた方法をまとめておきます。
環境
- macOS: 10.15.1
- phpenv: v0.9.0-rc.1
- php-build: v0.11.0dev
はじめに実行したコマンド
phpenv を最新の状態にして
$ phpenv update
PHP 7.4 をインストールしようとしたところ、いくつかのエラーが発生したので、順番にエラーを潰していった。
$ phpenv install 7.4
krb5
をインストールする
krb5
を入れろと言われるので、 brew
で krb5
をインストールする。
$ brew install krb5
あと、 PKG_CONFIG_PATH
にパスを設定しろとも言われるので、設定する。私は fish shell を使っているので、 .config/fish/conf.d/krb5.fish
に下記のように設定した。
set -gx PKG_CONFIG_PATH "/usr/local/opt/krb5/lib/pkgconfig" $PKG_CONFIG_PATH
そのときのエラーメッセージ
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: error: Package requirements (krb5-gssapi krb5) were not met:
No package 'krb5-gssapi' found
No package 'krb5' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables KERBEROS_CFLAGS
and KERBEROS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
openssl
をインストールする
同じく openssl
を入れろと言われるので、 brew
で openssl
をインストールする。
brew install openssl@1.1
同じく PKG_CONFIG_PATH
にパスを設定しろとも言われるので、設定する。 .config/fish/conf.d/openssl.fish
に下記のように設定した。
set -gx PKG_CONFIG_PATH "/usr/local/opt/openssl@1.1/lib/pkgconfig" $PKG_CONFIG_PATH
そのときのエラーメッセージ
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: error: Package requirements (openssl >= 1.0.1) were not met:
No package 'openssl' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables OPENSSL_CFLAGS
and OPENSSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
icu4c
をインストールする
同じく icu
を入れろと言われるので、 brew
で icu4c
をインストールする。
brew install icu4c
同じく PKG_CONFIG_PATH
にパスを設定しろとも言われるので、設定する。 .config/fish/conf.d/icu4c.fish
に下記のように設定した。
set -gx PKG_CONFIG_PATH "/usr/local/opt/icu4c/lib/pkgconfig" $PKG_CONFIG_PATH
そのときのエラーメッセージ
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: error: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met:
No package 'icu-uc' found
No package 'icu-io' found
No package 'icu-i18n' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables ICU_CFLAGS
and ICU_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
libedit
をインストールする
同じく libedit
を入れろと言われるので、 brew
で libedit
をインストールする。
brew install libedit
同じく PKG_CONFIG_PATH
にパスを設定しろとも言われるので、設定する。 .config/fish/conf.d/libedit.fish
に下記のように設定した。
set -gx PKG_CONFIG_PATH "/usr/local/opt/libedit/lib/pkgconfig" $PKG_CONFIG_PATH
そのときのエラーメッセージ
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: WARNING: libedit directory ignored, rely on pkg-config
configure: error: Package requirements (libedit) were not met:
No package 'libedit' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables EDIT_CFLAGS
and EDIT_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
libxml2
のパスを設定する
libxml2
は brew
でインストールされていたけど、パスが通っていなかったので、ビルド時にエラーになった。
.config/fish/conf.d/libzml2.fish
に下記のように設定した。
set -gx PKG_CONFIG_PATH "/usr/local/opt/libxml2/lib/pkgconfig" $PKG_CONFIG_PATH
そのときのエラーメッセージ
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
warning: unsupported relocation in debug_info section.
note: while processing /private/var/tmp/php-build/source/7.4.0/ext/opcache/.libs/zend_accelerator_util_funcs.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: /var/tmp/php-build/source/7.4.0/modules/opcache.a(shared_alloc_shm.o) has no symbols
/var/tmp/php-build/source/7.4.0/ext/libxml/libxml.c:34:10: fatal error: 'libxml/parser.h' file not found
#include <libxml/parser.h>
^~~~~~~~~~~~~~~~~
1 error generated.
make: *** [ext/libxml/libxml.lo] Error 1
bzip2
と iconv
のパスを通す
bzip2
と iconv
は brew
でインストールしたけど、 fish shell の設定ではうまくパスが通らなかったので、 phpenv
で install するときにパスを渡すことにした。
brew install bzip2 libiconv
エラーメッセージ
bzip2
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: error: Please reinstall the BZip2 distribution
iconv
configure: WARNING: unrecognized options: --with-png-dir, --with-libxml-dir, --with-icu-dir
configure: error: Please specify the install prefix of iconv with --with-iconv=<DIR>
最終的なコマンド
私は fish shell を使っているので、最終的に下記のようなコマンドになった。
$ env PHP_BUILD_CONFIGURE_OPTS="--with-bz2=/usr/local/opt/bzip2 --with-iconv=/usr/local/opt/libiconv" phpenv install 7.4.0
bash であれば下記のようになると思う。
$ PHP_BUILD_CONFIGURE_OPTS="--with-bz2=/usr/local/opt/bzip2 --with-iconv=/usr/local/opt/libiconv" phpenv install 7.4.0
下記のような感じで、問題なくインストールできていることを確認した。
$ phpenv versions
system
7.2.25
7.3.9
7.4.0
$ phpenv shell 7.4
7.4
$ php -v
PHP 7.4.0 (cli) (built: Dec 13 2019 22:17:20) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.0, Copyright (c), by Zend Technologies
with Xdebug v2.9.0, Copyright (c) 2002-2019, by Derick Rethans