OCAMLC = ocamlc
OCAMLOPT = ocamlopt
OCAMLDEP = ocamldep
OCAMLLEX = ocamllex
OCAMLYACC = ocamlyacc

OCAMLFLAGS = -g
OCAMLOPTFLAGS = 
INCLUDE = -I .
PROG = cpstran
OBJS =  lambdaAst.cmo lambdaTranslate.cmo lambdaParser.cmo lambdaLexer.cmo\
lambdaP.cmo lambdaSimpleAst.cmo lambdaSimpleLexer.cmo lambdaSimpleParser.cmo \
lambdaSimpleP.cmo lambdaSimpleInterpretation.cmo cpsAst.cmo cpsPprint.cmo\
cpsTranslate.cmo cpsEvaluation.cmo \
lambdaPprint.cmo lambdaInterpretation.cmo lambdaSimplePprint.cmo main.cmo
GEN = lambdaSimpleParser.ml lambdaSimpleParser.mli lambdaSimpleLexer.ml\
lambdaParser.ml lambdaParser.mli lambdaLexer.ml
$(PROG): $(OBJS)
	$(OCAMLC) -o $(PROG) $(OCAMLFLAGS) $(OBJS)

.SUFFIXES: .ml .mli .cmo .cmi .cmx

.ml.cmo:
	$(OCAMLC) $(OCAMLFLAGS) -c $<

.mli.cmi:
	$(OCAMLC) $(OCAMLFLAGS) -c $<

.ml.cmx:
	$(OCAMLOPT) $(OCAMLOPTFLAGS) -c $<

lambdaSimpleLexer.ml: lambdaSimpleLexer.mll
	$(OCAMLLEX) lambdaSimpleLexer.mll

lambdaSimpleParser.mli: lambdaSimpleParser.mly
	$(OCAMLYACC) lambdaSimpleParser.mly

lambdaSimpleParser.ml: lambdaSimpleParser.mli

lambdaLexer.ml: lambdaLexer.mll
	$(OCAMLLEX) lambdaLexer.mll

lambdaParser.mli: lambdaParser.mly
	$(OCAMLYACC) lambdaParser.mly

lambdaParser.ml: lambdaParser.mli

clean:
	-rm -f $(PROG) *.cm[iox] $(GEN)


lambdaSimpleLexer.cmo:lambdaSimpleParser.cmi
lambdaSimpleParser.cmo:lambdaSimpleParser.cmi
lambdaLexer.cmo:lambdaParser.cmi
lambdaParser.cmo:lambdaParser.cmi
#Dependencies

cpsAst.cmi: lambdaSimpleAst.cmi 
cpsEvaluation.cmi: cpsAst.cmi 
cpsPprint.cmi: cpsAst.cmi 
cpsTranslate.cmi: cpsAst.cmi lambdaSimpleAst.cmi 
lambdaInterpretation.cmi: lambdaAst.cmi 
lambdaP.cmi: lambdaAst.cmi 
lambdaParser.cmi: lambdaAst.cmi 
lambdaPprint.cmi: lambdaAst.cmi 
lambdaSimpleAst.cmi: lambdaAst.cmi 
lambdaSimpleInterpretation.cmi: lambdaSimpleAst.cmi 
lambdaSimpleP.cmi: lambdaSimpleAst.cmi 
lambdaSimplePprint.cmi: lambdaSimpleAst.cmi 
lambdaTranslate.cmi: lambdaAst.cmi 
cpsAst.cmo: lambdaSimpleAst.cmi cpsAst.cmi 
cpsAst.cmx: lambdaSimpleAst.cmx cpsAst.cmi 
cpsEvaluation.cmo: cpsAst.cmi cpsPprint.cmi cpsTranslate.cmi \
    lambdaSimpleAst.cmi cpsEvaluation.cmi 
cpsEvaluation.cmx: cpsAst.cmx cpsPprint.cmx cpsTranslate.cmx \
    lambdaSimpleAst.cmx cpsEvaluation.cmi 
cpsPprint.cmo: cpsAst.cmi cpsPprint.cmi 
cpsPprint.cmx: cpsAst.cmx cpsPprint.cmi 
cpsTranslate.cmo: cpsAst.cmi cpsTranslate.cmi lambdaAst.cmi lambdaSimpleAst.cmi
cpsTranslate.cmx: cpsAst.cmx cpsTranslate.cmi 
lambdaAst.cmo: lambdaAst.cmi 
lambdaAst.cmx: lambdaAst.cmi 
lambdaInterpretation.cmo: lambdaAst.cmi lambdaPprint.cmi lambdaTranslate.cmi \
    lambdaInterpretation.cmi 
lambdaInterpretation.cmx: lambdaAst.cmx lambdaPprint.cmx lambdaTranslate.cmx \
    lambdaInterpretation.cmi 
lambdaLexer.cmo: lambdaParser.cmi 
lambdaLexer.cmx: lambdaParser.cmx 
lambdaP.cmo: lambdaLexer.cmo lambdaParser.cmi lambdaP.cmi 
lambdaP.cmx: lambdaLexer.cmx lambdaParser.cmx lambdaP.cmi 
lambdaParser.cmo: lambdaAst.cmi lambdaTranslate.cmi lambdaParser.cmi 
lambdaParser.cmx: lambdaAst.cmx lambdaTranslate.cmx lambdaParser.cmi 
lambdaPprint.cmo: lambdaAst.cmi lambdaPprint.cmi 
lambdaPprint.cmx: lambdaAst.cmx lambdaPprint.cmi 
lambdaSimpleAst.cmo: lambdaAst.cmi lambdaTranslate.cmi lambdaSimpleAst.cmi 
lambdaSimpleAst.cmx: lambdaAst.cmx lambdaTranslate.cmx lambdaSimpleAst.cmi 
lambdaSimpleInterpretation.cmo: lambdaSimpleAst.cmi \
    lambdaSimpleInterpretation.cmi 
lambdaSimpleInterpretation.cmx: lambdaSimpleAst.cmx \
    lambdaSimpleInterpretation.cmi 
lambdaSimpleP.cmo: lambdaSimpleP.cmi 
lambdaSimpleP.cmx: lambdaSimpleP.cmi 
lambdaSimplePprint.cmo: lambdaSimpleAst.cmi lambdaSimplePprint.cmi 
lambdaSimplePprint.cmx: lambdaSimpleAst.cmx lambdaSimplePprint.cmi 
lambdaTranslate.cmo: lambdaAst.cmi lambdaTranslate.cmi 
lambdaTranslate.cmx: lambdaAst.cmx lambdaTranslate.cmi 
main.cmo: cpsPprint.cmi cpsTranslate.cmi lambdaSimpleAst.cmi \
    lambdaSimpleInterpretation.cmi lambdaSimpleP.cmi lambdaSimplePprint.cmi 
main.cmx: cpsPprint.cmx cpsTranslate.cmx lambdaSimpleAst.cmx \
    lambdaSimpleInterpretation.cmx lambdaSimpleP.cmx lambdaSimplePprint.cmx 



