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/