# supported everywhere.
TEST_LOCALE = C
+# Whether to run tests from .el files in preference to .elc, we do
+# this by default since it gives nicer stacktraces.
+TEST_LOAD_EL ?= yes
+
# The actual Emacs command run in the targets below.
# Prevent any setting of EMACSLOADPATH in user environment causing problems.
emacs = EMACSLOADPATH= LC_ALL=$(TEST_LOCALE) \
all: check
-%.elc: %.el
- $(AM_V_ELC)$(emacs) -f batch-byte-compile $<
-
-## Ignore any test errors so we can continue to test other files.
-## But compilation errors are always fatal.
-WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@
-
-## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather
-## than || true, since the former makes problems more obvious.
-## I'd also prefer to @-hide the grep part and not the
-## ert-run-tests-batch-and-exit part.
-##
-## We need to use $loadfile because:
-## i) -L :$srcdir -l basename does not work, because we have files whose
-## basename duplicates a file in lisp/ (eg eshell.el).
-## ii) Although -l basename will automatically load .el or .elc,
-## -l ./basename treats basename as a literal file (it would be nice
-## 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
ifdef SELECTOR
SELECTOR_ACTUAL=$(SELECTOR_EXPENSIVE)
endif
-## Byte-compile all test files to test for errors (unless explicitly
-## told not to), but then evaluate the un-byte-compiled files, because
-## they give cleaner stacktraces.
+## Byte-compile all test files to test for errors.
+%.elc: %.el
+ $(AM_V_ELC)$(emacs) -f batch-byte-compile $<
+
+## Save logs, and show logs for failed tests.
+WRITE_LOG = > $@ 2>&1 || { STAT=$$?; cat $@; exit $$STAT; }
+
+ifeq ($(TEST_LOAD_EL), yes)
+testloadfile = $*.el
+else
+testloadfile = $*
+endif
-## Beware: it approximates 'no-byte-compile', so watch out for false-positives!
-%.log: %.el
- $(AM_V_at)grep '^;.*no-byte-compile: t' $< > /dev/null || ${MAKE} $<c
+## Ignore any test errors so we can continue to test other files.
+%.log: %.elc
$(AM_V_at)${MKDIR_P} $(dir $@)
- $(AM_V_GEN)stat=OK ; \
- HOME=/nonexistent $(emacs) -l ert -l $< \
+ -$(AM_V_GEN)HOME=/nonexistent $(emacs) -l ert -l $(testloadfile) \
--eval "(ert-run-tests-batch-and-exit ${SELECTOR_ACTUAL})" ${WRITE_LOG}
ifeq (@HAVE_MODULES@, yes)