[mapserver-dev] PHP4 + Swig

Alex Rice alex_rice at arc.to
Thu Aug 15 16:42:06 EDT 2002

On Thursday, August 15, 2002, at 02:06  PM, Daniel Morissette wrote:
>> I had SWIG 1.3+PHP in my hit list for quite a while, but it 
>> keeps being
>> pushed back.  I wouldn't expect things to work right out of the 
>> box with
>> SWIG since PHP support is very new, but I would be interested in 
>> hearing
>> your mileage with SWIG+PHP... perhaps you could send your feedback on
>> this via the mapserver-dev list where I think this type of low-level
>> discussion belongs more.

Using Swig 1.3.13 and mapscript.i, I was able to get a PHP 
extension to compile on PHP 4.2.2 (meaning all the Swig-created 
functions compiled and php -m reported a "mapscript" extension) 
This is not a dynamically loadable .so extension, it's a built in 
extension-- since on OS X PHP doesn't have dynamic extensions for 
PHP. Still don't know why that is.

I did not even try calling and of the mapscript functions because 
I got stuck linking the ten or so libraries my libmap.a 
references... gd, ttf, png, etc. etc. That's going to be tricky. 
It involves making a sufficiently smart config.4 which the PHP 
configuration machinery will use get the appropriate -L and -l 
switches. There are macros for all that and there are lots of 
examples in PHP's ext/ directory. But currently I think once 
could build a PHP mapscript using Swig, if one didn't have a lit 
of junk linked in libmap.a.

Basically the process I was using is this, if anyone else wants 
to compare notes. And also so I don't forget myself how I did it.

o  Create an empty php4/ subfolder in your mapscript source.
# cd mapserver-src/mapscript
# mkdir php4

o  Copy mapscript.i into there, or symlink it into there.
# cd php4
# ln -s ../mapscript.i mapscript.i

o  Swig mapscript.i.
  # swig  -php -shadow mapscript.i
(warning requires Swig 1.3.x from www.swig.org, compiled with 
PHP4 support)
(note - I gave up on swig's -phpfull option because PHP 4.2.2 
seems to want different files)

o Now in PHP 4 source tree create a new extension skeleton.
# cd ext
# ./ext_skel --extname=mapscript

o Edit the ext/mapscript/config.m4.

	- Uncomment the line that says --with-mapscript.

	- Add macros for your include path (relative to the .h files 
which SWIG generated,  e.g. "../../map.h", and add other required 
libraries to the linking process.

	- Other extensions typically use this space for checking if 
supporing stuff is existing, and if library versions are OK. See 
for example ext/ming for a simple one that deals with one 
external library to link with.

o Copy swig-generated files over from your mapscript folder to 
php-src/ext/mapscript. Rename mapscript_wrap.c to mapscript.c.

o In PHP 4 source tree do, reconfigure and rebuilt. (buildconf 
requires libtool 1.4)

# ./buildconf
# ./configure --with-mapscript --etc...
# make

Alex Rice, Software Developer
Architectural Research Consultants, Inc.
alex_rice at arc.to
alrice at swcp.com

More information about the mapserver-dev mailing list