# Ou aller chercher le compilo... Avec un / a la fin
BINDIR=
CAMLC=$(BINDIR)ocamlc
CAMLOPT=$(BINDIR)ocamlopt
CAMLDEP=$(BINDIR)ocamldep
CAMLLEX=$(BINDIR)ocamllex
CAMLYACC=$(BINDIR)ocamlyacc

OPTS = -I common -I builddict -I crosscheat -I dumpdict -I spellcheck \
	-I crossgen -I lexers -I verify -I blabla

# User definitions must be here
BUILD = bin/build
BUILDOBJS = common/common.cmx builddict/states.cmx builddict/table.cmx \
	builddict/build.cmx
BUILDSRCS = common/common.ml builddict/states.ml builddict/table.ml \
	builddict/build.ml

DUMP = bin/dump
DUMPSRCS = common/common.ml dumpdict/printtable.ml dumpdict/dump.ml
DUMPOBJS = common/common.cmx dumpdict/printtable.cmx dumpdict/dump.cmx

CHEAT = bin/cheat
CHEATSRCS = common/common.ml crosscheat/matching.ml crosscheat/cheat.ml
CHEATOBJS = common/common.cmx crosscheat/matching.cmx crosscheat/cheat.cmx

VERIFY = bin/verify
VERIFYSRCS = common/common.ml lexers/french.ml common/exist.ml \
	common/hyphenation.ml verify/verify.ml
VERIFYOBJS = common/common.cmx lexers/french.cmx common/exist.cmx \
	common/hyphenation.cmx verify/verify.cmx

SPELL = bin/merimee
SPELLSRCS = common/common.ml lexers/french.ml spellcheck/spellglobal.ml \
	common/exist.ml common/hyphenation.ml spellcheck/suggest.ml  \
	spellcheck/user.ml spellcheck/unixutils.ml \
	spellcheck/privatedict.ml spellcheck/spell.ml
SPELLOBJS = common/common.cmx lexers/french.cmx spellcheck/spellglobal.cmx \
	common/exist.cmx common/hyphenation.cmx spellcheck/suggest.cmx \
	spellcheck/user.cmx spellcheck/unixutils.cmx \
	spellcheck/privatedict.cmx spellcheck/spell.cmx

CROSSGEN = bin/crossgen
CROSSGENSRCS = common/common.ml crossgen/crossgen.ml
CROSSGENOBJS = common/common.cmx crossgen/crossgen.cmx


GENERATED = lexers/french.ml


# Building the world
all: $(BUILD) $(DUMP) $(CHEAT) $(VERIFY) $(SPELL) $(CROSSGEN)

$(BUILD): $(BUILDOBJS)
	$(CAMLOPT) $(OPTS) $(BUILDOBJS) -o $(BUILD)

$(DUMP): $(DUMPOBJS)
	$(CAMLOPT) $(OPTS) $(DUMPOBJS) -o $(DUMP)

$(CHEAT): $(CHEATOBJS)
	$(CAMLOPT) $(OPTS) $(CHEATOBJS) -o $(CHEAT)

$(VERIFY): $(VERIFYOBJS)
	$(CAMLOPT) $(OPTS) $(VERIFYOBJS) -o $(VERIFY)

$(SPELL): $(SPELLOBJS)
	$(CAMLOPT) $(OPTS) unix.cmxa $(SPELLOBJS) -cclib -lunix -o $(SPELL)

$(CROSSGEN): $(CROSSGENOBJS)
	$(CAMLOPT) $(OPTS) $(CROSSGENOBJS) -o $(CROSSGEN)


.SUFFIXES:
.SUFFIXES: .ml .mli .cmo .cmi .cmx
.SUFFIXES: .mll .mly

.ml.cmo:
	$(CAMLC) $(OPTS) -c $<

.ml.cmx:
	$(CAMLOPT) $(OPTS)  -c $<

.mli.cmi:
	$(CAMLC) $(OPTS) -c $<

.mll.ml:
	$(CAMLLEX) $<

.mly.ml:
	$(CAMLYACC) $<

# Clean up
clean:
	rm -f *~
	rm -f man1/*~
	cd builddict ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	cd crosscheat ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	cd dumpdict ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	cd spellcheck ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	cd common ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	cd crossgen ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	cd lexers ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	cd verify ; rm -f *.cm[iox] *~ .*~ *.o ; cd ..
	rm -f $(GENERATED)
	rm -f $(BUILD) $(DUMP) $(CHEAT) $(VERIFY) $(SPELL) $(CROSSGEN)

# Dependencies
depend: $(BUILDSRCS) $(DUMPSRCS) $(CHEATSRCS) $(VERIFYSRCS) $(SPELLSRCS) $(CROSSGENSRCS) $(GENERATED)
	$(CAMLDEP) $(OPTS) common/*.ml{,i} builddict/*.ml{,i} crosscheat/*.ml{,i} dumpdict/*.ml{,i} spellcheck/*.ml{,i} crossgen/*.ml{,i} lexers/*.ml{,i} verify/*.ml{,i} $(GENERATED) > .depend

include .depend
