Carlo Florendo wrote:

> The thing is, libs/libphp4.so does not exist but only libs/libpp4.a
> 
> I remember someone saying before that there is a problem in libtool.
> However, I don't quite understand how libtool works.
> 
> Here's what the make warning says:
> 
> libtool: link: warning: undefined symbols not allowed in i686-pc-cygwin
> shared libraries

Usually that means you have to add -W,l,-no-undefined to the link
command line.

You also have to patch a few in the build system to compensate for some
other braindead issues, such as the fact that it assumes that binaries
have no extension and that shared objects are named .so.  Naming the
shared objects .so is fine if you only plan to dlopen() them, but if you
want full PHP functionality (such as a working CLI) you need them named
.DLL.

The attached patch does this in a rather crude way... it skips using
libtool, which is ugly, but at the time when I was looking at this it at
least got me past the build problems.  You can build most PHP modules
dynamically with this (or at least, you could last time I checked) but
some of them would segfault when loaded.  There's also a serious problem
with image addresses, and I remember having to manually rebase the php
modules to a certain range to get the server to start.

This was with Apache 1.x, no clue if it will work for 2.x.  No
guarantees that there hasn't been bitrot since I last looked at this.

Brian
--- ./acinclude.m4      2005/04/13 01:27:14     1.1
+++ ./acinclude.m4      2005/04/13 02:47:02
@@ -1,4 +1,4 @@
-dnl $Id: acinclude.m4,v 1.1 2005/04/13 01:27:14 brian Exp $ -*- autoconf -*-
+dnl $Id: acinclude.m4,v 1.1 2005/04/13 01:27:14 brian Exp brian $ -*- autoconf 
-*-
 dnl
 dnl This file contains local autoconf functions.
 
@@ -293,13 +293,23 @@
 AC_DEFUN([PHP_SHLIB_SUFFIX_NAME],[
   AC_REQUIRE([PHP_CANONICAL_HOST])dnl
   PHP_SUBST(SHLIB_SUFFIX_NAME)
-  SHLIB_SUFFIX_NAME=so
+  PHP_SUBST(BIN_EXT)
   case $host_alias in
   *hpux*[)]
        SHLIB_SUFFIX_NAME=sl
+       BIN_EXT=
        ;;
   *darwin*[)]
        SHLIB_SUFFIX_NAME=dylib
+       BIN_EXT=
+       ;;
+  *cygwin*[)]
+       SHLIB_SUFFIX_NAME=dll.a
+       BIN_EXT=.exe
+       ;;
+  *[)]
+       SHLIB_SUFFIX_NAME=so
+       BIN_EXT=
        ;;
   esac
 ])
@@ -748,7 +758,15 @@
 dnl
 AC_DEFUN([PHP_BUILD_SHARED],[
   PHP_BUILD_PROGRAM
-  OVERALL_TARGET=libphp4.la
+  case $host_alias in  
+  *cygwin*[)]
+       OVERALL_TARGET=cygphp4.dll
+       ;;
+  *[)]
+       OVERALL_TARGET=libphp4.la
+       ;;
+  esac
+  
   php_build_target=shared
   
   php_c_pre=$shared_c_pre
@@ -765,7 +783,14 @@
 dnl
 AC_DEFUN([PHP_BUILD_STATIC],[
   PHP_BUILD_PROGRAM
-  OVERALL_TARGET=libphp4.la
+  case $host_alias in
+  *cygwin*[)]
+       OVERALL_TARGET=cygphp4.dll
+       ;;
+  *[)]
+       OVERALL_TARGET=libphp4.la
+       ;;
+  esac
   php_build_target=static
 ])
 
@@ -1186,6 +1211,10 @@
       suffix=so
       link_cmd='ifelse($4,,[$(CC)],[$(CXX)]) -dynamic -flat_namespace -bundle 
-undefined suppress $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) 
-o [$]@ $(EXTRA_LDFLAGS) $($2) $(translit($1,a-z_-,A-Z__)_SHARED_LIBADD)'
       ;;
+    *cygwin*[)]
+      suffix=dll
+      link_cmd='ifelse($4,,[$(CC)],[$(CXX)]) -shared $(CFLAGS_CLEAN) 
$(EXTRA_CFLAGS) $(LDFLAGS) -o [$]@ $(EXTRA_LDFLAGS) $($2) 
$(translit($1,a-z_-,A-Z__)_SHARED_LIBADD) -L$(phptempdir) -lphp4'
+      ;;
     *[)]
       suffix=la
       link_cmd='$(LIBTOOL) --mode=link ifelse($4,,[$(CC)],[$(CXX)]) 
