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



# For installation 
##################
EXE=cameleon
EXE_OPT=$(EXE).opt
EXE_DOC=docbrowser
EXE_DOC_OPT=$(EXE_DOC).opt

EXE_CONFIG=cam-config
EXE_CONFIG_OPT=$(EXE_CONFIG).opt

# Compilation
#############
LINKFLAGS= $(LINKGTK) $(INCLUDES) -ccopt -L$(OCAMLDOCDIR) #-ccopt -static
LIBS=unix.cma str.cma \
	$(OCAMLDOCDIR)/odoc_info.cma \
	$(LIBSGTK) \
	$(LIB_OKEY) \
	$(LIB_OPTIONS) \
	$(LIB_GPATTERN) \
	$(LIB_CONFIGWIN) \
	gramlib.cma ioXML.cmo \
	$(LIB_DBFORGE) \
	$(LIB_REPORT_GUI) \
	$(LIB_ZOGGY) \
	$(LIB_OCAMLCVS) 

LIBS_OPT= unix.cmxa str.cmxa \
	$(OCAMLDOCDIR)/odoc_info.cmxa \
	$(LIBSGTK_OPT) \
	$(LIB_OKEY_OPT) \
	$(LIB_OPTIONS_OPT) \
	$(LIB_GPATTERN_OPT) \
	$(LIB_CONFIGWIN_OPT) \
	gramlib.cmxa ioXML.cmx \
	$(LIB_OCAMLSQL_OPT) $(LIB_DBFORGE_OPT) \
	$(LIB_REPORT_GUI_OPT) \
	$(LIB_ZOGGY_OPT) \
	$(LIB_OCAMLCVS_OPT) 

CMOFILES=cam_installation.cmo\
	cam_messages.cmo\
	cam_types.cmo\
	cam_menus.cmo\
	cam_embed.cmo\
	cam_view.cmo \
	cam_global.cmo\
	cam_misc.cmo\
	cam_config.cmo\
	cam_exec.cmo\
	cam_args.cmo\
	cam_data.cmo\
	cam_gui_icons.cmo\
	cam_config_gui.cmo\
	cam_efuns.cmo\
	cam_emacs.cmo\
	cam_xemacs.cmo\
	cam_edit.cmo\
	cam_bar.cmo\
	cam_new_file.cmo\
	cam_doc.cmo\
	cam_doc_gui.cmo\

CMOFILES_DOC=$(CMOFILES) cam_docbrowser.cmo
CMXFILES_DOC= $(CMOFILES_DOC:.cmo=.cmx)
CMIFILES_DOC= $(CMOFILES_DOC:.cmo=.cmi)

CMOFILES_CAM=$(CMOFILES) cam_modules_view.cmo   \
	cam_gui.cmo cam_plug.cmo cam_dynlink.cmo cam_norep.cmo cam_commands.cmo cam.cmo
CMXFILES_CAM= $(CMOFILES:.cmo=.cmx) cam_modules_view.cmx \
	cam_gui.cmx cam_norep.cmx cam_commands.cmx cam.cmx
CMIFILES_CAM= $(CMOFILES:.cmo=.cmi) cam_modules_view.cmi \
	cam_gui.cmi cam_norep.cmi cam_commands.cmi cam.cmi

CMOFILES_CONFIG=cam_installation.cmo cam_config_main.cmo
CMIFILES_CONFIG= $(CMOFILES_CONFIG:.cmo=.cmi) 
CMXFILES_CONFIG= $(CMOFILES_CONFIG:.cmo=.cmx) 

byte: $(EXE) $(EXE_DOC) $(EXE_CONFIG)
all: byte opt 
opt: $(EXE_OPT) $(EXE_DOC_OPT) $(EXE_CONFIG_OPT)

$(EXE): $(CMIFILES_CAM) $(CMOFILES_CAM) 
	$(OCAMLC) -custom -o $@ -linkall $(LINKFLAGS) $(LIBS) dynlink.cma $(CMOFILES_CAM)

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

$(EXE_DOC): $(CMIFILES_DOC) $(CMOFILES_DOC) 
	$(OCAMLC) -custom -o $@ $(LINKFLAGS) $(LIBS) $(CMOFILES_DOC)

$(EXE_DOC_OPT): $(CMXFILES_DOC) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS) $(LIBS_OPT) $(CMXFILES_DOC) 

$(EXE_CONFIG):$(CMIFILES_CONFIG) $(CMOFILES_CONFIG) 
	$(OCAMLC) -custom -o $@ $(LINKFLAGS) $(CMOFILES_CONFIG)

$(EXE_CONFIG_OPT):$(CMXFILES_CONFIG) $(CMXFILES_CONFIG) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS) $(CMXFILES_CONFIG)

################
# installation :
################
install:
	$(MKDIR) $(BINDIR)
	$(MKDIR) $(LIBDIR)
	$(CP) $(EXE) $(EXE_DOC) $(EXE_CONFIG) $(BINDIR)
	$(CP) cam_plug.cmi $(LIBDIR)
	if test -f $(EXE_OPT) ; then $(MAKE) installopt ; fi

installopt:
	$(MKDIR) $(BINDIR)
	$(MKDIR) $(LIBDIR)
	$(CP) $(EXE_OPT) $(EXE_DOC_OPT) $(EXE_CONFIG_OPT) $(BINDIR)
	$(CP) cam_plug.cmi $(LIBDIR)

# Additionnal rules :
#####################

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

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

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

cam_misc.cmo: cam_misc.ml
	$(OCAMLC) -c -pp "camlp4o" $(COMPFLAGS) $<

cam_misc.cmx: cam_misc.ml
	$(OCAMLOPT) -c -pp "camlp4o" $(COMPFLAGS) $<

cam_misc.cmi: cam_misc.ml
	$(OCAMLC) -c -pp "camlp4o " $(COMPFLAGS) $<

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

plugins_doc:dummy
	$(OCAMLDOC) -g odoc_command.cmo $(COMPFLAGS) -d doc_plugins -t "Plug-ins" plugins/test.ml plugins/editors.ml

manual: dummy
	$(OCAMLDOC) -latex $(COMPFLAGS) -noheader -notrailer -o doc/cam_plug.tex \
		-latextitle 1,subsection\
		-latextitle 2,subsubsection\
		-latextitle 3,paragraph\
		cam_plug.mli
	$(OCAMLDOC) -html $(COMPFLAGS) -d doc/ -css-style doc_style.css cam_plug.mli
	$(OCAMLDOC) -g odoc_command_latex.cmo -tables-only $(COMPFLAGS) \
		-latextitle 2,section -notrailer -noheader \
		-o doc/commands.tex cam_messages.ml
	$(OCAMLDOC) -g odoc_command.cmo -tables-only $(COMPFLAGS) -d doc/ \
		-css-style doc_style.css  \
		cam_messages.ml
	mv doc/Cam_messages.html doc/commands.html
	cd doc && $(MAKE) all


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

clean:: 
	@rm -f *~ \#*\#
	@rm -f $(EXE) $(EXE_OPT) $(EXE_DOC) $(EXE_DOC_OPT)
	@rm -f $(EXE_CONFIG) $(EXE_CONFIG_OPT)
	@rm -f *.cmo *.cmi *.cmx *.a *.o

distclean:: clean


.depend depend::
	$(OCAMLDEP) -pp "camlp4o" *.ml *.mli > .depend

dummy:

include .depend
