##########################################################################
#                   Cameleon                                             #
#                                                                        #
#      Copyright (C) 2002 Institut National de Recherche en Informatique et   #
#      en Automatique. All rights reserved.                              #
#                                                                        #
#      This program is free software; you can redistribute it and/or modify  #
#      it under the terms of the GNU General Public License as published by  #
#      the Free Software Foundation; either version 2 of the License, or  #
#      any later version.                                                #
#                                                                        #
#      This program is distributed in the hope that it will be useful,   #
#      but WITHOUT ANY WARRANTY; without even the implied warranty of    #
#      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     #
#      GNU General Public License for more details.                      #
#                                                                        #
#      You should have received a copy of the GNU General Public License  #
#      along with this program; if not, write to the Free Software       #
#      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA          #
#      02111-1307  USA                                                   #
#                                                                        #
#      Contact: Maxence.Guesdon@inria.fr                                #
##########################################################################

# Makefile Based on the sample by Jean-Christophe FILLIATRE

include ../master.Makefile

# For installation 
##############
EXE=report
EXE_OPT=$(EXE).opt
EXE_GUI=report.gui
EXE_GUI_OPT=$(EXE_GUI).opt

EXE_TRANS=translate
EXE_TRANS_OPT=translate.opt

LIB=$(LIB_REPORT)
LIB_OPT=$(LIB_REPORT_OPT)
LIB_A=$(LIB_OPT:.cmxa=.a)
LIB_CMI=$(LIB:.cma=.cmi)

LIB_GUI=$(LIB_REPORT_GUI)
LIB_GUI_OPT=$(LIB_REPORT_GUI_OPT)
LIB_GUI_A=$(LIB_GUI_OPT:.cmxa=.a)
LIB_GUI_CMI=$(LIB_GUI:.cma=.cmi)

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

LINKFLAGS=$(INCLUDES)
LIBS= unix.cma str.cma gramlib.cma ioXML.cmo
LIBS_OPT= unix.cmxa str.cmxa gramlib.cmxa ioXML.cmx

LINKFLAGS_GUI= $(LINKFLAGS) $(LINKGTK)
LIBS_GUI= $(LIBS) $(LIBSGTK) $(LIB_OPTIONS) $(LIB_OKEY) $(LIB_CONFIGWIN)
LIBS_GUI_OPT= $(LIBS_OPT) $(LIBSGTK_OPT) $(LIB_OPTIONS_OPT) $(LIB_OKEY_OPT) $(LIB_CONFIGWIN_OPT)


CMOFILES=rep_messages.cmo\
	rep_args.cmo\
	rep_desc.cmo\
	rep_buffer.cmo\
	rep_data.cmo\
	rep_types.cmo\
	rep_gen.cmo\



CMXFILES= $(CMOFILES:.cmo=.cmx)
CMIFILES= $(CMOFILES:.cmo=.cmi)

EXE_CMOFILES=$(CMOFILES) rep_gen_code.cmo rep_main.cmo
EXE_CMXFILES=$(EXE_CMOFILES:.cmo=.cmx)
EXE_CMIFILES=$(EXE_CMOFILES:.cmo=.cmi)

EXE_GUI_CMOFILES=$(CMOFILES) rep_desc_gui.cmo rep_gui.cmo
EXE_GUI_CMXFILES=$(EXE_GUI_CMOFILES:.cmo=.cmx)
EXE_GUI_CMIFILES=$(EXE_GUI_CMOFILES:.cmo=.cmi)

LIB_CMOFILES=$(CMOFILES) report.cmo
LIB_CMXFILES=$(LIB_CMOFILES:.cmo=.cmx)
LIB_CMIFILES=$(LIB_CMOFILES:.cmo=.cmi)

LIB_GUI_CMOFILES=$(CMOFILES) rep_desc_gui.cmo report_gui.cmo
LIB_GUI_CMXFILES=$(LIB_GUI_CMOFILES:.cmo=.cmx)
LIB_GUI_CMIFILES=$(LIB_GUI_CMOFILES:.cmo=.cmi)


byte: exebyte lib translator
exebyte:$(EXE) $(EXE_GUI)
lib: $(LIB) $(LIB_GUI)
all: byte opt
opt: exeopt libopt translator_opt
exeopt: $(EXE_OPT) $(EXE_GUI_OPT)
libopt: $(LIB_OPT) $(LIB_GUI_OPT)
translator: $(EXE_TRANS) 
translator_opt: $(EXE_TRANS_OPT) 
debug: 
	$(MAKE) OCAMLPP=""

$(EXE): $(EXE_CMIFILES) $(EXE_CMOFILES) 
	$(OCAMLC) -custom -o $@ $(LINKFLAGS) $(LIBS) $(EXE_CMOFILES)

