macOS Catalinaでもphpenv使いたかったのでdefault_configure_optionsいじったりPHP_BUILD_CONFIGURE_OPTS指定したりした

techblog.roxx.co.jp の続きです。

前回はphpenv, php-buildを諦めてしまいましたがいろいろ設定を調査して再挑戦です。

github.com

default_configure_options を調整する

php-buildには default_configure_options というファイルがあり、こちらに configure で利用するオプションを記載しています。 $PHPENV_ROOT/plugins/php-build/share/php-build/default_configure_options をお好みのエディターで編集し、前回エラーが出ていたzlib, bzip2, iconv のオプションを調整します。

default_configure_optionsはこのようになりました。 gist.github.com

それぞれビルド用にHomebrewでインストールしておきましょう。

brew install bzip2 libiconv zlib

これで再度php7.2.22のインストールに挑戦してみましたが libedit を再インストールしろというエラーが起きてしまいました。くやしい。

$ phpenv install 7.2.22
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 7.2.22 into /Users/jiska/.anyenv/envs/phpenv/versions/7.2.22
[Downloading]: https://secure.php.net/distributions/php-7.2.22.tar.bz2
(中略)

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

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Please reinstall libedit - I cannot find readline.h
-----------------------------------------

とりあえずlibeditをインストールしてdefault_configure_options に --libedit を指定して再実行しましたが状況が変わりませんでした。

brew install libedit
$ phpenv install 7.2.22
(中略)

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

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Please reinstall libedit - I cannot find readline.h
-----------------------------------------

くやしい。もうちょっと原因調べないとダメです。

PHP_BUILD_CONFIGURE_OPTS を指定する

php-build のコードを読んでいて気づいたのですが、macOSの場合は --libedit を上書きしてしまっているようです。

https://github.com/php-build/php-build/blob/a73138438907cc2cfefc8279102ccba234c85369/bin/php-build#L621-L627:該当箇所へのリンク

    if is_osx; then
        configure_option -D "--with-gettext"
        configure_option -D "--with-readline"
        configure_option "--with-libedit"

        configure_option -R "--with-png-dir" "/usr/X11"
    fi

そして、envに PHP_BUILD_CONFIGURE_OPTS を指定すればconfigureにオプションとして反映してくれるようです。

https://github.com/php-build/php-build/blob/a73138438907cc2cfefc8279102ccba234c85369/bin/php-build#L135:PHP_BUILD_CONFIGURE_OPTSが存在しなければ空文字で初期化している

[ -z "$PHP_BUILD_CONFIGURE_OPTS" ] && PHP_BUILD_CONFIGURE_OPTS=""

https://github.com/php-build/php-build/blob/a73138438907cc2cfefc8279102ccba234c85369/bin/php-build#L652:指定したoptionsは最終的にマージされる

    CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS $PHP_BUILD_CONFIGURE_OPTS $CONFIGURE_OPTS"

envにlibeditの設定を指定して再度実行してみたところ、ようやくbuildすることができました!ビルドを試したのは7.2.22, 7.2.23, 7.3.12 です。

# 7.2.22
$ PHP_BUILD_CONFIGURE_OPTS="--with-libedit=/usr/local/opt/libedit" phpenv install 7.2.22
(中略)
Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
directorytreeiterator.inc
clicommand.inc
directorygraphiterator.inc
invertedregexiterator.inc
pharcommand.inc
phar.inc

Build complete.
Don't forget to run 'make test'.
(中略)

[xdebug]: Installing xdebug configuration in /Users/jiska/.anyenv/envs/phpenv/versions/7.2.22/etc/conf.d/xdebug.ini
[xdebug]: Cleaning up.
[Info]: Enabling Opcache...
[Info]: Done
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.7.2.22.20191127024529.log or rebuild with '--verbose' option
[Success]: Built 7.2.22 successfully.

# 7.3.12 も大丈夫だった
PHP_BUILD_CONFIGURE_OPTS="--with-libedit=/usr/local/opt/libedit" phpenv install 7.3.12

まとめ

  • default_configure_optionsを調整しよう
  • ビルドに必要なものをインストールしておこう
    • brew install bzip2 libedit libiconv zlib
  • PHP_BUILD_CONFIGURE_OPTSに --with-libedit を追加してから phpenv install しよう
    • PHP_BUILD_CONFIGURE_OPTS="--with-libedit=/usr/local/opt/libedit" phpenv install 7.3.12

最後に

株式会社ROXXでは一緒に agent bankback check を作っていくメンバーを随時募集しています。 この記事を読んでROXXに興味を持ってくれた方はぜひご応募ください。   www.wantedly.com