For PR libgcj/5103:

* include/jvm.h (__GCJ_JNI_IMPL__): Define.
	* include/config.h.in: Rebuilt.
	* configure: Rebuilt.
	* configure.in: Define JV_HAVE_INTTYPES_H if inttypes.h found.
	Added comment for HAVE_DLOPEN to avoid autoheader error.
	* gcj/libgcj-config.h.in (JV_HAVE_INTTYPES_H): Added.
	* include/jni.h: Include <gcj/libgcj-config.h>.  Don't include
	CNI-specific headers if we are compiling ordinary JNI code with a
	C++ compiler.  Include <inttypes.h> and JNIWeakRef.h when
	appropriate.
	* jni.cc: Don't include JNIWeakRef.h.

From-SVN: r48082
This commit is contained in:
Tom Tromey 2001-12-16 22:33:02 +00:00 committed by Tom Tromey
parent 68940f3f3c
commit 04942eac9b
8 changed files with 493 additions and 316 deletions

View file

@ -14,14 +14,21 @@ details. */
#ifndef __GCJ_JNI_H__
#define __GCJ_JNI_H__
#include <gcj/libgcj-config.h>
#include <stdarg.h>
#define _Jv_va_list va_list
#ifdef __cplusplus
#ifdef __GCJ_JNI_IMPL__
/* This is wrong, because it pollutes the name-space too much! */
/* If __GCJ_JNI_IMPL__ is defined, then we assume that we're building
libgcj itself, and we include headers which taint the namespace
more than is acceptable for the ordinary JNI user. */
#include <gcj/javaprims.h>
#include <gcj/array.h>
#include <gnu/gcj/runtime/JNIWeakRef.h>
typedef gnu::gcj::runtime::JNIWeakRef *jweak;
typedef struct _Jv_JNIEnv JNIEnv;
typedef struct _Jv_JavaVM JavaVM;
@ -29,8 +36,12 @@ typedef struct _Jv_JavaVM JavaVM;
#define JNI_TRUE true
#define JNI_FALSE false
#else /* __cplusplus */
#else /* __GCJ_JNI_IMPL__ */
# ifdef __GNUC__
/* If we're using gcc, we can use a platform-independent scheme to get
the right integer types. */
typedef int jbyte __attribute__((__mode__(__QI__)));
typedef int jshort __attribute__((__mode__(__HI__)));
typedef int jint __attribute__((__mode__(__SI__)));
@ -41,11 +52,85 @@ typedef float jfloat;
typedef double jdouble;
typedef jint jsize;
# else /* __GNUC__ */
# ifdef JV_HAVE_INTTYPES_H
/* If <inttypes.h> is available, we use it. */
# include <inttypes.h>
typedef int8_t jbyte;
typedef int16_t jshort;
typedef int32_t jint;
typedef int64_t jlong;
typedef float jfloat;
typedef double jdouble;
typedef jint jsize;
typedef int8_t jboolean;
typedef uint16_t jchar;
# else /* JV_HAVE_INTTYPES_H */
/* For now, we require either gcc or <inttypes.h>. If we did more
work at configure time we could get around this, but right now it
doesn't seem worth it. */
# error jni.h not ported to this platform
# endif /* JV_HAVE_INTTYPES_H */
# endif /* __GNUC__ */
# ifdef __cplusplus
/* Define dummy classes and then define the JNI types as pointers. */
struct __jobject {};
struct __jclass : __jobject {};
struct __jstring : __jobject {};
struct __jthrowable : __jobject {};
struct __jweak : __jobject {};
struct __jarray : __jobject {};
struct __jobjectArray : __jarray {};
struct __jbyteArray : __jarray {};
struct __jshortArray : __jarray {};
struct __jintArray : __jarray {};
struct __jlongArray : __jarray {};
struct __jbooleanArray : __jarray {};
struct __jcharArray : __jarray {};
struct __jfloatArray : __jarray {};
struct __jdoubleArray : __jarray {};
typedef __jobject *jobject;
typedef __jclass *jclass;
typedef __jstring *jstring;
typedef __jthrowable *jthrowable;
typedef __jweak *jweak;
typedef __jarray *jarray;
typedef __jobjectArray *jobjectArray;
typedef __jbyteArray *jbyteArray;
typedef __jshortArray *jshortArray;
typedef __jintArray *jintArray;
typedef __jlongArray *jlongArray;
typedef __jbooleanArray *jbooleanArray;
typedef __jcharArray *jcharArray;
typedef __jfloatArray *jfloatArray;
typedef __jdoubleArray *jdoubleArray;
#define JNI_TRUE true
#define JNI_FALSE false
typedef struct _Jv_JNIEnv JNIEnv;
typedef struct _Jv_JavaVM JavaVM;
# else /* __cplusplus */
/* For C, simply define the class types as generic pointers. */
typedef void *jobject;
typedef jobject jclass;
typedef jobject jstring;
typedef jobject jarray;
typedef jobject jthrowable;
typedef jobject jweak;
typedef jobject jarray;
typedef jobject jobjectArray;
typedef jobject jbyteArray;
typedef jobject jshortArray;
@ -56,20 +141,19 @@ typedef jobject jcharArray;
typedef jobject jfloatArray;
typedef jobject jdoubleArray;
/* Dummy defines. */
typedef void *jfieldID;
typedef void *jmethodID;
#define JNI_TRUE 1
#define JNI_FALSE 0
typedef const struct JNINativeInterface *JNIEnv;
typedef const struct JNIInvokeInterface *JavaVM;
#define JNI_TRUE 1
#define JNI_FALSE 0
# endif /* __cplusplus */
#endif /* __cplusplus */
/* Dummy defines. */
typedef void *jfieldID;
typedef void *jmethodID;
/* FIXME: this is wrong. */
typedef jobject jweak;
#endif /* __GCJ_JNI_IMPL__ */
/* Version numbers. */
#define JNI_VERSION_1_1 0x00010001
@ -558,7 +642,7 @@ public:
/* The method table. */
struct JNINativeInterface *p;
/* FIXME: this is really ugly. */
/* This is ugly, but we must live with it. */
#ifndef __GCJ_JNI_IMPL__
private:
#endif