views:

265

answers:

2

I compiled some PHP extention libs (in C/C++) a while back, on my XP platform. I have now moved the sources to my Ubuntu box, and want to build the libs for use on my Linux box.

However, I have come accross a number of obstacles:

  1. I cant locate phpize (even after installing the php5dev package)
  2. I cant find ext_skel to generate the skeleton script/files

[Edit]

Thanks to Pascal Martin and this question, I have managed to build and test one of my smaller libraries. I just want to double check the contents of my .m4 file (since I am not familiar with the format), before I go ahead with the other libraries.

This is the content of the autogenerated .m4 file - is anyone familiar with the format, and can they explain what it means - this is so that I can be doubly sure that I have uncommented the correct sections of the file.

The contents of the config.m4 file are displayed below in all their gory detail:

dnl $Id$
dnl config.m4 for extension tanlib

dnl Comments in this file start with the string 'dnl'.
dnl Remove where necessary. This file will not work
dnl without editing.

dnl If your extension references something external, use with:

dnl PHP_ARG_WITH(tanlib, for tanlib support,
dnl Make sure that the comment is aligned:
dnl [  --with-tanlib             Include tanlib support])

dnl Otherwise use enable:

PHP_ARG_ENABLE(tanlib, whether to enable tanlib support,
dnl Make sure that the comment is aligned:
[  --enable-tanlib           Enable tanlib support])

if test "$PHP_TANLIB" != "no"; then
  dnl Write more examples of tests here...

  dnl # --with-tanlib -> check with-path
  dnl SEARCH_PATH="/usr/local /usr"     # you might want to change this
  dnl SEARCH_FOR="/include/tanlib.h"  # you most likely want to change this
  dnl if test -r $PHP_TANLIB/$SEARCH_FOR; then # path given as parameter
  dnl   TANLIB_DIR=$PHP_TANLIB
  dnl else # search default path list
  dnl   AC_MSG_CHECKING([for tanlib files in default path])
  dnl   for i in $SEARCH_PATH ; do
  dnl     if test -r $i/$SEARCH_FOR; then
  dnl       TANLIB_DIR=$i
  dnl       AC_MSG_RESULT(found in $i)
  dnl     fi
  dnl   done
  dnl fi
  dnl
  dnl if test -z "$TANLIB_DIR"; then
  dnl   AC_MSG_RESULT([not found])
  dnl   AC_MSG_ERROR([Please reinstall the tanlib distribution])
  dnl fi

  dnl # --with-tanlib -> add include path
  dnl PHP_ADD_INCLUDE($TANLIB_DIR/include)

  dnl # --with-tanlib -> check for lib and symbol presence
  dnl LIBNAME=tanlib # you may want to change this
  dnl LIBSYMBOL=tanlib # you most likely want to change this

  dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
  dnl [
  dnl   PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $TANLIB_DIR/lib, TANLIB_SHARED_LIBADD)
  AC_DEFINE(HAVE_TANLIBLIB,1,[ Whether you have tanlib])
  dnl ],[
  dnl   AC_MSG_ERROR([wrong tanlib lib version or lib not found])
  dnl ],[
  dnl   -L$TANLIB_DIR/lib -lm -ldl
  dnl ])
  dnl
  dnl PHP_SUBST(TANLIB_SHARED_LIBADD)

  PHP_NEW_EXTENSION(tanlib, tanlib.c, $ext_shared)
fi 

Does anyone grok the above?

BTW, the above config.m4 file was generated using Autoconf 2.50 (I have also just seen the documentation here and am slowly digesting it.

+2  A: 

On my Ubuntu computer, phpize is in :

$ which phpize
/usr/bin/phpize


And ext_skel should be in the "ext" directory, in the PHP sources, which you can get by SVN.

Here's the ext directory : http://svn.php.net/viewvc/php/php-src/trunk/ext/
And you can view the content of the script here.

The README.EXT_SKEL is just under trunk/.


If you're more of a git user, there is a mirror of the SVN on github : http://github.com/php/

Pascal MARTIN
Thanks Pascal, your links and another question here on RaC anaged to help me build it. I am almost there now (please see edited question)
Stick it to THE MAN
@Stick it to THE MAN : sorry, but I won't be of any help about the .m4 stuff : I've never actually tried (well, yet ^^ ) developping a PHP extension, and I'm more a PHP developper than a C/C++ developper ^^ ;; good luck, anyway :-)
Pascal MARTIN
A: 

To answer your followup question, dnl is the line comment marker in .m4 files, so those lines aren't doing anything currently. That's probably OK, since they're mostly only relevant if you're using an external library (and by convention using the --with-myextension configure option rather than --enable-myextension).

The above file (as of revision 3) is therefore equivalent to:

PHP_ARG_ENABLE(tanlib, whether to enable tanlib support,
[  --enable-tanlib           Enable tanlib support])

if test "$PHP_TANLIB" != "no"; then
  AC_DEFINE(HAVE_TANLIBLIB,1,[ Whether you have tanlib])  
  PHP_NEW_EXTENSION(tanlib, tanlib.c, $ext_shared)
fi 

So if you do the following in this directory, it should work (I think, I don't have a suitable Linux machine to hand to check this):

phpize
./configure --enable-tanlib
make
make install

Finally, make sure that the extension is enabled in /etc/php5/conf.d.

Remember you'll need to restart apache (sudo /etc/init.d/apache2 restart) to pick up any extension changes.

therefromhere
Thanks, I had already figured this out by myself a little while ago. I did manage to build the extension library - though for some reason, the symbols were not exported (but thats a different problem all together)
Stick it to THE MAN