#-----------------------------------------------------------------------------
# 
# This is the Makefile for gnu.classpath.tools.gjdoc, a drop-in
# replacement for the Javadoc command line tool.
# 
# This Makefile contains rules to build, install, and test the package.
# Soon to be replace by a Makefile.in
#
#-----------------------------------------------------------------------------


#---- User Configuration -----------------------------------------------------
#
#  As long as this Makefile is not generated by a ./configure script,
#  please adjust the following variables manually to your match your system.

#  >>>>>>>> User configuration start 

#
#  Point this to the directory containing the JDK sources. This
#  directory should contain java/lang/Object.java
#
#USER_JAVA_SOURCE_PATH := e:/jdk1.3-full-src/src/share/classes
#USER_JAVA_SOURCE_PATH  := /usr/local/httpd/htdocs/library/javadocs/jdk1.3-full-src/src/share/classes/
## USER_JAVA_SOURCE_PATH  := "/usr/src/sablepath-0.1.3"
#JAVA_TOOLS_JAR        := d:/java/jdk1.3/lib/tools.jar
#JAVA_TOOLS_JAR         := /usr/local/java/lib/tools.jar
## JAVA_TOOLS_JAR         := src/sun.jar
#:/usr/lib/jdk1.3.1/lib/tools.jar
#RUNTIME_JAR            := /usr/local/share/kaffe/Klasses.jar

#JAVA13_CLASSES         := /usr/local/java/jre/lib/rt.jar
## JAVA13_CLASSES          := /usr/lib/jdk1.3.1/jre/lib/rt.jar
#
#  Adjust these command names to match your runtime environment.
#

JAR = fastjar
#JAVA = kaffe
JAVAC = jikes
## JAVAC = javac
#JAVAC_OPTIONS = +E
JAVA = /usr/lib/sablevm/bin/java

## JAVA := /usr/src/orp/mains/orp/Linux/opt/orp

## RUNTIME_JAR := /usr/local/netdrive/temp/cp3:`pwd`/../tmp/classes
RUNTIME_JAR=/usr/lib/sablevm/classes-1.0.5
#
#  Character used to separate path components
#
PATH_SEP := :

#  <<<<<<< User configuration end 


USE_CLASSPATH := ${JAVA_TOOLS_JAR}${PATH_SEP}${RUNTIME_JAR}${PATH_SEP}${JAVA13_CLASSES}${PATH_SEP}.


#---- Default Target ---------------------------------------------------------

#
#  Default target, used if no target is specified on command line.
#
default: lib/gjdoc.jar

#---- Compilation ------------------------------------------------------------

