]> code.delx.au - gnu-emacs/commitdiff
Tests now depend on source files
authorPhillip Lord <phillip.lord@russet.org.uk>
Sat, 28 Nov 2015 23:13:24 +0000 (23:13 +0000)
committerPhillip Lord <phillip.lord@russet.org.uk>
Mon, 30 Nov 2015 21:32:31 +0000 (21:32 +0000)
 * test/Makefile.in: Include dependences from tests to source files.
 * test/make-test-deps.emacs-lisp: New file
 * .gitignore: Ignore generated make include file

.gitignore
test/Makefile.in
test/make-test-deps.emacs-lisp [new file with mode: 0644]

index e83760b2a24f26588bf8f356e315df2729ac70b3..682179150a330e796f02396c10c2582e1ef70afb 100644 (file)
@@ -153,6 +153,8 @@ test/manual/etags/srclist
 test/manual/etags/regexfile
 test/manual/etags/ETAGS
 test/manual/etags/CTAGS
+# Generated by test/make-test-deps.emacs-lisp
+test/make-test-deps.mk
 
 # ctags, etags.
 TAGS
index d3a8eb90420226ce0b8a11a9085a1ac10445f450..4d8a802ca3630fdacd8b493e17eef685b3051103 100644 (file)
@@ -125,6 +125,7 @@ endef
 
 $(foreach test,${TESTS},$(eval $(call test_template,${test})))
 
+-include make-test-deps.mk
 
 ## Re-run all the tests every time.
 check:
@@ -149,4 +150,8 @@ distclean: clean
 
 maintainer-clean: distclean bootstrap-clean
 
+make-test-deps.mk: $(ELFILES) make-test-deps.emacs-lisp
+       ../src/emacs --batch -l make-test-deps.emacs-lisp \
+       --eval "(make-test-deps \"`pwd`\")" \
+       2> $@
 # Makefile ends here.
diff --git a/test/make-test-deps.emacs-lisp b/test/make-test-deps.emacs-lisp
new file mode 100644 (file)
index 0000000..563b3bf
--- /dev/null
@@ -0,0 +1,89 @@
+;; -*- emacs-lisp -*-
+
+;; The contents of this file are subject to the GPL License, Version 3.0.
+;;
+;; Copyright (C) 2015, Free Software Foundation
+;;
+;; This program 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.
+;;
+;; This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file generates dependencies between test files and the files
+;; that they test.
+
+;; It has an .emacs-lisp extension because it makes the Makefile easier!
+
+(require 'seq)
+
+(defun make-test-deps (directory)
+  (message
+   "%s"
+   (concat
+    (make-test-deps-lisp directory)
+    (make-test-deps-src directory))))
+
+(defun make-test-deps-lisp (directory)
+  (mapconcat
+   (lambda (stem)
+     (format "%s-tests.log: ../%s.elc\n" stem stem))
+   (make-test-test-files directory "lisp") ""))
+
+(defun make-test-deps-src (directory)
+  (mapconcat
+   (lambda (stem)
+     (format "%s-tests.log: ../%s.o\n" stem stem))
+   (make-test-test-files directory "src") ""))
+
+(defun make-test-test-files (stem dir)
+  (make-test-munge-files
+   stem
+   (directory-files-recursively dir ".*-tests.el$")))
+
+(defun make-test-munge-files (stem files)
+  (make-test-sans-suffix
+   (make-test-de-stem
+    stem
+    (make-test-no-legacy
+     (make-test-no-test-dir
+      (make-test-no-resources
+       files))))))
+
+(defun make-test-sans-suffix (files)
+  (mapcar
+   (lambda (file)
+     (substring file 0 -9))
+   files))
+
+(defun make-test-de-stem (stem files)
+  (mapcar
+   (lambda (file)
+     (substring
+      file
+      (+ 1 (length stem))))
+   files))
+
+(defun make-test-no-legacy (list)
+  (make-test-remove list "legacy/"))
+
+(defun make-test-no-resources (list)
+  (make-test-remove list "-resources/"))
+
+(defun make-test-no-test-dir (list)
+  (make-test-remove list "-tests/"))
+
+(defun make-test-remove (list match)
+  (seq-remove
+   (lambda (file)
+     (string-match-p match file))
+   list))