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

PROJECT_PATH      = /n/fs/introcs/www/turing

SOURCE_PATH       = $(PROJECT_PATH)/src
DESTINATION_PATH  = $(PROJECT_PATH)/classes
TUR_PATH          = $(PROJECT_PATH)/tur
IMAGES_PATH       = $(PROJECT_PATH)/images
MANIFEST_FILE     = $(PROJECT_PATH)/turingManifest.mf
JAR_FILE          = $(PROJECT_PATH)/turing.jar
JAR_TEMP          = $(PROJECT_PATH)/jar

KEYSTORE_FILE     = $(PROJECT_PATH)/turingKeystore
KEYSTORE_PASSWORD = turing
KEY_PASSWORD      = turing
KEY_CONF_FILE     = $(PROJECT_PATH)/turingKeystore.conf
KEY_ALIAS         = "Big Al"

# JAVAC             = /usr/java/java-1.6.0/bin/javac
# JARSIGNER         = /usr/java/java-1.6.0/bin/jarsigner
# KEYTOOL           = /usr/java/java-1.6.0/bin/keytool

JAVAC             = /usr/java/java-11/bin/javac
JARSIGNER         = /usr/java/java-11/bin/jarsigner
KEYTOOL           = /usr/java/java-11/bin/keytool

FILE_LIST = $(SOURCE_PATH)/*.java


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

.PHONY: menu all compile certificate jar 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 permissions- Resets the permissions of all files in the project
	#                       folder to 775.
	#

all: compile certificate jar permissions


compile:
	#
	# Compiling...
	#
	rm -Rf $(DESTINATION_PATH)
	mkdir $(DESTINATION_PATH)
	chmod 2775 $(DESTINATION_PATH)
	$(JAVAC) -g -d $(DESTINATION_PATH) -sourcepath $(SOURCE_PATH) -classpath $(DESTINATION_PATH) -deprecation $(FILE_LIST)
	chmod -R 664 $(DESTINATION_PATH)/*.class

certificate:
	#
	# Generating keystore...
	#
	rm -f $(KEYSTORE_FILE)
	$(KEYTOOL) -genkey -keystore $(KEYSTORE_FILE) -alias $(KEY_ALIAS) -keypass $(KEY_PASSWORD) -storepass $(KEYSTORE_PASSWORD) < $(KEY_CONF_FILE)

	# [wayne s17] added this, as per Visual X-TOY. Removes a warning.
	# Generating certificate...
	#
	$(KEYTOOL) -selfcert -alias $(KEY_ALIAS) -keystore $(KEYSTORE_FILE) -keypass $(KEY_PASSWORD) -storepass $(KEYSTORE_PASSWORD) > /dev/null 2> /dev/null



jar:
	#
	# Generating JAR file...
	#

	rm -f $(JAR_FILE)
	rm -rf jar
	mkdir $(JAR_TEMP)
	chmod 2775 $(JAR_TEMP)
	cp $(DESTINATION_PATH)/* $(JAR_TEMP)
	cp $(IMAGES_PATH)/* $(JAR_TEMP)
	cp $(TUR_PATH)/*.tur $(JAR_TEMP)
	cd $(JAR_TEMP); jar cmf $(MANIFEST_FILE) $(JAR_FILE) *
	$(JARSIGNER) -keystore $(KEYSTORE_FILE) -keypass $(KEY_PASSWORD) -storepass $(KEYSTORE_PASSWORD) $(JAR_FILE) $(KEY_ALIAS)
	chmod -R 664 $(JAR_FILE) $(JAR_TEMP)/*

permissions:
	chmod 2775 $(DESTINATION_PATH) $(SRC_PATH) $(JAR_TEMP) $(IMAGES_PATH) $(TUR_PATH)
	chmod -R 664 $(TUR_PATH)/*.tur
	chmod -R 664 $(SOURCE_PATH)/*.java
	chmod -R 664 $(DESTINATION_PATH)/*.class
	chmod -R 664 $(IMAGES_PATH)/*
	chmod -R 664 $(JAR_TEMP)/*
