OCAMLC = ocamlc
OCAMLOPT = ocamlopt
OCAMLLEX = ocamllex
OCAMLFIND = ocamlfind
MKCAMLP4 = mkcamlp4

HEREDOC = $(OCAMLC) -pp './HereDoc' text.cmo
HEREDOCOPT = $(OCAMLOPT) -pp './HereDoc' text.cmx

OBJECTS = hereDoc_lexer.cmo pa_HereDoc.cmo 
ARCHIVE = pa_HereDoc.cma

all: HereDoc pa_HereDoc.cma text.cmo text.cmx

HereDoc: $(OBJECTS)
	$(MKCAMLP4) -o HereDoc unix.cma str.cma pa_o.cmo pr_dump.cmo $(OBJECTS)

pa_HereDoc.cmo: hereDoc_lexer.cmo pa_HereDoc.ml
	$(OCAMLC) -c -pp 'camlp4o pa_extend.cmo q_MLast.cmo -loc loc' -I +camlp4 pa_HereDoc.ml

pa_HereDoc.cma: hereDoc_lexer.cmo pa_HereDoc.cmo
	$(OCAMLC) -c -a -o pa_HereDoc.cma unix.cma str.cma hereDoc_lexer.cmo pa_HereDoc.cmo

install:
	$(OCAMLFIND) install HereDoc META HereDoc text.cmi text.cmo text.cmx text.o text.mli pa_HereDoc.cma

uninstall:
	$(OCAMLFIND) remove HereDoc

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

.mll.ml:
	$(OCAMLLEX) $<

.ml.cmo:
	$(OCAMLC) -c $<

.mli.cmi:
	$(OCAMLC) -c $<

.ml.cmx:
	$(OCAMLOPT) -c $<

doc: doc.layout.tpl doc.sections.tpl text.cmo doc.ml HereDoc
	$(HEREDOC) -o doc doc.ml

quine: quine.ml text.cmo
	$(HEREDOC) -o quine quine.ml

doc.html: doc
	./doc > doc.html

text.cmo: text.cmi text.ml

clean:
	rm -f *.cmi *.cmo *.cmx *~ *.o *.cma hereDoc_lexer.ml doc quine HereDoc *.ppo *.cma