#(***********************************************************************)
#(*                               MLChat                                *)
#(*                                                                     *)
#(*            Maxence Guesdon, projet Cristal, INRIA Rocquencourt      *)
#(*                                                                     *)
#(*  Copyright 2002 Institut National de Recherche en Informatique et   *)
#(*  en Automatique.  All rights reserved.  This file is distributed    *)
#(*  under the terms of the Q Public License version 1.0.               *)
#(*                                                                     *)
#(***********************************************************************)

# Various commands and dir
##########################
OCAMLC   = ocamlc.opt -g
OCAMLOPT = ocamlopt.opt
OCAMLDEP = ocamldep
OCAMLLEX = ocamllex
OCAMLYACC= ocamlyacc
OCAMLPP=-pp ../tools/undebug

# For installation 
##############
MKDIR=mkdir -p
CP=cp -f
EXE=../runme.byte
EXE_OPT=../runme

# Compilation
#############

COMPFLAGS=
LINKFLAGS= -g
LINKFLAGS_OPT=-ccopt -static
LIBS= unix.cma bigarray.cma
LIBS_OPT= unix.cmxa bigarray.cmxa

CMOFILES=slide.cmo \
        string2.cmo \
	types.cmo \
	global.cmo \
	com_server.cmo \
	moving.cmo \
	misc.cmo \
	planner.cmo \
	path.cmo \
	main.cmo

CLIENTCMO=$(CMOFILES) client.cmo
VILAINCMO=$(CMOFILES) vilain.cmo

CLIENTCMX= $(CLIENTCMO:.cmo=.cmx)
CLIENTCMI= $(CLIENTCMO:.cmo=.cmi)

VILAINCMX=$(VILAINCMO:.cmo=.cmx)

VILAINCMI= $(VILAINCMO:.cmo=.cmi)
first:exeopt
byte: exe vilain
exe:$(EXE)
all: byte opt
opt: exeopt vilain.opt
exeopt: $(EXE_OPT)
debug: 
	make OCAMLPP="" byte

$(EXE): $(CLIENTCMI) $(CLIENTCMO) 
	$(OCAMLC) -o $@ $(LINKFLAGS) $(LIBS) $(CLIENTCMO)
	@echo "=========> Compiled bytecode version : $(EXE)"

$(EXE_OPT): $(CLIENTCMI) $(CLIENTCMX) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS_OPT) $(LIBS_OPT) $(CLIENTCMX)
	@echo "=========> Compiled opt version : $(EXE_OPT)"

vilain: $(VILAINCMI) $(VILAINCMO) 
	$(OCAMLC) -o $@ $(LINKFLAGS) $(LIBS) $(VILAINCMO)

vilain.opt: $(VILAINCMI) $(VILAINCMX) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS_OPT) $(LIBS_OPT) $(VILAINCMX)

# generic rules :
#################

.SUFFIXES: .mli .ml .cmi .cmo .cmx .mll .mly .zog

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

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

%.cmi %.cmo:%.ml
	$(OCAMLC) $(OCAMLPP) $(COMPFLAGS) -c $<

%.cmx %.o:%.ml
	$(OCAMLOPT) $(OCAMLPP) $(COMPFLAGS) -c $<

%.ml:%.mll
	$(OCAMLLEX) $<

%.mli %.ml:%.mly
	$(OCAMLYACC) -v $<

%.cmi %.cmo:%.zog
	$(OCAMLC) $(COMPFLAGS) -c -pp "camlp4o pa_zog.cma -impl " -impl $<
%.cmi %.cmx:%.zog
	$(OCAMLOPT) $(COMPFLAGS) -c -pp "camlp4o pa_zog.cma -impl " -impl $<

%.ml:%.zog
	camlp4o pa_zog.cma pr_o.cmo -impl $< > $@


dummy:

# Documentation :
#################

# backup, clean and depend :
############################

clean:: 
	@rm -f *~ \#*\#
	@rm -f $(EXE) $(EXE_OPT) vilain vilain.opt
	@rm -f *.cmo *.cmi *.cmx *.cma *.cmxa *.a *.o 

distclean:: clean

.depend depend::
	rm -f .depend
	$(OCAMLDEP) *.ml *.mli > .depend

dummy:

include .depend

# Additional dependencies :
###########################
