2009年6月8日月曜日

cmake で swig と php5 (2)

こちらの続きです。Ubuntu のタグがはってありますが、特に Ubuntu に特化した内容ではありません。
参考URLから、FindPHP5.cmake を生成します。テキストを切り出して php5.diff にしたと仮定
$ patch -p1 < php5.diff

こいつを、CMake の /share/CMake/Modules/ 下にコピーします。cmake のバージョンが上がると、標準のモジュールとして取り込まれているかもしれません。
CMakeLists.txt 中での使い方は
FIND_PACKAGE (PHP5)
######################################################
# Manual set for PHP5
######################################################
#SET (PHP5_INCLUDE_PATH "/usr/include/php5")
#SET (PHP5_EXECUTABLE "/usr/bin/php5")
IF (NOT PHP5FOUND)
MESSAGE ("---------------------------------------")
MESSAGE ("          !!! FATAL ERROR !!!          ")
MESSAGE ("---------------------------------------")
MESSAGE (FATAL_ERROR "PHP5 does not found.")
ENDIF (NOT PHP5FOUND)



FIND_PACKAGE (SWIG REQUIRED)

INCLUDE (${SWIG_USE_FILE})



SET (CMAKE_SWIG_FLAGS "")

SET_SOURCE_FILES_PROPERTIES (hoge.i PROPERTIES CPLUSPLUS ON)

SWIG_ADD_MODULE(hoge php5 hoge.i hoge.cpp fuga.cpp)



INCLUDE_DIRECTORIES (${PHP5_INCLUDE_DIR} ${PHP5_MAIN_INCLUDE_DIR}
${PHP5_TSRM_INCLUDE_DIR} ${PHP5_ZEND_INCLUDE_DIR} ${PHP5_REGEX_INCLUDE_DIR}
${PHP5_EXT_INCLUDE_DIR} ${PHP5_DATE_INCLUDE_DIR} ${PHP5_STANDARD_INCLUDE_DIR}
${INCLUDE_DIRECTORIES})





などとして、
$ cmake . -DCMAKE_BUILD_TYPE=Release

ビルドをすると、"hoge.php" と "hoge.so" が生成されます。
あとは、runme.php を
<?php
require "hoge.php";

$hoge = new fuga();
$hoge->bar();
?>

という感じで使えます。

ここからは、Ubuntu 固有かもしれません。
/etc/php5/conf.d/hoge.ini を
# configuration for hoge module
extension=hoge.so

としてやり、
/usr/lib/php5/20060613
の下に、hoge.so をコピーしました。なんかしらんけど、こんなんでコマンド・プロンプトからは動きました。

追記:CentOS 5.2 では、swig のバージョンが古くてコンパイルできません。rpmforge の swig は、輪をかけて古いです。という事で、本家からソースをダウンロードして
$ ./configure --prefix=/usr
$ make install

しました。
追記:CentOS 5.2 では、hoge.so を /usr/lib64/php/modules 下にコピーすればOKでした。i386 環境では、/usr/lib/php/modules だと推測されます。

0 件のコメント: