##########################################################################
#                   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=zoggy
EXE_OPT=$(EXE).opt
LIB=$(LIB_ZOGGY)
LIB_OPT=$(LIB_ZOGGY_OPT)
LIB_A=$(LIB_OPT:.cmxa=.a)
LIB_CMI=$(LIB:.cma=.cmi)

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

LINKFLAGS= $(LINKGTK) $(INCLUDES)
LIBS=unix.cma str.cma $(LIBSGTK) $(LIB_OPTIONS) $(LIB_OKEY) $(LIB_CONFIGWIN)
LIBS_OPT=unix.cmxa str.cmxa $(LIBSGTK_OPT) $(LIB_OPTIONS_OPT) $(LIB_OKEY_OPT) $(LIB_CONFIGWIN_OPT)


CMOFILES=zog_messages.cmo\
	zog_config.cmo\
	zog_args.cmo\
	zog_keysyms.cmo\
	zog_types.cmo\
	zog_gui_icons.cmo\
	zog_misc.cmo\
	zog_parser.cmo\
	zog_lexer.cmo\
	zog_buffer.cmo\
	zog_data.cmo\
	zog_gui_base.cmo\
	zog_gui_handler.cmo\
	zog_gui_menu.cmo\
	zog_gui_prop.cmo\
	zog_gui.cmo


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

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

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

PAZOGFILES=zog_messages.cmo zog_types.cmo zog_misc.cmo pa_zog.cmo

byte: dummy
	if test -f zog_gui_base.ml ; then $(MAKE) byte2 ; else $(MAKE) world ; fi
byte2: exebyte lib pa_zog.cma
exebyte: $(EXE)
all: byte opt 
opt: exeopt libopt
exeopt: $(EXE_OPT)
lib: $(LIB)
libopt: $(LIB_OPT)
world:
	$(CP) save/zog_gui_base.ml .
	$(MAKE) depend
	$(MAKE) byte

bootstrap: clean
	$(RM) zog_gui_base.ml
	$(CP) save/zog_gui_base.zog .
	$(MAKE) 

pa_zog.cma: $(PAZOGFILES)
	$(OCAMLC) $(PAZOGFILES) -a -o pa_zog.cma

pa_zog.cmo: pa_zog.ml
	$(OCAMLC) -pp camlp4o -I +camlp4 -c pa_zog.ml

debug: 
	$(MAKE) OCAMLPP=""

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

$(EXE_OPT): $(EXE_CMIFILES) $(EXE_CMXFILES) 
	$(OCAMLOPT) -o $@ $(LINKFLAGS) $(LIBS_OPT) $(EXE_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)

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

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

# installation :
################
install: dummy
	if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
	if test -d $(LIBDIR); then : ; else $(MKDIR) $(LIBDIR); fi
	$(CP) $(EXE) $(BINDIR)
	$(CP) $(LIB_CMI) $(LIB) $(LIBDIR)
	if test -d $(MANDIR)/man1; then : ; else $(MKDIR) $(MANDIR)/man1; fi
	$(CP) man/*.1 $(MANDIR)/man1
	$(CP) pa_zog.cma $(DESTDIR)`camlp4 -where`
	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) $(BINDIR)
	$(CP) $(LIB_CMI) $(LIB_OPT) $(LIB_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) *.cm[oix]
	@rm -f zog*.cma *.cmxa *.a *.o *.output
	@rm -f zog_lexer.ml zog_parser.ml zog_parser.mli


distclean:: clean
	@rm -f zog_gui_base.ml zog_gui_base.zog pa_zog.cma save/$(EXE)

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

dummy:

include .depend

zog_lexer.cmo: zog_types.cmo zog_misc.cmo
zog_gui.cmo: zog_gui_base.cmo
zog_gui.cmx: zog_gui_base.cmx
