all : java2 devdoc source

ifndef JDK2PATH
JDK2PATH=/jdk1.2.2
endif

ifndef JDK1PATH
JDK1PATH=/jdk1.1.7
endif

ifndef SWINGJAR
SWINGJAR=$(JDK1PATH)/lib/swing.jar
endif

ifndef PATHSEPARATOR
PATHSEPARATOR = \\
endif

JDK11=jdk11

java2 : java2_debug java2_release;
java1 : java1_debug java1_release;

#Root for all source directories:

##############################################################################
#Read packages:
##############################################################################

ROOT_PACKAGE =de/jbible
BASE_PACKAGE =$(ROOT_PACKAGE)
OUTDIR_ROOT = build

# Create targets:
PACKAGE = $(BASE_PACKAGE)
include $(PACKAGE)/filelist.mak
PACKAGE = $(BASE_PACKAGE)/core
include $(PACKAGE)/filelist.mak
PACKAGE = $(BASE_PACKAGE)/bible
include $(PACKAGE)/filelist.mak

#Create targets for tools
BASE_PACKAGE = $(ROOT_PACKAGE)/tool

PACKAGE = $(BASE_PACKAGE)/swinglang
include $(PACKAGE)/filelist.mak

# Create targets for services:
BASE_PACKAGE =$(ROOT_PACKAGE)/service

PACKAGE = $(BASE_PACKAGE)/aboutbox
include $(PACKAGE)/filelist.mak
PACKAGE = $(BASE_PACKAGE)/debugwindow
include $(PACKAGE)/filelist.mak
PACKAGE = $(BASE_PACKAGE)/mainwindow
include $(PACKAGE)/filelist.mak
PACKAGE = $(BASE_PACKAGE)/importdbg
include $(PACKAGE)/filelist.mak
PACKAGE = $(BASE_PACKAGE)/importdialog
include $(PACKAGE)/filelist.mak

##############################################################################
# Global used Variables
##############################################################################

ALL_MODULES = 	    $(MAIN_FILES) \
                    $(CORE_FILES) 	\
                    $(BIBLE_FILES)  \
					$(SERVICE_ABOUTBOX_FILES)	\
                    $(SERVICE_DEBUG_WINDOW_FILES)	\
                    $(SERVICE_IMPORT_DBG_FILES)\
                    $(SERVICE_IMPORT_DIALOG_FILES)\
					$(SERVICE_MAINWINDOW_FILES)	\
					$(TOOL_SWINGLANG_FILES)	\
                    $(TOOL_SWINGMISC_FILES) \
                    Makefile

DEB_OUTDIR=$(OUTDIR_ROOT)/debug
REL_OUTDIR=$(OUTDIR_ROOT)/release
DEVDOC_OUTDIR=$(OUTDIR_ROOT)/devdoc

MANIFEST = $(filter %.mf,$(ALL_MODULES))


##############################################################################
#Debug Rules java2
##############################################################################

DEB_JAR = jbible_debug.jar
DEB_TARGET = $(filter-out %.doc.gif, $(patsubst %,$(DEB_OUTDIR)/%,$(ALL_MODULES)))


java2_debug : $(DEB_OUTDIR)/$(DEB_JAR)

$(DEB_OUTDIR)/%.jar : $(DEB_OUTDIR) $(filter %.class,$(DEB_TARGET)) $(filter %.gif,$(DEB_TARGET)) $(filter %.prop,$(DEB_TARGET))
	cd $(DEB_OUTDIR); $(JDK2PATH)/bin/jar cmf ../../$(MANIFEST) $(notdir $@) de

$(DEB_OUTDIR) :
	mkdir -p $(DEB_OUTDIR)

$(filter %.class,$(DEB_TARGET)): $(DEB_OUTDIR)/%.class : %.java
	$(JDK2PATH)/bin/javac -g -target 1.2 -deprecation -classpath . -d $(DEB_OUTDIR) $<

$(filter %.gif,$(DEB_TARGET)): $(DEB_OUTDIR)/%.gif: %.gif
	cp $< $@

$(filter %.prop,$(DEB_TARGET)): $(DEB_OUTDIR)/%.prop: %.prop
	cp $< $@


##############################################################################
# Release Rules java2
##############################################################################

REL_JAR = jbible.jar
REL_TARGET = $(filter-out %.doc.gif, $(patsubst %,$(REL_OUTDIR)/%,$(ALL_MODULES)))

java2_release: $(REL_OUTDIR)/$(REL_JAR)

$(REL_OUTDIR)/$(REL_JAR) : $(REL_OUTDIR) $(filter %.class,$(REL_TARGET)) $(filter %.gif,$(REL_TARGET)) $(filter %.prop,$(REL_TARGET))
	cd $(REL_OUTDIR); $(JDK2PATH)/bin/jar cmf ../../$(MANIFEST) $(notdir $@) de

