### @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 . ### 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 %.log: %.el @if grep '^;.*no-byte-compile: t' $< > /dev/null; then \ loadfile=$<; \ else \ loadfile=$ $@ # Makefile ends here.