#
#  Java class targets for compilation
#
JAVA_CLASS_TARGETS := $(patsubst src/%.java, tmp/classes/%.class, \
			$(wildcard src/*/*/*/*.java) $(wildcard src/*/*/*.java) )

.PHONY: create_temp_dirs

#
#  Create temporary directories
#
tmp/classes:
	mkdir -p tmp/classes

#
#  Compiling .java -> .class
#
tmp/classes/%.class: src/%.java
	echo Compiling $*.java...
	cd src; \
		$(JAVAC) $(JAVAC_OPTIONS) -classpath ${USE_CLASSPATH} -d ../tmp/classes $*.java

#
#  Create a Java Archive (Jar) from the Java classes
#
lib/gjdoc.jar: tmp/classes $(JAVA_CLASS_TARGETS)
	echo "Creating lib/gjdoc.jar..."
	cd tmp/classes; \
		${JAR} cfm ../../lib/gjdoc.jar ../../src/Manifest.mf *

bin/gjdoc: lib/gjdoc.jar
	gcj --main=xnu.tools.jdoc.Main --output=bin/gjdoc lib/gjdoc.jar


#---- Installation -----------------------------------------------------------

#  (not implemented yet.)



#---- Tests/Evaluation -------------------------------------------------------

#
#  Path to Core lib source code
#
JAVA_SOURCE_PATH := ${USER_JAVA_SOURCE_PATH}

#
#  Some single class
#
FILELIST_SINGLECLASS := java.util.Random

#
#  Core packages 1.3
#
FILELIST_COREPACKAGES := \
  java.lang java.io java.net java.util java.security java.security.cert     \
  java.security.spec java.security.acl java.security.interfaces             \
  java.lang.reflect java.util.jar java.util.zip java.math

#
#  All packages 1.3
#
FILELIST_ALLPACKAGES := \
  java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd    \
  java.awt.event java.awt.font java.awt.geom java.awt.im java.awt.im.spi    \
  java.awt.image java.awt.image.renderable java.awt.print java.beans        \
  java.beans.beancontext java.io java.lang java.lang.ref java.lang.reflect  \
  java.math java.net java.rmi java.rmi.activation java.rmi.dgc              \
  java.rmi.registry java.rmi.server java.security java.security.acl         \
  java.security.cert java.security.interfaces java.security.spec java.sql   \
  java.text java.util java.util.jar java.util.zip javax.accessibility       \
  javax.naming javax.naming.directory javax.naming.event javax.naming.ldap  \
  javax.naming.spi javax.rmi javax.rmi.CORBA javax.swing javax.swing.border \
  javax.swing.colorchooser javax.swing.event javax.swing.filechooser        \
  javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal            \
  javax.swing.plaf.multi javax.swing.table javax.swing.text                 \
  javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf   \
  javax.swing.tree javax.swing.undo javax.transaction

#
#  Full packages 1.3
#
FILELIST_FULLPACKAGES := \
  ${FILELIST_ALLPACKAGES} 					\
  org.omg.CORBA org.omg.CORBA_2_3 org.omg.CORBA_2_3.portable	\
  org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage		\
  org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage		\
  org.omg.CosNaming org.omg.CosNaming.NamingContextPackage	\
  org.omg.SendingContext org.omg.stub.java.rmi


#
#  Package java.io
#
FILELIST_IOPACKAGES := \
  java.io

#
#  Package java.util
#
FILELIST_UTILPACKAGES := \
  java.util

GEN_FILES   := $(CORE_PACKAGES)
TIMER_FILES  := $(ALL_PACKAGES)

SUN_STD_DOCLET    := com.sun.tools.doclets.standard.Standard
XNU_TIMER_DOCLET  := xnu.tools.jdoc.TimerDoclet
XNU_DEBUG_DOCLET  := xnu.tools.jdoc.DebugDoclet
XNU_TEXIDOCLET    := gnu.texidoclet.Driver

SUN_JDOC_MAIN     := xnu.tools.jdoc.JavadocWrapper
XNU_JDOC_MAIN     := xnu.tools.jdoc.Main

POSTPROC_TIMER    := cat timer.out

#
# Generic target for testing Gjdoc performance on all packages
#
time-xnu-all-DRIVER := ${XNU_JDOC_MAIN}
time-xnu-all-DOCLET := ${XNU_TIMER_DOCLET}
time-xnu-all-FILES  := ${FILELIST_ALLPACKAGES}
time-xnu-all-POST   := ${POSTPROC_TIMER}
time-xnu-all-PARAMS := -Xmx256M
time-xnu-all-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Javadoc performance on all packages
#
time-sun-all-DRIVER := ${SUN_JDOC_MAIN}
time-sun-all-DOCLET := ${XNU_TIMER_DOCLET}
time-sun-all-FILES  := ${FILELIST_ALLPACKAGES}
time-sun-all-POST   := ${POSTPROC_TIMER}
time-sun-all-PARAMS := -Xmx256M
time-sun-all-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Gjdoc performance on full packages
#
time-xnu-full-DRIVER := ${XNU_JDOC_MAIN}
time-xnu-full-DOCLET := ${XNU_TIMER_DOCLET}
time-xnu-full-FILES  := ${FILELIST_FULLPACKAGES}
time-xnu-full-POST   := ${POSTPROC_TIMER}
time-xnu-full-PARAMS := -Xmx256M
time-xnu-full-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Javadoc performance on full packages
#
time-sun-full-DRIVER := ${SUN_JDOC_MAIN}
time-sun-full-DOCLET := ${XNU_TIMER_DOCLET}
time-sun-full-FILES  := ${FILELIST_FULLPACKAGES}
time-sun-full-POST   := ${POSTPROC_TIMER}
time-sun-full-PARAMS := -Xmx256M
time-sun-full-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Gjdoc performance on core packages
#
time-xnu-core-DRIVER := ${XNU_JDOC_MAIN}
time-xnu-core-DOCLET := ${XNU_TIMER_DOCLET}
time-xnu-core-FILES  := ${FILELIST_COREPACKAGES}
time-xnu-core-POST   := ${POSTPROC_TIMER}
time-xnu-core-DOCLETOPTION = -d tmp/generated/$*
time-xnu-core-PARAMS := -mx256M

#
# Generic target for testing Javadoc performance on core packages
#
time-sun-core-DRIVER := ${SUN_JDOC_MAIN}
time-sun-core-DOCLET := ${XNU_TIMER_DOCLET}
time-sun-core-FILES  := ${FILELIST_COREPACKAGES}
time-sun-core-POST   := ${POSTPROC_TIMER}
time-sun-core-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Gjdoc performance on java.io
#
time-xnu-io-DRIVER := ${XNU_JDOC_MAIN}
time-xnu-io-DOCLET := ${XNU_TIMER_DOCLET}
time-xnu-io-FILES  := ${FILELIST_IOPACKAGES}
time-xnu-io-POST   := ${POSTPROC_TIMER}
time-xnu-io-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Gjdoc performance on java.io
#
time-xnt-io-DRIVER := ${XNU_JDOC_MAIN}
time-xnt-io-DOCLET := ${XNU_TEXIDOCLET}
time-xnt-io-FILES  := ${FILELIST_IOPACKAGES}
time-xnt-io-POST   := ${POSTPROC_TIMER}
time-xnt-io-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Javadoc performance on java.io
#
time-sun-io-DRIVER := ${SUN_JDOC_MAIN}
time-sun-io-DOCLET := ${XNU_TIMER_DOCLET}
time-sun-io-FILES  := ${FILELIST_IOPACKAGES}
time-sun-io-POST   := ${POSTPROC_TIMER}
time-sun-io-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Gjdoc performance on java.io
#
prof-xnu-io-DRIVER := ${XNU_JDOC_MAIN}
prof-xnu-io-DOCLET := ${XNU_TIMER_DOCLET}
prof-xnu-io-FILES  := ${FILELIST_IOPACKAGES}
prof-xnu-io-POST   := ${POSTPROC_TIMER}
prof-xnu-io-DOCLETOPTION = -d tmp/generated/$*
prof-xnu-io-PARAMS := -Xrunhprof:cpu=samples

#
# Generic target for testing Gjdoc performance on java.io
#
time-xnu-util-DRIVER := ${XNU_JDOC_MAIN}
time-xnu-util-DOCLET := ${XNU_TIMER_DOCLET}
time-xnu-util-FILES  := ${FILELIST_UTILPACKAGES}
time-xnu-util-POST   := ${POSTPROC_TIMER}
time-xnu-util-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Javadoc performance on java.io
#
time-sun-util-DRIVER := ${SUN_JDOC_MAIN}
time-sun-util-DOCLET := ${XNU_TIMER_DOCLET}
time-sun-util-FILES  := ${FILELIST_UTILPACKAGES}
time-sun-util-POST   := ${POSTPROC_TIMER}
time-sun-util-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Gjdoc performance on java.io
#
prof-xnu-util-DRIVER := ${XNU_JDOC_MAIN}
prof-xnu-util-DOCLET := ${XNU_TIMER_DOCLET}
prof-xnu-util-FILES  := ${FILELIST_UTILPACKAGES}
prof-xnu-util-POST   := ${POSTPROC_TIMER}
prof-xnu-util-DOCLETOPTION = -d tmp/generated/$*
prof-xnu-util-PARAMS := -Xrunhprof:cpu=samples

#
# Generic target for testing Gjdoc performance on a single class
#
time-xnu-single-DRIVER := ${XNU_JDOC_MAIN}
time-xnu-single-DOCLET := ${XNU_TIMER_DOCLET}
time-xnu-single-FILES  := ${FILELIST_SINGLECLASS}
time-xnu-single-POST   := ${POSTPROC_TIMER}
time-xnu-single-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Gjdoc performance on a single class
#
time-xnt-single-DRIVER := ${XNU_JDOC_MAIN}
time-xnt-single-DOCLET := ${XNU_TEXIDOCLET}
time-xnt-single-FILES  := ${FILELIST_SINGLECLASS}
time-xnt-single-POST   := ${POSTPROC_TIMER}
time-xnt-single-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for testing Javadoc performance on a single class
#
time-sun-single-DRIVER := ${SUN_JDOC_MAIN}
time-sun-single-DOCLET := ${XNU_TIMER_DOCLET}
time-sun-single-FILES  := ${FILELIST_SINGLECLASS}
time-sun-single-POST   := ${POSTPROC_TIMER}
time-sun-single-DOCLETOPTION = -d tmp/generated/$*

#
# Generic target for producing Javadoc debug output on a single class
#
debug-sun-single-DRIVER := ${SUN_JDOC_MAIN}
debug-sun-single-DOCLET := ${XNU_DEBUG_DOCLET}
debug-sun-single-FILES  := ${FILELIST_SINGLECLASS}

#
# Generic target for producing Gjdoc debug output on a single class
#
debug-xnu-single-DRIVER := ${XNU_JDOC_MAIN}
debug-xnu-single-DOCLET := ${XNU_DEBUG_DOCLET}
debug-xnu-single-FILES  := ${FILELIST_SINGLECLASS}

gen:
	rm -Rf generated/*
	java ${XNU_JDOC_MAIN} -doclet ${SUN_STD_DOCLET} -sourcepath ${JAVA_SOURCE_PATH} -d generated $(GEN_FILES)

timer-postprocess:
	cat timer.out
	echo "TIMER postprocess"

eval-%: lib/gjdoc.jar
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	${JAVA} ${$*-PARAMS} -classpath "lib/gjdoc.jar${PATH_SEP}${USE_CLASSPATH}" ${$*-DRIVER} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		$($*-DOCLETOPTION) \
		${$*-FILES}
	${$*-POST}
	echo "'$*' success."

KISSME_INTERPRETER = /usr/local/kissme-0.13/kissme
KISSME_BOOTCLASSES = /usr/local/kissme-0.13/classpath

kissme-%: lib/gjdoc.jar
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	${KISSME_INTERPRETER} ${$*-PARAMS} -bootclasspath ${KISSME_BOOTCLASSES} -classpath "tmp/classes:/usr/local/kissme-0.13/tools" ${$*-DRIVER} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		$($*-DOCLETOPTION) \
		${$*-FILES}
	${$*-POST}
	echo "'$*' success."

ORP_INTERPRETER = /usr/src/orp/mains/orp/Linux/dbg/orp
ORP_BOOTCLASSES = /usr/local/netdrive/temp/cp3:/usr/src/classpath-0.02-modified/lib/vm/reference

orp-%: lib/gjdoc.jar
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	${ORP_INTERPRETER} ${$*-PARAMS} -classpath tmp/classes:${ORP_BOOTCLASSES} ${$*-DRIVER} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		$($*-DOCLETOPTION) \
		${$*-FILES}
	${$*-POST}
	echo "'$*' success."

GIJ_INTERPRETER = /usr/local/bin/gij
GIJ_BOOTCLASSES = 

gij-%: lib/gjdoc.jar
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	CLASSPATH=tmp/classes:${JAVA_TOOLS_JAR}; ${GIJ_INTERPRETER} ${$*-PARAMS} ${$*-DRIVER} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		$($*-DOCLETOPTION) \
		${$*-FILES} 2>gjdoc.err
	${$*-POST}
	echo "'$*' success."

gcj-%: bin/gjdoc
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	bin/gjdoc ${$*-PARAMS} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		$($*-DOCLETOPTION) \
		${$*-FILES} 2>err
	${$*-POST}
	echo "'$*' success."

KAFFE_INTERPRETER = /usr/local/bin/kaffe
KAFFE_BOOTCLASSES = /usr/local/share/kaffe/Klasses.jar

kaffe-%: lib/gjdoc.jar
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	${KAFFE_INTERPRETER} ${$*-PARAMS} -classpath ${KAFFE_BOOTCLASSES}:tmp/classes:${JAVA_TOOLS_JAR}:${JAVA13_CLASSES} ${$*-DRIVER} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		$($*-DOCLETOPTION) \
		${$*-FILES} >out
	${$*-POST}
	echo "'$*' success."

JDK118_HOME = /usr/local/jdk118_v3
JDK118_INTERPRETER = ${JDK118_HOME}/bin/java
JDK118_BOOTCLASSES = ${JDK118_HOME}/lib/classes.zip

jdk118-%: lib/gjdoc.jar
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	JAVA_HOME=${JDK118_HOME}; ${JDK118_INTERPRETER} ${$*-PARAMS} -classpath ${JDK118_BOOTCLASSES}:tmp/classes:${JAVA_TOOLS_JAR}:${JAVA13_CLASSES} ${$*-DRIVER} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		-use \
		$($*-DOCLETOPTION) \
		${$*-FILES}
	${$*-POST}
	echo "'$*' success."

JDK13_HOME = /usr/local/java
JDK13_INTERPRETER = ${JDK13_HOME}/bin/java
JDK13_BOOTCLASSES = ${JDK13_HOME}/jre/lib/rt.jar

jdk13-%: lib/gjdoc.jar
	mkdir -p tmp/generated/$*
	rm -Rf tmp/generated/$*/*
	JAVA_HOME=${JDK13_HOME}; ${JDK13_INTERPRETER} ${$*-PARAMS} -classpath ${JDK13_BOOTCLASSES}:tmp/classes:${JAVA_TOOLS_JAR}:${JAVA13_CLASSES} ${$*-DRIVER} \
		-doclet ${$*-DOCLET} \
		-sourcepath ${JAVA_SOURCE_PATH} \
		$($*-DOCLETOPTION) \
		${$*-FILES}
	${$*-POST}
	echo "'$*' success."
