PHP5.3.28のコンパイルに失敗する
PHP5.3.28をソースからコンパイルしようとしたらmake中にこんなエラーが発生して、コンパイルに失敗しました。
昔、PHP5.4.18のコンパイルに失敗してこんな記事を投稿していて、PHP 5.3.28でも同じエラーになったのかなと思いきやどうも様子が違う様子。PHPのbugsを調べてみると同じエラーに当った人がいて、チケットを上げている人がいた。
Bug #64503 Compilation fails with error: conflicting types for 'zendparse'
一旦解決したように見えてるけど、途中から再度チケットが再開されている。しかしコメントを見てると「PHP5.3系はもうセキュリティ修正しか対応しないよ。もうしらんがな(´・ω・`)」みたいな話も流れている状態で、結局現時点では解決はしていない。どーすっかなと他のチケットを見てみた。
Bug #65685 PHP 5.3 git fails to compile with ZTS
こちらも同じバグの報告。「ZTS有効にしたら関数に矛盾が出てるよ」という報告なんだけど、返信が「古いbison使ってよ」→「おk」で終わってて結局解決していない。ちなみに今回うちでエラーが出ているのはCentOS6.5の環境なので、CentOS5系等の古い環境ならエラーが発生しないのかもしれない。
結局、解決策がなくて自分で修正するしかない状態になった。まぁプロトタイプ宣言が矛盾しているだけなので、どちらかの宣言に合わせればいいだろうと思ったんだけど、いったいどっちに合わせれば正解なのかはちょっとわかんない。そんな中、中国語だけどこんなサイトが引っかかった。
/root/php-5.3.28/Zend/zend_language_parser.h:317: 错误:与‘zendparse’类型冲突
残念ながら文書は読んでも分からんが、修正したコードが載っていたので、こちらを参考にしてうちも修正させてもらった。diffはこんな感じ。
元のサイトでもっと大雑把に修正してたけど、なんとなくZTSの定義も見るようにしてみた。正しいかは謎。とりあえずこれでコンパイルが通るようになりました。実際phpがちゃんと動くかまではまだちゃんと確認してないけど、php -iとかphp -vとかは動くので大丈夫なんじゃないかな(適当)。正常に動かなかったら、また追記するようにします。