This patch adds support for Darwin bundles for the apache2filter
module. I brought up extending apxs to allow building self-contained
libraries on the dev@httpd lists to no answer. Since Darwin is a
special case that requires self-contained libraries (unless using
a flat namespace), I don't think it's necessary to add code to apxs
to always build self-contained libraries - we just need to handle
Darwin specially.
This patch does two things that should only be Darwin specific:
- Call apr-config and apu-config to determine the link information
for the requisite libraries so that they can be self-contained.
- Modifies the libphp4.bundle target to allow linking with libtool.
Since ap{ru}-config *may* print out information requiring libtool
to link (i.e. libexpat.la as a dependency), this makes more sense
to me.
While I was at WWDC last week, I talked to the linker developer
and we tossed around some ideas for handling this bundling problem.
I don't forsee any solution coming in the Jaguar timeframe, but
perhaps something later on. If you are interested in more details,
drop me a line as I don't think the entire PHP community cares
about Darwin. =)
Please let me know if you have any questions or comments. I have
tested this on my platform and it works. -- justin
Index: Makefile.global
===
RCS file: /repository/php4/Makefile.global,v
retrieving revision 1.11
diff -u -r1.11 Makefile.global
--- Makefile.global 28 Apr 2002 03:27:43 - 1.11
+++ Makefile.global 12 May 2002 23:01:21 -
-15,7 +15,7
$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -rpath
$(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS)
$(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $
libs/libphp4.bundle: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
- $(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS)
$(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(EXTRA_LIBS)
$(ZEND_EXTRA_LIBS) -o $ cp $ libs/libphp4.so
+ $(LIBTOOL) --mode=link $(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN)
+$(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
+$(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $ cp $ libs/libphp4.so
php: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
$(LIBTOOL) --mode=link $(CC) -export-dynamic $(COMMON_FLAGS) $(CFLAGS_CLEAN)
$(EXTRA_CFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS)
$(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $
Index: sapi/apache2filter/config.m4
===
RCS file: /repository/php4/sapi/apache2filter/config.m4,v
retrieving revision 1.15
diff -u -r1.15 config.m4
--- sapi/apache2filter/config.m45 May 2002 09:52:39 - 1.15
+++ sapi/apache2filter/config.m412 May 2002 23:01:33 -
-57,7 +57,18
INSTALL_IT=$APXS -i -a -n php4 $SAPI_LIBTOOL
;;
*darwin*)
-MH_BUNDLE_FLAGS=-bundle -bundle_loader $APXS_HTTPD
+dnl When using bundles on Darwin, we must resolve all symbols. However,
+dnl the linker does not recursively look at the bundle loader and
+dnl pull in its dependencies. Therefore, we must pull in the APR
+dnl and APR-util libraries.
+APXS_BINDIR=`$APXS -q BINDIR`
+if test -f $APXS_BINDIR/apr-config; then
+MH_BUNDLE_FLAGS=`$APXS_BINDIR/apr-config --ldflags --link-ld --libs`
+fi
+if test -f $APXS_BINDIR/apu-config; then
+MH_BUNDLE_FLAGS=`$APXS_BINDIR/apu-config --ldflags --link-ld --libs`
+$MH_BUNDLE_FLAGS
+fi
+MH_BUNDLE_FLAGS=-bundle -bundle_loader $APXS_HTTPD $MH_BUNDLE_FLAGS
PHP_SUBST(MH_BUNDLE_FLAGS)
PHP_SELECT_SAPI(apache2filter, bundle, sapi_apache2.c apache_config.c
php_functions.c)
SAPI_SHARED=libs/libphp4.so
--
PHP Development Mailing List http://www.php.net/
To unsubscribe, visit: http://www.php.net/unsub.php