CWD := $(shell pwd)
RELEASE_SRCDIR := $(CWD)/extracted/released/src
LOCAL_SRCDIR := $(CWD)/extracted/local/src/src
RELEASE_INCDIR := $(CWD)/extracted/released/inc
LOCAL_INCDIR := $(CWD)/extracted/local/inc
BINDIR := $(CWD)/../bin
INTERFACEDIR := $(CWD)/src
METAROUTING_DIR := $(CWD)/../Metarouting
EXTRACT_CODE := $(CWD)/ExtractOcamlCode.v
TOPFILE := extractionList

.PHONY all-local : extract-local build-local mk-include-local mre-local

all-release : build-release mk-include-release mre-release

extract-release :
	@echo "-----------------------------------";
	@echo "| Extracting Ocaml code from Coq (for release)";
	@echo "|";
	(cd $(RELEASE_SRCDIR) || exit 1; coqc -R $(METAROUTING_DIR) Metarouting $(EXTRACT_CODE))

extract-local :
	@echo "-----------------------------------";
	@echo "| Extracting Ocaml code from Coq (local version)";
	@echo "|";
	(cd $(LOCAL_SRCDIR) || exit 1; coqc -R $(METAROUTING_DIR) Metarouting $(EXTRACT_CODE))

build-release :
	@echo "-----------------------------------";
	@echo "| Building (released) extracted Ocaml code";
	@echo "|";
	(cd $(RELEASE_SRCDIR) || exit 1; ocamlbuild -quiet $(TOPFILE).cma)

build-local :
	@echo "-----------------------------------";
	@echo "| Building (local) extracted Ocaml code";
	@echo "|";
	(cd $(LOCAL_SRCDIR) || exit 1; ocamlbuild -quiet $(TOPFILE).cma)

mk-include-release :
	@echo "-----------------------------------";
	@echo "| Moving libraries to 'extraced/released/inc'";
	@echo "|";
	cp "$(RELEASE_SRCDIR)/_build/$(TOPFILE).cma" "$(RELEASE_INCDIR)/metarouting.cma";
	cp "$(RELEASE_SRCDIR)/_build/"*.cmi "$(RELEASE_INCDIR)/"

mk-include-local :
	@echo "-----------------------------------";
	@echo "| Moving libraries to 'extraced/local/inc'";
	@echo "|";
	cp "$(LOCAL_SRCDIR)/_build/$(TOPFILE).cma" "$(LOCAL_INCDIR)/metarouting.cma";
	cp "$(LOCAL_SRCDIR)/_build/"*.cmi "$(LOCAL_INCDIR)/"

mre-release :
	@echo "-----------------------------------";
	@echo "| Building Metarouting interface";
	@echo "|";
	(cd $(INTERFACEDIR); make mre-release)

mre-local :
	@echo "-----------------------------------";
	@echo "| Building Metarouting interface";
	@echo "|";
	(cd $(INTERFACEDIR); make mre-local)

clean :
	rm -f ExtractOcamlCode.vo;
	rm -f ExtractOcamlCode.glob;
	rm -f build.log;
	(cd $(INTERFACEDIR); make clean)

