OTT_SOURCE = lp
FILES      = lp_ott lp_inf
OTTFILES   = $(foreach i, $(OTT_SOURCE), $(OTT_LOC)/$(i).ott)
OTTIFLAGS  = $(foreach i, $(OTT_SOURCE), -i $(OTT_LOC)/$(i).ott) -merge true
OTTOFLAGS  = -o lp_ott.v
# Uncomment to admit automatically generated binding related proofs in lp_inf.v
# LNGENADMIT = 1
LNGENFLAGS = --coq-nolcset

ifndef LNGENADMIT
	LNGENPOST = patch -p0 < fix_inf.patch
else
	LNGENFLAGS += --coq-admitted 
	LNGENPOST = true
endif

all: coq

################ latex ####################

# Omitted for now


###################### COQ ##############################

## Paths to executables. Do not include options here.
## Modify these to suit your Coq installation, if necessary.

COQC = coqc
COQDEP = coqdep

LIBNAME=LP
LNGEN=lngen

## Include directories, one per line.

INCDIRS = \
	. \


## Name of the submakefile generated by coq_makefile

VFILES   = $(foreach i, $(FILES), $(i).v)
VOFILES  = $(foreach i, $(FILES), $(i).vo)
VOSFILES = $(foreach i, $(FILES), $(i).vos)
INCFLAGS = $(foreach i, $(INCDIRS), -I $(i))

.SECONDARY: $(VFILES)

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

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

vos:  CoqSrc.mk
	@$(MAKE) -f CoqSrc.mk vos

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

lp_ott.v: lp.ott
	ott -i lp.ott  $(OTTOFLAGS) -coq_lngen true -coq_expand_list_types true

lp_inf.v: lp.ott
	$(LNGEN) $(LNGENFLAGS) --coq lp_inf.v  --coq-ott lp_ott lp.ott && $(LNGENPOST)

CoqSrc.mk: Makefile lp_inf.v lp_ott.v $(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 CoqSrc.mk

coqclean:
	rm -irf lp_ott.v lp_inf.v *.v.d *.vo *.glob *.v-e *.vok *.vos *.conf *.v-e $(VOFILES) CoqSrc.mk coq.zip coq

coq.zip: *.v $(OTT_FILES) lp.ott fix_inf.patch
	rm -rf coq coq.zip && mkdir coq && cp *.v lp.ott Makefile fix_inf.patch coq && zip -r coq.zip coq && rm -r coq

clean:	coqclean

