* test/automated/Makefile.in (GDB): New variable.
[bpt/emacs.git] / test / automated / Makefile.in
CommitLineData
bbece175
GM
1### @configure_input@
2
ba318903 3# Copyright (C) 2010-2014 Free Software Foundation, Inc.
d221e780
CO
4
5# This file is part of GNU Emacs.
6
7# GNU Emacs is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11
12# GNU Emacs is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16
17# You should have received a copy of the GNU General Public License
18# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
19
06a9b8f6
GM
20### Commentary:
21
22## Some targets:
8eb6542f 23## check: re-run all tests, writing to .log files.
06a9b8f6
GM
24## check-maybe: run all tests whose .log file needs updating
25## filename.log: run tests from filename.el(c) if .log file needs updating
8eb6542f 26## filename: re-run tests from filename.el(c), with no logging
06a9b8f6
GM
27
28### Code:
29
50b13cde 30SHELL = @SHELL@
d221e780
CO
31
32srcdir = @srcdir@
d221e780 33VPATH = $(srcdir)
d221e780 34
0845be75 35SEPCHAR = @SEPCHAR@
2df10228 36
67fb4e6a
GM
37# We never change directory before running Emacs, so a relative file
38# name is fine, and makes life easier. If we need to change
39# directory, we can use emacs --chdir.
40EMACS = ../../src/emacs
d221e780
CO
41
42# Command line flags for Emacs.
2df10228
GM
43# Apparently MSYS bash would convert "-L :" to "-L ;" anyway,
44# but we might as well be explicit.
0845be75 45EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)"
d221e780 46
e088b01d 47# Prevent any settings in the user environment causing problems.
5a8816f3 48unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS
e088b01d 49
14202f05
GM
50## To run tests under a debugger, set this to eg: "gdb --args".
51GDB =
52
d221e780 53# The actual Emacs command run in the targets below.
8b77446f 54# Prevent any setting of EMACSLOADPATH in user environment causing problems.
14202f05 55emacs = EMACSLOADPATH= LC_ALL=C EMACS_TEST_DIRECTORY=$(srcdir) $(GDB) "$(EMACS)" $(EMACSOPT)
d221e780 56
67bb589e 57.PHONY: all check
d221e780 58
67bb589e 59all: check
d221e780 60
5a8816f3 61%.elc: %.el
d221e780 62 @echo Compiling $<
5a8816f3
GM
63 @$(emacs) -f batch-byte-compile $<
64
65## Ignore any test errors so we can continue to test other files.
5a8816f3 66## But compilation errors are always fatal.
8eb6542f
GM
67WRITE_LOG = >& $@ || { stat=ERROR; cat $@; }; echo $$stat: $@
68
5a8816f3
GM
69## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather
70## than || true, since the former makes problems more obvious.
71## I'd also prefer to @-hide the grep part and not the
72## ert-run-tests-batch-and-exit part.
73##
74## We need to use $loadfile because:
75## i) -L :$srcdir -l basename does not work, because we have files whose
76## basename duplicates a file in lisp/ (eg eshell.el).
77## ii) Although -l basename will automatically load .el or .elc,
78## -l ./basename treats basename as a literal file (it would be nice
8eb6542f 79## to change this; bug#17848 - if that gets done, this can be simplified).
5a8816f3
GM
80##
81## Beware: it approximates `no-byte-compile', so watch out for false-positives!
82%.log: ${srcdir}/%.el
83 @if grep '^;.*no-byte-compile: t' $< > /dev/null; then \
84 loadfile=$<; \
85 else \
86 loadfile=$<c; \
87 ${MAKE} $$loadfile; \
88 fi; \
89 echo Testing $$loadfile; \
90 stat=OK ; \
91 $(emacs) -l ert -l $$loadfile \
8eb6542f 92 -f ert-run-tests-batch-and-exit ${WRITE_LOG}
5a8816f3
GM
93
94ELFILES = $(wildcard ${srcdir}/*.el)
95LOGFILES = $(patsubst %.el,%.log,$(notdir ${ELFILES}))
06a9b8f6 96TESTS = ${LOGFILES:.log=}
5a8816f3
GM
97
98## If we have to interrupt a hanging test, preserve the log so we can
99## see what the problem was.
100.PRECIOUS: %.log
101
06a9b8f6
GM
102.PHONY: ${TESTS}
103
8eb6542f 104## The short aliases that always re-run the tests, with no logging.
06a9b8f6
GM
105define test_template
106$(1):
107 @test ! -f $(1).log || mv $(1).log $(1).log~
8eb6542f 108 @${MAKE} $(1).log WRITE_LOG=
06a9b8f6
GM
109endef
110
111$(foreach test,${TESTS},$(eval $(call test_template,${test})))
112
113
31eac1d1
GM
114## Re-run all the tests every time.
115check:
116 -@for f in *.log; do test ! -f $$f || mv $$f $$f~; done
117 @${MAKE} check-maybe
118
119## Only re-run tests whose .log is older than the test.
120.PHONY: check-maybe
121check-maybe: ${LOGFILES}
5a8816f3
GM
122 $(emacs) -l ert -f ert-summarize-tests-batch-and-exit $^
123
124.PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean
125
126clean mostlyclean:
31eac1d1 127 -rm -f *.log *.log~
5a8816f3
GM
128
129bootstrap-clean: clean
130 -rm -f ${srcdir}/*.elc
131
132distclean: clean
1f43ed41 133 rm -f Makefile
d221e780
CO
134
135maintainer-clean: distclean bootstrap-clean
136
d221e780 137# Makefile ends here.