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 -0000      1.11
+++ Makefile.global     12 May 2002 23:01:21 -0000
@@ -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.m4        5 May 2002 09:52:39 -0000       1.15
+++ sapi/apache2filter/config.m4        12 May 2002 23:01:33 -0000
@@ -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

Reply via email to