OCAMLC=ocamlc.opt
OCAMLOPT=ocamlopt.opt
OCAMLYACC=ocamlyacc
OCAMLLEX=ocamllex.opt
OCAMLDEP=ocamldep
CAMLP4=camlp4

TARGET=runme

all: $(TARGET)

CLIENT_SRCS=string2.ml list2.ml types.ml client.ml main.ml
CLIENT_LIBS=unix.cmxa bigarray.cmxa


CLIENT_ZOG := $(filter %.zog, $(CLIENT_SRCS))
CLIENT_MLL := $(filter %.mll, $(CLIENT_SRCS))
CLIENT_MLY := $(filter %.mly, $(CLIENT_SRCS))

CLIENT_ML := $(filter %.ml %.mll %.zog %.mly, $(CLIENT_SRCS))
CLIENT_C := $(filter %.c, $(CLIENT_SRCS))
CLIENT_OBJS=$(foreach file, $(CLIENT_C),   $(basename $(file)).o)

CLIENT_CMOS=$(foreach file, $(CLIENT_ML),   $(basename $(file)).cmo)
CLIENT_CMXS=$(foreach file, $(CLIENT_ML),   $(basename $(file)).cmx)

TMPSOURCES += $(CLIENT_MLL:.mll=.ml) $(CLIENT_MLY:.mly=.ml) $(CLIENT_MLY:.mly=.mli) $(CLIENT_ZOG:.zog=.ml)


$(TARGET): $(CLIENT_CMXS)
	$(OCAMLOPT) -cclib -static -o $(TARGET) $(CLIENT_LIBS) $(CLIENT_CMXS)

clean:
	rm -f $(TARGET) *.cm? *.o

depend:  $(TMPSOURCES) $(TMPFILES)
	$(OCAMLDEP) *.ml *.mli > .depend

.depend:   $(TMPSOURCES) $(TMPFILES)
	$(OCAMLDEP) *.ml *.mli > .depend

-include .depend

.SUFFIXES: .mli .ml .cmx .cmo .o .c .cmi .mll .mly .zog .plugindep
.mli.cmi :
	$(OCAMLC) $(OFLAGS) $(INCLUDES) -c $<

.ml.cmi :
	$(OCAMLC) $(OFLAGS) $(INCLUDES) -c $<

.ml.cmx :
	$(OCAMLOPT) $(PLUGIN_FLAG) $(OFLAGS) $(INCLUDES) -c $<

.ml.cmo :
	$(OCAMLC) $(OFLAGS) $(INCLUDES) -c $<

.mll.ml :
	$(OCAMLLE	) $<

.mly.ml :
	$(OCAMLYACC) $<

.mly.mli:
	$(OCAMLYACC) $<

.zog.ml:
	$(CAMLP4) pa_o.cmo ./pa_zog.cma pr_o.cmo -impl $< > $@

.c.o :
	$(OCAMLC) -ccopt "-I $(OCAML_SRC)/byterun -o $*.o" -ccopt "$(CFLAGS)" -c
 $<

.cmo.byte:
	$(OCAMLC) -o $*.byte $(LIBS) $<

.cmx.opt:
	$(OCAMLOPT) $(PLUGIN_FLAG) -o $*.opt $(OPTLIBS) $<


