From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13019 invoked by alias); 8 May 2008 03:41:04 -0000 Received: (qmail 12994 invoked by uid 367); 8 May 2008 03:41:04 -0000 Date: Thu, 08 May 2008 03:41:00 -0000 Message-ID: <20080508034103.12979.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Generate a single jni wrapper; pre-compile. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 59e7154ee8e6ca7416560444f29180583e11f346 X-Git-Newrev: 2a7c99edb7f6fde358b17281aa82837b0a1b4229 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00201.txt.bz2 The branch, master has been updated via 2a7c99edb7f6fde358b17281aa82837b0a1b4229 (commit) from 59e7154ee8e6ca7416560444f29180583e11f346 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 2a7c99edb7f6fde358b17281aa82837b0a1b4229 Author: Andrew Cagney Date: Wed May 7 23:37:37 2008 -0400 Generate a single jni wrapper; pre-compile. frysk-common/ChangeLog 2008-05-07 Andrew Cagney * Makefile.gen.sh (JNIXX_CLASSES): Generate list of classes. (jni.hxx, jni.cxx, jni.hxx.gch): Generate JNIXX file rules. (JNIXX_BUILT): Delete. * Makefile.rules (JNIXX): Delete. (%-jni.hxx, %-jni.cxx): Delete. frysk-sys/frysk/config/ChangeLog 2008-05-07 Andrew Cagney * jni/BuildCompiler.cxx: Include "jni.hxx". * jni/PrefixFactory.cxx-in: Ditto. * jni/Host.cxx-in: Ditto. * jni/FryskVersion.cxx-in: Ditto. frysk-sys/frysk/jnixx/ChangeLog 2008-05-07 Andrew Cagney * jni/Native.cxx: Include jni.hxx; fully qualify jnixx::env. * print.cxx: Ditto. * print.hxx: Ditto. * exceptions.cxx: Ditto. * exceptions.hxx: Ditto. * Main.java: Accept a list of classes. frysk-sys/frysk/rsl/ChangeLog 2008-05-07 Andrew Cagney * jni/Log.cxx: Include jni.hxx; fully qualify jnixx::env. * jni/Log.hxx: Ditto. frysk-sys/frysk/sys/ChangeLog 2008-05-07 Andrew Cagney * jni/AuditLibs.cxx: Include jni.hxx; fully qualify jnixx::env. * jni/Wait.cxx: Ditto. * jni/Tid.cxx: Ditto. * jni/Uname.cxx: Ditto. * jni/StatelessFile.cxx: Ditto. * jni/SignalSet.cxx: Ditto. * jni/Signal.cxx-sh: Ditto. * jni/PseudoTerminal.cxx: Ditto. * jni/Poll.cxx: Ditto. * jni/Pipe.cxx: Ditto. * jni/Pid.cxx: Ditto. * jni/Itimer.cxx: Ditto. * jni/Fork.cxx: Ditto. * jni/FileDescriptor.cxx: Ditto. * jni/Exec.cxx: Ditto. * jni/DaemonFactory.cxx: Ditto. * jni/ChildFactory.cxx: Ditto. frysk-sys/frysk/sys/proc/ChangeLog 2008-05-07 Andrew Cagney * jni/AuxvBuilder.cxx: Include jni.hxx. * jni/Status.cxx: Ditto. * jni/Stat.cxx: Ditto. * jni/ProcBuilder.cxx: Ditto. * jni/MapsBuilder.cxx: Ditto. * jni/Exe.cxx: Ditto. * jni/CmdLineBuilder.cxx: Ditto. frysk-sys/frysk/sys/ptrace/ChangeLog 2008-05-07 Andrew Cagney * jni/AddressSpace.cxx: Include jni.hxx. * jni/Utrace.cxx: Ditto. * jni/RegisterSet.cxx: Ditto. * jni/Ptrace.cxx: Ditto. frysk-sys/frysk/sys/termios/ChangeLog 2008-05-07 Andrew Cagney * jni/Control.cxx: Include jni.hxx. * jni/Termios.cxx: Ditto. * jni/Speed.cxx: Ditto. * jni/Special.cxx: Ditto. * jni/Output.cxx: Ditto. * jni/Mode.cxx: Ditto. * jni/Local.cxx: Ditto. * jni/Input.cxx: Ditto. * jni/Flush.cxx: Ditto. * jni/Flow.cxx: Ditto. frysk-sys/frysk/testbed/ChangeLog 2008-05-07 Andrew Cagney * jni/LocalMemory.cxx: Include jni.hxx; fully qualify names. * jni/Tee.cxx: Ditto. frysk-sys/lib/dwfl/ChangeLog 2008-05-07 Andrew Cagney * jni/DwarfDie.cxx: Include jni.hxx. * jni/ElfSymbol.cxx: Ditto. * jni/ElfSection.cxx: Ditto. * jni/ElfRel.cxx: Ditto. * jni/ElfPrXFPRegSet.cxx: Ditto. * jni/ElfPrstatus.cxx: Ditto. * jni/ElfPrpsinfo.cxx: Ditto. * jni/ElfPrFPRegSet.cxx: Ditto. * jni/ElfPrAuxv.cxx: Ditto. * jni/ElfNhdr.cxx: Ditto. * jni/ElfDynamic.cxx: Ditto. * jni/ElfData.cxx: Ditto. * jni/Elf.cxx: Ditto. * jni/Dwarf.cxx: Ditto. * jni/ElfArchiveSymbol.cxx: Ditto. * jni/DwflModule.cxx: Ditto. * jni/DwflLine.cxx: Ditto. * jni/Dwfl.cxx: Ditto. * jni/DwException.cxx: Ditto. frysk-sys/lib/opcodes/ChangeLog 2008-05-07 Andrew Cagney * jni/Disassembler.cxx: Include jni.hxx. frysk-sys/lib/stdcpp/ChangeLog 2008-05-07 Andrew Cagney * jni/Demangler.cxx: Include jni.hxx; fully qualify names. frysk-sys/lib/unwind/ChangeLog 2008-05-07 Andrew Cagney * jni/ElfImage.cxx: Include jni.hxx. * jni/UnwindX86.cxx: Ditto. * jni/UnwindX8664.cxx: Ditto. * jni/UnwindPPC64.cxx: Ditto. * jni/UnwindPPC32.cxx: Ditto. * jni/Unwind.cxx: Ditto. ----------------------------------------------------------------------- Summary of changes: frysk-common/ChangeLog | 6 ++ frysk-common/Makefile.gen.sh | 99 +++++++---------------- frysk-common/Makefile.rules | 20 ----- frysk-sys/frysk/config/ChangeLog | 5 + frysk-sys/frysk/config/jni/BuildCompiler.cxx | 10 +- frysk-sys/frysk/config/jni/FryskVersion.cxx-in | 4 +- frysk-sys/frysk/config/jni/Host.cxx-in | 6 +- frysk-sys/frysk/config/jni/PrefixFactory.cxx-in | 18 ++-- frysk-sys/frysk/jnixx/ChangeLog | 7 ++ frysk-sys/frysk/jnixx/ClassVisitor.java | 5 + frysk-sys/frysk/jnixx/ClassWalker.java | 2 +- frysk-sys/frysk/jnixx/Main.java | 49 +++++------ frysk-sys/frysk/jnixx/exceptions.cxx | 8 +- frysk-sys/frysk/jnixx/exceptions.hxx | 6 +- frysk-sys/frysk/jnixx/jni/Native.cxx | 2 +- frysk-sys/frysk/jnixx/print.cxx | 6 +- frysk-sys/frysk/jnixx/print.hxx | 4 +- frysk-sys/frysk/rsl/ChangeLog | 5 + frysk-sys/frysk/rsl/jni/Log.cxx | 10 +- frysk-sys/frysk/rsl/jni/Log.hxx | 8 +- frysk-sys/frysk/sys/ChangeLog | 18 ++++ frysk-sys/frysk/sys/jni/AuditLibs.cxx | 2 +- frysk-sys/frysk/sys/jni/ChildFactory.cxx | 2 +- frysk-sys/frysk/sys/jni/DaemonFactory.cxx | 2 +- frysk-sys/frysk/sys/jni/Exec.cxx | 2 +- frysk-sys/frysk/sys/jni/FileDescriptor.cxx | 2 +- frysk-sys/frysk/sys/jni/Fork.cxx | 2 +- frysk-sys/frysk/sys/jni/Itimer.cxx | 2 +- frysk-sys/frysk/sys/jni/Pid.cxx | 6 +- frysk-sys/frysk/sys/jni/Pipe.cxx | 2 +- frysk-sys/frysk/sys/jni/Poll.cxx | 2 +- frysk-sys/frysk/sys/jni/PseudoTerminal.cxx | 8 +- frysk-sys/frysk/sys/jni/Signal.cxx-sh | 20 +++--- frysk-sys/frysk/sys/jni/SignalSet.cxx | 2 +- frysk-sys/frysk/sys/jni/StatelessFile.cxx | 2 +- frysk-sys/frysk/sys/jni/Tid.cxx | 4 +- frysk-sys/frysk/sys/jni/Uname.cxx | 2 +- frysk-sys/frysk/sys/jni/Wait.cxx | 2 +- frysk-sys/frysk/sys/proc/ChangeLog | 10 +++ frysk-sys/frysk/sys/proc/jni/AuxvBuilder.cxx | 2 +- frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx | 2 +- frysk-sys/frysk/sys/proc/jni/Exe.cxx | 2 +- frysk-sys/frysk/sys/proc/jni/MapsBuilder.cxx | 2 +- frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx | 2 +- frysk-sys/frysk/sys/proc/jni/Stat.cxx | 2 +- frysk-sys/frysk/sys/proc/jni/Status.cxx | 2 +- frysk-sys/frysk/sys/ptrace/ChangeLog | 7 ++ frysk-sys/frysk/sys/ptrace/jni/AddressSpace.cxx | 2 +- frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx | 2 +- frysk-sys/frysk/sys/ptrace/jni/RegisterSet.cxx | 2 +- frysk-sys/frysk/sys/ptrace/jni/Utrace.cxx | 2 +- frysk-sys/frysk/sys/termios/ChangeLog | 13 +++ frysk-sys/frysk/sys/termios/jni/Control.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Flow.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Flush.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Input.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Local.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Mode.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Output.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Special.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Speed.cxx | 2 +- frysk-sys/frysk/sys/termios/jni/Termios.cxx | 2 +- frysk-sys/frysk/testbed/ChangeLog | 3 + frysk-sys/frysk/testbed/jni/LocalMemory.cxx | 18 ++-- frysk-sys/frysk/testbed/jni/Tee.cxx | 4 +- frysk-sys/lib/dwfl/ChangeLog | 20 +++++ frysk-sys/lib/dwfl/jni/DwException.cxx | 2 +- frysk-sys/lib/dwfl/jni/Dwarf.cxx | 2 +- frysk-sys/lib/dwfl/jni/DwarfDie.cxx | 2 +- frysk-sys/lib/dwfl/jni/Dwfl.cxx | 2 +- frysk-sys/lib/dwfl/jni/DwflLine.cxx | 2 +- frysk-sys/lib/dwfl/jni/DwflModule.cxx | 2 +- frysk-sys/lib/dwfl/jni/Elf.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfArchiveSymbol.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfData.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfDynamic.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfNhdr.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfPrAuxv.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfPrFPRegSet.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfPrXFPRegSet.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfPrpsinfo.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfPrstatus.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfRel.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfSection.cxx | 2 +- frysk-sys/lib/dwfl/jni/ElfSymbol.cxx | 2 +- frysk-sys/lib/opcodes/ChangeLog | 4 + frysk-sys/lib/opcodes/jni/Disassembler.cxx | 2 +- frysk-sys/lib/stdcpp/ChangeLog | 2 + frysk-sys/lib/stdcpp/jni/Demangler.cxx | 8 +- frysk-sys/lib/unwind/ChangeLog | 9 ++ frysk-sys/lib/unwind/jni/ElfImage.cxx | 2 +- frysk-sys/lib/unwind/jni/Unwind.cxx | 2 +- frysk-sys/lib/unwind/jni/UnwindPPC32.cxx | 2 +- frysk-sys/lib/unwind/jni/UnwindPPC64.cxx | 2 +- frysk-sys/lib/unwind/jni/UnwindX86.cxx | 2 +- frysk-sys/lib/unwind/jni/UnwindX8664.cxx | 2 +- 96 files changed, 302 insertions(+), 252 deletions(-) First 500 lines of diff: diff --git a/frysk-common/ChangeLog b/frysk-common/ChangeLog index 5d9e60a..1650286 100644 --- a/frysk-common/ChangeLog +++ b/frysk-common/ChangeLog @@ -1,5 +1,11 @@ 2008-05-07 Andrew Cagney + * Makefile.gen.sh (JNIXX_CLASSES): Generate list of classes. + (jni.hxx, jni.cxx, jni.hxx.gch): Generate JNIXX file rules. + (JNIXX_BUILT): Delete. + * Makefile.rules (JNIXX): Delete. + (%-jni.hxx, %-jni.cxx): Delete. + * Makefile.gen.sh (generate_jni_header, generate_jni_dependency): Delete; do not generate JAVAH headers. diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh index 67045b8..42f509f 100755 --- a/frysk-common/Makefile.gen.sh +++ b/frysk-common/Makefile.gen.sh @@ -662,78 +662,20 @@ generate_cni_header () { rm -f $$.tmp } -# Grep the *.cxx and *.hxx files forming a list of included files. -# Assume these are all generated from .class files found in the master -# .jar. +# Grep the *.cxx and *.hxx files forming a list of classes that are +# native. -print_header "... jnixx headers" -cat < files.jnixx -while read action m h j; do - echo "# action=$action m=$m h=$h" - if test "$action" = "minclude" ; then - # Assume file defining macro depends on this file - automake_variable $m = \$\($_file\) - elif has_java_source ${h} ; then - j=`echo ${h} | tr '[_]' '[/]'` - automake_variable lib${GEN_MAKENAME}_jni_a_SOURCES += ${h}-jni.cxx - cat < \$@.tmp + mv \$@.tmp \$@ +jni.hxx.gch: jni.hxx + \$(CXXCOMPILE) -c -x c++-header jni.hxx +jni.cxx: \$(jnixx_sources) | ${GEN_DIRNAME}.jar jni.hxx.gch + CLASSPATH=\$(GEN_DIRNAME).jar:\$(CLASSPATH) \ + \$(JAVA) frysk.jnixx.Main cxx \$(JNIXX_CLASSES) \ + > \$@.tmp + mv \$@.tmp \$@ EOF fi diff --git a/frysk-common/Makefile.rules b/frysk-common/Makefile.rules index 56839bc..c273f77 100644 --- a/frysk-common/Makefile.rules +++ b/frysk-common/Makefile.rules @@ -391,26 +391,6 @@ $(GEN_SOURCENAME)/JUnitTests.java: files-java.list -o $$outputdir/$$outputfile \ $(GCJHFLAGS) $$class ; \ done - -# Generate one or more .hxx files, one per named class, and using -# JNIXX, from the corresponding .java file. - -# This assumes that the directory's .jar file has already been built. - -JNIXX = \ - set -e ; \ - class=`echo $@ | sed -e 's/\.[ch]xx$$//' -e 's/-jni//' -e 's,/,.,g'` ; \ - suffix=`echo $@ | sed -e 's/^.*\.\([ch]xx\)$$/\1/'` ; \ - echo "$$class $$suffix => $@" ; \ - rm -f $@.tmp ; \ - CLASSPATH=$(GEN_DIRNAME).jar:$(CLASSPATH) \ - $(JAVA) frysk.jnixx.Main $$class $$suffix \ - > $@.tmp ; \ - mv $@.tmp $@ -%-jni.hxx: %.java - $(JNIXX) -%-jni.cxx: %.java - $(JNIXX) # Shared library rule (for moment assume that .a contains PIC code). diff --git a/frysk-sys/frysk/config/ChangeLog b/frysk-sys/frysk/config/ChangeLog index 64ae16e..3d53fc4 100644 --- a/frysk-sys/frysk/config/ChangeLog +++ b/frysk-sys/frysk/config/ChangeLog @@ -1,5 +1,10 @@ 2008-05-07 Andrew Cagney + * jni/BuildCompiler.cxx: Include "jni.hxx". + * jni/PrefixFactory.cxx-in: Ditto. + * jni/Host.cxx-in: Ditto. + * jni/FryskVersion.cxx-in: Ditto. + * jni/BuildCompiler.cxx: Pass jnixx::env by value. * jni/PrefixFactory.cxx-in: Ditto. * jni/Host.cxx-in: Ditto. diff --git a/frysk-sys/frysk/config/jni/BuildCompiler.cxx b/frysk-sys/frysk/config/jni/BuildCompiler.cxx index 208ac20..ff741ff 100644 --- a/frysk-sys/frysk/config/jni/BuildCompiler.cxx +++ b/frysk-sys/frysk/config/jni/BuildCompiler.cxx @@ -37,11 +37,11 @@ // version and license this file solely under the GPL without // exception. -#include "frysk/config/BuildCompiler-jni.hxx" +#include "jni.hxx" jint -frysk::config::BuildCompiler::getVersion(jnixx::env env) { +frysk::config::BuildCompiler::getVersion(::jnixx::env env) { #ifdef __GNUC__ return (jint) __GNUC__; #else @@ -50,7 +50,7 @@ frysk::config::BuildCompiler::getVersion(jnixx::env env) { } jint -frysk::config::BuildCompiler::getMinorVersion(jnixx::env env) { +frysk::config::BuildCompiler::getMinorVersion(::jnixx::env env) { #ifdef __GNUC_MINOR__ return (jint) __GNUC_MINOR__; #else @@ -59,7 +59,7 @@ frysk::config::BuildCompiler::getMinorVersion(jnixx::env env) { } jint -frysk::config::BuildCompiler::getPatchLevel(jnixx::env env) { +frysk::config::BuildCompiler::getPatchLevel(::jnixx::env env) { #ifdef __GNUC_PATCHLEVEL__ return (jint) __GNUC_PATCHLEVEL__; #else @@ -68,7 +68,7 @@ frysk::config::BuildCompiler::getPatchLevel(jnixx::env env) { } jint -frysk::config::BuildCompiler::getRHRelease(jnixx::env env) { +frysk::config::BuildCompiler::getRHRelease(::jnixx::env env) { #ifdef __GNUC_RH_RELEASE__ return (jint) __GNUC_RH_RELEASE__; #else diff --git a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in index 8952142..12cf78e 100644 --- a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in +++ b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in @@ -37,9 +37,9 @@ // version and license this file solely under the GPL without // exception. -#include "frysk/config/FryskVersion-jni.hxx" +#include "jni.hxx" java::lang::String -frysk::config::FryskVersion::version(jnixx::env env) { +frysk::config::FryskVersion::version(::jnixx::env env) { return env.newStringUTF("@VERSION@"); } diff --git a/frysk-sys/frysk/config/jni/Host.cxx-in b/frysk-sys/frysk/config/jni/Host.cxx-in index f756fa3..7662acb 100644 --- a/frysk-sys/frysk/config/jni/Host.cxx-in +++ b/frysk-sys/frysk/config/jni/Host.cxx-in @@ -39,14 +39,14 @@ // version and license this file solely under the GPL without // exception. -#include "frysk/config/Host-jni.hxx" +#include "jni.hxx" jint -frysk::config::Host::wordSize(jnixx::env env) { +frysk::config::Host::wordSize(::jnixx::env env) { return sizeof(long) * 8; } java::lang::String -frysk::config::Host::cpuXXX(jnixx::env env) { +frysk::config::Host::cpuXXX(::jnixx::env env) { return env.newStringUTF("@host_cpu@"); } diff --git a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in index b377d02..7e1c62c 100644 --- a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in +++ b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in @@ -39,45 +39,45 @@ // version and license this file solely under the GPL without // exception. -#include "frysk/config/PrefixFactory-jni.hxx" +#include "jni.hxx" java::lang::String -frysk::config::PrefixFactory::gladeDir(jnixx::env env) { +frysk::config::PrefixFactory::gladeDir(::jnixx::env env) { return env.newStringUTF("@gladedir@"); } java::lang::String -frysk::config::PrefixFactory::helpDir(jnixx::env env) { +frysk::config::PrefixFactory::helpDir(::jnixx::env env) { return env.newStringUTF("@helpdir@"); } java::lang::String -frysk::config::PrefixFactory::imagesDir(jnixx::env env) { +frysk::config::PrefixFactory::imagesDir(::jnixx::env env) { return env.newStringUTF("@imagesdir@"); } java::lang::String -frysk::config::PrefixFactory::binDir(jnixx::env env) { +frysk::config::PrefixFactory::binDir(::jnixx::env env) { return env.newStringUTF("@bindir@"); } java::lang::String -frysk::config::PrefixFactory::pkgDataDir(jnixx::env env) { +frysk::config::PrefixFactory::pkgDataDir(::jnixx::env env) { return env.newStringUTF("@pkgdatadir@"); } java::lang::String -frysk::config::PrefixFactory::pkgLibDir(jnixx::env env) { +frysk::config::PrefixFactory::pkgLibDir(::jnixx::env env) { return env.newStringUTF("@pkglibdir@"); } java::lang::String -frysk::config::PrefixFactory::pkgLib32Dir(jnixx::env env) { +frysk::config::PrefixFactory::pkgLib32Dir(::jnixx::env env) { return env.newStringUTF("@pkglib32dir@"); } java::lang::String -frysk::config::PrefixFactory::sourceDir(jnixx::env env) { +frysk::config::PrefixFactory::sourceDir(::jnixx::env env) { // An educated guess. return env.newStringUTF("@prefix@/src/debug/frysk-@VERSION@"); } diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog index 70482f3..48251d9 100644 --- a/frysk-sys/frysk/jnixx/ChangeLog +++ b/frysk-sys/frysk/jnixx/ChangeLog @@ -1,5 +1,12 @@ 2008-05-07 Andrew Cagney + * jni/Native.cxx: Include jni.hxx; fully qualify jnixx::env. + * print.cxx: Ditto. + * print.hxx: Ditto. + * exceptions.cxx: Ditto. + * exceptions.hxx: Ditto. + * Main.java: Accept a list of classes. + * Printer.java: Generate passing jnixx::env by value, not reference. * Native.java: New. * jni/Native.cxx: New. diff --git a/frysk-sys/frysk/jnixx/ClassVisitor.java b/frysk-sys/frysk/jnixx/ClassVisitor.java index a83be56..20f34e2 100644 --- a/frysk-sys/frysk/jnixx/ClassVisitor.java +++ b/frysk-sys/frysk/jnixx/ClassVisitor.java @@ -44,6 +44,11 @@ import java.lang.reflect.Method; import java.lang.reflect.Constructor; abstract class ClassVisitor { + void visit(Class[] classes) { + for (int i = 0; i < classes.length; i++) { + visit(classes[i]); + } + } void visit(Class klass) { acceptComponent(klass.getComponentType()); Class[] interfaces = klass.getInterfaces(); diff --git a/frysk-sys/frysk/jnixx/ClassWalker.java b/frysk-sys/frysk/jnixx/ClassWalker.java index 2154f76..fd89899 100644 --- a/frysk-sys/frysk/jnixx/ClassWalker.java +++ b/frysk-sys/frysk/jnixx/ClassWalker.java @@ -47,7 +47,7 @@ import java.util.HashSet; abstract class ClassWalker { private final Set visited = new HashSet(); - private void walk(Class[] klasses) { + void walk(Class[] klasses) { for (int i = 0; i < klasses.length; i++) { walk(klasses[i]); } diff --git a/frysk-sys/frysk/jnixx/Main.java b/frysk-sys/frysk/jnixx/Main.java index d2b5832..4b52314 100644 --- a/frysk-sys/frysk/jnixx/Main.java +++ b/frysk-sys/frysk/jnixx/Main.java @@ -43,47 +43,44 @@ import java.io.PrintWriter; class Main { - private static void printHxxFile(Printer p, Class klass) { - String header = klass.getName().replaceAll("\\.", "_") + "_jni_hxx"; - p.println("#ifndef " + header); - p.println("#define " + header); - p.println(); + private static void printHxxFile(Printer p, Class[] classes) { p.println("// Get declarations."); p.println("#include \"frysk/jnixx/jnixx.hxx\""); - new PrintNamespaces(p).walk(klass); - new PrintDeclarations(p).walk(klass); + new PrintNamespaces(p).walk(classes); + new PrintDeclarations(p).walk(classes); p.println(); p.println("// Get definitions."); p.println("#include \"frysk/jnixx/jnixx.hxx\""); - new PrintHxxDefinitions(p).walk(klass); - p.println(); - p.println("#endif"); + new PrintHxxDefinitions(p).walk(classes); } - private static void printCxxFile(Printer p, Class klass) { - p.print("#include \""); - p.printHeaderFileName(klass); - p.println("\""); + private static void printCxxFile(Printer p, Class[] classes) { + printHxxFile(p, classes); // #include p.println(); - p.print("jclass "); - p.printQualifiedCxxName(klass); - p.println("::_class;"); - new PrintCxxDefinitions(p).visit(klass); + for (int i = 0; i < classes.length; i++) { + p.print("jclass "); + p.printQualifiedCxxName(classes[i]); + p.println("::_class;"); + } + new PrintCxxDefinitions(p).visit(classes); } public static void main(String[] args) throws ClassNotFoundException { - if (args.length != 2) { - throw new RuntimeException("Usage: jnixx "); + if (args.length < 2) { + throw new RuntimeException("Usage: jnixx cxx}hxx ..."); } - Class klass = Class.forName(args[0], false, - Main.class.getClassLoader()); - Printer p = new Printer(new PrintWriter(System.out)); + Class[] classes = new Class[args.length - 1]; + for (int i = 0; i < classes.length; i++) { + classes[i] = Class.forName(args[i + 1], false, + Main.class.getClassLoader()); + } - if (args[1].equals("hxx")) - printHxxFile(p, klass); + Printer p = new Printer(new PrintWriter(System.out)); + if (args[0].equals("hxx")) + printHxxFile(p, classes); else - printCxxFile(p, klass); + printCxxFile(p, classes); p.flush(); } } diff --git a/frysk-sys/frysk/jnixx/exceptions.cxx b/frysk-sys/frysk/jnixx/exceptions.cxx index 1f794f7..d932c9c 100644 --- a/frysk-sys/frysk/jnixx/exceptions.cxx +++ b/frysk-sys/frysk/jnixx/exceptions.cxx @@ -43,19 +43,19 @@ #include #include -#include "frysk/sys/Errno-jni.hxx" +#include "jni.hxx" #include "frysk/jnixx/exceptions.hxx" void -errnoException(jnixx::env& env, int error, const char *prefix) { +errnoException(::jnixx::env& env, int error, const char *prefix) { // Hack; for moment just throw something. runtimeException(env, "not implemented: %s#%d#%s", __FILE__, __LINE__, __func__); } void -errnoException(jnixx::env& env, int error, const char *prefix, +errnoException(::jnixx::env& env, int error, const char *prefix, const char *fmt, ...) { // Hack; for moment just throw something. runtimeException(env, "not implemented: %s#%d#%s", @@ -63,7 +63,7 @@ errnoException(jnixx::env& env, int error, const char *prefix, } void -runtimeException(jnixx::env& env, const char *fmt, ...) { +runtimeException(::jnixx::env& env, const char *fmt, ...) { jclass cls = env.findClass("java/lang/RuntimeException"); va_list ap; va_start(ap, fmt); diff --git a/frysk-sys/frysk/jnixx/exceptions.hxx b/frysk-sys/frysk/jnixx/exceptions.hxx index 8173b02..877356c 100644 --- a/frysk-sys/frysk/jnixx/exceptions.hxx +++ b/frysk-sys/frysk/jnixx/exceptions.hxx @@ -42,13 +42,13 @@ * code return. */ -extern void errnoException(jnixx::env& env, int error, const char *prefix) +extern void errnoException(::jnixx::env& env, int error, const char *prefix) __attribute__((noreturn)); -extern void errnoException(jnixx::env& env, int error, const char *prefix, +extern void errnoException(::jnixx::env& env, int error, const char *prefix, const char *fmt, ...) hooks/post-receive -- frysk system monitor/debugger