$(REL_OUTDIR) :
	mkdir -p $(REL_OUTDIR)

$(filter %.class,$(REL_TARGET)): $(REL_OUTDIR)/%.class : %.java
	$(JDK2PATH)/bin/javac  -target 1.2 -g:none -O -deprecation -classpath . -d $(REL_OUTDIR) $<


$(filter %.gif,$(REL_TARGET)): $(REL_OUTDIR)/%.gif: %.gif
	cp $< $@

$(filter %.prop,$(REL_TARGET)): $(REL_OUTDIR)/%.prop: %.prop
	cp $< $@


##############################################################################
#Developer Documentation Rules:
##############################################################################
DEVDOC_TARGET =	$(patsubst %.class,$(DEVDOC_OUTDIR)/api/%.html,$(filter %.class,$(ALL_MODULES))) \
						$(patsubst %,$(DEVDOC_OUTDIR)/%,$(filter %.html,$(ALL_MODULES))) \
						$(patsubst %,$(DEVDOC_OUTDIR)/%,$(filter %.doc.gif,$(ALL_MODULES)))

devdoc : $(DEVDOC_OUTDIR)/api	 $(DEVDOC_OUTDIR)/api/index.html

$(DEVDOC_OUTDIR)/api :
	mkdir -p $(DEVDOC_OUTDIR)/api

$(DEVDOC_OUTDIR)/api/index.html : $(patsubst %.class,%.java,$(filter %.class, $(ALL_MODULES)))
	$(JDK2PATH)/bin/javadoc \
   	-sourcepath . -overview $(filter %overview.html,$(ALL_MODULES))  \
   	-doctitle 'JBIBLE API Documentation' -private \
		-bottom 'Questions, Suggestions: Mail to: <a href=\"mailto:olaf.panz@iname.com\">Olaf Panz</a>' \
		-header '<p><a target = \"null\" href="../index.html\"><strong>Home</strong></a></p>' \
		-link c:\\jdk1.2.2\\docs\\api -windowtitle 'JBIBLE: Java Bible' \
		-d $(DEVDOC_OUTDIR)/api -use 	-version -author \
		$(sort $(subst /,.,$(patsubst %/,%,$(dir $(filter %.class,$(ALL_MODULES)))))) \
        1> javadoc_proceeding.txt 2> javadoc_errors.txt

##############################################################################
#Debug Rules java1
##############################################################################

DEB_OUTDIR_1=$(OUTDIR_ROOT)/$(JDK11)/debug
SOURCE_OUTDIR_1 = $(OUTDIR_ROOT)/$(JDK11)/source

DEB_JAR_1 = jbible_debug_$(JDK11).jar
DEB_TARGET_1 = $(filter-out %.doc.gif, $(patsubst %,$(DEB_OUTDIR_1)/%,$(ALL_MODULES)))

java1_debug : $(DEB_OUTDIR_1)/$(DEB_JAR_1)

$(DEB_OUTDIR_1)/%.jar : $(DEB_OUTDIR_1) $(patsubst %.class,$(SOURCE_OUTDIR_1)/%.java,$(filter %.class,$(ALL_MODULES))) $(filter %.class,$(DEB_TARGET_1)) $(filter %.gif,$(DEB_TARGET_1)) $(filter %.prop,$(DEB_TARGET_1))
	cd $(DEB_OUTDIR_1); $(JDK1PATH)/bin/jar cmf ../../../$(MANIFEST) $(notdir $@) de

$(DEB_OUTDIR_1) :
	mkdir -p $(DEB_OUTDIR_1)

$(filter %.class,$(DEB_TARGET_1)): $(DEB_OUTDIR_1)/%.class : $(SOURCE_OUTDIR_1)/%.java
	$(JDK1PATH)/bin/javac -g -deprecation -classpath $(JDK1PATH)/lib/classes.zip\;$(SWINGJAR)\;$(SOURCE_OUTDIR_1)/ -d $(DEB_OUTDIR_1) $(subst /,$(PATHSEPARATOR),$<)

$(filter %.gif,$(DEB_TARGET_1)): $(DEB_OUTDIR_1)/%.gif: %.gif
	cp $< $@

$(filter %.prop,$(DEB_TARGET_1)): $(DEB_OUTDIR_1)/%.prop: %.prop
	cp $< $@

##############################################################################
#Release Rules java1
##############################################################################
REL_OUTDIR_1=$(OUTDIR_ROOT)/$(JDK11)/release

REL_JAR_1 = jbible_$(JDK11).jar
REL_TARGET_1 = $(filter-out %.doc.gif, $(patsubst %,$(REL_OUTDIR_1)/%,$(ALL_MODULES)))

java1_release : $(REL_OUTDIR_1)/$(REL_JAR_1)

