#
# 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.1a
# variations on release number
NUNDERNA_RELEASE   = 3_1a
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 =	KBLayoutUS.class KBLayoutUK.class KBLayoutDvorak.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

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

# complete dependency structure
#	Key structures
Glyph.class: Finger.class GlyphGroup.class

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

#	Lesson series
DrillLesson.class ParagraphLesson.class : ExerciseLesson.class

ExerciseLesson.class: Lesson.class

TutorialLesson.class: Lesson.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: TutorialLesson.class History.class

ExerciseGUIStats.class: DrillLesson.class ParagraphLesson.class \
	KeyingStatistics.class KeyingStatistics.class

StatisticsGUI.class: KBStatistics.class Gauge.class

ExerciseGUI.class: Lesson.class KeyingStatistics.class KBStatistics.class \
	ExerciseGUIStats.class StatisticsGUI.class History.class

HelpGUI.class: ObjectFactory.class HelpText.class

ControlGUI.class: PopupGUI.class \
	TutorialGUI.class ExerciseGUI.class HelpGUI.class \
	AboutGUI.class StatisticsGUI.class

HelpHTML.class: HelpText.class

InitProgressGUI.class: Gauge.class

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

Typist$(NN_RELEASE).html: HelpText.class HelpHTML.class
	java HelpHTML > 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)

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