C コンパイラとして SolarisStudio を指定して、
--enable-opcache でビルドすると、以下のようなログが大量に出てビルドに失敗する。
pkgbuild: "/home/tonaka/packages/BUILD/php-5.5.7/ext/opcache/Optimizer/zend_optimizer.h", line 22: warning: invalid white space character in directive pkgbuild: "/home/tonaka/packages/BUILD/php-5.5.7/ext/opcache/Optimizer/zend_optimizer.h", line 23: warning: invalid white space character in directive
ググったら以下が見つかった。
PHP :: Bug #65207 :: OPCache can't be compiled with SolarisStudio
https://bugs.php.net/bug.php?id=65207
どうやら、いくつかのファイルの改行コードの問題らしい。
5.5.7 の ext/opcache で以下のように確認
$ nkf --guess **/*.[ch] Optimizer/block_pass.c: ASCII (LF) Optimizer/nop_removal.c: ASCII (LF) Optimizer/optimize_temp_vars_5.c: ASCII (LF) Optimizer/pass10.c: ASCII (LF) Optimizer/pass1_5.c: ASCII (LF) Optimizer/pass2.c: ASCII (LF) Optimizer/pass3.c: ASCII (LF) Optimizer/pass5.c: ASCII (LF) Optimizer/pass9.c: ASCII (LF) Optimizer/zend_optimizer.c: ASCII (CRLF) Optimizer/zend_optimizer.h: ASCII (CRLF) Optimizer/zend_optimizer_internal.h: ASCII (CRLF) ZendAccelerator.c: ASCII (LF) ZendAccelerator.h: ASCII (LF) shared_alloc_mmap.c: ASCII (LF) shared_alloc_posix.c: ASCII (LF) shared_alloc_shm.c: ASCII (LF) shared_alloc_win32.c: ASCII (LF) zend_accelerator_blacklist.c: ASCII (LF) zend_accelerator_blacklist.h: ASCII (LF) zend_accelerator_debug.c: ASCII (LF) zend_accelerator_debug.h: ASCII (LF) zend_accelerator_hash.c: ASCII (LF) zend_accelerator_hash.h: ASCII (LF) zend_accelerator_module.c: ASCII (LF) zend_accelerator_module.h: ASCII (LF) zend_accelerator_util_funcs.c: ASCII (LF) zend_accelerator_util_funcs.h: ASCII (LF) zend_persist.c: ASCII (LF) zend_persist.h: ASCII (LF) zend_persist_calc.c: ASCII (LF) zend_shared_alloc.c: ASCII (LF) zend_shared_alloc.h: ASCII (LF)
以下の 3 つのファイルだけ改行コードが CRLF になっていて、
ビルド時に 'warning: invalid white space character in directive' と言われるファイルと一致している。
- ext/opcache/Optimizer/zend_optimizer.c
- ext/opcache/Optimizer/zend_optimizer.h
- ext/opcache/Optimizer/zend_optimizer_internal.h
これらを以下のように改行コードを変えればビルドは通る。
$ for i in ext/opcache/Optimizer/zend_optimizer{.c,.h,_internal.h} do nkf -Lu --overwrite=.bak ${i} done
手元の環境だと、適当な場所で以下のように設定すれば opcache が読み込まれる。
zend_extension=/usr/php/5.5/lib/extensions/no-debug-non-zts-20121212/opcache.so
確認
% /usr/php/5.5/bin/php -v PHP 5.5.7 (cli) (built: Jan 12 2014 14:49:11) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies