#
# JTypist v3.1 - Java typing tutor program for UNIX systems
# Copyright (C) 1999  Simon Baldwin (simonb@sco.com)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
# Makefile for typist 3.1 (Java version)
#

# fundamental release number
FULL_RELEASE       = 3.1d
# variations on release number
NUNDERNA_RELEASE   = 3_1d
NDOTN_RELEASE      = 3.1
NN_RELEASE         = 31

# application installation directories
APPLICATION_LIBDIR = /usr/local/lib/jtypist
APPLICATION_BINDIR = /usr/local/bin

#-----------------------------------------------------------------------------

# compiler flags (debug, optimization...)
JAVAC = javac
#JAVAC = guavac
#JAVAC_FLAGS =
JAVAC_FLAGS = -deprecation
#JAVAC_FLAGS = -g -deprecation
#JAVAC_FLAGS = -O

# suffixes and implicit rule to enable java compilations
.SUFFIXES:	.java .class

.java.class:
	$(JAVAC) $(JAVAC_FLAGS) $<

# useful general lists of bulk data classes; peers - saves repeating
KB_LAYOUTS =	KBLayoutBasicQWERTY.class KBLayoutBasicAZERTY.class \
		KBLayoutBasicQWERTZ.class \
		KBLayoutUS.class KBLayoutUK.class KBLayoutDvorak.class \
		KBLayoutDvorakANSI.class KBLayoutMicrosoft.class \
		KBLayoutFrench.class KBLayoutGerman.class
LESSON_DATA =	LessonSeriesD.class LessonSeriesM.class LessonSeriesN.class \
		LessonSeriesQ.class LessonSeriesR.class LessonSeriesS.class \
		LessonSeriesT.class LessonSeriesU.class LessonSeriesV.class

#-----------------------------------------------------------------------------

# default make target (first one in the file)
default: all

#-----------------------------------------------------------------------------

# reasonably complete dependency structure
#	Key structures
KBNamespace.class: Finger.class GlyphGroup.class KeyCode.class \
	KeyShiftState.class

Glyph.class: Finger.class GlyphGroup.class KeyShiftState.class KeyCode.class

#	Keyboard layouts
$(KB_LAYOUTS): KBNamespace.class Glyph.class KBLayout.class

KBLayoutUS.class: KBLayoutBasicQWERTY.class

KBLayoutUK.class KBLayoutMicrosoft.class: KBLayoutUS.class

KBLayoutDvorakANSI.class: KBLayoutDvorak.class

KBLayoutFrench.class: KBLayoutBasicAZERTY.class

KBLayoutGerman.class: KBLayoutBasicQWERTZ.class

#	Lesson series
ExerciseLesson.class TutorialLesson.class: Lesson.class

DrillLesson.class ParagraphLesson.class: ExerciseLesson.class

$(LESSON_DATA): TutorialLesson.class DrillLesson.class ParagraphLesson.class \
	LessonSeries.class

#	Keystroke statistics
KBStatistics.class: KeyingStatistics.class $(KB_LAYOUTS)

#	GUI classes and doc classes
TutorialGUI.class: MessageResource.class \
	TutorialLesson.class History.class

ExerciseGUIStats.class: MessageResource.class \
	ExerciseLesson.class KeyingStatistics.class \
	KeyingRhythm.class

StatisticsGUI.class: MessageResource.class \
	KBStatistics.class Gauge.class

KeyIcon.class FingerIcon.class: KBIcon.class

KeyboardGUI.class: MessageResource.class \
	Finger.class Glyph.class KBLayout.class KeyIcon.class \
	FingerIcon.class

ExerciseGUI.class: MessageResource.class \
	Lesson.class KeyingStatistics.class KBStatistics.class \
	ExerciseGUIStats.class StatisticsGUI.class KeyboardGUI.class \
	History.class KBTranslator.class

HelpGUI.class: MessageResource.class \
	ObjectFactory.class HelpTextResource.class

ControlGUI.class: MessageResource.class \
	PopupGUI.class TutorialGUI.class ExerciseGUI.class \
	HelpGUI.class AboutGUI.class StatisticsGUI.class KeyboardGUI.class \
	ObjectFactory.class

HelpHTML.class: MessageResource.class HelpTextResource.class

InitProgressGUI.class: Gauge.class

Typist.class: MessageResource.class \
	InitProgressGUI.class ObjectFactory.class ControlGUI.class \
	TutorialGUI.class ExerciseGUI.class HelpGUI.class AboutGUI.class \
	StatisticsGUI.class KBStatistics.class KBLayout.class \
	KBTranslator.class

Typist$(NN_RELEASE).html: HelpTextResource.class HelpHTML.class
	java Typist -d > Typist$(NN_RELEASE).html

#-----------------------------------------------------------------------------

# selected entry points into dependencies
keyboards: $(KB_LAYOUTS)
lessons: $(LESSON_DATA)
statistics: KBStatistics.class
gui: ControlGUI.class
main: Typist.class
doc: Typist$(NN_RELEASE).html
typist: keyboards lessons statistics gui main doc

#-----------------------------------------------------------------------------

# all target; builds the whole thing
all: typist

#-----------------------------------------------------------------------------

# cleanup make targets
clean:
	rm -rf distribution
	rm -rf *.class
	rm -rf Typist$(NN_RELEASE).html

clobber: clean

#-----------------------------------------------------------------------------

# (un)installation targets for a convenient form of the application
install_application: all jtypist
	-mkdir -p $(APPLICATION_LIBDIR)
	if type jar >/dev/null 2>&1; then \
		jar -c0f $(APPLICATION_LIBDIR)/Jtypist$(NDOTN_RELEASE).jar *.class; \
	else \
		zip -0q $(APPLICATION_LIBDIR)/Jtypist$(NDOTN_RELEASE).jar *.class; \
	fi

uninstall_application:
	-rm -rf $(APPLICATION_LIBDIR)/Jtypist$(NDOTN_RELEASE).jar
	-rmdir $(APPLICATION_LIBDIR)
	-rm -f $(APPLICATION_BINDIR)/jtypist
	-rmdir $(APPLICATION_BINDIR)

jtypist:
	-mkdir -p $(APPLICATION_BINDIR)
	echo '#!/bin/sh' >$(APPLICATION_BINDIR)/jtypist
	@echo '#' >>$(APPLICATION_BINDIR)/jtypist
	@echo '# JTypist - Java typing tutor program for UNIX systems' >>$(APPLICATION_BINDIR)/jtypist
	@echo '# Copyright (C) 1999  Simon Baldwin (simonb@sco.com)' >>$(APPLICATION_BINDIR)/jtypist
	@echo '#' >>$(APPLICATION_BINDIR)/jtypist
	@echo '# Java typing tutor wrapper' >>$(APPLICATION_BINDIR)/jtypist
	@echo '#' >>$(APPLICATION_BINDIR)/jtypist
	@echo '' >>$(APPLICATION_BINDIR)/jtypist
	@echo '# some constants' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'JTYPIST_RELEASE="$(NDOTN_RELEASE)"' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'JTYPIST_LIBRARY="$${JTYPIST_LIBRARY:-/usr/local/lib/jtypist}"' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'JTYPIST_JAR="$${JTYPIST_JAR:-Jtypist$$JTYPIST_RELEASE.jar}"' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'JTYPIST_CLASS="$${JTYPIST_CLASS:-Typist}"' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'JTYPIST_JAVA="$${JTYPIST_JAVA:-java}"' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'ME="`basename $$0`"' >>$(APPLICATION_BINDIR)/jtypist
	@echo '' >>$(APPLICATION_BINDIR)/jtypist
	@echo '# run the Java application from the installed jar class library' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'if [ -f "$$JTYPIST_LIBRARY/$$JTYPIST_JAR" ]; then' >>$(APPLICATION_BINDIR)/jtypist
	@echo '	CLASSPATH="$$JTYPIST_LIBRARY/$$JTYPIST_JAR:$$CLASSPATH"' >>$(APPLICATION_BINDIR)/jtypist
	@echo '	export CLASSPATH' >>$(APPLICATION_BINDIR)/jtypist
	@echo '	$$JTYPIST_JAVA $$JTYPIST_CLASS "$$@"' >>$(APPLICATION_BINDIR)/jtypist
	@echo '	exit $$?' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'fi' >>$(APPLICATION_BINDIR)/jtypist
	@echo '' >>$(APPLICATION_BINDIR)/jtypist
	@echo '# not installed, apparently' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'echo "$$ME: ERROR: application $$JTYPIST_LIBRARY/$$JTYPIST_JAR not found" >&2' >>$(APPLICATION_BINDIR)/jtypist
	@echo 'exit 1' >>$(APPLICATION_BINDIR)/jtypist
	chmod 755 $(APPLICATION_BINDIR)/jtypist

#-----------------------------------------------------------------------------

# target to make a distribution of the package
distribution: all
	rm -rf distribution; mkdir distribution
	ln -s . ./typist$(NN_RELEASE)
	zip -q -9 distribution/typist-$(NUNDERNA_RELEASE)_bin.zip \
		typist$(NN_RELEASE)/README \
		typist$(NN_RELEASE)/COPYING \
		typist$(NN_RELEASE)/Makefile \
		typist$(NN_RELEASE)/Typist$(NN_RELEASE).html \
		typist$(NN_RELEASE)/TypistApplet.html \
		typist$(NN_RELEASE)/*.class
	zip -q -9 distribution/typist-$(NUNDERNA_RELEASE)_src.zip \
		typist$(NN_RELEASE)/README \
		typist$(NN_RELEASE)/COPYING \
		typist$(NN_RELEASE)/Makefile \
		typist$(NN_RELEASE)/TypistApplet.html \
		typist$(NN_RELEASE)/*.java
	cp README distribution
	cd distribution; zip -q -n zip typist-$(NUNDERNA_RELEASE).zip \
		README \
		typist-$(NUNDERNA_RELEASE)_bin.zip \
		typist-$(NUNDERNA_RELEASE)_src.zip
	cd distribution; rm \
		README \
		typist-$(NUNDERNA_RELEASE)_bin.zip \
		typist-$(NUNDERNA_RELEASE)_src.zip
	rm typist$(NN_RELEASE)

#-----------------------------------------------------------------------------
