Commit | Line | Data |
---|---|---|
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 | 30 | SHELL = @SHELL@ |
d221e780 CO |
31 | |
32 | srcdir = @srcdir@ | |
d221e780 | 33 | VPATH = $(srcdir) |
d221e780 | 34 | |
0845be75 | 35 | SEPCHAR = @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. | |
40 | EMACS = ../../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 | 45 | EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)" |
d221e780 | 46 | |
e088b01d | 47 | # Prevent any settings in the user environment causing problems. |
5a8816f3 | 48 | unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS |
e088b01d | 49 | |
14202f05 GM |
50 | ## To run tests under a debugger, set this to eg: "gdb --args". |
51 | GDB = | |
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 | 55 | emacs = EMACSLOADPATH= LC_ALL=C EMACS_TEST_DIRECTORY=$(srcdir) $(GDB) "$(EMACS)" $(EMACSOPT) |
d221e780 | 56 | |
67bb589e | 57 | .PHONY: all check |
d221e780 | 58 | |
67bb589e | 59 | all: 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 |
67 | WRITE_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 | |
94 | ELFILES = $(wildcard ${srcdir}/*.el) | |
95 | LOGFILES = $(patsubst %.el,%.log,$(notdir ${ELFILES})) | |
06a9b8f6 | 96 | TESTS = ${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 |
105 | define test_template |
106 | $(1): | |
107 | @test ! -f $(1).log || mv $(1).log $(1).log~ | |
8eb6542f | 108 | @${MAKE} $(1).log WRITE_LOG= |
06a9b8f6 GM |
109 | endef |
110 | ||
111 | $(foreach test,${TESTS},$(eval $(call test_template,${test}))) | |
112 | ||
113 | ||
31eac1d1 GM |
114 | ## Re-run all the tests every time. |
115 | check: | |
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 | |
121 | check-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 | ||
126 | clean mostlyclean: | |
31eac1d1 | 127 | -rm -f *.log *.log~ |
5a8816f3 GM |
128 | |
129 | bootstrap-clean: clean | |
130 | -rm -f ${srcdir}/*.elc | |
131 | ||
132 | distclean: clean | |
1f43ed41 | 133 | rm -f Makefile |
d221e780 CO |
134 | |
135 | maintainer-clean: distclean bootstrap-clean | |
136 | ||
d221e780 | 137 | # Makefile ends here. |