diff --git a/test/Makefile.in b/test/Makefile.in index 8880ee21936..0d1663a4cdd 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -81,6 +81,10 @@ GDB = # 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) \ @@ -91,26 +95,6 @@ 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 @@ -127,16 +111,23 @@ else 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 $< -## 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} $ $@ 2>&1 || { STAT=$$?; cat $@; exit $$STAT; } + +ifeq ($(TEST_LOAD_EL), yes) +testloadfile = $*.el +else +testloadfile = $* +endif + +## 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)