.PHONY: all clean check doc install

# ------------------------------
# camlp4
# ------------------------------
public.UseCamlp4(files) =
	protected.CAMLP4CMO = $(addprefix $(ROOT)/camlp4/,$(addsuffix .cmo,$(files)))
	OCAMLPPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
	OCAMLDEPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
	export
	.SCANNER: scan-ocaml-%.ml: %.ml $(CAMLP4CMO)

# ------------------------------
# findlib
# ------------------------------
USE_OCAMLFIND = true

if $(not $(OCAMLFIND_EXISTS))
    eprintln('This project requires ocamlfind, but is was not found.')
    eprintln('You need to install ocamlfind and run "omake --configure".')
    exit 1

OCAMLPACKS[] =
	oUnit
	extlib
	num

OCAML_WARN_FLAGS=$`(if $(equal $<,msgpackCore.ml),-annot,-w A -warn-error A ) #`
OCAMLFLAGS=$(OCAML_WARN_FLAGS) -annot
# ------------------------------
# library
# ------------------------------
FILES[] =
	pack
	base
	hList
	msgpackCore
	serialize
	config

msgpackCore.ml : ../proof/msgpackCore.ml
	cp $^ $@

msgpackCore.mli : ../proof/msgpackCore.mli
	cp $^ $@

# ------------------------------
# test code
# ------------------------------
TEST_FILES[] =
	packTest
	serializeTest

TEST_PROGRAM = runner

# ------------------------------
# build rule
# ------------------------------
PROGRAM = msgpack
OCAMLLINK = $(OCAMLC)
OCAMLOPTLINK = $(OCAMLOPT)
OCAMLC   += -for-pack $(capitalize $(PROGRAM))
OCAMLOPT += -for-pack $(capitalize $(PROGRAM))

.DEFAULT: all

all : $(OCamlPackage $(PROGRAM), $(FILES))

check : $(OCamlProgram $(TEST_PROGRAM), $(TEST_FILES) $(FILES))
	./$(TEST_PROGRAM)

doc:
	mkdir -p doc
	ocamldoc -d doc -html msgpack.mli

install: all
	ocamlfind install msgpack META *.cmo *.cmx *.cmi

clean:
	rm -rf *.cm[iox] *.o *~ *.omc .omakedb .omakedb.lock *.cmxa *.a *.opt *.run *.annot runner msgpackCore.*
