Prev / Next

2014-01-12 / PHP 5.5.7 の opcache が SolarisStudio でビルドできない件

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


comments powered by Disqus