45 lines
1.2 KiB
Makefile
45 lines
1.2 KiB
Makefile
# The general command line is, e.g.:
|
|
#
|
|
# gmake -j
|
|
#
|
|
# To make all the tests, e.g.:
|
|
#
|
|
# gmake -j --always-make
|
|
#
|
|
# (The the g- prefix indicates that this is GNU make or compatible,
|
|
# the ``-j`` switch tells make to use multiple jobs to take advantage of
|
|
# multi-core systems.)
|
|
#
|
|
# For the explanation of how this test system works see:
|
|
# https://chrismorgan.info/blog/make-and-git-diff-test-harness/
|
|
|
|
# Set JOY to point to the joy interpreter to test.
|
|
#JOY=joy
|
|
|
|
TESTS != ls *.joy
|
|
STDOUTS = $(TESTS:.joy=.stdout)
|
|
|
|
GIT_OPTS = --exit-code
|
|
GIT_OPTS += --src-prefix=expected/ --dst-prefix=actual/
|
|
GIT_OPTS += --name-only
|
|
|
|
# N.B. I'm using FreeBSD with GNU coreutils, so gtouch rather than touch
|
|
# (for that --date opt.) It's not ideal to hard-code the g- prefix here,
|
|
# I know, but it was faster than rewriting the command to use FreeBSD's
|
|
# touch as I already had coreutils installed for other reasons. If you
|
|
# are using GNU coreutils natively on your system then you can remove the
|
|
# g- prefix here.
|
|
|
|
TOUCH = touch --date=@0
|
|
|
|
|
|
.PHONY: test
|
|
|
|
test: $(STDOUTS)
|
|
|
|
%.stdout: %.joy
|
|
@$(JOY) < $< > $@ 2> $*.stderr || ($(TOUCH) $@; false)
|
|
@git diff $(GIT_OPTS) $@ $*.stderr || ($(TOUCH) $@; false)
|
|
|
|
|