PACKAGES=letrec re core_bench
OCAMLBUILD=ocamlbuild -use-ocamlfind -ocamlc '-toolchain metaocaml ocamlc' \
                                     -ocamlopt '-toolchain metaocaml ocamlopt'

all: precheck lib

lib:
	$(OCAMLBUILD) ex3.cma ex3.cmxa

clean:
	$(OCAMLBUILD) -clean

test:
	$(OCAMLBUILD) tests.native
	./tests.native

bench:
	$(OCAMLBUILD) benchmark.native
	./benchmark.native -quota 0.2 -v

precheck: precheck-opam precheck-compiler precheck-packages

precheck-opam:
	@echo -n "checking OPAM is installed... "
	@type opam || (echo >&2 "\n\n\tError: OPAM is not installed\n\n"; exit 1)

precheck-compiler:
	@echo -n "checking OPAM compiler switch ... "
	@test $$(opam switch show) = "4.04.0+BER" \
	|| (echo >&2 "\n\n\tPlease use OPAM switch 4.04.0+BER\n\n"; exit 1)
	@echo "ok"

precheck-packages:
	@echo -n "checking OPAM packages... "
	@for package in $(PACKAGES); do \
	   ocamlfind query $$package >/dev/null \
             || (echo >&2 "\n\n\tpackage $${package} is not installed\n")\
         done;
	@echo "ok"

.PHONY: all lib test bench clean precheck precheck-opam precheck-compiler precheck-packages
