diff options
author | Christian Ohler <ohler@gnu.org> | 2011-01-13 03:08:24 +1100 |
---|---|---|
committer | Christian Ohler <ohler@gnu.org> | 2011-01-13 03:08:24 +1100 |
commit | d221e7808c01fdc9234734f95ecf49e902085ddd (patch) | |
tree | 09d270adbfdeada366ecd2328b2660a75358dd0c /test/automated/Makefile.in | |
parent | 03d32f1b2263270b75a0b3324c52c39965345665 (diff) |
Add ERT, a tool for automated testing in Emacs Lisp.
* Makefile.in, configure.in, doc/misc/Makefile.in, doc/misc/makefile.w32-in:
Add ERT. Make "make check" run tests in test/automated.
* doc/misc/ert.texi, lisp/emacs-lisp/ert.el, lisp/emacs-lisp/ert-x.el:
New files.
* test/automated: New directory.
Diffstat (limited to 'test/automated/Makefile.in')
-rw-r--r-- | test/automated/Makefile.in | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in new file mode 100644 index 0000000000..80a853056b --- /dev/null +++ b/test/automated/Makefile.in @@ -0,0 +1,158 @@ +# Maintenance productions for the automated test directory +# Copyright (C) 2010, 2011 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/>. + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +abs_top_builddir = @abs_top_builddir@ +test = $(srcdir) +VPATH = $(srcdir) +lispsrc = $(top_srcdir)/lisp +lisp = ${abs_top_builddir}/lisp + +# You can specify a different executable on the make command line, +# e.g. "make EMACS=../src/emacs ...". + +# We sometimes change directory before running Emacs (typically when +# building out-of-tree, we chdir to the source directory), so we need +# to use an absolute file name. +EMACS = ${abs_top_builddir}/src/emacs + +# Command line flags for Emacs. + +EMACSOPT = -batch --no-site-file --no-site-lisp + +# Extra flags to pass to the byte compiler +BYTE_COMPILE_EXTRA_FLAGS = +# For example to not display the undefined function warnings you can use this: +# BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not unresolved)))' +# The example above is just for developers, it should not be used by default. + +# The actual Emacs command run in the targets below. +emacs = EMACSLOADPATH=$(lispsrc):$(test) LC_ALL=C $(EMACS) $(EMACSOPT) + +# Common command to find subdirectories +setwins=subdirs=`(find . -type d -print)`; \ + for file in $$subdirs; do \ + case $$file in */.* | */.*/* | */=* ) ;; \ + *) wins="$$wins $$file" ;; \ + esac; \ + done + +all: test + +doit: + + +# Files MUST be compiled one by one. If we compile several files in a +# row (i.e., in the same instance of Emacs) we can't make sure that +# the compilation environment is clean. We also set the load-path of +# the Emacs used for compilation to the current directory and its +# subdirectories, to make sure require's and load's in the files being +# compiled find the right files. + +.SUFFIXES: .elc .el + +# An old-fashioned suffix rule, which, according to the GNU Make manual, +# cannot have prerequisites. +.el.elc: + @echo Compiling $< + @$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $< + +.PHONY: lisp-compile compile-main compile compile-always + +lisp-compile: + cd $(lisp); $(MAKE) $(MFLAGS) compile EMACS=$(EMACS) + +# In `compile-main' we could directly do +# ... | xargs $(MAKE) $(MFLAGS) EMACS="$(EMACS)" +# and it works, but it generates a lot of messages like +# make[2]: « gnus/gnus-mlspl.elc » is up to date. +# so instead, we use "xargs echo" to split the list of file into manageable +# chunks and then use an intermediate `compile-targets' target so the +# actual targets (the .elc files) are not mentioned as targets on the +# make command line. + + +.PHONY: compile-targets +# TARGETS is set dynamically in the recursive call from `compile-main'. +compile-targets: $(TARGETS) + +# Compile all the Elisp files that need it. Beware: it approximates +# `no-byte-compile', so watch out for false-positives! +compile-main: compile-clean lisp-compile + @(cd $(test); $(setwins); \ + els=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \ + for el in $$els; do \ + test -f $$el || continue; \ + test ! -f $${el}c && GREP_OPTIONS= grep '^;.*no-byte-compile: t' $$el > /dev/null && continue; \ + echo "$${el}c"; \ + done | xargs echo) | \ + while read chunk; do \ + $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \ + done + +.PHONY: compile-clean +# Erase left-over .elc files that do not have a corresponding .el file. +compile-clean: + @cd $(test); $(setwins); \ + elcs=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.elc |g'`; \ + for el in $$(echo $$elcs | sed -e 's/\.elc/\.el/g'); do \ + if test -f "$$el" -o \! -f "$${el}c"; then :; else \ + echo rm "$${el}c"; \ + rm "$${el}c"; \ + fi \ + done + +# Compile all Lisp files, but don't recompile those that are up to +# date. Some .el files don't get compiled because they set the +# local variable no-byte-compile. +# Calling make recursively because suffix rule cannot have prerequisites. +# Explicitly pass EMACS (sometimes ../src/bootstrap-emacs) to those +# sub-makes that run rules that use it, for the sake of some non-GNU makes. +compile: $(LOADDEFS) autoloads compile-first + $(MAKE) $(MFLAGS) compile-main EMACS=$(EMACS) + +# Compile all Lisp files. This is like `compile' but compiles files +# unconditionally. Some files don't actually get compiled because they +# set the local variable no-byte-compile. +compile-always: doit + cd $(test); rm -f *.elc */*.elc */*/*.elc */*/*/*.elc + $(MAKE) $(MFLAGS) compile EMACS=$(EMACS) + +bootstrap-clean: + cd $(test); rm -f *.elc */*.elc */*/*.elc */*/*/*.elc + +distclean: + -rm -f ./Makefile + +maintainer-clean: distclean bootstrap-clean + +check: compile-main + @(cd $(test); $(setwins); \ + pattern=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \ + for el in $$pattern; do \ + test -f $$el || continue; \ + args="$$args -l $$el"; \ + els="$$els $$el"; \ + done; \ + echo Testing $$els; \ + $(emacs) $$args -f ert-run-tests-batch-and-exit) + +# Makefile ends here. |