################################################################################
# Macros

JAVAC_PATH           = /usr/java/java-1.6.0/bin/javac
JAVADOC_PATH         = /usr/java/java-1.6.0/bin/javadoc
JAR_PATH             = /usr/java/java-1.6.0/bin/jar
JARSIGNER_PATH       = /usr/java/java-1.6.0/bin/jarsigner
KEYTOOL_PATH         = /usr/java/java-1.6.0/bin/keytool

PROJECT_PATH         = /n/fs/lift/www/xtoy/project

SOURCE_PATH          = $(PROJECT_PATH)/src
DOC_PATH             = $(PROJECT_PATH)/javadoc
WEB_START_PATH       = $(PROJECT_PATH)/webstart
MANIFEST_FILE        = $(PROJECT_PATH)/manifest.mf
TOY_CONF_FILE        = $(PROJECT_PATH)/toy.conf
VERSION_FILE         = $(PROJECT_PATH)/version
EXAMPLES_PATH        = $(PROJECT_PATH)/examples
IMAGES_PATH          = $(PROJECT_PATH)/images


DESTINATION_PATH   = $(PROJECT_PATH)/classes
# LIBRARY_PATH       = $(PROJECT_PATH)/lib
# CLASS_PATH         = $(DESTINATION_PATH):$(LIBRARY_PATH)
CLASS_PATH         = $(DESTINATION_PATH)
WORK_PATH          = $(PROJECT_PATH)/work
JAR_FILE           = $(PROJECT_PATH)/toy.jar
WEB_START_JAR_FILE = $(WEB_START_PATH)/toy.jar

KEYSTORE_FILE        = $(PROJECT_PATH)/csKeystore
KEYSTORE_PASSWORD    = computers
KEY_PASSWORD         = computers
KEY_CONF_FILE        = $(PROJECT_PATH)/csKeystore.conf
KEY_ALIAS            = "COS 126"

JAVA_JAVADOC_URL     = http://docs.oracle.com/javase/6/docs/api/

FILE_LIST            = $(SOURCE_PATH)/*.java $(SOURCE_PATH)/edu/princeton/toy/*.java $(SOURCE_PATH)/edu/princeton/toy/choosers/*.java $(SOURCE_PATH)/edu/princeton/toy/lang/*.java $(SOURCE_PATH)/edu/princeton/swing/*.java $(SOURCE_PATH)/edu/princeton/swing/text/*.java
JAVADOC_PACKAGE_LIST = edu.princeton.toy edu.princeton.toy.choosers edu.princeton.toy.lang edu.princeton.swing edu.princeton.swing.text

################################################################################
# Build Rules

.PHONY: menu all compile certificate jar javadoc permissions

menu:
	#
	# Usage:
	#
	# make menu-        Prints this usage menu.
	# make all-         Calls compile, certificate, jar, and javadoc.
	# make compile-     Remakes the class files.
	# make certificate- Remakes the certificate (certificates expire in
	#                       about 3 months for some reason).
	# make jar-         Repacks and signs the jar file.
	# make javadoc-     Remakes the javadoc files.
	# make permissions- Resets the permissions of all files in the project
	#                       folder to 755.
	#

all: compile certificate jar javadoc permissions


compile:
	#
	# Compiling class files for Visual X-TOY...
	rm -Rf $(DESTINATION_PATH)
	mkdir $(DESTINATION_PATH)
	$(JAVAC_PATH) -g -d $(DESTINATION_PATH) -sourcepath $(SOURCE_PATH) -classpath $(CLASS_PATH) -deprecation $(FILE_LIST)

	#
	# Incrementing the version
	#
	gcc -o $(PROJECT_PATH)/incrementVersion $(PROJECT_PATH)/incrementVersion.c
	mv $(VERSION_FILE) $(VERSION_FILE).bak
	$(PROJECT_PATH)/incrementVersion < $(VERSION_FILE).bak > $(VERSION_FILE)
	rm $(VERSION_FILE).bak

certificate:
	#
	# Generating keystore...
	#
	rm -f $(KEYSTORE_FILE)
	$(KEYTOOL_PATH) -genkey -keystore $(KEYSTORE_FILE) -alias $(KEY_ALIAS) -keypass $(KEY_PASSWORD) -storepass $(KEYSTORE_PASSWORD) < $(KEY_CONF_FILE) > /dev/null 2> /dev/null

	#
	# Generating certificate...
	#
	$(KEYTOOL_PATH) -selfcert -alias $(KEY_ALIAS) -keystore $(KEYSTORE_FILE) -keypass $(KEY_PASSWORD) -storepass $(KEYSTORE_PASSWORD) > /dev/null 2> /dev/null

jar:
	#
	# Cleaning up the work directories...
	#
	rm -Rf $(WORK_PATH)
	mkdir $(WORK_PATH)
	rm -f $(JAR_FILE)

	mkdir $(WORK_PATH)/meta-inf
	ln -s $(MANIFEST_FILE) $(WORK_PATH)/meta-inf/manifest.mf
	ln -s $(VERSION_FILE) $(WORK_PATH)/version
	ln -s $(DESTINATION_PATH)/* $(WORK_PATH)
	ln -s $(IMAGES_PATH) $(WORK_PATH)/images
	ln -s $(EXAMPLES_PATH) $(WORK_PATH)/examples
	ln -s $(TOY_CONF_FILE) $(WORK_PATH)/toy.conf
	cd $(WORK_PATH);ls examples/*.toy > examples.mf

	#
	# Generating JAR file for Visual X-TOY...
	#
	cd $(WORK_PATH); $(JAR_PATH) cmf meta-inf/manifest.mf $(JAR_FILE) *
	# -cd $(LIBRARY_PATH); $(JAR_PATH) uf $(JAR_FILE) *
	chmod 664 $(JAR_FILE)

	#
	# Copying JAR files to the webstart directory...
	#
	rm -f $(WEB_START_PATH)/*.jar
	cp $(JAR_FILE) $(WEB_START_PATH)

	#
	# Signing JAR files...
	#
	for foo in $(WEB_START_PATH)/*.jar; do ( $(JARSIGNER_PATH) -keystore $(KEYSTORE_FILE) -keypass $(KEY_PASSWORD) -storepass $(KEYSTORE_PASSWORD) $$foo $(KEY_ALIAS) ) done
	chmod 664 $(WEB_START_JAR_FILE)

javadoc:

	#
	# Creating Javadoc...
	#
	rm -Rf $(DOC_PATH)
	$(JAVADOC_PATH) -quiet -sourcepath $(SOURCE_PATH) -classpath $(CLASS_PATH) -d $(DOC_PATH) -link $(JAVA_JAVADOC_URL) -windowtitle "Visual X-TOY" -doctitle "Visual X-TOY" $(JAVADOC_PACKAGE_LIST)

permissions:

	#
	# Updating permissions...
	#
	chgrp -R lift $(PROJECT_PATH)
	chmod -R 2775 $(DOC_PATH)
	find $(DOC_PATH) -name "*.txt" -exec chmod 664 {} +
	find $(DOC_PATH) -name "*.html" -exec chmod 664 {} +
	find $(DOC_PATH) -name "*.gif" -exec chmod 664 {} +
	find $(DOC_PATH) -name "*.css" -exec chmod 664 {} +
	chmod -R 2775 $(CLASS_PATH)
	find $(CLASS_PATH) -name "*.class" -exec chmod 664 {} +
