#
# define compiler and compiler flag variables
#
JC=javac
JCROOT=.
ANTLR=java -cp $(CLASSPATH):antlr.jar antlr.Tool
JFLAGS=-g -source 5.0 -cp $(CLASSPATH):$(JCROOT):antlr.jar:lingpipe-3.5.0.jar -warn:none
#
# Clear any default targets for building .class files from .java files; we 
# will provide our own target entry to do this in this makefile.
# make has a set of default targets for different suffixes (like .c.o) 
# Currently, clearing the default for .java.class is not necessary since 
# make does not have a definition for this target, but later versions of 
# make may, so it doesn't hurt to make sure that we clear any default 
# definitions for these
#
.SUFFIXES: .java .class .g
#
# Here is our target entry for creating .class files from .java files 
# This is a target entry that uses the suffix rule syntax:
#	DSTS:
#		rule
#  'TS' is the suffix of the target file, 'DS' is the suffix of the dependency 
#  file, and 'rule'  is the rule for building a target	
# '$*' is a built-in macro that gets the basename of the current target 
# Remember that there must be a < tab > before the command line ('rule') 
#
.java.class: 
	$(JC) $(JFLAGS) $*.java

.g:
	$(ANTLR) -o $(JCROOT)/Grammar $*.g

#
# CLASSES is a macro consisting of 4 words (one for each java source file)
#
CLASSES= \
	$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALTokenTypes.java \
	$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALLexer.java \
	$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALParserTokenTypes.java \
	$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALParser.java \
	$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALWalkerTokenTypes.java \
	$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALWalker.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/ANDOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/AdditionOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/ANDOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/AssertionException.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/AssignOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/BooleanVariable.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/DivideOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/DoubleVariable.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/EQOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/ExpressionResolver.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/GTEOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/GTOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IBinaryOp.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IByRef.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IntegerVariable.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IntrinsicLinkValue.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IPostalFunctionStrategy.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IPostalLinkResolver.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IPostalListStrategy.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IPostalSetStrategy.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IPostalType.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IPostalVariable.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/IUnaryOp.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/LTEOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/LTOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/MulOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/NEQOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/OpClass.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/OROperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalEnv.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalError.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalFunctionInterpreter.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalFunction.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalHashtableStrategy.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalLinkedListStrategy.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalLink.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalList.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalNilPtr.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalOpCodes.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalScopeFlags.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalScope.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalSet.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalTypeFactory.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalTypeKind.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/PostalVariable.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/ReflectedFunction.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/StringVariable.java \
	$(JCROOT)/WS4115/Projects/Postal/Types/SubtractionOperations.java \
	$(JCROOT)/WS4115/Projects/Postal/AST/AdvancedCommonAST.java \
	$(JCROOT)/WS4115/Projects/Postal/brown/HMMTagger.java \
	$(JCROOT)/WS4115/Projects/Postal/builtin/BuiltinFunctionProvider.java \
	$(JCROOT)/WS4115/Projects/Postal/builtin/TextFileHelper.java \
	Main.java

default: classes jar

classes: $(CLASSES:.java=.class)

jar: 
	jar -cmf MANIFEST postal.jar *.class \
	$(JCROOT)/WS4115/Projects/Postal/Types/*.class \
	$(JCROOT)/WS4115/Projects/Postal/Grammar/*.class \
	$(JCROOT)/WS4115/Projects/Postal/AST/*.class \
	$(JCROOT)/WS4115/Projects/Postal/brown/*.class \
	$(JCROOT)/WS4115/Projects/Postal/builtin/*.class \
	$(JCROOT)/WS4115/Projects/Postal/data/*.*

$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALLexer.java $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALTokenTypes.java: $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTAL.g 
	$(ANTLR) -o $(JCROOT)/WS4115/Projects/Postal/Grammar $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTAL.g

$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALParser.java $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALParserTokenTypes.java: $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALParser.g 
	$(ANTLR) -o $(JCROOT)/WS4115/Projects/Postal/Grammar $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALParser.g

$(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALWalker.java $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALWalkerTokenTypes.java: $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALWalker.g
	$(ANTLR) -o $(JCROOT)/WS4115/Projects/Postal/Grammar $(JCROOT)/WS4115/Projects/Postal/Grammar/POSTALWalker.g


clean:
	$(RM) *.class
	$(RM) $(JCROOT)/WS4115/Projects/Postal/Grammar/*.class
	$(RM) $(JCROOT)/WS4115/Projects/Postal/Grammar/*.java
	$(RM) $(JCROOT)/WS4115/Projects/Postal/Grammar/*.txt
	$(RM) $(JCROOT)/WS4115/Projects/Postal/Grammar/*.smap
	$(RM) $(JCROOT)/WS4115/Projects/Postal/Types/*.class
	$(RM) $(JCROOT)/WS4115/Projects/Postal/brown/*.class	
	$(RM) $(JCROOT)/WS4115/Projects/Postal/AST/*.class
	$(RM) $(JCROOT)/WS4115/Projects/Postal/builtin/*.class
	$(RM) $(JCROOT)/postal.jar