$(REL_OUTDIR_1)/%.jar : $(REL_OUTDIR_1) $(patsubst %.class,$(SOURCE_OUTDIR_1)/%.java,$(filter %.class,$(ALL_MODULES))) $(filter %.class,$(REL_TARGET_1)) $(filter %.gif,$(REL_TARGET_1)) $(filter %.prop,$(REL_TARGET_1))
	cd $(REL_OUTDIR_1); $(JDK1PATH)/bin/jar cmf ../../../$(MANIFEST) $(notdir $@) de

$(REL_OUTDIR_1) :
	mkdir -p $(REL_OUTDIR_1)

$(filter %.class,$(REL_TARGET_1)): $(REL_OUTDIR_1)/%.class : $(SOURCE_OUTDIR_1)/%.java
	$(JDK1PATH)/bin/javac -O -deprecation -classpath $(JDK1PATH)/lib/classes.zip\;$(SWINGJAR)\;$(SOURCE_OUTDIR_1)/ -d $(REL_OUTDIR_1) $(subst /,$(PATHSEPARATOR),$<)

$(filter %.gif,$(REL_TARGET_1)): $(REL_OUTDIR_1)/%.gif: %.gif
	cp $< $@

$(filter %.prop,$(REL_TARGET_1)): $(REL_OUTDIR_1)/%.prop: %.prop
	cp $< $@


##############################################################################
# Create Source for Java 1.1 Rules
##############################################################################
$(SOURCE_OUTDIR_1)/%.java : %.java
	mkdir -p $(dir $@)
	cat $< 	\
   	| sed 's/ListIterator/Enumeration/g'\
   	| sed 's/LinkedList/Vector/g'\
   	| sed 's/List /Vector /g' \
   	| sed 's/HashMap/Hashtable/g'\
   	| sed 's/Map/Hashtable/g' \
   	| sed 's/hasNext/hasMoreElements/g' \
   	| sed 's/next(/nextElement(/g' \
   	| sed 's/store/save/g' \
   	| sed 's/listIterator/elements/g' \
		| sed 's/Lst.add/Lst.addElement/g' \
   	| sed 's/setProperty/put/g' \
   	| sed 's/_frame.getOwnedWindows()/null/g' \
	   > $@


##############################################################################
# Rule to create source bundle
##############################################################################
SOURCE_FILES = $(filter-out %.class,$(ALL_MODULES)) $(patsubst %.class,%.java,$(filter %.class,$(ALL_MODULES)))

source : $(OUTDIR_ROOT)/source.zip ;


$(OUTDIR_ROOT)/source.zip : $(SOURCE_FILES)
	jar cf $(OUTDIR_ROOT)/source.zip $(SOURCE_FILES)

##############################################################################
# Testing rules
##############################################################################
test : test_pure_java2 test_pure_java1


##############################################################################
# Rules for testing java2
##############################################################################
test_pure_java2 : $(OUTDIR_ROOT)/jdk12_debug.100percent.jpc $(OUTDIR_ROOT)/jdk12_release.100percent.jpc

$(OUTDIR_ROOT)/jdk12_debug.100percent.jpc : $(DEB_OUTDIR)/$(DEB_JAR)
	$(JDK2PATH)/jre/bin/java -classpath javapurecheck.jar JavaPureCheck -bypass -d jdk12 -o $(OUTDIR_ROOT)/jdk12_debug.100percent $<

$(OUTDIR_ROOT)/jdk12_release.100percent.jpc : $(REL_OUTDIR)/$(REL_JAR)
	$(JDK2PATH)/jre/bin/java -classpath javapurecheck.jar JavaPureCheck -bypass -d jdk12 -o $(OUTDIR_ROOT)/jdk12_release.100percent $<


##############################################################################
# Rules for testing java1
##############################################################################
test_pure_java1 : $(OUTDIR_ROOT)/jdk11_debug.100percent.jpc $(OUTDIR_ROOT)/jdk11_release.100percent.jpc

$(OUTDIR_ROOT)/jdk11_debug.100percent.jpc : $(DEB_OUTDIR_1)/$(DEB_JAR_1)
	$(JDK1PATH)/bin/java -classpath $(JDK1PATH)/lib/classes.zip\;$(SWINGJAR)\;javapurecheck.jar JavaPureCheck -bypass -d jdk11 -o $(OUTDIR_ROOT)/jdk11_debug.100percent $<

$(OUTDIR_ROOT)/jdk11_release.100percent.jpc : $(REL_OUTDIR_1)/$(REL_JAR_1)
	$(JDK1PATH)/bin/java -classpath $(JDK1PATH)/lib/classes.zip\;$(SWINGJAR)\;javapurecheck.jar JavaPureCheck -bypass -d jdk11 -o $(OUTDIR_ROOT)/jdk11_release.100percent $<


##############################################################################

