1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-24 10:38:38 +00:00

Fix bugs in simplified test dependencies

Problem reported by Glenn Morris in:
http://lists.gnu.org/archive/html/emacs-devel/2017-04/msg00017.html
* test/Makefile.in (LOGFILES, TESTS): Omit leading "./".
(TESTS): Omit unnecessary patsubst.
(test_template): Redo dependency heuristic, hopefully
correctly this time.  It's the .log file that depends,
not the phony test target.  Declare the phonies to be PHONY.
Resurrect the exception for the *-tests subdirectory.
Adjust to the fact that leading "./" is omitted now.
This commit is contained in:
Paul Eggert 2017-04-02 13:09:56 -07:00
parent 2b18ecec5e
commit 8e394a7f35

View File

@ -128,8 +128,8 @@ ELFILES := $(shell find ${srcdir} -path "${srcdir}/manual" -prune -o \
-name "*resources" -prune -o -name "*.el" -print)
## .log files may be in a different directory for out of source builds
LOGFILES := $(patsubst %.el,%.log, \
$(patsubst $(srcdir)%,.%,$(ELFILES)))
TESTS := $(subst ${srcdir}/,,$(LOGFILES:.log=))
$(patsubst $(srcdir)/%,%,$(ELFILES)))
TESTS := $(LOGFILES:.log=)
## If we have to interrupt a hanging test, preserve the log so we can
## see what the problem was.
@ -137,20 +137,24 @@ TESTS := $(subst ${srcdir}/,,$(LOGFILES:.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
ifeq (,$(patsubst $(srcdir)/src/%,,$(1)))
$(1): $(srcdir)/../src/$(1:.log=.c)
else
$(1): $(srcdir)/../lisp/$(1:.log=.el)
## A test FOO-tests depends on the source file with the similar
## name, unless FOO itself contains the string '-tests/'.
## The similar name is FOO.c if FOO begins with 'src/', FOO.el
## otherwise. Although this heuristic does not identify all the
## dependencies, it is better than nothing.
ifeq (,$(patsubst %-tests,,$(1))$(findstring -tests/,$(1)))
$(1).log: $(patsubst %-tests,$(srcdir)/../%,$(1))$(if \
$(patsubst src/%,,$(1)),.el,.c)
endif
$(1):
@test ! -f ./$(1).log || mv ./$(1).log ./$(1).log~
@${MAKE} ./$(1).log WRITE_LOG=
$(notdir $(1)): $(1)
## Short aliases that always re-run the tests, with no logging.
## Define both with and without the directory name for ease of use.
.PHONY: $(1) $(notdir $(1))
$(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})))
@ -173,9 +177,7 @@ check-expensive: mostlyclean check-no-automated-subdir
## 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 test_template for details.
## files that the tests depend on. See test_template.
.PHONY: check-maybe
check-maybe: check-no-automated-subdir
@${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"