diff --git a/mozilla/java/Makefile.in b/mozilla/java/Makefile.in new file mode 100644 index 00000000000..16c1ea35456 --- /dev/null +++ b/mozilla/java/Makefile.in @@ -0,0 +1,33 @@ +#!gmake +# The contents of this file are subject to the Netscape Public License +# Version 1.0 (the "NPL"); you may not use this file except in +# compliance with the NPL. You may obtain a copy of the NPL at +# http://www.mozilla.org/NPL/ +# +# Software distributed under the NPL is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL +# for the specific language governing rights and limitations under the +# NPL. +# +# The Initial Developer of this code under the NPL is Netscape +# Communications Corporation. Portions created by Netscape are +# Copyright (C) 1998 Netscape Communications Corporation. All Rights +# Reserved. + +DEPTH = .. +topsrcdir = @top_srcdir@ +VPATH = @srcdir@ +srcdir = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +DIRS= xpcom \ + util \ + webshell \ + $(NULL) + +ifeq ($(OS_ARCH),BeOS) +EXTRA_DSO_LDOPTS += -lbe +endif + +include $(topsrcdir)/config/rules.mk diff --git a/mozilla/java/xpcom/README b/mozilla/java/xpcom/README index bcd0f5b60f5..48a29a86d0b 100644 --- a/mozilla/java/xpcom/README +++ b/mozilla/java/xpcom/README @@ -30,17 +30,22 @@ Currently only UNIX/Linux builds are supported (mainly because it's my platform of choice). Windows builds should not be too much more difficult, and -1. Make sure MOZILLA_FIVE_HOME is set correctly +1. Make sure MOZILLA_FIVE_HOME is set correctly, and that JDKHOME indicates + a valid JDK 1.2 installation. 2. Insure that the following are in your LD_LIBRARY_PATH: - $MOZILLA_FIVE_HOME/../lib + $MOZILLA_FIVE_HOME $MOZILLA_FIVE_HOME/../lib mozilla/java/xpcom/test (or "." if you run in that directory) mozilla/java/xpcom/src (or "../src" if you run in "test") 3. In mozilla/java/xpcom, execute + ../../build/autoconf/update-makefile.sh + + if necessary, to generate a Makefile, and then + gmake JAVAC="javac -g -d $MOZILLA_FIVE_HOME/../classes" This is to get around bugs in Java compilation. diff --git a/mozilla/java/xpcom/TODO b/mozilla/java/xpcom/TODO new file mode 100644 index 00000000000..31e558d4ccc --- /dev/null +++ b/mozilla/java/xpcom/TODO @@ -0,0 +1,89 @@ +TODO +==== + +(By no means complete ...) + +Configuration +------------- + +-- *GET XPCTest WORKING*. For some reason, the JDK 1.2 JVM on Solaris +won't load libxpcom.so correctly, even if it's on LD_LIBRARY_PATH. I +have yet to confirm whether this is a problem on Linux or NT. + +-- Make Java compilation work correctly on Unix/Linux. + +-- Better integration with Mozilla makefile/autoconf system. + +-- Move XPCOM startup code to test programs. + +-- Integrate into Java Plugin and test. + +-- File and function renaming, to prevent conflicts and increase modularity. + + +Registration and Activation +--------------------------- + +-- Insure JNI libraries load an unload, even within JNI plugin + +-- Derive proxy class from IID, and vice-versa + +-- Generate static proxies (using genproxy) + +-- Generate and load "on-the-fly" bytecode for proxy classes. + + +Marshalling +----------- + +-- Verify nsID parameters are marshalled correctly. + +-- Unwrap proxies used as "in" parameters. + +-- Wrap "out" XPCOM objects in correct wrapper class. [dep: Proxy Generation] + +-- Build C++ stubs for Java-implemented XPCOM objects. [big task?] + +-- [Future] Allow mapping from native concrete type to Java types + +-- [Future] Efficient handling of attributes and 0- or 1-arg methods. + +-- [Future] Reflection API (if Java's is insufficient) + + +NSRESULTs +--------- + +-- Throw exceptions for error codes + +-- Design and implement "success code mechanism", for single-threaded case + +-- Store success codes per thread, and retrieve for current threads. + + +API +--- + +-- Write proxy for ns[I]ComponentManager, by hand. (For performance, +and because of the overloaded methods and lack of XPT.) + +-- Write proxy for ns[I]ServiceManager, similar to above. + +-- Throw exceptions for unknown or missing proxy classes (and other errors). + +-- Implement XPCOM identity rules + +-- Document (including Javadoc) + + +Memory Management +----------------- + +-- Insure that temporary heap memory (esp. strings and nsIDs) is +recycled. + +-- Insure reference-counting rules aren't violated. + +-- Cache previously allocated wrapper objects, to prevent unnecessary +allocation. + diff --git a/mozilla/java/xpcom/src/Makefile.in b/mozilla/java/xpcom/src/Makefile.in index ac288252938..dbd2aeaa9bd 100644 --- a/mozilla/java/xpcom/src/Makefile.in +++ b/mozilla/java/xpcom/src/Makefile.in @@ -43,18 +43,18 @@ EXPORTS = \ REQUIRES = xpcom +# XXX: fix this to substitute correct OS name + +INCLUDES += -I$(JDKHOME)/include \ + -I$(JDKHOME)/include/solaris \ + -I$(JDKHOME)/include/linux \ + $(NULL) + EXTRA_DSO_LDOPTS += \ -L$(topsrcdir)/dist/lib \ - -lxptinfo \ - -lxptcmd \ - -lxptcall \ - -lxpt \ -lxpcom \ - -lxp \ - -lreg \ - -lplds3 \ -lplc3 \ - -lnspr3 \ + -lplds3 \ $(NULL) include $(topsrcdir)/config/rules.mk diff --git a/mozilla/java/xpcom/src/xpj_ComUtilities.cpp b/mozilla/java/xpcom/src/xpj_ComUtilities.cpp index dcfefe010e9..7ccac936f47 100644 --- a/mozilla/java/xpcom/src/xpj_ComUtilities.cpp +++ b/mozilla/java/xpcom/src/xpj_ComUtilities.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "nscore.h" #include "nsID.h" #include "nsIFactory.h" @@ -31,6 +32,9 @@ /* ---------- CLASS METHODS ------------ */ +#ifdef __cplusplus +extern "C" { +#endif JNIEXPORT jboolean JNICALL Java_org_mozilla_xpcom_XPComUtilities_initialize(JNIEnv *env, jclass cls) @@ -214,5 +218,6 @@ JNIEXPORT void JNICALL } } - - +#ifdef __cplusplus +} +#endif diff --git a/mozilla/java/xpcom/src/xpj_XPCMethod.cpp b/mozilla/java/xpcom/src/xpj_XPCMethod.cpp index 922356e8be3..077cf37ec07 100644 --- a/mozilla/java/xpcom/src/xpj_XPCMethod.cpp +++ b/mozilla/java/xpcom/src/xpj_XPCMethod.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "nscore.h" #include "nsIFactory.h" #include "nsIComponentManager.h" @@ -40,6 +41,10 @@ jclass classXPCMethod = NULL; #define USE_PARAM_TEMPLATE +#ifdef __cplusplus +extern "C" { +#endif + /* * Class: XPCMethod * Method: init @@ -51,7 +56,7 @@ JNIEXPORT jint JNICALL int offset; const nsXPTMethodInfo *mi; nsID *iidPtr = ID_GetNative(env, iid); - const jbyte *tmpstr; + const char *tmpstr; nsresult res; // Get method info @@ -153,7 +158,7 @@ JNIEXPORT void JNICALL * Class: XPCMethod * Method: getParameterType * Signature: (I)I -XS */ + */ JNIEXPORT jint JNICALL Java_org_mozilla_xpcom_XPCMethod_getParameterType (JNIEnv *env, jobject self, jint index) { @@ -251,3 +256,7 @@ JNIEXPORT void JNICALL Java_org_mozilla_xpcom_XPCMethod_invoke } +#ifdef __cplusplus +} +#endif + diff --git a/mozilla/java/xpcom/src/xpj_nsID.cpp b/mozilla/java/xpcom/src/xpj_nsID.cpp index ad23bcb9754..f780d4ad393 100644 --- a/mozilla/java/xpcom/src/xpj_nsID.cpp +++ b/mozilla/java/xpcom/src/xpj_nsID.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "nscore.h" #include "nsID.h" #include "nsIAllocator.h" @@ -84,6 +85,10 @@ jboolean ID_IsEqual(JNIEnv *env, jobject self, jobject other) { return result; } +#ifdef __cplusplus +extern "C" { +#endif + /* * Class: ID * Method: NewIDPtr @@ -121,7 +126,7 @@ JNIEXPORT void JNICALL Java_org_mozilla_xpcom_nsID_NewIDPtr__Ljava_lang_String_2 nsID *idptr = (nsID *)nsAllocator::Alloc(sizeof(nsID)); jboolean isCopy; - const jbyte *utf = env->GetStringUTFChars(string, &isCopy); + const char *utf = env->GetStringUTFChars(string, &isCopy); char *aIDStr; if (isCopy) { @@ -201,3 +206,7 @@ JNIEXPORT jint JNICALL Java_org_mozilla_xpcom_nsID_hashCode(JNIEnv *env, jobject return result; } +#ifdef __cplusplus +} +#endif + diff --git a/mozilla/java/xpcom/src/xpjava.cpp b/mozilla/java/xpcom/src/xpjava.cpp index d7db4e62531..5143691dae3 100644 --- a/mozilla/java/xpcom/src/xpjava.cpp +++ b/mozilla/java/xpcom/src/xpjava.cpp @@ -520,7 +520,7 @@ jboolean JObjectToVariant(JNIEnv *env, if (env->IsInstanceOf(elem, classString)) { jstring string = (jstring)elem; jsize jstrlen = env->GetStringUTFLength(string); - const jbyte *utf = env->GetStringUTFChars(string, NULL); + const char *utf = env->GetStringUTFChars(string, NULL); // PENDING: copying every time is wasteful, but // we need to release `utf' before invocation loses it. diff --git a/mozilla/java/xpcom/test/Makefile.test b/mozilla/java/xpcom/test/Makefile.test index 6dcff1c0ebf..9c82a254f8d 100644 --- a/mozilla/java/xpcom/test/Makefile.test +++ b/mozilla/java/xpcom/test/Makefile.test @@ -9,8 +9,9 @@ CFLAGS=-Wall -g -fno-rtti -fno-handle-exceptions -pipe SHLIB_FLAGS=-fpic SHLIB_LDFLAGS=-shared DEFINES=-DXP_UNIX -INCLUDE=-I$(MOZILLA)/dist/include -I$(MOZILLA)/xpcom/public -I../src -LIBS=-L$(MOZILLA)/dist/lib -lxptinfo -lxptcmd -lxptcall -lxpt -lxpcom -lxp -lreg -lplds3 -lplc3 -lnspr3 -lstdc++ +INCLUDE=-I$(MOZILLA)/dist/include -I$(MOZILLA)/xpcom/public -I../src -I$(JDKHOME)/include -I$(JDKHOME)/include/solaris -I$(JDKHOME)/include/linux +#LIBS=-L$(MOZILLA)/dist/lib -lxptinfo -lxptcmd -lxptcall -lxpt -lxpcom -lxp -lreg -lplds3 -lplc3 -lnspr3 -lstdc++ +LIBS=-L$(MOZILLA)/dist/lib -lxptinfo -lxptcmd -lxptcall -lxpt -lxpcom -lxp -lplds3 -lplc3 -lnspr3 -lstdc++ XPTDIR=$(MOZILLA)/dist/bin/components XPIDL=$(MOZILLA)/dist/bin/xpidl