てきとうなさいと べぇたばん

PHP 7.4のコンパイルで詰まった

PHP 7.4-alpha3。うまくうごいた。

PHP 7.4.0のコンパイル

PHP 7.4のコンパイルをしようと思ったら、結構ハマったというほどには変わったので変わったところをつらつらと。バージョンは7.4.0alpha3(beta1がでてる)。OSはMac。

結論としては、コンパイルオプションとビルドのコマンドは以下の通り。

$ ./buildconf --force && ./configure --enable-debug --enable-mbstring --enable-intl && make

最初、configureを動かすと、こういうエラーが出てきた。

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.

brew install icu4cをしたらこういう表示がでた

icu4c is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).

If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

この表示の通り、PKG_CONFIG_PATHを設定した。keg-onlyではシンボリックリンクがはられないので、icu4cには必要のようだ。

export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

またしてもエラーが出た。今度はoniguruma(鬼車)のライブラリ。同梱されていたのが7.4で外部のライブラリを使うようになったからだと思う

checking for oniguruma... no
configure: error: Package requirements (oniguruma) were not met:

No package 'oniguruma' 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 ONIG_CFLAGS
and ONIG_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

鬼車をインストール

$ brew install oniguruma
checking whether to enable vld support... no
./configure: line 78971: syntax error near unexpected token `vld,'
./configure: line 78971: `  PHP_EXTENSION(vld, $ext_shared)'

なんでvldがこけるんだ?しかもnoだぞと思って、--enable-vldしたりとか、他のオプションを削ったりとかいろいろ調べたら、他のバージョンでいろいろやってたのが残ってた

tekimennoMacBook-Pro-3:php-src tekimen$ git status
On branch php-7.4.0alpha3
Untracked files:
  (use "git add ..." to include in what will be committed)

	.DS_Store
	:memory;
	TSRM/tsrm_config.h
	bcmath.php
	bug_77297.php
	bug_77589.php
	buildmk.stamp
	collator.php
	ext/.DS_Store
	ext/hello_world/
	ext/mbstring/oniguruma/
	ext/vld/
	generated_lists
	heisei.php
	install-sh
	memory;
	missing
	mkinstalldirs
	msg.txt
	new_era_of_japan.php
	php7.spec
	run_002_tmp.fixture
	strcmp_sushi_beer.php
	tags
	test_php73_rc5_bug.php
	test_wrong_params.php

これはext/vldを消せば解決した。

$ rm -rf ext/vld

これでPHP7.4が動いた!

$ sapi/cli/php  -v
PHP 7.4.0alpha3 (cli) (built: Jul 17 2019 18:02:06) ( NTS DEBUG )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies

PKG_CONFIG_PATHは、1つしか設定できないのだろうかと思って調べた。

Macでビルドができないというのはないはずだし、テストしてるはずだからそれを調べたら、php-srcではPKG_CONFIG_PATHを複数指定してた https://github.com/php/php-src/blob/PHP-7.4/azure/macos/job.yml