Efforts to bring
PHP to Cygwin have waxed and waned over the years. One of the big problems, at least with PHP5, was dealing with shared extensions, as discussed last year in
this thread. Unfortunately the sources mentioned there are no longer available, so unfortunately I didn't even have that to start with.
PHP consists of multiple interpreters (called SAPIs) which serve different purposes, e.g. a command-line interface, a CGI interface, Apache modules, etc., together with dozens of extensions written in C, which can either be built in to the interpreter or can exist as loadable modules. Additional C extensions are also available on
PECL, which must be built as shared modules, as they are installed after building the runtime.
PHP extensions require symbols that would normally be (on Linux) in the interpreters, but that doesn't work for Cygwin because all symbols must be resolved at link time. But if an extension is linked against one SAPI but loaded by another, a segfault will result.
The solution is, as is done with MSVC, is to build almost all the core sources into a shared library, then link the SAPIs (with just their SAPI-specific code) and the extensions against the library. Implementing this within the autotool framework took a lot of work to get right, but it looks promising so far: both the CLI and CGI load all the modules, PECL extensions can be built, and even better,
PHP-GTK is working.
This solution does require a few minor changes to the build procedure for PECL extensions, hence I've added
php.cygclass to cygport for this purpose; in most cases, a one-liner 'inherit php' is enough.
PHP, PHP-GTK, and several other sample PECL extensions are now in
CVS; the PHP .cygport is heavily commented, which should help make sense of what was needed to make this work, for those who are interested. PHP, with separate packages for each of the standard extensions, as well as PHP-GTK, will be available in binary form with the next upload.
BTW, at this point I have no intention of packaging PEAR (pure PHP extension) libraries, as they require no compilation; instead, just install php-pear and install them as on any other platform.
If anyone is running Apache, then I would like to hear if those SAPIs are working; please post a comment below or to the mailing list.
Enjoy!