# Automated testing to see if the output of Asymptote scripts changes when the
# program is modified.

# How to call asy from the tests/output/name.out directory
ASY=../../../asy

TESTS=$(basename $(wildcard *.asy))

# This command performs the testing on all scripts.
diff: $(TESTS:=.diff)

# This builds the reference copies of the output using a trusted version of asy
ref: $(TESTS:=.ref)

$(TESTS:=.ref) $(TESTS:=.out): %: 
	@echo Generating $@
	@rm -rf $@
	@mkdir $@
	@cd $@; \
	$(ASY) -v -v -keep ../$(basename $@) \
	    >$(basename $@).stdout 2>$(basename $@).stderr; \
	ls >$(basename $@).ls; \
	rm -f *.dvi *.pdf *.gif *.jpg *.jpeg *.png

# Ignore lines with timestamps of the form hh:mm, since the time changes between
# runs.  This regex is fairly broad and it may need to be narrowed.
$(TESTS:=.diff): %.diff: %.out
	diff -I "[0-9][0-9]:[0-9][0-9]" -u $(@:.diff=.ref) $(@:.diff=.out)

clean:
	rm -rf *.out

# The reference copies should only be built at the start, or when the behaviour
# of Asymptote is intentionally changed, so they are not usually removed by make
# clean.
veryclean: clean
	rm -rf *.ref

# This tells make to build every dependency from scratch, ignoring the dates on
# files.
.PHONY: $(TESTS:=.ref) $(TESTS:=.out) $(TESTS:=.diff) diff ref clean veryclean