diff --git a/Makefile.coq.local b/Makefile.coq.local index cdb0b65ca639c95466003ade8b05641cd873e3fc..b7d4c4ca5c4983735e5c9814d619fad48825b556 100644 --- a/Makefile.coq.local +++ b/Makefile.coq.local @@ -1,8 +1,15 @@ +# use NO_TEST=1 to skip the tests +NO_TEST:= + +# use MAKE_REF=1 to generate new reference files +MAKE_REF:= + # Run tests interleaved with main build. They have to be in the same target for this. real-all: $(if $(NO_TEST),,test) # the test suite -TESTFILES=$(wildcard tests/*.v) +TESTFILES:=$(shell find tests/ -name "*.v") +NORMALIZER:=test-normalizer.sed test: $(TESTFILES:.v=.vo) # Make sure everything imports the options. @@ -12,26 +19,31 @@ test: $(TESTFILES:.v=.vo) .PHONY: test COQ_TEST=$(COQTOP) $(COQDEBUG) -batch -test-mode -COQ_OLD=$(shell echo "$(COQ_VERSION)" | egrep "^8\.(7|8|9)\b" -q && echo 1) -COQ_MINOR_VERSION=$(shell echo "$(COQ_VERSION)" | egrep '^[0-9]+\.[0-9]+\b' -o) +COQ_MINOR_VERSION:=$(shell echo "$(COQ_VERSION)" | egrep '^[0-9]+\.[0-9]+\b' -o) tests/.coqdeps.d: $(TESTFILES) $(SHOW)'COQDEP TESTFILES' $(HIDE)$(COQDEP) -dyndep var $(COQMF_COQLIBS_NOML) $^ $(redir_if_ok) -include tests/.coqdeps.d -$(TESTFILES:.v=.vo): %.vo: %.v $(if $(MAKE_REF),,%.ref) - $(HIDE)TEST="$$(basename -s .v $<)" && \ - if test -f "tests/$$TEST.$(COQ_MINOR_VERSION).ref"; then \ - REF="tests/$$TEST.$(COQ_MINOR_VERSION).ref"; \ +# Main test script (comments out-of-line because macOS otherwise barfs?!?) +# - Determine reference file (`REF`). +# - Print user-visible status line. +# - Dump Coq output into a temporary file. +# - Run `sed -i` on that file in a way that works on macOS. +# - Either compare the result with the reference file, or move it over the reference file. +# - Cleanup, and mark as done for make. +$(TESTFILES:.v=.vo): %.vo: %.v $(if $(MAKE_REF),,%.ref) $(NORMALIZER) + $(HIDE)if test -f $*".$(COQ_MINOR_VERSION).ref"; then \ + REF=$*".$(COQ_MINOR_VERSION).ref"; \ else \ - REF="tests/$$TEST.ref"; \ + REF=$*".ref"; \ fi && \ - echo "COQTEST$(if $(COQ_OLD), [no ref],$(if $(MAKE_REF), [make ref],)) $<$(if $(COQ_OLD),, (ref: $$REF))" && \ + echo "COQTEST$(if $(MAKE_REF), [make ref],) $< (ref: $$REF)" && \ TMPFILE="$$(mktemp)" && \ $(TIMER) $(COQ_TEST) $(COQFLAGS) $(COQLIBS) -load-vernac-source $< > "$$TMPFILE" && \ - $(if $(COQ_OLD),true, \ - $(if $(MAKE_REF),mv "$$TMPFILE" "$$REF",diff -u "$$REF" "$$TMPFILE") \ - ) && \ + sed -f $(NORMALIZER) "$$TMPFILE" > "$$TMPFILE".new && \ + mv "$$TMPFILE".new "$$TMPFILE" && \ + $(if $(MAKE_REF),mv "$$TMPFILE" "$$REF",diff -u "$$REF" "$$TMPFILE") && \ rm -f "$$TMPFILE" && \ touch $@ diff --git a/test-normalizer.sed b/test-normalizer.sed new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391