PREFIX=
	if $(not $(defined PREFIX))
		value /usr/local
	else
		value $(PREFIX)


if $(file-exists VERSION)
	VERSION=$(shell head -1 VERSION)
	export
else
	VERSION=local-HEAD
	export

Shell. +=
    ounit-postproc(argv) =
      (grep "FAIL\|ERROR" && exit 1) || exit 0
    ocaml-clean(argv) =
      rm -f *.cm[iox] *.o *.omc *.opt *.run *~ $(argv) *.cmxa *.a *.spot *.annot


.PHONY: all install config clean distclean info

info:
	echo $(VERSION)

# ------------------------------
# config
# ------------------------------
config: OMakefile.config base/config.ml

.INCLUDE: OMakefile.config
	if $(mem config,$(TARGETS))
		rm -f $@
		if $(and $(defined RELATIVE),$(RELATIVE))
			echo LIB_DIR=$(PREFIX) >> $@
			echo SHARE_DIR=$(PREFIX) >> $@
			echo BIN_DIR=$(PREFIX) >> $@
		else
			if $(not $(defined LIB_DIR))
				echo LIB_DIR=$(PREFIX)/lib/habc >> $@
			else
				echo LIB_DIR=$(LIB_DIR) >> $@
			if $(not $(defined SHARE_DIR))
				echo SHARE_DIR=$(PREFIX)/share/habc >> $@
			else
				echo SHARE_DIR=$(SHARE_DIR) >> $@
			if $(not $(defined BIN_DIR))
				echo BIN_DIR=$(PREFIX)/bin >> $@
			else
				echo BIN_DIR=$(BIN_DIR) >> $@

	        if $(shell-success-null ocamlc$(if $(OCAMLC_OPT_EXISTS), .opt) -annot)
			@echo "static.OCAMLFLAGS +=-annot" >> $@
		else
			@echo "static.OCAMLFLAGS +=-dtypes" >> $@
	if $(not $(file-exists OMakefile.config))
		@echo "Please refer to the installation instructions in file README.mkdn."
		@echo "If you've just unpacked the distribution, something like"
		@echo "   omake config"
	        @echo "   omake all"
		@echo "   omake install"
		@echo "should work.  But see the file README.mkdn for more details."

base/config.ml:
	if $(mem config,$(TARGETS))
		rm -f $@
		echo 'let version = "$(VERSION)"' >> $@
		if $(and $(defined RELATIVE),$(RELATIVE))
			@echo 'let bin_dir   = Str.global_replace (Str.regexp "\\\\") "/" (Filename.dirname Sys.executable_name)' >> $@
			@echo 'let share_dir = bin_dir' >> $@
			@echo 'let lib_dir   = bin_dir' >> $@
		else
			@echo 'let bin_dir   = "$(ocaml-escaped  $(BIN_DIR))"' >> $@
			@echo 'let share_dir = "$(ocaml-escaped  $(SHARE_DIR))"' >> $@
			@echo 'let lib_dir   = "$(ocaml-escaped  $(LIB_DIR))"' >> $@
		@echo 'let default_includes = [lib_dir;"."]' >> $@
		@echo 'let default_template = share_dir ^ "/template.xml"' >> $@
		@echo 'let path_sep="$(PATHSEP)"' >> $@
		@echo 'let exe="$(EXE)"' >> $@

.SUBDIRS: scm xml driver base
# ------------------------------
# all
# ------------------------------
habc-scm$(EXE): scm/src/habc-scm$(EXE)
	cp $^ .

habc-xml$(EXE): xml/src/habc-xml$(EXE)
	cp $^ .

habc$(EXE) : driver/habc$(EXE)
	cp $^ .

PROGRAM = habc$(EXE) habc-xml$(EXE) habc-scm$(EXE)

all: config $(PROGRAM)

.DEFAULT: all

# ------------------------------
# install
# ------------------------------
install: $(PROGRAM)
	mkdir -p $(BIN_DIR)
	mkdir -p $(LIB_DIR)
	mkdir -p $(SHARE_DIR)
	mkdir -p $(SHARE_DIR)/example
	$(INSTALL) $(PROGRAM)   $(BIN_DIR)
	$(INSTALL) share/habc/* $(SHARE_DIR)
	$(INSTALL) example/*    $(SHARE_DIR)/example/
	$(INSTALL) lib/habc/*   $(LIB_DIR)
	if $(or $(equal Win32,$(OSTYPE)),$(equal Cygwin,$(OSTYPE)))
		$(INSTALL) win32/swfmill/* $(BIN_DIR)/
		$(INSTALL) README.mkdn $(BIN_DIR)/

# ------------------------------
# clean
# ------------------------------
clean:
	ocaml-clean *.abc $(PROGRAM)

distclean: clean
	ocaml-clean *.abc $(PROGRAM) OMakefile.config base/config.ml

