Basic Installation
==================

  You need to download Sun's JDK1.1.x or JDK1.2 distribution (or
  a port to another OS.. it doesn't matter.)

  you need to point the configure script at your jdk installation
  directory with the --with-jdk configure option.

  for example:

  ./configure --with-jdk=/usr/local/jdk1.1.5
  gmake  (gnu make, thanks to the use of automake, is required).
  gmake install

Avoiding name conflicts with JDK
================================

If you add --program-suffix=-japhar to configure, all programs are
installed with -japhar appended.  This will avoid name collitions with
JDK.  The only problem is that japhar itself is installed as
japhar-japhar.  :-(

Building a debug or profiling version
=====================================

configure accepts the following japhar specific flags:

  --enable-debugging
  --enable-logging
  --enable-profiling

--enable-debugging enables certain debugging code throughout the
source.  If you're planning to hack on the code in any way, you
should use this option.

--enable-logging enables specific logging constructs sprinkled
throughout the code.  A more detailed explanation follows.  You
should only enable logging if you want to track down specific problems
and running a debugger just isn't enough, as it has a serious effect
on performance.

--enable-profiling causes the -pg flag to be added to CFLAGS, and
turns off dynamic loading of native methods.

Logging
=======

Logging in the java runtime is configurable at runtime, via the
JAPHAR_LOG environment variable.  It has the following form:

LOGNAME,LEVEL[,LOG-FILE](:LOGNAME,LEVEL[,LOG-FILE])*

For example:

  export JAPHAR_LOG=ArchDLL,1,dll.out:ObjectRef,2,obj.out,Resolve,2

This would log all ArchDLL spew of level 1 or below to 'dll.out', all
ObjectRef logging of level 2 or below to obj.out.  All Resolve logging
of level 2 or below would go to stdout.

The following logging packages are used:

ArrayClass		"Fake" classes for arrays, created on demand.
ClassRepository		The hash table of loaded classes.
ParseClass		The code used to parse a .class file into a
			ClazzFile structure.
Exceptions		Exception throwing (and catching) code.
Interp			Generic interpreter logging.
InterpLoop		Logging about the interpreter loop (which
			opcode is being executed, etc.)
NativeGlue		Glue used is java->C calls, as well as C->java
			calls.
ObjectRef		Spew dealing with the runtime representation
			of objects.
Resolve			Loading and resolving classes.
SigParse		Parsing java signatures into the Signature
			structure.
ArchDLL			Dynamic loading of shared libraries.
Native			Generic log dealing with native methods.

... there may be more...

You can use the LOGNAME of "ALL" as a wildcard.  The way the
JAPHAR_LOG variable parsing works, you can use ALL as well as other
LOGNAME's to implement other logging strategies.  For example:

  export JAPHAR_LOG=AchDLL,1,dll.out:ALL,3,all.out

would log ArchDLL, level 1 (or below), to dll.out, and everything else
at level 3 to all.out.

Which JDK to slurp classes.zip from?
====================================

The following are known to work:
  - JDK 1.1.5v7 for Linux glibc from Blackdown
  - ftp://ftp.freebsd.org/pub/FreeBSD/packages/All/jdk1.1.6.V98-8-14.tar.gz
  - JDK 1.2fcs for Solaris

The following _do not_ work:
  - JDK 1.1.5 for Solaris
  - JDK 1.1.6 for Solaris
  - JDK 1.1.6v2 for Linux glibc from Blackdown
