#============================================================================
#== UE Conception de Langages -- Octobre 2007                              ==  
#============================================================================
#== Fichier: Makefile                                                      ==
#== ---------------------------------------------------------------------- ==
#==                                                                        ==
#==                                                                        ==
#==                                                                        ==
#============================================================================

CC = /usr/bin/ocamlc
FLAG = -c
YACC = /usr/bin/ocamlyacc
LEX = /usr/bin/ocamllex

LB = lb_type.cmi lb_type.cmo

AST = lsrc_ast.cmi 

lsrc_parser : ${AST} lsrc_lexer.mll lsrc_parser.mly
	${LEX} lsrc_lexer.mll
	${YACC} lsrc_parser.mly
	${CC} ${FLAG} lsrc_parser.mli
	${CC} ${FLAG} lsrc_lexer.ml
	$(CC) ${FLAG} lsrc_parser.ml 

SEMCMO = lb_type.cmo lb_eval.cmo lb_utils.cmo lsrc_parser.cmo lsrc_lexer.cmo lsrc_ast.cmo lsrc_sem.cmo 

lb_misc : ${LB} lb_parser lb_eval.cmo
	ocamlc -c lb_type.cmo lb_eval.cmo lb_lexer.cmo lb_parser.cmo lb_misc.ml

sem: lsrc_parser ${SEMCMO}
	ocamlc -o sem ${SEMCMO} sem.ml

clean :
	rm -f lsrc_lexer.ml lsrc_parser.mli lsrc_parser.ml
	rm -f *.cmi *.cmo

cleanall: clean
	rm -f sem
	rm -f *~

.SUFFIXES : .mll .mly .mli .cmi .ml .cmo

.mly.ml : 
	$(YACC) $<

.mly.mli : 
	$(YACC) $<

.mll.ml : 
	$(LEX) $<

.ml.cmi : 
	$(CC) $(FLAG) $<

.mli.cmi : 
	$(CC) $(FLAG) $<

.ml.cmo : 
	$(CC) $(FLAG) $<
