Subject: [bug#76686] [PATCH emacs-team 02/45] build-system: emacs: Guess test framework.

From: Liliana Marie Prikler <[email-masked]>
Date: Sun, 2 Mar 2025 11:48:36 +0100

* guix/build/emacs-build-system (check-command): New variable.
(check): Use it.
* guix/build-system/emacs.scm (emacs-build)[test-command]: Set to #f.
---
 guix/build-system/emacs.scm       |  2 +-
 guix/build/emacs-build-system.scm | 35 ++++++++++++++++++++-----------
 2 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/guix/build-system/emacs.scm b/guix/build-system/emacs.scm
index 2ec08fe8783..fc165c21d78 100644
--- a/guix/build-system/emacs.scm
+++ b/guix/build-system/emacs.scm
@@ -84,7 +84,7 @@ (define* (emacs-build name inputs
                       #:key source
                       (tests? (not (%current-target-system)))
                       (parallel-tests? #t)
-                      (test-command ''("make" "check"))
+                      (test-command #f) ; inferred in emacs-build-system
                       (phases '%standard-phases)
                       (outputs '("out"))
                       (include (quote %default-include))
diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index aa083c64094..ff35547968b 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -223,23 +223,34 @@ (define* (ensure-package-description #:key outputs #:allow-other-keys)
   (let ((name (store-directory->elpa-name-version (assoc-ref outputs "out"))))
     (and=> (find-root-library-file name) write-pkg-file)))
 
-(define* (check #:key tests? (test-command '("make" "check"))
+(define (check-command test-command)
+  (cond
+   (test-command test-command)
+   ((which "buttercup") '("buttercup" "-L" "."))
+   ((which "ert-runner") '("ert-runner"))
+   ((file-exists? "Makefile") '("make" "check"))
+   (else #f)))
+
+(define* (check #:key tests? test-command
                 (parallel-tests? #t) #:allow-other-keys)
   "Run the tests by invoking TEST-COMMAND.
 
 When TEST-COMMAND uses make and PARALLEL-TESTS is #t, the tests are run in
 parallel. PARALLEL-TESTS? is ignored when using a non-make TEST-COMMAND."
-  (match-let (((test-program . args) test-command))
-    (let ((using-make? (string=? test-program "make")))
-      (if tests?
-          (apply invoke test-program
-                 `(,@args
-                   ,@(if (and using-make? parallel-tests?)
-                         `("-j" ,(number->string (parallel-job-count)))
-                         '())))
-          (begin
-            (format #t "test suite not run~%")
-            #t)))))
+  (match (and tests? (check-command test-command))
+    ((test-program . args)
+     (let ((using-make? (string=? test-program "make")))
+       (apply invoke test-program
+              `(,@args
+                ,@(if (and using-make? parallel-tests?)
+                      `("-j" ,(number->string (parallel-job-count)))
+                      '())))))
+    (#f
+     (if tests?
+         (begin
+           (display "warning: test system not found.\n")
+           (display "note: this will be an error in the future.\n"))
+         (display "test suite not run\n")))))
 
 (define* (install #:key outputs
                   (include %default-include)
-- 
2.48.1