include ../Makefile.config

CSLC = ocamlc
CSLOPT = ocamlopt
CSLDEP = ocamldep
CSLLEX = ocamllex
CSLYACC = ocamlyacc
INCLUDES = -I $(CAMLTKDIR) -I $(SIMPLE_GETTEXTDIR) 
LIBDIRS = -ccopt -L$(X11LIBDIR) -ccopt -L$(CAMLTKDIR)  -ccopt -L$(SIMPLE_GETTEXTDIR)
CSLFLAGS = $(INCLUDES)

CSLOPTFLAGS = $(INCLUDES)
TKLIBS =


LEX_FILES = $(wildcard *.mll)
YACC_FILES = $(wildcard *.mly)
TMP_MLFILES = dirs.ml $(YACC_FILES:%.mly=%.ml) $(LEX_FILES:%.mll=%.ml)
TMP_MLIFILES = $(YACC_FILES:%.mly=%.mli)

PROG_OBJS_WITH_CMI = dirs.cmo types.cmo any.cmo inverse.cmo preprint.cmo print.cmo eval.cmo parser.cmo normalize.cmo iterateur.cmo expand.cmo derive.cmo isolate.cmo root_search.cmo graph_batch.cmo graph.cmo graph_postscript.cmo colct.cmo mathplot.cmo
PROG_OBJS = $(LEX_FILES:%.mll=%.cmo) $(PROG_OBJS_WITH_CMI)
CMA_FILES = labltk.cma simple_gettext.cma str.cma unix.cma jpflib.cma

PROG_OBJX_WITH_CMI = $(PROG_OBJS_WITH_CMI:%.cmo=%.cmx)
PROG_OBJX = $(PROG_OBJS:%.cmo=%.cmx)
CMXA_FILES = $(CMA_FILES:%.cma=%.cmxa)

ALL_PROGS = $(PRODUCT) caml-mathplot cli-symbolic-center

.PHONY: default
default: $(PRODUCT)

caml-mathplot: $(PROG_OBJS)
	$(CSLC) $(CSLFLAGS) $(LIBDIRS) -o $@ $(CMA_FILES) $^ $(TKLIBS)

#cli-symbolic-center: $(LEX_FILES:%.mll=%.cmo) dirs.cmo types.cmo any.cmo inverse.cmo preprint.cmo print.cmo eval.cmo parser.cmo normalize.cmo iterateur.cmo expand.cmo derive.cmo isolate.cmo root_search.cmo colct.cmo cli-symbolic-center.cmo
#	 $(CSLC) -custom $(CSLFLAGS) -o $@  $^

$(PRODUCT): $(PROG_OBJX)
	$(CSLOPT) $(CSLOPTFLAGS) $(LIBDIRS) -o $@ $(CMXA_FILES) $^ $(TKLIBS)

dirs.ml:
	echo let icondir = \"$(icondir)\" > dirs.ml
	echo let localedir = \"$(LOCALEDIR)\" >> dirs.ml

# Common rules
.SUFFIXES: .ml .mli .cmo .cmi .cmx .mll .mly

%.ml: %.mll types.cmo parser.cmi
	$(CSLLEX) $<

%.mli %.ml: %.mly
	$(CSLYACC) $<

$(PROG_OBJS_WITH_CMI): %.cmo: %.cmi

$(PROG_OBJX_WITH_CMI): %.cmx: %.cmi

%.cmo: %.ml types.cmi
	$(CSLC) $(CSLFLAGS) -c $<

%.cmx: %.ml types.cmi
	$(CSLOPT) $(CSLFLAGS) -c $<

mathplot.cmo: %.cmo: %.ml types.cmi
	$(CSLC) $(CSLFLAGS) -labels -c $<

mathplot.cmx: %.cmx: %.ml types.cmi
	$(CSLOPT) $(CSLFLAGS) -labels -c $<

.mli.cmi:
	$(CSLC) $(CSLFLAGS) -c $<

# Clean up
clean:
	rm -f $(ALL_PROGS) *~ *.o *.cm[iox] $(TMP_MLIFILES) $(TMP_MLFILES) .depend

# Dependencies
depend:
	$(CSLDEP) $(INCLUDES) *.mli *.ml > .depend

-include .depend
