# Newbie: issues developing a new extension

- Thread: https://externals.io/message/58278
- Original archive: https://news-web.php.net/php.internals/58278
- Started by Christian Ferrari on 2012-02-28T21:25:16+00:00
- Messages: 10
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #58278 — Christian Ferrari — 2012-02-28T21:25:16+00:00

URL: https://externals.io/message/58278#58278

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.

---

## #58289 — Rasmus Lerdorf — 2012-02-28T22:00:25+00:00

URL: https://externals.io/message/58278#58289 · In reply to: #58278

> 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).

Great, you are done. Why do you want to go any further than this? You
built your extension and it is available from PHP exactly like any pecl
extension.

-Rasmus

---

## #58291 — Paul Dragoonis — 2012-02-28T22:04:44+00:00

URL: https://externals.io/message/58278#58291 · In reply to: #58289

> 
> > […]
> related to some foolish mistake I have not yet discovered.
> > […]
> library (http:/lixa.sourceforge.net/).
> > […]
> .../lib
> > […]
> lixa-config
> > […]
> --with-php-config=/opt/php/bin/php-config
> > […]
> an addition to php.ini (extension=[...]/ext/lixa/modules/lixa.so).
>
> Great, you are done. Why do you want to go any further than this? You
> built your extension and it is available from PHP exactly like any pecl
> extension.
>

and if you're using apache, reboot it and check your `phpinfo()` page for
your extension.
if you're connected up via the command line you can run "php -m" to see if
your modules exists.


>
> -Rasmus

---

## #58321 — Christian Ferrari — 2012-02-29T07:50:33+00:00

URL: https://externals.io/message/58278#58321 · In reply to: #58291

> > […]

> > […]
> probably
> > […]
> on).
> > […]
> --with-PACKAGE=no)
> > […]
> after
> > […]
> 
> and if you're using apache, reboot it and check your `phpinfo()` page for
> your extension.
> if you're connected up via the command line you can run "php -m" 
> to see if
> your modules exists.
> 
> 
> > […]

Dear all,
I would like to see my extension as any other extension, like MySQL, PostgreSQL, Oracle and so on because:
1. LIXA itself is useless without those resource managers
2. I need to patch other extensions to implement the interfaces between LIXA and MySQL/PostgreSQL/Oracle.
What's the difference between an "internal" extension (like 
MySQL/PostgreSQL/Oracle) and an "external" extension as the one I 
produced?
Thanks in advance, your help is precious.
Ch.F.

---

## #58322 — Hannes Magnusson — 2012-02-29T07:59:02+00:00

URL: https://externals.io/message/58278#58322 · In reply to: #58321

> > […]
>
> > […]
>
> Dear all,
> I would like to see my extension as any other extension, like MySQL, PostgreSQL, Oracle and so on because:
> 1. LIXA itself is useless without those resource managers
> 2. I need to patch other extensions to implement the interfaces between LIXA and MySQL/PostgreSQL/Oracle.
> What's the difference between an "internal" extension (like
> MySQL/PostgreSQL/Oracle) and an "external" extension as the one I
> produced?
> Thanks in advance, your help is precious.


The PHP source archive bundles several extensions under the ext/
directory, these are the extensions are listed when you run
./configure --help

I don't understand why you want your extension to show up there, but
to do so you have to place your extension in that folder and run
./buildconf --force
PHP will not automatically scan your filesystem for possible extension
directories to list them under ./configure
I'm sure you have seen, and used, http://pecl.php.net - these
extensions don't show up when you build PHP.

The standard way to build "external" extensions however is to use
pecl, or manually build them as shared modules (as you did first).


-Hannes

---

## #58323 — Christian Ferrari — 2012-02-29T08:04:33+00:00

URL: https://externals.io/message/58278#58323 · In reply to: #58322

> > […]

> > […]
> issue
> > […]
> interface LIXA
> > […]
> and so
> > […]
> rather than
> > […]
> path to
> > […]
> available
> > […]
> You
> > […]
> pecl
> > […]
> for
> > […]
> -m"
> > […]
> PostgreSQL, Oracle and so on because:
> > […]
> LIXA and MySQL/PostgreSQL/Oracle.
> > […]
> 
> 
> The PHP source archive bundles several extensions under the ext/
> directory, these are the extensions are listed when you run
> ./configure --help
> 
> I don't understand why you want your extension to show up there, but
> to do so you have to place your extension in that folder and run
> ./buildconf --force
> PHP will not automatically scan your filesystem for possible extension
> directories to list them under ./configure
> I'm sure you have seen, and used, http://pecl.php.net - these
> extensions don't show up when you build PHP.
> 
> The standard way to build "external" extensions however is to use
> pecl, or manually build them as shared modules (as you did first).
> 
> 
> -Hannes
>

