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
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"
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)
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)"
-/*
+ /*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
#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
/***************************************************************************/
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;
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()
/***************************************************************************/
(*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;
}
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
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;
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;
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;
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
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"
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)
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)"
-/*
+ /*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
#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
/***************************************************************************/
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;
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()
/***************************************************************************/
(*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;
}
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
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;
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;
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;
#ifdef HAVE_LIBDL
#include <stdlib.h>
#include <stdio.h>
-#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 <string.h>