PROJECT=seam
OBJS = lib.cmo  boilerplate.cmo ast.cmo errors.cmo semantic.cmo parser.cmo scanner.cmo compile.cmo seam.cmo

# Choose one
YACC = ocamlyacc
# YACC = menhir --explain

TARFILES = Makefile testall.sh scanner.mll parser.mly \
	ast.ml $(PROJECT).ml \
	$(TESTS:%=tests/test-%.mc) \
	$(TESTS:%=tests/test-%.out)

$(PROJECT) : $(OBJS) preprocessor
	ocamlc -o $(PROJECT) $(OBJS)

preprocessor : preprocessor.ml
	ocamlc -o $@ $^

.PHONY : test
test : $(PROJECT) testall.sh
	./testall.sh

scanner.ml : scanner.mll
	ocamllex scanner.mll

parser.ml parser.mli : parser.mly
	$(YACC) parser.mly

%.cmo : %.ml
	ocamlc -c $<

%.cmi : %.mli
	ocamlc -c $<

$(PROJECT).tar.gz : $(TARFILES)
	cd .. && tar czf $(PROJECT)/$(PROJECT).tar.gz $(TARFILES:%=$(PROJECT)/%)

.PHONY : clean
clean :
	rm -f $(PROJECT) parser.ml parser.mli scanner.ml testall.log \
	*.cmo *.cmi *.out *.diff preprocessor

# Generated by ocamldep *.ml *.mli
ast.cmo :
ast.cmx :
boilerplate.cmo:
boilerplate.cmx:
errors.cmo : ast.cmo
errors.cmx : ast.cmx
lib.cmo:
lib.cmx:
semantic.cmo : errors.cmo ast.cmo
semantic.cmx : errors.cmx ast.cmx
compile.cmo : lib.cmo boilerplate.cmo ast.cmo
compile.cmx : lib.cmx boilerplate.cmx ast.cmx
parser.cmo : ast.cmo parser.cmi
parser.cmx : ast.cmx parser.cmi
preprocessor.cmo :
preprocessor.cmx :
sast.cmo :
sast.cmx :
scanner.cmo : parser.cmi
scanner.cmx : parser.cmx
seam.cmo : semantic.cmo scanner.cmo parser.cmi compile.cmo
seam.cmx : semantic.cmx scanner.cmx parser.cmx compile.cmx
tmp.cmo : ast.cmo
tmp.cmx : ast.cmx
parser.cmi : ast.cmo