$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o [$]@ 
-export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) 
$(EXTRA_LDFLAGS) $($2) $(translit($1,a-z_-,A-Z__)_SHARED_LIBADD)'
--- ./ext/gd/config.m4  2005/04/13 01:27:50     1.1
+++ ./ext/gd/config.m4  2005/04/13 01:29:48
@@ -111,6 +111,7 @@
   if test "$PHP_XPM_DIR" != "no"; then
 
     for i in $PHP_XPM_DIR /usr/local /usr/X11R6 /usr; do
+      test -f $i/lib/noX/libXpm.$SHLIB_SUFFIX_NAME -o -f $i/lib/noX/libXpm.a 
&& GD_XPM_DIR=$i && GD_XPM_NOX=1 && break
       test -f $i/lib/libXpm.$SHLIB_SUFFIX_NAME -o -f $i/lib/libXpm.a && 
GD_XPM_DIR=$i && break
     done
 
@@ -119,23 +120,36 @@
     fi
 
     for i in include include/X11; do
-      test -f $GD_XPM_DIR/$i/xpm.h && GD_XPM_INC=$GD_XPM_DIR/include
+      test -n "$GD_XPM_NOX" -a -f $GD_XPM_DIR/$i/noX/xpm.h && 
GD_XPM_INC=$GD_XPM_DIR/$i/noX
+      test -f $GD_XPM_DIR/$i/xpm.h && GD_XPM_INC=$GD_XPM_DIR/$i
     done
 
     if test -z "$GD_XPM_INC"; then
       AC_MSG_ERROR([xpm.h not found.])
     fi
 
