diff --git a/ext/java/config.m4 b/ext/java/config.m4 index 7e390703b62..45de70a6975 100644 --- a/ext/java/config.m4 +++ b/ext/java/config.m4 @@ -22,14 +22,16 @@ AC_ARG_WITH(java, fi if test -d $withval/lib/kaffe; then + AC_ADD_LIBPATH($withval/lib) AC_ADD_LIBPATH($withval/lib/kaffe) JAVA_CFLAGS="-DKAFFE" JAVA_INCLUDE=-I$withval/include/kaffe JAVA_CLASSPATH=$withval/share/kaffe/Klasses.jar + JAVA_LIB=kaffevm - test -f $withval/lib/libkaffevm.so && AC_ADD_LIBPATH($withval/lib) - AC_ADD_LIBRARY(kaffevm) + test -f $withval/lib/$JAVA_LIB && JAVA_LIBPATH=$withval/lib + test -f $withval/lib/kaffe/$JAVA_LIB && JAVA_LIBPATH=$withval/lib/kaffe # accomodate old versions of kaffe which don't support jar if kaffe -version 2>&1 | grep 1.0b > /dev/null; then @@ -37,7 +39,9 @@ AC_ARG_WITH(java, fi elif test -f $withval/lib/libjava.so; then - AC_ADD_LIBRARY_WITH_PATH(java, $withval/lib) + AC_ADD_LIBPATH($withval/lib) + JAVA_LIB=java + JAVA_LIBPATH=$withval/lib JAVA_INCLUDE="-I$withval/include" test -f $withval/lib/classes.zip && JAVA_CFLAGS="-DJNI_11" test -f $withval/lib/jvm.jar && JAVA_CFLAGS="-DJNI_12" @@ -60,6 +64,8 @@ AC_ARG_WITH(java, test -f $i/classes.zip && JAVA_CLASSPATH="$i/classes.zip" test -f $i/rt.jar && JAVA_CLASSPATH="$i/rt.jar" if test -f $i/libjava.so; then + JAVA_LIB=java + JAVA_LIBPATH=$i AC_ADD_LIBPATH($i) test -d $i/classic && AC_ADD_LIBPATH($i/classic) test -d $i/native_threads && AC_ADD_LIBPATH($i/native_threads) @@ -72,12 +78,17 @@ AC_ARG_WITH(java, fi JAVA_CFLAGS="$JAVA_CFLAGS -D_REENTRANT" - AC_ADD_LIBRARY(java) fi AC_DEFINE(HAVE_JAVA,1,[ ]) + JAVA_CFLAGS="$JAVA_CFLAGS '-DJAVALIB=\"$JAVA_LIBPATH/lib$JAVA_LIB.so\"'" + if test "$PHP_SAPI" != "servlet"; then PHP_EXTENSION(java, shared) + + if test "$PHP_SAPI" = "cgi"; then + AC_ADD_LIBRARY($JAVA_LIB) + fi fi INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 \$(srcdir)/ext/java/php_java.jar \$(libdir)" diff --git a/ext/java/java.c b/ext/java/java.c index 9b0c2c53c21..b22911749ad 100644 --- a/ext/java/java.c +++ b/ext/java/java.c @@ -1,4 +1,4 @@ -/* + /* +----------------------------------------------------------------------+ | PHP version 4.0 | +----------------------------------------------------------------------+ @@ -52,12 +52,11 @@ #ifdef PHP_WIN32 #ifdef JNI_12 -#pragma comment(lib,"jvm.lib") +#define JAVALIB "jvm.dll" #else -#pragma comment(lib,"javai.lib") +#define JAVALIB "javai.dll" #endif #else -static void *javadl = 0; #endif /***************************************************************************/ @@ -67,12 +66,14 @@ static int le_jobject = 0; static char *classpath = 0; static char *libpath = 0; static char *javahome = 0; +static char *javalib = 0; static int iniUpdated = 0; static JavaVM *jvm = 0; static JNIEnv *jenv = 0; static jclass php_reflect; +static void *dl_handle = 0; static zend_class_entry java_class_entry; @@ -91,6 +92,13 @@ PHP_INI_BEGIN() PHP_INI_ENTRY1("java.library.path", NULL, PHP_INI_ALL, OnIniUpdate, &libpath) #endif +#ifdef JAVALIB + PHP_INI_ENTRY1("java.library", + JAVALIB, PHP_INI_ALL, OnIniUpdate, &javalib) +#else + PHP_INI_ENTRY1("java.library", + NULL, PHP_INI_ALL, OnIniUpdate, &javalib) +#endif PHP_INI_END() /***************************************************************************/ @@ -105,9 +113,7 @@ void jvm_destroy() { (*jvm)->DestroyJavaVM(jvm); jvm = 0; } -#ifndef PHP_WIN32 - if (javadl) dlclose(javadl); -#endif + if (dl_handle) DL_UNLOAD(dl_handle); php_reflect = 0; jenv = 0; } @@ -134,6 +140,11 @@ static int jvm_create() { jclass local_php_reflect; jthrowable error; + jint (JNICALL *JNI_CreateVM)(const void*,const void*,void*); +#ifndef JNI_12 + jint (JNICALL *JNI_DefaultArgs)(void*); +#endif + #ifdef JNI_11 JDK1_1InitArgs vm_args; #else @@ -145,6 +156,29 @@ static int jvm_create() { iniUpdated=0; + if (javalib) { + dl_handle = DL_LOAD(javalib); + + if (!dl_handle) { + php_error(E_ERROR, "Unable to load Java Library %s", javalib); + return -1; + } + } + +#ifndef JAVALIB + if (!dl_handle) + JNI_CreateVM = &JNI_CreateJavaVM; + else +#endif + + JNI_CreateVM = (jint (JNICALL *)(const void*,const void*,void*)) + DL_FETCH_SYMBOL(dl_handle, "JNI_CreateJavaVM"); + + if (!JNI_CreateVM) { + php_error(E_ERROR, "Unable to locate CreateJavaVM function"); + return -1; + } + #ifdef JNI_12 vm_args.version = JNI_VERSION_1_2; @@ -156,12 +190,24 @@ static int jvm_create() { if (javahome) addJVMOption(&vm_args, "-Djava.home=", javahome); if (libpath) addJVMOption(&vm_args, "-Djava.library.path=", libpath); - rc = JNI_CreateJavaVM(&jvm, (void**)&jenv, &vm_args); - #else +#ifndef JAVALIB + if (!dl_handle) + JNI_DefaultArgs = &JNI_GetDefaultJavaVMInitArgs; + else +#endif + + JNI_DefaultArgs = (jint (JNICALL *)(void*)) + DL_FETCH_SYMBOL(dl_handle, "JNI_GetDefaultJavaVMInitArgs"); + + if (!JNI_DefaultArgs) { + php_error(E_ERROR, "Unable to locate GetDefaultJavaVMInitArgs function"); + return -1; + } + vm_args.version=0x00010001; - JNI_GetDefaultJavaVMInitArgs(&vm_args); + (*JNI_DefaultArgs)(&vm_args); if (!classpath) classpath = ""; vm_args.classpath = classpath; @@ -169,10 +215,11 @@ static int jvm_create() { vm_args.classhome = javahome; vm_args.libraryhome = libpath; #endif - rc = JNI_CreateJavaVM(&jvm, &jenv, &vm_args); #endif + rc = (*JNI_CreateVM)(&jvm, &jenv, &vm_args); + if (rc) { php_error(E_ERROR, "Unable to create Java Virtual Machine"); return rc; diff --git a/ext/rpc/java/config.m4 b/ext/rpc/java/config.m4 index 7e390703b62..45de70a6975 100644 --- a/ext/rpc/java/config.m4 +++ b/ext/rpc/java/config.m4 @@ -22,14 +22,16 @@ AC_ARG_WITH(java, fi if test -d $withval/lib/kaffe; then + AC_ADD_LIBPATH($withval/lib) AC_ADD_LIBPATH($withval/lib/kaffe) JAVA_CFLAGS="-DKAFFE" JAVA_INCLUDE=-I$withval/include/kaffe JAVA_CLASSPATH=$withval/share/kaffe/Klasses.jar + JAVA_LIB=kaffevm - test -f $withval/lib/libkaffevm.so && AC_ADD_LIBPATH($withval/lib) - AC_ADD_LIBRARY(kaffevm) + test -f $withval/lib/$JAVA_LIB && JAVA_LIBPATH=$withval/lib + test -f $withval/lib/kaffe/$JAVA_LIB && JAVA_LIBPATH=$withval/lib/kaffe # accomodate old versions of kaffe which don't support jar if kaffe -version 2>&1 | grep 1.0b > /dev/null; then @@ -37,7 +39,9 @@ AC_ARG_WITH(java, fi elif test -f $withval/lib/libjava.so; then - AC_ADD_LIBRARY_WITH_PATH(java, $withval/lib) + AC_ADD_LIBPATH($withval/lib) + JAVA_LIB=java + JAVA_LIBPATH=$withval/lib JAVA_INCLUDE="-I$withval/include" test -f $withval/lib/classes.zip && JAVA_CFLAGS="-DJNI_11" test -f $withval/lib/jvm.jar && JAVA_CFLAGS="-DJNI_12" @@ -60,6 +64,8 @@ AC_ARG_WITH(java, test -f $i/classes.zip && JAVA_CLASSPATH="$i/classes.zip" test -f $i/rt.jar && JAVA_CLASSPATH="$i/rt.jar" if test -f $i/libjava.so; then + JAVA_LIB=java + JAVA_LIBPATH=$i AC_ADD_LIBPATH($i) test -d $i/classic && AC_ADD_LIBPATH($i/classic) test -d $i/native_threads && AC_ADD_LIBPATH($i/native_threads) @@ -72,12 +78,17 @@ AC_ARG_WITH(java, fi JAVA_CFLAGS="$JAVA_CFLAGS -D_REENTRANT" - AC_ADD_LIBRARY(java) fi AC_DEFINE(HAVE_JAVA,1,[ ]) + JAVA_CFLAGS="$JAVA_CFLAGS '-DJAVALIB=\"$JAVA_LIBPATH/lib$JAVA_LIB.so\"'" + if test "$PHP_SAPI" != "servlet"; then PHP_EXTENSION(java, shared) + + if test "$PHP_SAPI" = "cgi"; then + AC_ADD_LIBRARY($JAVA_LIB) + fi fi INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 \$(srcdir)/ext/java/php_java.jar \$(libdir)" diff --git a/ext/rpc/java/java.c b/ext/rpc/java/java.c index 9b0c2c53c21..b22911749ad 100644 --- a/ext/rpc/java/java.c +++ b/ext/rpc/java/java.c @@ -1,4 +1,4 @@ -/* + /* +----------------------------------------------------------------------+ | PHP version 4.0 | +----------------------------------------------------------------------+ @@ -52,12 +52,11 @@ #ifdef PHP_WIN32 #ifdef JNI_12 -#pragma comment(lib,"jvm.lib") +#define JAVALIB "jvm.dll" #else -#pragma comment(lib,"javai.lib") +#define JAVALIB "javai.dll" #endif #else -static void *javadl = 0; #endif /***************************************************************************/ @@ -67,12 +66,14 @@ static int le_jobject = 0; static char *classpath = 0; static char *libpath = 0; static char *javahome = 0; +static char *javalib = 0; static int iniUpdated = 0; static JavaVM *jvm = 0; static JNIEnv *jenv = 0; static jclass php_reflect; +static void *dl_handle = 0; static zend_class_entry java_class_entry; @@ -91,6 +92,13 @@ PHP_INI_BEGIN() PHP_INI_ENTRY1("java.library.path", NULL, PHP_INI_ALL, OnIniUpdate, &libpath) #endif +#ifdef JAVALIB + PHP_INI_ENTRY1("java.library", + JAVALIB, PHP_INI_ALL, OnIniUpdate, &javalib) +#else + PHP_INI_ENTRY1("java.library", + NULL, PHP_INI_ALL, OnIniUpdate, &javalib) +#endif PHP_INI_END() /***************************************************************************/ @@ -105,9 +113,7 @@ void jvm_destroy() { (*jvm)->DestroyJavaVM(jvm); jvm = 0; } -#ifndef PHP_WIN32 - if (javadl) dlclose(javadl); -#endif + if (dl_handle) DL_UNLOAD(dl_handle); php_reflect = 0; jenv = 0; } @@ -134,6 +140,11 @@ static int jvm_create() { jclass local_php_reflect; jthrowable error; + jint (JNICALL *JNI_CreateVM)(const void*,const void*,void*); +#ifndef JNI_12 + jint (JNICALL *JNI_DefaultArgs)(void*); +#endif + #ifdef JNI_11 JDK1_1InitArgs vm_args; #else @@ -145,6 +156,29 @@ static int jvm_create() { iniUpdated=0; + if (javalib) { + dl_handle = DL_LOAD(javalib); + + if (!dl_handle) { + php_error(E_ERROR, "Unable to load Java Library %s", javalib); + return -1; + } + } + +#ifndef JAVALIB + if (!dl_handle) + JNI_CreateVM = &JNI_CreateJavaVM; + else +#endif + + JNI_CreateVM = (jint (JNICALL *)(const void*,const void*,void*)) + DL_FETCH_SYMBOL(dl_handle, "JNI_CreateJavaVM"); + + if (!JNI_CreateVM) { + php_error(E_ERROR, "Unable to locate CreateJavaVM function"); + return -1; + } + #ifdef JNI_12 vm_args.version = JNI_VERSION_1_2; @@ -156,12 +190,24 @@ static int jvm_create() { if (javahome) addJVMOption(&vm_args, "-Djava.home=", javahome); if (libpath) addJVMOption(&vm_args, "-Djava.library.path=", libpath); - rc = JNI_CreateJavaVM(&jvm, (void**)&jenv, &vm_args); - #else +#ifndef JAVALIB + if (!dl_handle) + JNI_DefaultArgs = &JNI_GetDefaultJavaVMInitArgs; + else +#endif + + JNI_DefaultArgs = (jint (JNICALL *)(void*)) + DL_FETCH_SYMBOL(dl_handle, "JNI_GetDefaultJavaVMInitArgs"); + + if (!JNI_DefaultArgs) { + php_error(E_ERROR, "Unable to locate GetDefaultJavaVMInitArgs function"); + return -1; + } + vm_args.version=0x00010001; - JNI_GetDefaultJavaVMInitArgs(&vm_args); + (*JNI_DefaultArgs)(&vm_args); if (!classpath) classpath = ""; vm_args.classpath = classpath; @@ -169,10 +215,11 @@ static int jvm_create() { vm_args.classhome = javahome; vm_args.libraryhome = libpath; #endif - rc = JNI_CreateJavaVM(&jvm, &jenv, &vm_args); #endif + rc = (*JNI_CreateVM)(&jvm, &jenv, &vm_args); + if (rc) { php_error(E_ERROR, "Unable to create Java Virtual Machine"); return rc; diff --git a/ext/standard/dl.c b/ext/standard/dl.c index 4a2357f9671..68f58614d99 100644 --- a/ext/standard/dl.c +++ b/ext/standard/dl.c @@ -25,14 +25,6 @@ #ifdef HAVE_LIBDL #include #include -#ifndef RTLD_LAZY -#define RTLD_LAZY 1 /* Solaris 1, FreeBSD's (2.1.7.1 and older) */ -#endif - -#ifndef RTLD_NOW /* Fixes compile problem on FreeBSD */ -#define RTLD_NOW RTLD_LAZY -#endif - #if HAVE_STRING_H #include