############################################################-*-Makefile-*-####
# Jex main Makefile
##############################################################################

##############################################################################
# ************                                                   ************
# ************               DO NOT EDIT THIS FILE               ************
# ************                                                   ************
# ************    Use Makefile.cfg to add your customizations    ************
# ************                                                   ************
##############################################################################

##############################################################################
# Default rule

all		:

##############################################################################
# Project configuration

JEX_HOME	 = $(shell pwd)

JAVA_SOURCES	+= Position.java
JAVA_SOURCES	+= Report.java
JAVA_SOURCES	+= Tokens.java
JAVA_SOURCES	+= Scanner.java
JAVA_SOURCES	+= ScannerTest.java

JAVA_SOURCES	+= JexException.java
JAVA_SOURCES	+= Parser.java
JAVA_SOURCES	+= ParserTest.java

JAVA_SOURCES	+= Tree.java
JAVA_SOURCES	+= TreeArrayBuffer.java
JAVA_SOURCES	+= StringArrayBuffer.java
JAVA_SOURCES	+= Printer.java
JAVA_SOURCES	+= PrinterTest.java

JAVA_SOURCES	+= Import.java
JAVA_SOURCES	+= ImportScope.java
JAVA_SOURCES	+= Symbol.java
JAVA_SOURCES	+= Scope.java
JAVA_SOURCES	+= JexSymbol.java
JAVA_SOURCES	+= Analyzer.java
JAVA_SOURCES	+= AnalyzerTest.java

JAVA_SOURCES	+= Environment.java
JAVA_SOURCES	+= JexValue.java
JAVA_SOURCES	+= Interpreter.java
JAVA_SOURCES	+= InterpreterTest.java

JAVA_SOURCES	+= Main.java

JAVA_SOURCES	+= Test.java

GENERATED_FILES	+= Scanner.java
GENERATED_FILES	+= Tokens.java
GENERATED_FILES	+= Parser.java

OUTPUTDIR	 = $(JEX_HOME)/classes

##############################################################################
# Tool configuration

JAVA		 = java -classpath $(CLASSPATH)

JAVAC		 = javac -classpath $(CLASSPATH) -d $(OUTPUTDIR)
CLASSPATH	 = $(OUTPUTDIR):$(JCUP_JAR)

JLEX		 = java -classpath $(JLEX_JAR) jlex.Main
JLEX_JAR	 = $(JEX_HOME)/jars/jlex.jar

JCUP		 = java -classpath $(JCUP_JAR) jcup.Main
JCUP_JAR	 = $(JEX_HOME)/jars/jcup.jar

##############################################################################
# User configuration

include Makefile.cfg

##############################################################################
# Top-level rules

all		: jlex jcup java

jlex		: Scanner.java

jcup		: $(OUTPUTDIR)
jcup		: $(OUTPUTDIR)/jex
jcup		: Tokens.java
jcup		: Parser.java
jcup		: $(OUTPUTDIR)/jex/Parser.tables

java		: $(OUTPUTDIR)
java		: .mk.java.mkd

clean		:
	rm -f .mk.*.mkd
	rm -rf $(OUTPUTDIR)
	rm -rf $(GENERATED_FILES)
	rm -f *.lex.java *.tables *.class
	rm -f *~ examples/*~ core

##############################################################################
# Build rules

$(OUTPUTDIR)	:
	install -d $@

$(OUTPUTDIR)/jex:
	install -d $@

.mk.java.mkd	: $(JAVA_SOURCES)
	$(JAVAC) $(JAVAC_FLAGS) $(JAVA_SOURCES)
	touch $@

Scanner.java	: jex.lex
	$(JLEX) $(JLEX_FLAGS) $?
	mv $?.java $@

Tokens.java Parser.java $(OUTPUTDIR)/jex/Parser.tables	: jex.cup
	$(JCUP) $(JCUP_FLAGS) -symbols Tokens -f $?
	mv Parser.tables $(OUTPUTDIR)/jex/Parser.tables

run.%		: java
	$(JAVA) $(JAVA_FLAGS) $* $(ARGS)

##############################################################################
