## to change this; bug#17848 - if that gets done, this can be simplified).
##
## Beware: it approximates 'no-byte-compile', so watch out for false-positives!
- SELECTOR_DEFAULT=(quote (not (tag :expensive-test)))
- SELECTOR_EXPENSIVE=nil
- SELECTOR=
+ SELECTOR_DEFAULT = (quote (not (tag :expensive-test)))
+ SELECTOR_EXPENSIVE = nil
+ ifndef SELECTOR
+ SELECTOR_ACTUAL=$(SELECTOR_DEFAULT)
+ else
+ SELECTOR_ACTUAL=$(SELECTOR)
+ endif
+
+
-%.log: ${srcdir}/%.el
+%.log: %.el
@if grep '^;.*no-byte-compile: t' $< > /dev/null; then \
loadfile=$<; \
else \
fi; \
echo Testing $$loadfile; \
stat=OK ; \
+ mkdir --parents $(dir $@) ; \
$(emacs) -l ert -l $$loadfile \
- --eval "(ert-run-tests-batch-and-exit ${SELECTOR})" ${WRITE_LOG}
+ --eval "(ert-run-tests-batch-and-exit ${SELECTOR_ACTUAL})" ${WRITE_LOG}
-ELFILES = $(sort $(wildcard ${srcdir}/*.el))
-LOGFILES = $(patsubst %.el,%.log,$(notdir ${ELFILES}))
-TESTS = ${LOGFILES:.log=}
+ELFILES = $(shell find ${srcdir} -path "${srcdir}/manual" -prune -o \
+ -path "*resources" -prune -o -name "*el" -print)
+## .elc files may be in a different directory for out of source builds
+ELCFILES = $(patsubst %.el,%.elc, \
+ $(patsubst $(srcdir)%,.%,$(ELFILES)))
+LOGFILES = $(patsubst %.elc,%.log,${ELCFILES})
+LOGSAVEFILES = $(patsubst %.elc,%.log~,${ELCFILES})
+TESTS = $(subst ${srcdir}/,,$(LOGFILES:.log=))
## If we have to interrupt a hanging test, preserve the log so we can
## see what the problem was.
$(foreach test,${TESTS},$(eval $(call test_template,${test})))
- ## Rerun default tests.
- check:
- @${MAKE} check-doit SELECTOR="${SELECTOR_DEFAULT}"
+## Include dependencies between test files and the files they test.
+## We do this without the file and eval directly, but then we would
+## have to run Emacs for every make invocation, and it might not be
+## available during clean.
+-include make-test-deps.mk
+ ## Rerun all default tests.
+ check: mostlyclean
+ @${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
- ## Rerun also expensive tests.
+ ## Rerun all default and expensive tests.
.PHONY: check-expensive
- check-expensive:
+ check-expensive: mostlyclean
@${MAKE} check-doit SELECTOR="${SELECTOR_EXPENSIVE}"
- ## Re-run all the tests every time.
- .PHONY: check-doit
- check-doit:
- -@for f in $(LOGFILES); do test ! -f $$f || mv $$f $$f~; done
- @${MAKE} check-maybe
-
- ## Only re-run tests whose .log is older than the test.
+ ## Only re-run default tests whose .log is older than the test.
.PHONY: check-maybe
- check-maybe: ${LOGFILES}
+ check-maybe:
+ @${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
+
+ ## Run the tests.
+ .PHONY: check-doit
+ check-doit: ${LOGFILES}
$(emacs) -l ert -f ert-summarize-tests-batch-and-exit $^
.PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean
- clean mostlyclean:
+ mostlyclean:
+ -@for f in *.log; do test ! -f $$f || mv $$f $$f~; done
+
+ clean:
- -rm -f *.log *.log~
+ -rm -f ${LOGFILES} ${LOGSAVEFILES}
+ -rm make-test-deps.mk
bootstrap-clean: clean
- -rm -f ${srcdir}/*.elc
+ -rm -f ${ELCFILES}
distclean: clean
rm -f Makefile