$(EXE_OPT): $(EXE_CMIFILES) $(EXE_CMXFILES) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS) $(LIBS_OPT) $(EXE_CMXFILES)

$(EXE_GUI): $(EXE_GUI_CMIFILES) $(EXE_GUI_CMOFILES) 
	$(OCAMLC) -custom -o $@ $(LINKFLAGS_GUI) $(LIBS_GUI) $(EXE_GUI_CMOFILES)

$(EXE_GUI_OPT): $(EXE_GUI_CMIFILES) $(EXE_GUI_CMXFILES) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS_GUI) $(LIBS_GUI_OPT) $(EXE_GUI_CMXFILES)

$(LIB): $(LIB_CMIFILES) $(LIB_CMOFILES) 
	$(OCAMLC) -a -custom -o $@ $(LINKFLAGS) $(LIB_CMOFILES)

$(LIB_OPT): $(LIB_CMIFILES) $(LIB_CMXFILES) 
	$(OCAMLOPT) -a -o $@ $(LINKFLAGS) $(LIB_CMXFILES)

$(LIB_GUI): $(LIB_GUI_CMIFILES) $(LIB_GUI_CMOFILES) 
	$(OCAMLC) -a -custom -o $@ $(LINKFLAGS_GUI) $(LIB_GUI_CMOFILES)

$(LIB_GUI_OPT): $(LIB_GUI_CMIFILES) $(LIB_GUI_CMXFILES) 
	$(OCAMLOPT) -a -o $@ $(LINKFLAGS_GUI) $(LIB_GUI_CMXFILES)

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

rep_desc.cmo rep_desc.cmi: rep_desc.ml
	$(OCAMLC) -c -pp "camlp4o $(ROOT)/ioxml/pa_ioXML.cmo" $(COMPFLAGS) $<

rep_desc.cmx : rep_desc.ml
	$(OCAMLOPT) -c -pp "camlp4o $(ROOT)/ioxml/pa_ioXML.cmo" $(COMPFLAGS) $<

# Translator :
##############
TRANSDIR=trans0.3-0.4
$(TRANSDIR)/trans.cmo $(TRANSDIR)/trans.cmi: $(TRANSDIR)/trans.ml 
	$(OCAMLC) -c -pp "camlp4o $(ROOT)/ioxml/pa_ioXML.cmo" $(COMPFLAGS) $<

$(TRANSDIR)/trans.cmx: $(TRANSDIR)/trans.ml 
	$(OCAMLOPT) -c -pp "camlp4o $(ROOT)/ioxml/pa_ioXML.cmo" $(COMPFLAGS) $<

$(EXE_TRANS): $(TRANSDIR)/trans.cmo
	$(OCAMLC) -custom -o $@ $(LINKFLAGS) $(LIBS) $<

$(EXE_TRANS_OPT): $(TRANSDIR)/trans.cmx
	$(OCAMLOPT) -o $@ $(LINKFLAGS) $(LIBS_OPT) $<

# installation :
################
install: dummy
	if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
	if test -d $(LIBDIR); then : ; else $(MKDIR) $(LIBDIR); fi
	$(CP) $(EXE) $(EXE_GUI) $(BINDIR)
	$(CP) $(LIB_CMI) $(LIB) $(LIBDIR)
	$(CP) $(LIB_GUI_CMI) $(LIB_GUI) $(LIBDIR)
	if test -f $(EXE_OPT) ; then $(MAKE)  installopt ; fi

installopt: dummy
	if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
	if test -d $(LIBDIR); then : ; else $(MKDIR) $(LIBDIR); fi
	$(CP) $(EXE_OPT) $(EXE_GUI_OPT) $(BINDIR)
	$(CP) $(LIB_CMI) $(LIB_OPT) $(LIB_A) $(LIBDIR)
	$(CP) $(LIB_GUI_CMI) $(LIB_GUI_OPT) $(LIB_GUI_A) $(LIBDIR)

# Documentation :
#################
dump.odoc: dummy
	$(OCAMLDOC) $(OCAMLPP) $(COMPFLAGS) -dump dump.odoc *.ml *.mli

doc:


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

clean::
	@rm -f *~ \#*\#
	@rm -f $(EXE) $(EXE_OPT) $(EXE_TRANS)
	@rm -f $(EXE_GUI) $(EXE_GUI_OPT) $(EXE_TRANS_OPT)
	@rm -f *.cmo *.cmi *.cmx *.cma *.cmxa *.a *.o 
	@rm -f $(TRANSDIR)/*.cm* $(TRANSDIR)/*.o

distclean:: clean

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

dummy:

include .depend
