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

# $Id: Makefile,v 1.7 2003/05/22 09:33:47 zoggy Exp $

include ../master.Makefile

OCAMLPP=-pp camlp4o

# For installation 
##############
EXE=omom-gen
EXE_OPT=$(EXE).opt
EXE_GUI=omom-edit
EXE_GUI_OPT=$(EXE_GUI).opt
LIB=omom.cma
LIB_OPT=$(LIB:.cma=.cmxa)
LIB_A=$(LIB_OPT:.cmxa=.a)
LIB_CMI=$(LIB:.cma=.cmi)
PLUG_EDITOR=omom_plugin.cma


# Compilation
#############
LINKFLAGS= $(INCLUDES)

LIBS=$(LIB_OPTIONS)
LIBS_OPT=$(LIB_OPTIONS_OPT)

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

CMO_FILES=\
	omom_messages.cmo \
	omom_variables.cmo \
	omom_templates.cmo \
	omom_actions.cmo \
	omom_rc.cmo \
	omom_expand_path.cmo \
	omom_gen.cmo \
	omom_data.cmo

CMX_FILES      = $(CMO_FILES:.cmo=.cmx)
CMI_FILES      = $(CMO_FILES:.cmo=.cmi)

EXE_CMO_FILES= $(CMO_FILES) omom_main.cmo
EXE_CMX_FILES= $(EXE_CMO_FILES:.cmo=.cmx)
EXE_CMI_FILES= $(EXE_CMO_FILES:.cmo=.cmi)

GUI_CMO_FILES= $(CMO_FILES) \
	omom_gui_base.cmo \
	omom_gui_variables.cmo\
	omom_gui_templates.cmo\
	omom_gui.cmo\
	omom_app.cmo
GUI_CMX_FILES= $(GUI_CMO_FILES:.cmo=.cmx)
GUI_CMI_FILES= $(GUI_CMO_FILES:.cmo=.cmi)

LIB_CMO_FILES=$(GUI_CMO_FILES)
LIB_CMI_FILES=$(LIB_CMO_FILES:.cmo=.cmi)
LIB_CMX_FILES=$(LIB_CMO_FILES:.cmo=.cmx)

EXE_GUI_CMO_FILES= $(GUI_CMO_FILES) omom_gui_main.cmo
EXE_GUI_CMX_FILES= $(EXE_GUI_CMO_FILES:.cmo=.cmx)
EXE_GUI_CMI_FILES= $(EXE_GUI_CMO_FILES:.cmo=.cmi)

byte:$(EXE) $(EXE_GUI) $(LIB) plugins
all: byte opt
opt:$(EXE_OPT) $(EXE_GUI_OPT) $(LIB_OPT)

plugins: $(PLUG_EDITOR)

$(EXE):$(EXE_CMO_FILES)
	$(OCAMLC) -o $@ $(LINKFLAGS) $(LIBS) $^

$(EXE_OPT):$(EXE_CMX_FILES)
	$(OCAMLOPT) -o $@ $(LINKFLAGS) $(LIBS_OPT) $^

$(EXE_GUI):$(EXE_GUI_CMO_FILES)
	$(OCAMLC) -o $@ $(LINKFLAGS_GUI) $(LIBS_GUI) $^

$(EXE_GUI_OPT):$(EXE_GUI_CMX_FILES)
	$(OCAMLOPT) -o $@ $(LINKFLAGS_GUI) $(LIBS_GUI_OPT) $^

$(LIB): $(LIB_CMI_FILES) $(LIB_CMO_FILES)
	$(OCAMLC) -a -custom -o $@ $(LINKFLAGS_GUI) $(LIB_CMO_FILES)

$(LIB_OPT): $(LIB_CMI_FILES) $(LIB_CMX_FILES)
	$(OCAMLOPT) -a -o $@ $(LINKFLAGS_GUI) $(LIB_CMX_FILES)

$(PLUG_EDITOR): $(LIB) $(LIB_CMI_FILES) $(LIB_CMO_FILES) $(PLUG_EDITOR:.cma=.ml)
	$(OCAMLC) $(COMPFLAGS) -a -o $@ $< -c $(PLUG_EDITOR:.cma=.ml)


# installation :
################
install: install_gen install_edit

install_gen: dummy
	if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
	$(CP) $(EXE) $(BINDIR)
	if test -f $(EXE_OPT); then $(MAKE) install_gen_opt; fi

install_edit: dummy
	if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
	$(CP) $(EXE_GUI) $(BINDIR)
	if test -f $(EXE_GUI_OPT); then $(MAKE) install_edit_opt; fi

install_gen_opt: dummy
	if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
	$(CP) $(EXE_OPT) $(BINDIR)

install_edit_opt: dummy
	if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
	$(CP) $(EXE_GUI_OPT) $(BINDIR)

RC=rc

install_plugins: $(PLUG_EDITOR)
	$(MKDIR) $(PLUGINSDIR)
	cp $(PLUG_EDITOR) $(PLUGINSDIR)
	cat $(RC)/template_omom_part1 $(RC)/template_omom_part2 > $(RC)/template_omom
	cp $(RC)/Makefile.in.cmt $(RC)/configure.in.cmt $(RC)/template_omom $(TEMPLATESDIR)

dummy:

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

clean::
	@$(RM) *~ \#*\#
	@$(RM) $(EXE) $(EXE_OPT) $(EXE_GUI) $(EXE_GUI_OPT)
	@$(RM) *.cmo *.cmi *.cmx *.cma *.cmxa *.a *.o 
	@$(RM) rc/template_omom

distclean:: clean

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

dummy:

include .depend

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