-    PHP_CHECK_LIBRARY(Xpm,XpmFreeXpmImage, 
-    [
-      PHP_ADD_INCLUDE($GD_XPM_INC)
-      PHP_ADD_LIBRARY_WITH_PATH(Xpm, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
-      PHP_ADD_LIBRARY_WITH_PATH(X11, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
-    ],[
-      AC_MSG_ERROR([Problem with libXpm.(a|so) or libX11.(a|so). Please check 
config.log for more information.]) 
-    ],[
-      -L$GD_XPM_DIR/lib -lX11
-    ])
+    if test -n "$GD_XPM_NOX"; then
+      PHP_CHECK_LIBRARY(Xpm,XpmFreeXpmImage, 
+      [
+          PHP_ADD_INCLUDE($GD_XPM_INC)
+          PHP_ADD_LIBRARY_WITH_PATH(Xpm, $GD_XPM_DIR/lib/noX, GD_SHARED_LIBADD)
+      ],[
+        AC_MSG_ERROR([Problem with libXpm.(a|so) or libX11.(a|so). Please 
check config.log for more information.]) 
+      ],[
+        -L$GD_XPM_DIR/lib/noX
+      ])
+    else
+      PHP_CHECK_LIBRARY(Xpm,XpmFreeXpmImage, 
+      [
+          PHP_ADD_INCLUDE($GD_XPM_INC)
+          PHP_ADD_LIBRARY_WITH_PATH(Xpm, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
+          PHP_ADD_LIBRARY_WITH_PATH(X11, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
+      ],[
+        AC_MSG_ERROR([Problem with libXpm.(a|so) or libX11.(a|so). Please 
check config.log for more information.]) 
+      ],[
+        -L$GD_XPM_DIR/lib -lX11
+      ])
+    fi
   else 
     AC_MSG_RESULT(If configure fails try --with-xpm-dir=<DIR>)
   fi
--- ./ext/wddx/config.m4        2005/04/13 01:28:10     1.1
+++ ./ext/wddx/config.m4        2005/04/13 01:29:48
@@ -12,4 +12,10 @@
   fi
   AC_DEFINE(HAVE_WDDX, 1, [ ])
   PHP_NEW_EXTENSION(wddx, wddx.c, $ext_shared)
+  if test -z "$EXPAT_DIR"; then
+    PHP_ADD_LIBRARY_WITH_PATH(expat, /usr/lib, WDDX_SHARED_LIBADD)
+  else
+    PHP_ADD_LIBRARY_WITH_PATH(expat, $EXPAT_DIR, WDDX_SHARED_LIBADD)
+  fi
+  PHP_SUBST(WDDX_SHARED_LIBADD)
 fi
--- ./Makefile.global   2005/04/13 01:27:06     1.1
+++ ./Makefile.global   2005/04/13 01:29:48
@@ -1,5 +1,5 @@
 mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
-INSTALL = $(top_srcdir)/build/shtool install -c
+INSTALL = /usr/bin/install
 INSTALL_DATA = $(INSTALL) -m 644
 
 DEFS = -DPHP_ATOM_INC -I$(top_builddir)/include -I$(top_builddir)/main 
-I$(top_srcdir)
@@ -14,9 +14,9 @@
        
 build-modules: $(PHP_MODULES)
 
-libphp4.la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
-       $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -rpath 
$(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) 
$(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
-       [EMAIL PROTECTED](LIBTOOL) --silent --mode=install cp libphp4.la 
$(phptempdir)/libphp4.la >/dev/null 2>&1
+$(OVERALL_TARGET): $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
+       $(CC) -shared $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(EXTRA_LDFLAGS) 
$(LDFLAGS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) 
-L/usr/lib/apache -lhttpd -o $@
+       [EMAIL PROTECTED](LIBTOOL) --silent --mode=install cp $(OVERALL_TARGET) 
$(phptempdir)/$(OVERALL_TARGET) >/dev/null 2>&1
 
 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) 
$(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ 
libs/libphp4.so
@@ -40,7 +40,6 @@
        @test -d modules && \
        $(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR)
        @echo "Installing shared extensions:     
$(INSTALL_ROOT)$(EXTENSION_DIR)/"
-       @rm -f modules/*.la >/dev/null 2>&1
        @$(INSTALL) modules/* $(INSTALL_ROOT)$(EXTENSION_DIR)
 
 install-tester:
@@ -67,7 +66,7 @@
        find . -name \*.a | xargs rm -f
        find . -name \*.so | xargs rm -f
        find . -name .libs -a -type d|xargs rm -rf
-       rm -f libphp4.la $(SAPI_CLI_PATH) $(OVERALL_TARGET) modules/* libs/*
+       rm -f $(SAPI_CLI_PATH) $(OVERALL_TARGET) modules/* libs/*
 
 distclean: clean
        rm -f config.cache config.log config.status Makefile.objects 
Makefile.fragments libtool main/php_config.h stamp-h php4.spec 
sapi/apache/libphp4.module buildmk.stamp
--- ./sapi/apache/config.m4     2005/04/13 01:28:17     1.1
+++ ./sapi/apache/config.m4     2005/04/13 01:29:48
@@ -77,6 +77,10 @@
     SAPI_SHARED=libs/libphp4.so
     build_type=bundle
     ;;
+  *cygwin*)
+    SAPI_SHARED=libs/cygphp4.dll
+    build_type=shared
+    ;;
   *)
     build_type=shared
     ;;
--- ./sapi/cli/config.m4        2005/04/13 01:28:31     1.1
+++ ./sapi/cli/config.m4        2005/04/13 01:29:48
@@ -30,7 +30,7 @@
     BUILD_CLI="\$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) 
\$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(PHP_RPATHS) 
\$(PHP_GLOBAL_OBJS) \$(PHP_CLI_OBJS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o 
\$(SAPI_CLI_PATH)"
     ;;
   esac
-  INSTALL_CLI="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(bindir); \$(INSTALL) -m 
0755 \$(SAPI_CLI_PATH) 
\$(INSTALL_ROOT)\$(bindir)/\$(program_prefix)php\$(program_suffix)"
+  INSTALL_CLI="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(bindir); \$(INSTALL) -m 
0755 \$(SAPI_CLI_PATH) 
\$(INSTALL_ROOT)\$(bindir)/\$(program_prefix)php\$(program_suffix)\$(BIN_EXT)"
 
   PHP_SUBST(BUILD_CLI)
   PHP_SUBST(INSTALL_CLI)
--- ./sapi/cli/Makefile.frag    2005/04/13 01:28:24     1.1
+++ ./sapi/cli/Makefile.frag    2005/04/13 01:29:48
@@ -6,4 +6,4 @@
        @$(INSTALL_CLI)
        @echo "Installing PHP CLI man page:      $(INSTALL_ROOT)$(mandir)/man1/"
        @$(mkinstalldirs) $(INSTALL_ROOT)$(mandir)/man1
-       @$(INSTALL_DATA) $(builddir)/php.1 $(INSTALL_ROOT)$(mandir)/man1/php.1
+       @$(INSTALL_DATA) $(builddir)/php.1 
$(INSTALL_ROOT)$(mandir)/man1/php$(program_suffix).1
--- ./scripts/Makefile.frag     2005/04/13 01:28:38     1.1
+++ ./scripts/Makefile.frag     2005/04/13 01:29:48
@@ -3,8 +3,8 @@
 # Build environment install
 #
 
-phpincludedir = $(includedir)/php
-phpbuilddir = $(prefix)/lib/php/build
+phpincludedir = $(includedir)/php$(program_suffix)
+phpbuilddir = $(prefix)/lib/php$(program_suffix)/build
 
 BUILD_FILES = \
        scripts/phpize.m4 \
@@ -51,14 +51,15 @@
        done; \
        $(mkinstalldirs) $$paths && \
        echo "Installing header files:          
$(INSTALL_ROOT)$(phpincludedir)/" && \
-       for i in $(HEADER_DIRS); do \
-               (cd $(top_srcdir)/$$i && $(INSTALL_DATA) *.h 
$(INSTALL_ROOT)$(phpincludedir)/$$i; \
-               cd $(top_builddir)/$$i && $(INSTALL_DATA) *.h 
$(INSTALL_ROOT)$(phpincludedir)/$$i) 2>/dev/null || true; \
+       ABS_INSTALL_ROOT=`(cd $(INSTALL_ROOT) && pwd)`; for i in 
$(HEADER_DIRS); do \
+               (cd $(top_srcdir)/$$i && $(INSTALL_DATA) *.h 
$${ABS_INSTALL_ROOT}$(phpincludedir)/$$i; \
+               cd $(top_builddir)/$$i && $(INSTALL_DATA) *.h 
$${ABS_INSTALL_ROOT}$(phpincludedir)/$$i) 2>/dev/null || true; \
        done; \
-       cd $(top_srcdir)/sapi/embed && $(INSTALL_DATA) *.h 
$(INSTALL_ROOT)$(phpincludedir)/main
+       cd $(top_srcdir)/sapi/embed && $(INSTALL_DATA) *.h 
$${ABS_INSTALL_ROOT}$(phpincludedir)/main
 
 install-programs: $(builddir)/phpize $(builddir)/php-config 
        @echo "Installing helper programs:       $(INSTALL_ROOT)$(bindir)/"
+       [EMAIL PROTECTED](mkinstalldirs) $(INSTALL_ROOT) 
$(INSTALL_ROOT)$(bindir)
        @for prog in $(bin_SCRIPTS); do \
                echo "  program: $(program_prefix)$$prog$(program_suffix)"; \
                $(INSTALL) -m 755 $(builddir)/$$prog 
$(INSTALL_ROOT)$(bindir)/$(program_prefix)$$prog$(program_suffix); \
--- ./scripts/php-config.in     2005/04/13 01:28:48     1.1
+++ ./scripts/php-config.in     2005/04/13 01:56:57
@@ -2,7 +2,7 @@
 
 prefix="@prefix@"
 version="@PHP_VERSION@"
-includedir="@includedir@/php"
+includedir="@includedir@/[EMAIL PROTECTED]@"
 includes="-I$includedir -I$includedir/main -I$includedir/TSRM 
-I$includedir/Zend"
 ldflags="@PHP_LDFLAGS@"
 libs="@EXTRA_LIBS@"
--- ./scripts/phpize.in 2005/04/13 01:28:55     1.1
+++ ./scripts/phpize.in 2005/04/13 01:59:01
@@ -2,13 +2,13 @@
 
 # Variable declaration
 prefix='@prefix@'
-phpdir="$prefix/lib/php/build"
-includedir="$prefix/include/php"
+phpdir="$prefix/lib/[EMAIL PROTECTED]@/build"
+includedir="$prefix/include/[EMAIL PROTECTED]@"
 builddir="`pwd`"
 
 FILES_BUILD="mkdep.awk scan_makefile_in.awk shtool libtool.m4"
 FILES="acinclude.m4 Makefile.global config.sub config.guess ltmain.sh"
-CLEAN_FILES="$FILES *.o *.lo *.la .deps .libs/ build/ include/ modules/ 
install-sh \
+CLEAN_FILES="$FILES *.o *.lo *.la *.dll *.dll.a .deps .libs/ build/ include/ 
modules/ install-sh \
     mkinstalldirs missing config.nice config.sub config.guess configure 
configure.in \
        aclocal.m4 config.h config.h.in conftest* ltmain.sh libtool 
config.cache autom4te.cache/ \
        config.log config.status Makefile Makefile.fragments Makefile.objects 
confdefs.h"

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to