include ../Makefile.config

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

#STATICOPT = -ccopt -static 
#STATICLIBS = -cclib -lX11 -cclib -ldl
CSLOPTFLAGS = $(INCLUDES) $(STATICOPT)
TKLIBS = -cclib -lcamltk41 -cclib -ldl -cclib -lstr -cclib -lunix -cclib -lX11 -cclib -ltcl8.0 -cclib -ltk8.0 $(STATICLIBS)


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 = tk41.cma str.cma unix.cma libjpf.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

.PHONY: default
default: $(PRODUCT)

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

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

ci: clean
	ci -l -mdefault *

dirs.ml:
	echo let icondir = \"$(icondir)\" > 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 $<

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

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

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

include .depend
