OCAMLC = ocamlc
OCAMLLEX = ocamllex
OCAMLYACC = ocamlyacc

OBJS = ast.cmo symtab.cmo check.cmo simple.cmo output.cmo parser.cmo scanner.cmo strlang.cmo

TESTS = \
empty

all: strlang

strlang: $(OBJS)
	$(OCAMLC) -g -o strlang unix.cma $(OBJS)


.PHONY: test

test: strlang test.sh
	./test.sh

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

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

%.cmo : %.ml
	$(OCAMLC) -g -c $<

%.cmi : %.mli
	$(OCAMLC) -g -c $<

.PHONY: clean

clean:
	rm -f $(OBJS) *.cmi strlang parser.ml parser.mli scanner.ml

ast.cmo: 
ast.cmx:
symtab.cmo: ast.cmo
symtab.cmx: ast.cmx
check.cmo: symtab.cmo
check.cmx: symtab.cmx
simple.cmo: check.cmo
simple.cmx: check.cmx
output.cmo: simple.cmo
output.cmx: simple.cmx
strlang.cmo: scanner.cmo parser.cmi symtab.cmo check.cmo simple.cmo output.cmo \
    ast.cmo 
strlang.cmx: scanner.cmx parser.cmx symtab.cmx check.cmx simple.cmx output.cmx \
    ast.cmx 
parser.cmo: ast.cmo parser.cmi 
parser.cmx: ast.cmx parser.cmi
scanner.cmo: parser.cmi 
scanner.cmx: parser.cmx 
parser.cmi: ast.cmo