That's the point: I tryed
./buildconf --help
but it didn't include my extension.

This is an excerpt from my initial post:

> 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

Do you have any idea how to debug why "buildconf --force" does not pick-up my extension?

Thanks in advance
Ch.F.

---

## #58331 — Christian Ferrari — 2012-02-29T09:47:43+00:00

URL: https://externals.io/message/58278#58331 · In reply to: #58323

> > […]

> 
> > […]
> solve an 
> > […]
> php_lixa.h 
> > […]
> 
> > […]
> the 
> > […]
> (extension=[...]/ext/lixa/modules/lixa.so).
> > […]
> this? 
> > […]
> like any 
> > […]
> page 
> > […]
> "php 
> > […]
> between 
> > […]
> (like
> > […]
> one I
> > […]
> 
> That's the point: I tryed
> ./buildconf --help

Sorry, this is a typo, the right one is:
./buildconf --force

> but it didn't include my extension.
> 
> This is an excerpt from my initial post:
> 
> > […]
> 
> > […]
> talks.somabo.de/200510_zend_conf_php_extension_development.pdf
> 
> > […]
> 
> > […]
> 
> > […]
> 
> > […]
> --with-lixa=/opt/lixa/bin/lixa-config 
> > […]
> 
> Do you have any idea how to debug why "buildconf --force" does not 
> pick-up my extension?
 
 Thanks in advance
 Ch.F.

---

## #58332 — jpauli — 2012-02-29T09:52:00+00:00

URL: https://externals.io/message/58278#58332 · In reply to: #58331

On Wed, Feb 29, 2012 at 10:47 AM, Christian Ferrari <camauz@yahoo.com>wrote:

> > […]
>
> > […]
>
> Sorry, this is a typo, the right one is:
> ./buildconf --force
>
> > […]
>

You should rm -f configure manually before invoking buildconf --force. It
wont overwrite configure by itself.

Julien.P



>
>  Thanks in advance
>  Ch.F.

---

## #58350 — Christian Ferrari — 2012-02-29T21:06:52+00:00

URL: https://externals.io/message/58278#58350 · In reply to: #58332

> > […]

> > […]
> able to
> > […]
> discovered.
> > […]
> extension to
> > […]
> lixa.c,
> > […]
> directory:
> > […]
> [ARG=yes]
> > […]
> (same as
> > […]
> in .../NAME
> > […]
> php-config
> > […]
> support. File is
> > […]
> --with-lixa=/opt/lixa/bin/lixa-config
> > […]
> extension is
> > […]
> further than
> > […]
> exactly
> > […]
> `phpinfo()`
> > […]
> run
> > […]
> like MySQL,
> > […]
> interfaces
> > […]
> extension
> > […]
> extension as the
> > […]
> there, but
> > […]
> extension
> > […]
> is to use
> > […]
> first).
> > […]
> configure:
> > […]
> does not
> > […]
> 
> You should rm -f configure manually before invoking buildconf --force. It
> wont overwrite configure by itself.
> 
> Julien.P
> 

Dear Julien,
your suggestion is precious but unfortunately some more files must be deleted.
After a bit of hacking I've found out this working sequence:

tiian@mojan:~/php5.4-201202241630$ rm configure autom4te.cache/*
tiian@mojan:~/php5.4-201202241630$ ./buildconf --force
Forcing buildconf
rebuilding configure
rebuilding main/php_config.h.in
tiian@mojan:~/php5.4-201202241630$ ./configure --help|grep lixa
  --with-lixa=FILE        Include LIXA support. File is the path to lixa-config program

Thanks again for your needful help!
Regards
Ch.F.

---

## #58405 — jpauli — 2012-03-01T10:08:11+00:00

URL: https://externals.io/message/58278#58405 · In reply to: #58350

On Wed, Feb 29, 2012 at 10:06 PM, Christian Ferrari <camauz@yahoo.com>wrote:

> > […]
>
> > […]
>
> Dear Julien,
> your suggestion is precious but unfortunately some more files must be
> deleted.
> After a bit of hacking I've found out this working sequence:
>
> tiian@mojan:~/php5.4-201202241630$ rm configure autom4te.cache/*
>

Yes I forgot about those, but your are right :)

Autotools are little complicated when you want to dive into them.

One may read
http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool
or
paper http://shop.oreilly.com/product/9781593272067.do for deeper help and
understanding :)

Julien.P


> tiian@mojan:~/php5.4-201202241630$ ./buildconf --force
> Forcing buildconf
> rebuilding configure
> rebuilding main/php_config.h.in
> tiian@mojan:~/php5.4-201202241630$ ./configure --help|grep lixa
>   --with-lixa=FILE        Include LIXA support. File is the path to
> lixa-config program
>
> Thanks again for your needful help!
> Regards
> Ch.F.
