SYNTAX_DIR = ../src
OCAMLINCLUDES += $(SYNTAX_DIR) +camlp4
OCAML_OTHER_LIBS += unix $(if $(DYNLINK_SUPPORTED), dynlink) camlp4lib str
PP=$(CAMLP4) -parser oq -printer a
OCAMLDEPFLAGS += -pp "$(PP)"
OCAMLPPFLAGS += -pp "$(PP)"
DOC_DIR = ../doc/html/test

OCAML_LIBS = test
TESTS[] =
  op_basic
  op_mix
  op_concrete
  do_std
  do_concrete
  do_api
  test_macro
  test_complex

.DEFAULT: $(OCamlLibrary test, test)

COMPILED_TESTS =
  foreach(p, $(TESTS))
    value $(OCamlProgram $(p), $(p))

.DEFAULT: $(COMPILED_TESTS)

test: $(COMPILED_TESTS)
  @echo "*** Running the tests..."
  foreach(pgm, $(TESTS))
    $(if $(equal $(OSTYPE), Win32), $(pgm)$(EXE), ./$(pgm)) \
       -I $(SYNTAX_DIR) --ocamlc $(OCAMLC) --camlp4 $(CAMLP4) \
       --dynlink $(DYNLINK_SUPPORTED)

.PHONY: complex
complex: $(COMPILED_TESTS)
  $(if $(equal $(OSTYPE), Win32), test_complex$(EXE), ./test_complex) \
    -I $(SYNTAX_DIR) --ocamlc $(OCAMLC) --camlp4 $(CAMLP4) \
    --dynlink $(DYNLINK_SUPPORTED)

API_SOURCES[] = $(glob api_*.ml)

.PHONY: TEST_API
TEST_API: $(replacesuffixes .ml, .cmo, $(API_SOURCES))
  foreach(pa, $(API_SOURCES))
    TEST=$(addprefix test_, $(pa))
    PA=$(replacesuffixes .ml, .cmo, $(pa))
    $(CAMLP4) -parser of ../src/pa_do.cmo $(PA) -printer o $(TEST)

doc:
  $(if not $(test -e $(DOC_DIR)), mkdir -p $(DOC_DIR))
  $(OCAMLDOC) -html -d $(DOC_DIR) $(PREFIXED_OCAMLINCLUDES) \
    $(glob *.mli)

clean:
  rm -f $(glob *~ *.annot *.cmi *.cmo *.cma *.cmx *.cmxa *.o *.a *.run *.opt)
  rm -f $(glob *.omc)
  rm -f $(COMPILED_TESTS)
