Newbie: issues developing a new extension

From: Date: Tue, 28 Feb 2012 21:25:16 +0000
Subject: Newbie: issues developing a new extension
Groups: php.internals 
Request: Send a blank email to internals+get-58278@lists.php.net to get a copy of this message
Dear all, I'm asking your help because I'm not able to solve an issue probably related to some foolish mistake I have not yet discovered. I'm trying to develop an experimental extension to interface LIXA library (http:/lixa.sourceforge.net/). I have created the basic stuff (config.m4, lixa.c, php_lixa.h and so on). If I use this sequence from the ext/lixa directory: /opt/php/bin/phpize ./configure --help I can see the lixa extension is available: [...] Optional Packages:   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)   --with-libdir=NAME      Look for libraries in .../NAME rather than .../lib   --with-php-config=PATH  Path to php-config php-config   --with-lixa=FILE        Include LIXA support. File is the path to lixa-config [...] and I can compile with: ./configure --with-lixa=/opt/lixa/bin/lixa-config --with-php-config=/opt/php/bin/php-config the build process runs as expected and the extension is available after an addition to php.ini (extension=[...]/ext/lixa/modules/lixa.so). If I use this sequence from the PHP root directory: ./buildconf --force as described here: talks.somabo.de/200510_zend_conf_php_extension_development.pdf I cannot see "lixa" as an available option of my configure: ./configure --help|grep lixa is empty. If I try to build PHP anyway, I obtain: tiian@mojan:~/src/swig/php5.4-201202241630$ ./configure --with-lixa=/opt/lixa/bin/lixa-config configure: WARNING: unrecognized options: --with-lixa that's a reasonable result because "lixa" extension does not appear in configure help. It seems the global "configure" does not recognize my extension. Here's the config.m4 I have built in the last trials: dnl config.m4 start PHP_ARG_WITH(lixa, for LIXA support, [  --with-lixa=FILE        Include LIXA support. File is the path to lixa-config program]) if test "$PHP_LIXA" != "no"; then         LIXA_CONFIG=$PHP_LIXA         dnl --with-lixa -> SWIG is a pre-requisite         AC_CHECK_PROGS(SWIG, [swig], [])         if test -z $SWIG         then                 AC_MSG_ERROR([cannot find swig program])         fi         dnl use lixa-config to determine LIXA include dir         AC_MSG_CHECKING([for LIXA using $LIXA_CONFIG])         LIXA_INCLUDE="$($LIXA_CONFIG --include-dir)"         if test -r "$LIXA_INCLUDE/tx.h"         then                 AC_MSG_RESULT(found tx.h in $LIXA_INCLUDE)                 LIXA_DIR="$($PHP_LIXA --prefix)"         fi           if test -z "$LIXA_DIR"         then                 AC_MSG_RESULT([not found])                 AC_MSG_ERROR([Please specify a valid lixa-config utility program or reinstall the LIXA distribution])         fi         dnl # --with-lixa -> add include path         PHP_ADD_INCLUDE($($LIXA_CONFIG --include-dir))         AC_MSG_CHECKING([if LIXA is compiled with PostgreSQL support])         tmp=$($LIXA_CONFIG --include-dir-postgresql 2>/dev/null)         if test $? -eq 0         then                 PHP_ADD_INCLUDE($tmp)                 HAVE_LIXA_POSTGRESQL=1                 AC_DEFINE([HAVE_LIXA_POSTGRESQL], [1], [Define to 1 if LIXA is compiled with PostgreSQL support])                 AC_MSG_RESULT([yes])         else                 HAVE_LIXA_POSTGRESQL=0                 AC_MSG_RESULT([no])         fi         AC_MSG_CHECKING([if LIXA is compiled with MySQL support])         tmp=$($LIXA_CONFIG --include-dir-mysql 2>/dev/null)         if test $? -eq 0         then                 PHP_ADD_INCLUDE($tmp)                 HAVE_LIXA_MYSQL=1                 AC_DEFINE([HAVE_LIXA_MYSQL], [1], [Define to 1 if LIXA is compiled with MySQL support])                 AC_MSG_RESULT([yes])         else                 HAVE_LIXA_MYSQL=0                 AC_MSG_RESULT([no])         fi         dnl # --with-lixa -> dynamically generate lixa.i interface file for SWIG         LIXA_INTERFACE="lixa.i"         AC_MSG_NOTICE([Producing file $LIXA_INTERFACE dynamically...])         echo "%module lixa" > $LIXA_INTERFACE         echo "%{" >> $LIXA_INTERFACE         echo "#include \"tx.h\"" >> $LIXA_INTERFACE         if test $HAVE_LIXA_POSTGRESQL -eq 1         then                 echo "#include \"lixapq.h\"" >> $LIXA_INTERFACE         fi              if test $HAVE_LIXA_MYSQL -eq 1         then                 echo "#include \"lixamy.h\"" >> $LIXA_INTERFACE         fi              echo "%}" >> $LIXA_INTERFACE         echo "%include \"tx.h\"" >> $LIXA_INTERFACE         if test $HAVE_LIXA_POSTGRESQL -eq 1         then                 echo "%include \"lixapq.h\"" >> $LIXA_INTERFACE         fi              if test $HAVE_LIXA_MYSQL -eq 1         then                 echo "%include \"lixamy.h\"" >> $LIXA_INTERFACE         fi         dnl # --with-lixa -> building LIXA interface using SWIG         AC_MSG_CHECKING([if LIXA wrapper can be created with SWIG])         $SWIG -php -I$LIXA_INCLUDE -o lixa.c $LIXA_INTERFACE         if test $? -eq 0         then                 AC_MSG_RESULT([yes])         else                 AC_MSG_ERROR([unable to create LIXA php wrapper using SWIG])         fi         dnl # --with-lixa -> check for lib and symbol presence         LIBNAME=lixac # you may want to change this         LIBSYMBOL=tx_open # you most likely want to change this         PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,         [                 PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $($PHP_LIXA --lib-dir), LIXA_SHARED_LIBADD)                 AC_DEFINE(HAVE_LIXALIB,1,[ ])         ],[                 AC_MSG_ERROR([wrong lixac lib version or lib not found])         ],[                 $($PHP_LIXA --libs)         ])         dnl         AC_DEFINE(HAVE_LIXA, 1, [Whether you have LIXA])         PHP_SUBST(LIXA_SHARED_LIBADD)         PHP_NEW_EXTENSION(lixa, lixa.c, $ext_shared) fi dnl config.m4 end I did the same with a simpler test extension named "sample" with a trivial config.m4: PHP_ARG_ENABLE(sample,         [Whether to enable the "sample" extension],         [  --enable-sample       Enable "sample" extension support]) if test $PHP_SAMPLE != "no"; then         PHP_SUBST(SAMPLE_SHARED_LIBADD)         PHP_NEW_EXTENSION(sample,sample.c,$ext_shared) fi but I've obtained the same result. Any hint will be very useful. Thanks in advance. Ch.F.

« previous php.internals (#58278) next »