mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
Dynamically load java support, for better error messages
This commit is contained in:
parent
1e4e9b34e2
commit
6a7bc777ca
@ -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)"
|
||||
|
@ -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;
|
||||
|
@ -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)"
|
||||
|
@ -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;
|
||||
|
@ -25,14 +25,6 @@
|
||||
#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>
|
||||
|
Loading…
Reference in New Issue
Block a user