#
# Makefile for the Calendar Tool Java implementation, 307 Milestone 6.
#

LIB307 =  /home/gfisher/classes/307/lib/JVM
OPENJML = /home/gfisher/classes/307/bin/openjml
JML = \
    java -Xbootclasspath/p:$(OPENJML)/openjmlboot.jar -jar \
	$(OPENJML)/openjml.jar -noPurityCheck

# Directory for generated executable files
EXECUTABLES =	../../executables/JVM

# Files to compile
FILES = \
		caltool/*.java \
		caltool/model/*.java \
		caltool/model/admin/*.java \
		caltool/model/admin/administrator/*.java \
		caltool/model/admin/user/*.java \
		caltool/view/admin/*.java \
		caltool/view/admin/administrator/*.java \
		caltool/view/admin/user/*.java \
		caltool/model/caldb/*.java \
		caltool/view/*.java \
		caltool/model/edit/*.java \
		caltool/view/edit/*.java \
		caltool/model/file/*.java \
		caltool/view/file/*.java \
		caltool/model/help/*.java \
		caltool/view/help/*.java \
		caltool/model/options/*.java \
		caltool/view/options/*.java \
		caltool/model/schedule/*.java \
		caltool/view/schedule/*.java \
		caltool/model/server/*.java \
		caltool/model/view/*.java \
		caltool/view/view/*.java

# List of packages
PACKAGES = \
		caltool \
		caltool/model \
		caltool/view \
		caltool/model/admin \
		caltool/model/admin/administrator \
		caltool/model/admin/user \
		caltool/view/admin \
		caltool/view/admin/administrator \
		caltool/view/admin/user \
		caltool/model/caldb \
		caltool/model/edit \
		caltool/view/edit \
		caltool/model/file \
		caltool/view/file \
		caltool/model/help \
		caltool/view/help \
		caltool/model/options \
		caltool/view/options \
		caltool/model/schedule \
		caltool/view/schedule \
		caltool/model/server \
		caltool/model/view \
		caltool/view/view

# Run the Java compiler on all of the files.
all:	$(FILES)
#	echo $(FILES)
	javac -g \
	  -classpath $(LIB307) \
	  -d $(EXECUTABLES) \
		$(FILES)
	cd $(EXECUTABLES); make
	$(JML) -classpath $(LIB307) $(FILES)

# The preceding rule results in an executable program that is invoked as
# follows from the implementation/executables/JVM directory:
#
#     java caltool.Main
#
# The makefile in that dir has more information about altenate forms of java
# program invocation.


# Compile and JML check just the Schedule.java class.
sched:
	javac -classpath $(LIB307):. caltool/model/schedule/Schedule.java
	$(JML) -classpath $(LIB307):. caltool/model/schedule/Schedule.java

# Print source files in small-font, line-numbered, two-column format.
print:
	csh -q -c ".make-print $(PACKAGES)"


# Echo the package names for use in command-line processing of all packages,
# such as copying a uniform .cvsignore file into each package dir.
echop:
	@echo $(PACKAGES)


# Remove all .class files from the executables/JVM dir.
clean:
	csh -q -c ".make-clean"