[kaffe] CVS kaffe (robilad): Added jni weak ref tests
Kaffe CVS
cvs-commits at kaffe.org
Tue Jul 12 16:55:28 PDT 2005
PatchSet 6725
Date: 2005/07/12 23:50:48
Author: robilad
Branch: HEAD
Tag: (none)
Log:
Added jni weak ref tests
2005-07-13 Dalibor Topic <robilad at kaffe.org>
* test/jni/Makefile.am: (check_PROGRAMS) Added jniWeakTest.
(check_LTLIBRARIES, libjniweaklib_la_SOURCES, libjniweaklib_la_LDFLAGS,
JAVA_CLASSES, CPATH, JNIWeakTest.class, jniWeakTest_SOURCES,
jniWeakTest_LDADD, jniWeakTest_DEPENDECIES, jniWeakTest.o): New rules.
(TESTS_ENVIRONMENT) Set BOOTCLASSPATH and KAFFELIBRARYPATH.
(EXTRA_DIST) Added JNIWeakTest.java.
* test/jni/Makefile.in: Regenerated.
2005-07-13 Guilhem Lavaux <guilhem at kaffe.org>
* test/jni/JNIWeakTest.java,
test/jni/jniWeakTest.c,
test/jni/jniweaklib.c: New test.
Members:
ChangeLog:1.4249->1.4250
test/jni/JNIWeakTest.java:INITIAL->1.1
test/jni/Makefile.am:1.7->1.8
test/jni/Makefile.in:1.37->1.38
test/jni/jniWeakTest.c:INITIAL->1.1
test/jni/jniweaklib.c:INITIAL->1.1
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4249 kaffe/ChangeLog:1.4250
--- kaffe/ChangeLog:1.4249 Tue Jul 12 13:35:38 2005
+++ kaffe/ChangeLog Tue Jul 12 23:50:48 2005
@@ -1,3 +1,20 @@
+2005-07-13 Dalibor Topic <robilad at kaffe.org>
+
+ * test/jni/Makefile.am: (check_PROGRAMS) Added jniWeakTest.
+ (check_LTLIBRARIES, libjniweaklib_la_SOURCES, libjniweaklib_la_LDFLAGS,
+ JAVA_CLASSES, CPATH, JNIWeakTest.class, jniWeakTest_SOURCES,
+ jniWeakTest_LDADD, jniWeakTest_DEPENDECIES, jniWeakTest.o): New rules.
+ (TESTS_ENVIRONMENT) Set BOOTCLASSPATH and KAFFELIBRARYPATH.
+ (EXTRA_DIST) Added JNIWeakTest.java.
+
+ * test/jni/Makefile.in: Regenerated.
+
+2005-07-13 Guilhem Lavaux <guilhem at kaffe.org>
+
+ * test/jni/JNIWeakTest.java,
+ test/jni/jniWeakTest.c,
+ test/jni/jniweaklib.c: New test.
+
2005-07-12 Dalibor Topic <robilad at kaffe.org>
Resynced with GNU classpath.
===================================================================
Checking out kaffe/test/jni/JNIWeakTest.java
RCS: /home/cvs/kaffe/kaffe/test/jni/JNIWeakTest.java,v
VERS: 1.1
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe/test/jni/JNIWeakTest.java Tue Jul 12 23:55:28 2005
@@ -0,0 +1,23 @@
+public class JNIWeakTest
+{
+ static {
+ System.out.println("Loading jniweaklib...");
+ System.loadLibrary("jniweaklib");
+ }
+
+ native Object testWeak();
+
+ static public void main(String args[])
+ {
+ JNIWeakTest o = new JNIWeakTest();
+ Object o2;
+
+ o2 = o.testWeak();
+
+ if (o2 == o)
+ System.out.println("OK !");
+ else
+ System.out.println("FAIL !");
+ }
+}
+
Index: kaffe/test/jni/Makefile.am
diff -u kaffe/test/jni/Makefile.am:1.7 kaffe/test/jni/Makefile.am:1.8
--- kaffe/test/jni/Makefile.am:1.7 Sun Apr 10 17:26:31 2005
+++ kaffe/test/jni/Makefile.am Tue Jul 12 23:50:52 2005
@@ -6,7 +6,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file.
-check_PROGRAMS= jniBase jniExecClass jniReflect
+check_PROGRAMS= jniBase jniExecClass jniReflect jniWeakTest
AM_CPPFLAGS= \
-I$(top_builddir)/include \
@@ -57,9 +57,64 @@
@LIBLTDL@
jniReflect_DEPENDENCIES= $(LIBKAFFEVM)
-EXTRA_DIST = HelloWorldApp.class
+# Okay, the following is a bit convulted and hackish, and makes me feel dizzy.
+# But as I found no way to do it better, here it goes:
+#
+# We need to have a JNI library built just for make check purpose, i.e
+# a) it may not be installed
+# b) it may only build on check
+# c) in must be dlopen-able for JNI library loading to work
+# d) it must actually load the library and run it
+#
+# Solution for a and b: Fortunately, automake lets us build libtool libraries for
+# make check purpose only using check_LTLIBRARIES.
+# Solution for c: Unfortunately, it builds convenience libraries by default, which
+# can not be dlopened. Adding -module or -static to LDFLAGS does not help, one
+# needs to add -rpath with a fake absolute directory to it to make libtool build
+# a dlopenable library.
+# Solution for d: Adding . to KAFFELIBRARYPATH allows the resulting test to find the
+# so created library.
+#
+# Amazingly enough, this actually seems to work.
+
+check_LTLIBRARIES = libjniweaklib.la
+
+libjniweaklib_la_SOURCES = jniweaklib.c
+
+libjniweaklib_la_LDFLAGS = \
+ $(KLIBFLAGS) \
+ -no-undefined \
+ -module \
+ -rpath $(nativedir) \
+ -release $(PACKAGE_VERSION)
+
+JAVA_CLASSES = \
+ JNIWeakTest.class
+
+CPATH = .:$(top_builddir)/libraries/javalib/rt.jar
-TESTS_ENVIRONMENT = env `. $(top_builddir)/BUILD_ENVIRONMENT; sed 's/.*export \(.*\)/echo \1=$$\1/' < $(top_builddir)/BUILD_ENVIRONMENT | sh`
+JNIWeakTest.class: $(srcdir)/JNIWeakTest.java
+ $(JIKES) -g -classpath $(CPATH) -d . $(srcdir)/JNIWeakTest.java
+
+jniWeakTest_SOURCES = jniWeakTest.c
+
+jniWeakTest_LDADD= \
+ -dlopen $(top_builddir)/test/jni/libjniweaklib.la \
+ $(DLOPEN_JAVA_LIBS) \
+ $(LIBKAFFEVM) \
+ $(LIBREPLACE) \
+ $(LTLIBINTL) \
+ @LIBLTDL@
+
+jniWeakTest_DEPENDECIES = $(LIBKAFFEVM) libjniweaklib.la
+
+jniWeakTest.o: JNIWeakTest.class
+
+EXTRA_DIST = \
+ JNIWeakTest.java \
+ HelloWorldApp.class
+
+TESTS_ENVIRONMENT = env `BOOTCLASSPATH="."; export BOOTCLASSPATH; KAFFELIBRARYPATH="." ; export KAFFELIBRARYPATH ; . $(top_builddir)/BUILD_ENVIRONMENT; sed 's/.*export \(.*\)/echo \1=$$\1/' < $(top_builddir)/BUILD_ENVIRONMENT | sh`
TESTS = $(check_PROGRAMS)
CLEANFILES = *.fail *.out core *.core
Index: kaffe/test/jni/Makefile.in
diff -u kaffe/test/jni/Makefile.in:1.37 kaffe/test/jni/Makefile.in:1.38
--- kaffe/test/jni/Makefile.in:1.37 Sat May 14 21:47:09 2005
+++ kaffe/test/jni/Makefile.in Tue Jul 12 23:50:52 2005
@@ -21,7 +21,7 @@
#
# See the file "license.terms" for information on usage and redistribution
# of this file.
-SOURCES = $(jniBase_SOURCES) $(jniExecClass_SOURCES) $(jniReflect_SOURCES)
+SOURCES = $(libjniweaklib_la_SOURCES) $(jniBase_SOURCES) $(jniExecClass_SOURCES) $(jniReflect_SOURCES) $(jniWeakTest_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -46,7 +46,7 @@
build_triplet = @build@
host_triplet = @host@
check_PROGRAMS = jniBase$(EXEEXT) jniExecClass$(EXEEXT) \
- jniReflect$(EXEEXT)
+ jniReflect$(EXEEXT) jniWeakTest$(EXEEXT)
subdir = test/jni
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -76,6 +76,9 @@
mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config/config.h
CONFIG_CLEAN_FILES =
+libjniweaklib_la_LIBADD =
+am_libjniweaklib_la_OBJECTS = jniweaklib.lo
+libjniweaklib_la_OBJECTS = $(am_libjniweaklib_la_OBJECTS)
am_jniBase_OBJECTS = jniBase.$(OBJEXT)
jniBase_OBJECTS = $(am_jniBase_OBJECTS)
am__DEPENDENCIES_1 =
@@ -90,6 +93,11 @@
jniExecClass_OBJECTS = $(am_jniExecClass_OBJECTS)
am_jniReflect_OBJECTS = jniReflect.$(OBJEXT)
jniReflect_OBJECTS = $(am_jniReflect_OBJECTS)
+am_jniWeakTest_OBJECTS = jniWeakTest.$(OBJEXT)
+jniWeakTest_OBJECTS = $(am_jniWeakTest_OBJECTS)
+jniWeakTest_DEPENDENCIES = $(top_builddir)/test/jni/libjniweaklib.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \
+ $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_1)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config
depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp
am__depfiles_maybe = depfiles
@@ -100,10 +108,12 @@
$(AM_CFLAGS) $(CFLAGS)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(jniBase_SOURCES) $(jniExecClass_SOURCES) \
- $(jniReflect_SOURCES)
-DIST_SOURCES = $(jniBase_SOURCES) $(jniExecClass_SOURCES) \
- $(jniReflect_SOURCES)
+SOURCES = $(libjniweaklib_la_SOURCES) $(jniBase_SOURCES) \
+ $(jniExecClass_SOURCES) $(jniReflect_SOURCES) \
+ $(jniWeakTest_SOURCES)
+DIST_SOURCES = $(libjniweaklib_la_SOURCES) $(jniBase_SOURCES) \
+ $(jniExecClass_SOURCES) $(jniReflect_SOURCES) \
+ $(jniWeakTest_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -423,8 +433,54 @@
@LIBLTDL@
jniReflect_DEPENDENCIES = $(LIBKAFFEVM)
-EXTRA_DIST = HelloWorldApp.class
-TESTS_ENVIRONMENT = env `. $(top_builddir)/BUILD_ENVIRONMENT; sed 's/.*export \(.*\)/echo \1=$$\1/' < $(top_builddir)/BUILD_ENVIRONMENT | sh`
+
+# Okay, the following is a bit convulted and hackish, and makes me feel dizzy.
+# But as I found no way to do it better, here it goes:
+#
+# We need to have a JNI library built just for make check purpose, i.e
+# a) it may not be installed
+# b) it may only build on check
+# c) in must be dlopen-able for JNI library loading to work
+# d) it must actually load the library and run it
+#
+# Solution for a and b: Fortunately, automake lets us build libtool libraries for
+# make check purpose only using check_LTLIBRARIES.
+# Solution for c: Unfortunately, it builds convenience libraries by default, which
+# can not be dlopened. Adding -module or -static to LDFLAGS does not help, one
+# needs to add -rpath with a fake absolute directory to it to make libtool build
+# a dlopenable library.
+# Solution for d: Adding . to KAFFELIBRARYPATH allows the resulting test to find the
+# so created library.
+#
+# Amazingly enough, this actually seems to work.
+check_LTLIBRARIES = libjniweaklib.la
+libjniweaklib_la_SOURCES = jniweaklib.c
+libjniweaklib_la_LDFLAGS = \
+ $(KLIBFLAGS) \
+ -no-undefined \
+ -module \
+ -rpath $(nativedir) \
+ -release $(PACKAGE_VERSION)
+
+JAVA_CLASSES = \
+ JNIWeakTest.class
+
+CPATH = .:$(top_builddir)/libraries/javalib/rt.jar
+jniWeakTest_SOURCES = jniWeakTest.c
+jniWeakTest_LDADD = \
+ -dlopen $(top_builddir)/test/jni/libjniweaklib.la \
+ $(DLOPEN_JAVA_LIBS) \
+ $(LIBKAFFEVM) \
+ $(LIBREPLACE) \
+ $(LTLIBINTL) \
+ @LIBLTDL@
+
+jniWeakTest_DEPENDECIES = $(LIBKAFFEVM) libjniweaklib.la
+EXTRA_DIST = \
+ JNIWeakTest.java \
+ HelloWorldApp.class
+
+TESTS_ENVIRONMENT = env `BOOTCLASSPATH="."; export BOOTCLASSPATH; KAFFELIBRARYPATH="." ; export KAFFELIBRARYPATH ; . $(top_builddir)/BUILD_ENVIRONMENT; sed 's/.*export \(.*\)/echo \1=$$\1/' < $(top_builddir)/BUILD_ENVIRONMENT | sh`
TESTS = $(check_PROGRAMS)
CLEANFILES = *.fail *.out core *.core
all: all-am
@@ -461,6 +517,17 @@
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+clean-checkLTLIBRARIES:
+ -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+ @list='$(check_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libjniweaklib.la: $(libjniweaklib_la_OBJECTS) $(libjniweaklib_la_DEPENDENCIES)
+ $(LINK) $(libjniweaklib_la_LDFLAGS) $(libjniweaklib_la_OBJECTS) $(libjniweaklib_la_LIBADD) $(LIBS)
+
clean-checkPROGRAMS:
@list='$(check_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
@@ -476,6 +543,9 @@
jniReflect$(EXEEXT): $(jniReflect_OBJECTS) $(jniReflect_DEPENDENCIES)
@rm -f jniReflect$(EXEEXT)
$(LINK) $(jniReflect_LDFLAGS) $(jniReflect_OBJECTS) $(jniReflect_LDADD) $(LIBS)
+jniWeakTest$(EXEEXT): $(jniWeakTest_OBJECTS) $(jniWeakTest_DEPENDENCIES)
+ @rm -f jniWeakTest$(EXEEXT)
+ $(LINK) $(jniWeakTest_LDFLAGS) $(jniWeakTest_OBJECTS) $(jniWeakTest_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -486,6 +556,8 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/jniBase.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/jniExecClass.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/jniReflect.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/jniWeakTest.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/jniweaklib.Plo at am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@@ -667,7 +739,7 @@
fi; \
done
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile
@@ -699,8 +771,8 @@
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
- mostlyclean-am
+clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+ clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
@@ -749,17 +821,22 @@
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
- clean-checkPROGRAMS clean-generic clean-libtool ctags \
- distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-exec install-exec-am install-info \
- install-info-am install-man install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
+ clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+ clean-libtool ctags distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am
+
+JNIWeakTest.class: $(srcdir)/JNIWeakTest.java
+ $(JIKES) -g -classpath $(CPATH) -d . $(srcdir)/JNIWeakTest.java
+
+jniWeakTest.o: JNIWeakTest.class
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
===================================================================
Checking out kaffe/test/jni/jniWeakTest.c
RCS: /home/cvs/kaffe/kaffe/test/jni/jniWeakTest.c,v
VERS: 1.1
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe/test/jni/jniWeakTest.c Tue Jul 12 23:55:28 2005
@@ -0,0 +1,98 @@
+/*
+ * jniTestWeak.c
+ *
+ * Copyright (c) 2005
+ * The Kaffe.org's developers. See ChangeLog for details.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ */
+#include <jni.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ltdl.h>
+
+static char *concatString(const char *s1, const char *s2)
+{
+ char *s;
+
+ if (s1 == NULL)
+ s1 = "";
+ if (s2 == NULL)
+ s2 = "";
+ s = (char *) malloc(strlen(s1) + strlen(s2) + 1);
+ return strcat(strcpy(s, s1), s2);
+}
+
+int main(void)
+{
+ JavaVMInitArgs vmargs;
+ JavaVM *vm;
+ JNIEnv *env;
+ JavaVMOption myoptions[3];
+ jclass cls, scls;
+ jarray args;
+ jmethodID mainid;
+
+ /* set up libtool/libltdl dlopen emulation */
+ myoptions[0].optionString = concatString("-Xbootclasspath:", getenv("BOOTCLASSPATH"));
+ myoptions[1].optionString = concatString("-Xclasspath:", CLASSPATH_SOURCE_DIR);
+ myoptions[2].optionString = "-Xvmdebug:NATIVELIB";
+
+ vmargs.version = JNI_VERSION_1_2;
+ if (JNI_GetDefaultJavaVMInitArgs (&vmargs) < 0)
+ {
+ fprintf(stderr, " Cannot retrieve default arguments\n");
+ return 1;
+ }
+
+ vmargs.nOptions = 2;
+ vmargs.options = myoptions;
+
+ if (JNI_CreateJavaVM (&vm, (void **)&env, &vmargs) < 0)
+ {
+ fprintf(stderr, " Cannot create the Java VM\n");
+ return 1;
+ }
+
+ cls = (*env)->FindClass(env, "JNIWeakTest");
+ if ((*env)->ExceptionOccurred(env))
+ {
+ (*env)->ExceptionDescribe(env);
+ fprintf(stderr, "FindClass has failed\n");
+ return 1;
+ }
+
+ mainid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V");
+ if ((*env)->ExceptionOccurred(env))
+ {
+ fprintf(stderr, "GetStaticMethodID has failed\n");
+ return 1;
+ }
+
+ scls = (*env)->FindClass(env, "java/lang/String");
+ if ((*env)->ExceptionOccurred(env))
+ {
+ fprintf(stderr, "FindClass(java/lang/String) has failed\n");
+ return 1;
+ }
+
+ args = (*env)->NewObjectArray(env, 0, scls, 0);
+ if ((*env)->ExceptionOccurred(env))
+ {
+ fprintf(stderr, "NewObjectArray has failed\n");
+ return 1;
+ }
+
+ (*env)->CallStaticVoidMethod(env, cls, mainid, args);
+ if ((*env)->ExceptionOccurred(env))
+ {
+ fprintf(stderr, "CallStaticMethod has failed\n");
+ return 1;
+ }
+
+ (*vm)->DestroyJavaVM(vm);
+
+ return 0;
+}
===================================================================
Checking out kaffe/test/jni/jniweaklib.c
RCS: /home/cvs/kaffe/kaffe/test/jni/jniweaklib.c,v
VERS: 1.1
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe/test/jni/jniweaklib.c Tue Jul 12 23:55:28 2005
@@ -0,0 +1,7 @@
+#include <jni.h>
+
+JNIEXPORT jobject JNICALL
+Java_JNIWeakTest_testWeak(JNIEnv *env, jobject obj)
+{
+ return (*env)->NewWeakGlobalRef(env, obj);
+}
More information about the kaffe
mailing list