# -*- Makefile -*- BTARGET = $(TARGET).byte JTARGET = $(TARGET).js OTARGET = $(TARGET).native BLTARGET = $(TARGET).cma BNTARGET = $(TARGET).cmxa STARGET = $(shell if `which ocamlopt`; then \ echo $(OTARGET); \ else echo $(BTARGET); fi) PREFIX ?= /usr/local TESTDIR = tests ######################### ## Tools configuration ## ######################### # Menhir can be told to produce a parser that explains what # it is doing. ifeq ($(DEBUGPARSING), yes) MENHIROPT=-yaccflag --explain -yaccflag --trace else MENHIROPT=-yaccflag --explain endif # In Emacs, use classic display to enable error jumping. TERM = $(shell echo $$TERM) ifeq ($(TERM), dumb) OCAMLBUILD = $(OCAMLBUILDCMD) -use-ocamlfind -cflag "-dtypes" -tag debug -classic-display -no-hygiene $(MENHIROPT) else OCAMLBUILD = $(OCAMLBUILDCMD) -use-ocamlfind -no-hygiene $(MENHIROPT) -lflags -I,`pwd`/lib endif ifeq ($(PROFILE), 1) OCAMLBUILD += -tag profile endif OCAMLDOC = ocamldoc HEADACHE = headache ######### # Rules # ######### .PHONY: configure all-generic byte opt doc clean dist install uninstall headers clear all-generic: configure clear $(STARGET) $(TARGET) $(TARGET): ln -s $(STARGET) $(TARGET) clear: @ rm -f $(STARGET) opt: $(OTARGET) byte: $(BTARGET) %: @ $(OCAMLBUILD) src/$@ $(JTARGET): @ $(OCAMLBUILD) -use-ocamlfind -tag "use-nums" -tag "package(js_of_ocaml)" src/$(BTARGET) js_of_ocaml $(BTARGET) byte-debug: $(OCAMLBUILD) -tag debug src/$(BTARGET) ifeq ($(strip $(PREFIX)),) install uninstall: @echo "Cannot (un)install $(EXECUTABLE): the PREFIX variable is undefined." && false else install: $(EXECUTABLE) mkdir -p $(PREFIX)/bin/ install $(STARGET) $(PREFIX)/bin/$(TARGET) uninstall: /bin/rm -f $(PREFIX)/bin/$(TARGET) endif ####################### # Administrative part # ####################### headers: for i in src/*.ml src/*.mli src/*.mly; do \ $(HEADACHE) -h admin/header -c admin/headache.cfg $$i; \ done clean: @ $(OCAMLBUILD) -clean make -C cparser clean make -C $(TESTDIR) clean find -name '*~' -exec rm '{}' \; rm -fr config.log config.status *~ $(TARGET) $(PACKAGE) $(PACKAGE).tar.gz doc: byte $(OCAMLBUILD) $(TARGET).docdir/index.html mkdir -p doc/html rm -f $(TARGET).docdir/style.css 2> /dev/null mv $(TARGET).docdir/* doc/html rm $(TARGET).docdir dist: rm -fr $(PACKAGE) mkdir $(PACKAGE) for i in `cat distributed_files` doc/html/*.html; do \ if test -f $$i; then \ cp -fr --parents $$i $(PACKAGE); \ else \ mkdir -p $$i; \ fi; \ done tar cvfz $(PACKAGE).tar.gz $(PACKAGE) check: all $(MAKE) -C $(TESTDIR) check