diff options
Diffstat (limited to 'test/Makefile.in')
-rw-r--r-- | test/Makefile.in | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/test/Makefile.in b/test/Makefile.in new file mode 100644 index 00000000000..f2f27634c24 --- /dev/null +++ b/test/Makefile.in @@ -0,0 +1,213 @@ +### @configure_input@ + +# Copyright (C) 2010-2016 Free Software Foundation, Inc. + +# This file is part of GNU Emacs. + +# GNU Emacs is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. + +### Commentary: + +## Some targets: +## check: re-run all tests, writing to .log files. +## check-maybe: run all tests which are outdated with their .log file +## or the source files they are testing. +## filename.log: run tests from filename.el(c) if .log file needs updating +## filename: re-run tests from filename.el(c), with no logging + +### Code: + +SHELL = @SHELL@ + +srcdir = @srcdir@ +VPATH = $(srcdir) + +MKDIR_P = @MKDIR_P@ + +SEPCHAR = @SEPCHAR@ + +# We never change directory before running Emacs, so a relative file +# name is fine, and makes life easier. If we need to change +# directory, we can use emacs --chdir. +EMACS = ../src/emacs + +EMACS_EXTRAOPT= + +# Command line flags for Emacs. +# Apparently MSYS bash would convert "-L :" to "-L ;" anyway, +# but we might as well be explicit. +EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)" $(EMACS_EXTRAOPT) + +# Prevent any settings in the user environment causing problems. +unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS + +## To run tests under a debugger, set this to eg: "gdb --args". +GDB = + +# The locale to run tests under. Tests should work if this is set to +# any supported locale. Use the C locale by default, as it should be +# supported everywhere. +TEST_LOCALE = C + +# 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) EMACS_TEST_DIRECTORY=$(srcdir) \ + $(GDB) "$(EMACS)" $(EMACSOPT) + +.PHONY: all check + +all: check + +%.elc: %.el + @echo Compiling $< + @$(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) +else ifndef MAKECMDGOALS +SELECTOR_ACTUAL=$(SELECTOR_DEFAULT) +else ifeq ($(MAKECMDGOALS),all) +SELECTOR_ACTUAL=$(SELECTOR_DEFAULT) +else ifeq ($(MAKECMDGOALS),check) +SELECTOR_ACTUAL=$(SELECTOR_DEFAULT) +else ifeq ($(MAKECMDGOALS),check-maybe) +SELECTOR_ACTUAL=$(SELECTOR_DEFAULT) +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. + +## Beware: it approximates 'no-byte-compile', so watch out for false-positives! +%.log: %.el + elc=$<c; \ + if ! grep '^;.*no-byte-compile: t' $< > /dev/null; then \ + ${MAKE} $$elc; \ + fi; \ + loadfile=$<; \ + echo Testing $$loadfile; \ + stat=OK ; \ + ${MKDIR_P} $(dir $@) ; \ + $(emacs) -l ert -l $$loadfile \ + --eval "(ert-run-tests-batch-and-exit ${SELECTOR_ACTUAL})" ${WRITE_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. +.PRECIOUS: %.log + +.PHONY: ${TESTS} + +## The short aliases that always re-run the tests, with no logging. +## Define an alias both with and without the directory name for ease +## of use. +define test_template +$(1): + @test ! -f ./$(1).log || mv ./$(1).log ./$(1).log~ + @${MAKE} ./$(1).log WRITE_LOG= + +$(notdir $(1)): $(1) +endef + +$(foreach test,${TESTS},$(eval $(call test_template,${test}))) + +## Check that there is no 'automated' subdirectory, which would +## indicate an incomplete merge from an older version of Emacs where +## the tests were arranged differently. +.PHONY: check-no-automated-subdir +check-no-automated-subdir: + test ! -d $(srcdir)/automated + +## Include dependencies between test files and the files they test. +## We could 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 check-no-automated-subdir + @${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}" + +## Rerun all default and expensive tests. +.PHONY: check-expensive +check-expensive: mostlyclean check-no-automated-subdir + @${MAKE} check-doit SELECTOR="${SELECTOR_EXPENSIVE}" + +## Re-run all tests which are outdated. A test is outdated if its +## logfile is out-of-date with either the test file, or the source +## files that the tests depend on. The source file dependencies are +## determined by a heuristic and does not identify the full dependency +## graph. See make-test-deps.emacs-lisp for details. +.PHONY: check-maybe +check-maybe: check-no-automated-subdir + @${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 + +mostlyclean: + -@for f in ${LOGFILES}; do test ! -f $$f || mv $$f $$f~; done + rm -f *.tmp + +clean: + -rm -f ${LOGFILES} ${LOGSAVEFILES} + -rm make-test-deps.mk + +bootstrap-clean: clean + -rm -f ${ELCFILES} + +distclean: clean + rm -f Makefile + +maintainer-clean: distclean bootstrap-clean + +make-test-deps.mk: $(ELFILES) make-test-deps.emacs-lisp + $(EMACS) --batch -l $(srcdir)/make-test-deps.emacs-lisp \ + --eval "(make-test-deps \"$(srcdir)\")" \ + 2> $@.tmp + # Hack to elide any CANNOT_DUMP=yes chatter. + sed '/\.log: /!d' $@.tmp >$@ + rm -f $@.tmp |