Old Mac上のHomebrew/[email protected]がコアダンプして死んでしまうので、怒ってGitHubの公式php-srcからPHPをビルドした話
High Sierraまでサポートのold Mac (2014以前の)をどうにかして運用していたとして、HomebrewからPHPを導入した環境で以下みたいな簡単なPHPスクリプトがあったとします。
$ vi test.php
<?php
print("Hello, world");
?>
これを実行すると、こうです。
$ php test.php
zsh: illegal hardware instruction php test.php
コアダンプして死んでいます。だいたい死にます。激おこだよ。phpinfo() くらいなら通りますが、それがあったところで何だという話なので、PHP自体を自力でビルドしました。
$ mkdir ~/src
$ cd ~/src
ホームフォルダに src みたいなソースを突っ込んでおくフォルダがある方は、このあたり自力でどうにかしてくれて大丈夫です。
まず、Homebrewで依存環境を突っ込んでおきます。
$ brew install autoconf bison git libiconv pkg-config re2c
このへんでいいはずですが、足りないものがありそうなら追加してください。ここでbisonを突っ込んでおくことが重要で、これがないとビルド自体がエラーでこけることがあります。
あと、中途半端に突っ込まれたphpパッケージは削除しておいてください。これがあると要所要所でコンパイルを邪魔してきます。
手元の環境ではre2cがうまく入らなかったので、re2cのソースを https://github.com/skvadrik/re2c/releases/latest からもらってきて、自力コンパイルします。
$ cd re2c-2.x.x
$ ./configure
$ make
$ sudo make install
これで /usr/local/bin/re2c ができあがるはずなので、いよいよPHPのビルドに入っていきます。
git clone https://github.com/php/php-src.git
$ cd php-src
$ ./buildconf
$ export CFLAGS="-g3 -O2 -march=core2 -mtune=core2"
$ export YACC="/usr/local/Cellar/bison/3.x.x/bin/bison"
各種お膳立て。march/mtuneはマシンに応じて。Yet Another C Compilerとしてbisonも指定しましたので、コンフィギュアしていきます。
$ ./configure \
--prefix=/opt/php/ \
--enable-cli \
--enable-exif \
--enable-fpm \
--enable-gd \
--enable-mbstring \
--enable-pdo \
--with-curl \
--with-jpeg \
--with-webp \
--with-iconv=/usr/local/opt/libiconv/
オプションを足す必要がある方はここで足し引きしてください。だいたいの方はこれでいいと思いますが、RDBMS周りは人によると思うので。あとこのオプションは画像扱い周りが多いので。libiconvのプレフィクスはbashだと (brew --prefix libiconv) って書いておけばいいんですが、最近のmacOSのデフォルトのzshだとやり方知らないので直書きです。
$ make -j2 -B
メイクしていきます。ここのjオプションの数字はCPUコア数なので、環境に応じて。
$ sudo make install
できあがったらこれでPHPが /opt/php/(bin|sbin) に突っ込まれるので、あとはパスを通して自力でなんとかしていきましょう。ちなみに、php.ini は /opt/php/lib/ にあるべきっぽいです(最初は存在しなかった)。ここで言いたかったのは要するに、ビルド時にはいにしえのなんだかよく分からない数字を付けるとだいたいなんとかなるという話です。