# -*--------------------
# Uses: GNU make 3.78.1
# -*--------------------
# @(#) $Id$
#
# Makefile: makefile for kudos.schemej package
# - created by cjeong@etri.re.kr
#
# Copyleft(c) 2000. Cheoljoo Jeong. All lefts reserved.
# 
MAKE = make


#-*----------------------------------------
# project name; or package name or ...
#-*----------------------------------------
package = kudos.schemej


#-*----------------------------------------
# directories
#-*----------------------------------------
source_dir = .
dest_dir = .


#-*----------------------------------------
# machineries
#-*----------------------------------------
javac = javac
javac_flags =
java = java
java_flags =
jar = jar
lex = $(java) JLex.Main
lex_flags = 
yacc = $(java) java_cup.Main
yacc_flags = -parser Parser -compact_red -debug -dump
tcl = tcl
tk = tk


#-*----------------------------------------
# sources and objects
#-*----------------------------------------
lex_spec = SchemeJ.lex
lex_file = Lexer.java
lex_class = $(lex_file:.java=.class)
cup_spec = SchemeJ.cup
cup_file = Parser.java
cup_class = $(cup_flie:.cup=.class)
sources = ExprType.java \
	ApplyExpr.java \
	BeginExpr.java \
	BindingExpr.java \
	DoBindingExpr.java \
	CaseExpr.java \
	CaseClauseExpr.java \
	ClauseExpr.java \
	CondExpr.java \
	DelayExpr.java \
	DoExpr.java \
	IfExpr.java \
	LambdaExpr.java \
	LetExpr.java \
	LetStarExpr.java \
	LetrecExpr.java \
	LiteralExpr.java \
	QuasyQuoteExpr.java \
	QuoteExpr.java \
	SetExpr.java \
	VarRefExpr.java \
	DefineForm.java \
	NullContinuation.java \
	PrintContinuation.java \
	PrintErrorContinuation.java \
	ApplyContinuation.java \
	BeginContinuation.java \
	IfContinuation.java \
	Parser.java \
	SExprPrinter.java \
	SExprListPrinter.java \
	SExprParser.java \
	Evaluator.java \
	SchemeJEnvironment.java
classes = $(sources:.java=.class)


#-*----------------------------------------
# implicit rules
#-*----------------------------------------
.SUFFIXES: 
.SUFFIXES: .java .class .lex .cup

.lex.class:
	$(lex) $(lex_flags) $<
	mv $(lex_spec).java $(lex_file)
	$(javac) $(javac_flags) $(lex_file)
.cup.class: 
	$(yacc) $(yacc_flags) < $<
	mv $(cup_spec).java $(cup_file)
	$(javac) $(javac_flags) $(cup_file)
.java.class:
	$(javac) $(javac_flags) $<


#-*----------------------------------------
# default rule to be executed
#-*----------------------------------------
default: all


#-*----------------------------------------
# dependencies
#-*----------------------------------------
ExprType.class:
BindingExpr.class: ExprType.class
DoBindingExpr.class: ExprType.class BindingExpr.class
ClauseExpr.class: ExprType.class 
CaseClauseExpr.class: ExprType.class 
ApplyExpr.class: ExprType.class 
BeginExpr.class: ExprType.class 
CaseExpr.class: ExprType.class CaseClauseExpr.class
CondExpr.class: ExprType.class ClauseExpr.class
DelayExpr.class: ExprType.class 
DoExpr.class: ExprType.class DoBindingExpr.class
IfExpr.class: ExprType.class 
LambdaExpr.class: ExprType.class 
LetExpr.class: ExprType.class BindingExpr.class
LetStarExpr.class: LetExpr.class
LetrecExpr.class: LetExpr.class
LiteralExpr.class: ExprType.class 
QuasyQuoteExpr.class: ExprType.class 
QuoteExpr.class: ExprType.class 
SetExpr.class: ExprType.class 
VarRefExpr.class: ExprType.class 
DefineForm.class: ExprType.class VarRefExpr.class
NullContinuation.class:
PrintContinuation.class:
PrintErrorContinuation.class:
ApplyContinuation.class: 
BeginContinuation.class:
IfContinuation.class:
Evaluator.class: ApplyExpr.class BeginExpr.class CaseExpr.class \
	CondExpr.class DelayExpr.class DoExpr.class IfExpr.class \
	LambdaExpr.class LetExpr.class LetStarExpr.class LetrecExpr.class \
	LiteralExpr.class QuasyQuoteExpr.class QuoteExpr.class \
	SetExpr.class VarRefExpr.class \
	DefineForm.class \
	ApplyContinuation.class IfContinuation.class
SchemeJEnvironment.class:
Parser.class: Lexer.class
SExprPrinter.class:
SExprListPrinter.class:
SExprParser.class: ApplyExpr.class BeginExpr.class CaseExpr.class \
	CondExpr.class DelayExpr.class DoExpr.class IfExpr.class \
	LambdaExpr.class LetExpr.class LetStarExpr.class LetrecExpr.class \
	LiteralExpr.class QuasyQuoteExpr.class QuoteExpr.class \
	SetExpr.class VarRefExpr.class \
	DefineForm.class

#-*----------------------------------------
# rules
#-*----------------------------------------
all: 
	$(MAKE) util_subdir
	$(MAKE) stdlib_subdir
	$(MAKE) classes


util_subdir:
	$(MAKE) -C util

stdlib_subdir:
	$(MAKE) -C stdlib

classes: $(classes)

lexgen: 
	$(lex) $(lex_flags) $(lex_spec)
	mv $(lex_spec).java $(lex_file)
	$(javac) $(javac_flags) $(lex_file)

yaccgen: 
	$(yacc) $(yacc_flags) < $(cup_spec)
	$(javac) $(javac_flags) $(cup_file)

jar:
	$(jar) cvmf $(source_dir)/$(manifest_file) \
		$(dest_dir)/$(proj).jar *.class

touch:
	touch $(lex_spec) $(yacc_spec) $(sources) 
	$(MAKE) -C util touch
	$(MAKE) -C stdlib touch

clean:
	$(RM) *.class *.jar
	$(MAKE) -C util clean
	$(MAKE) -C stdlib clean
