WARN_MSG = "(* !!! WARNING: AUTO GENERATED. DO NOT MODIFY !!! *)\n"

OTT_LOC    = ../ott

## Name of the submakefile generated by coq_makefile
COQMKFILENAME=CoqSrc.mk

LIBNAME="Top"

SYNTAX=syntax
TARGET=rules
DUNS=dunfield

FILES     = $(SYNTAX)_ott $(TARGET)_inf
VFILES   = $(foreach i, $(FILES), $(i).v)
VOFILES  = $(foreach i, $(FILES), $(i).vo)

.SECONDARY: $(VFILES)

all: coq

quick:  $(COQMKFILENAME) $(VFILES)
	@$(MAKE) -f CoqSrc.mk quick

coq: $(COQMKFILENAME) $(VFILES)
	@$(MAKE) -f CoqSrc.mk

%.vo: %.v
	@$(MAKE) -f CoqSrc.mk $*.vo


$(SYNTAX)_ott.v:
	ott $(OTT_LOC)/rules.ott -o $(SYNTAX)_ott.v -coq_lngen true
	make METALIB.FIX_$(SYNTAX)_ott
	make LCEXP.FIX_$(SYNTAX)_ott
	@if grep '<<no parses (' $@ >/dev/null 2>&1 && \
	[ -z "$(DONTSTOP)" ]; then \
		echo; \
	echo "***** OTT PARSE ERROR(S) *****"; \
		grep -n '<<no parses (' $@; \
		$(RM) $@; \
		exit 1; \
	fi >&2


$(TARGET)_inf.v:
	lngen --coq $(TARGET)_inf.v --coq-ott $(SYNTAX)_ott $(OTT_LOC)/$(TARGET).ott
	make METALIB.FIX_$(TARGET)_inf


$(COQMKFILENAME): Makefile $(shell ls *.v | grep -v _ott.v | grep -v _inf.v)
	{ echo "-R . $(LIBNAME)" ; ls *.v ; } > _CoqProject && coq_makefile -arg '-w -variable-collision,-meta-collision,-require-in-module' -f _CoqProject -o $(COQMKFILENAME)

METALIB.FIX_%:
	sed -i -e 's/Metatheory/Metalib.Metatheory/g' $*.v
	sed -i -e 's/LibLNgen/Metalib.LibLNgen/g' $*.v
	sed '1d' $*.v > __TMP__; mv __TMP__ $*.v
	@perl -pi -e 'print $(WARN_MSG) if $$. == 1' $*.v

LCEXP.FIX_%:
	sed -i -e 's/lc_exp (v_/lc_value (v_/g' $*.v
	sed '1d' $*.v > __TMP__; mv __TMP__ $*.v
	@perl -pi -e 'print $(WARN_MSG) if $$. == 1' $*.v

coqclean:
	rm -f .*.d *.conf .*.aux *.v-e *.v.d *.vo *.vok *.vos *.glob $(VOFILES) $(COQMKFILENAME)

clean: coqclean

