# Makefile

NAME=    dql
SOURCES= lexic.ml query.ml syntax.ml help.ml gregorian.ml cache.ml error.ml \
         interpreter.ml
MLIS=    help.mli gregorian.mli cache.mli error.mli interpreter.mli lexic.mli \
         syntax.mli
PACKAGES= pcre,dose2.rapids,dose2.lifetime,dose2.napkin,dose2.packetology,dose2.conduit,dose2.progress,dose2.util
EXTRA_CLEAN= syntax.ml syntax.mli lexic.ml

include ../Makefile.config
include .depend

interpreter.cmo: syntax.cmi lexic.cmo
interpreter.cmx: syntax.cmx lexic.cmx

syntax.ml syntax.mli: syntax.mly
	menhir $<

syntax.cmi: query.cmo
syntax.cmo: query.cmo syntax.cmi
syntax.cmx: query.cmx syntax.cmi

lexic.ml: lexic.mll syntax.cmi
	ocamllex -o $@ $<

lexic.cmi: syntax.cmi
lexic.cmo: syntax.cmi lexic.cmi
lexic.cmx: syntax.cmx lexic.cmi

CMOS=	$(SOURCES:%.ml=%.cmo)
CMIS=	$(MLIS:%.mli=%.cmi) query.cmi
CMXS=	$(SOURCES:%.ml=%.cmx)
OBJS=	$(C_SOURCES:%.c=%.o)

dql.cma: $(CMOS)
ifdef PROFILE
	ocamlfind ocamlcp -package $(PACKAGES) -o $@ -a $^
else
	ocamlfind ocamlc -package $(PACKAGES) -o $@ -a $^
endif

dql.cmxa: $(CMXS)
	ocamlfind ocamlopt -package $(PACKAGES) -o $@ -a $^

OCAMLC=		ocamlfind ocamlc
OCAMLCP=	ocamlfind ocamlcp
OCAMLOPT=	ocamlfind ocamlopt
OCAMLMKLIB=	ocamlmklib

%.cmo: %.ml
ifdef PROFILE
	$(OCAMLCP) -package $(PACKAGES) -o $@ -c $<
else
	$(OCAMLC) -package $(PACKAGES) -o $@ -c $<
endif

%.cmi: %.mli
ifdef PROFILE
	$(OCAMLCP) -package $(PACKAGES) -o $@ -c $<
else
	$(OCAMLC) -package $(PACKAGES) -o $@ -c $<
endif

%.cmx: %.ml
	$(OCAMLOPT) -package $(PACKAGES) -o $@ -c $<

.PHONY: clean depend cmi-install
clean:
	@rm -f $(CMOS) $(CMIS) $(CMXS:.cmx=.o) $(CMXS) $(OBJS) $(NAME).a $(NAME).cma $(NAME).cmxa $(EXTRA_CLEAN) .depend

depend:
	ocamldep $(SOURCES) $(MLIS) > .depend	
