##########################################################################
#                   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                                #
##########################################################################


include ../master.Makefile

LINKFLAGS= $(INCLUDES)
LINKFLAGS_GUI= $(LINKGTK) $(INCLUDES)


# Pour installation
EXE=dbforge
EXE_OPT=$(EXE).opt
EXE_GUI=dbforge.gui
EXE_GUI_OPT=$(EXE_GUI).opt
LIB=$(LIB_DBFORGE)
LIB_OPT=$(LIB_DBFORGE_OPT)
LIB_A=$(LIB_OPT:.cmxa=.a)
LIB_CMI=$(LIB:.cma=.cmi)

LIB_TYPES=$(LIB_DBFORGE_TYPES)
LIB_TYPES_OPT=$(LIB_DBFORGE_TYPES_OPT)
LIB_TYPES_A=$(LIB_TYPES_OPT:.cmxa=.a)
LIB_TYPES_CMI=$(LIB_TYPES:.cma=.cmi)

BASE_CMOFILES=dbf_messages.cmo \
	dbf_types.cmo

BASE_CMXFILES=$(BASE_CMOFILES:.cmo=.cmx)
BASE_CMIFILES=$(BASE_CMOFILES:.cmo=.cmi)

CMOFILES=$(BASE_CMOFILES)\
	dbf_misc.cmo \
	dbf_args.cmo \
	dbf_dbms.cmo \
	dbf_odbc.cmo \
	dbf_mysql.cmo \
	dbf_postgres.cmo \

CMOFILES_GUI=$(CMOFILES) \
	dbf_data.cmo \
	dbf_icons.cmo \
	dbf_gui_base.cmo \
	dbf_gui_col.cmo \
	dbf_gui.cmo

CMXFILES_GUI=$(CMOFILES_GUI:.cmo=.cmx)
CMIFILES_GUI=$(CMOFILES_GUI:.cmo=.cmi)

CMOFILES_EXE=$(CMOFILES) \
	dbf_objects.cmo \
	dbf_html_rep.cmo \
	dbf_html.cmo \
	dbf_main.cmo

CMXFILES_EXE=$(CMOFILES_EXE:.cmo=.cmx)
CMIFILES_EXE=$(CMOFILES_EXE:.cmo=.cmi)

LIBS=unix.cma str.cma $(LIB_OCAMLSQL) gramlib.cma ioXML.cmo $(LIB_REPORT)
LIBS_OPT= unix.cmxa str.cmxa $(LIB_OCAMLSQL_OPT) gramlib.cmxa ioXML.cmx $(LIB_REPORT_OPT)

LIBS_GUI=unix.cma str.cma $(LIBSGTK) $(LIB_OCAMLSQL) $(LIB_OPTIONS) $(LIB_OKEY) $(LIB_CONFIGWIN) gramlib.cma ioXML.cmo
LIBS_GUI_OPT= unix.cmxa str.cmxa $(LIBSGTK_OPT) $(LIB_OCAMLSQL_OPT) \
        $(LIB_OPTIONS_OPT) $(LIB_OKEY_OPT) $(LIB_CONFIGWIN_OPT) gramlib.cmxa ioXML.cmx


byte: $(LIB_OCAMLSQL) $(EXE) $(EXE_GUI) lib
all:byte opt lib lib_opt
opt: $(LIB_OCAMLSQL_OPT) $(EXE_OPT) $(EXE_GUI_OPT) lib_opt
lib: $(LIB_OCAMLSQL) $(LIB) $(LIB_TYPES)
lib_opt: $(LIB_OCAMLSQL_OPT) $(LIB_OPT) $(LIB_TYPES_OPT)
debug: 
	$(MAKE) OCAMLPP=""


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

$(EXE_OPT): $(CMXFILES_EXE) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS) $(LIBS_OPT) $(CMXFILES_EXE) 

$(EXE_GUI): $(LIB) dbf_main_gui.cmo
	$(OCAMLC) -custom -o $@ $(LINKFLAGS_GUI) $(LIBS_GUI) $(LIB) dbf_main_gui.cmo

$(EXE_GUI_OPT): $(LIB_OPT) dbf_main_gui.cmx
	$(OCAMLOPT) -o $@ $(LINKFLAGS_GUI) $(LIBS_GUI_OPT) $(LIB_OPT) dbf_main_gui.cmx

$(LIB): $(CMIFILES_GUI) $(CMOFILES_GUI) dbforge.cmo
	$(OCAMLC) -a -o $@ $(LINKFLAGS_GUI) $(LIBS_GUI) $(CMOFILES_GUI) dbforge.cmo

$(LIB_OPT): $(CMIFILES_GUI) $(CMXFILES_GUI) dbforge.cmx
	$(OCAMLOPT) -a -o $@ $(LINKFLAGS_GUI) $(CMXFILES_GUI) dbforge.cmx

$(LIB_TYPES): $(BASE_CMIFILES) $(BASE_CMOFILES) 
	$(OCAMLC) -a -o $@ $(LINKFLAGS) $(BASE_CMOFILES)

$(LIB_TYPES_OPT): $(BASE_CMIFILES) $(BASE_CMXFILES) 
	$(OCAMLOPT) -a -o $@ $(LINKFLAGS) $(BASE_CMXFILES) 

$(LIB_OCAMLSQL):
	cd ocamlsql && $(MAKE) byte

$(LIB_OCAMLSQL_OPT):
	cd ocamlsql && $(MAKE) opt

trans:
	cd translate ; $(MAKE)


# Specific rules :
##################

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

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

# 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) $(LIB_CMI)  $(LIBDIR)
	$(CP) $(LIB_TYPES) $(LIB_TYPES_CMI) $(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_OPT) $(LIB_CMI) $(LIB_A) $(LIBDIR)
	$(CP) $(LIB_TYPES_OPT) $(LIB_TYPES_CMI) $(LIB_TYPES_A) $(LIBDIR)
#	cd ocamlsql && $(MAKE) installopt

dummy:

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

doc: dummy dbf_html_rep.ml

tutorial: dummy
	cd tutorial && $(MAKE) all

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

clean::
	cd ocamlsql && $(MAKE) clean
	cd translate && $(MAKE) clean
	@rm -f *~ \#*\#
	@$(RM) $(EXE) $(EXE_OPT)
	@$(RM) $(EXE_GUI) $(EXE_GUI_OPT)
	@$(RM) $(LIB) $(LIB_OPT)
	@$(RM) dbforge_parser.ml dbforge_parser.output dbforge_parser.mli
	@$(RM) dbforge_lexer.ml
	@$(RM) *.cmo *.cmi *.cmx *.cma *.cmxa *.a *.o dbf_html_rep.ml

distclean:: clean
	@cd ocamlsql && $(MAKE) distclean
	@cd translate && $(MAKE) distclean

.depend depend::
	cd ocamlsql && $(MAKE) depend
	cd translate && $(MAKE) depend
	$(OCAMLDEP) *.ml *.mli > .depend

dummy:

include .depend

# Additionnal dependencies
dbf_html_rep.cmo: dbf_messages.cmo
dbf_gui_base.cmo: dbf_messages.cmo

dbf_html_rep.ml:dbf_html_rep.rep
	../report/report -gen $<
