aboutsummaryrefslogtreecommitdiff
path: root/tests/check-deps.el
blob: 55aaae6d03daa33edfc5fae16cdf36b3d275eaf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
;;; check-deps.el --- Verify test dependencies are loadable -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Craig Jennings

;;; Commentary:

;; Loaded by tests/Makefile's check-deps target after eask has prepared the
;; test environment.  Keep dependency discovery inside Emacs so package.el,
;; package-vc, Eask, Nix, and pre-populated load-path setups all work the same
;; way: a dependency is available if Emacs can require it.
;;
;; DUET has no third-party runtime dependencies yet; cl-lib is the one feature
;; the core leans on (cl-defstruct lands in Phase 2).  The dev tooling
;; (undercover, elisp-lint, package-lint) is verified by the targets that use
;; it, not here.

;;; Code:

(when noninteractive
  (package-initialize))

(defconst duet-check-deps-required-features
  '(cl-lib)
  "Features required by the duet test suite.")

(defun duet-check-deps--missing-features ()
  "Return required test features that cannot be loaded."
  (let (missing)
    (dolist (feature duet-check-deps-required-features (nreverse missing))
      (unless (require feature nil t)
        (push feature missing)))))

(let ((missing (duet-check-deps--missing-features)))
  (if missing
      (progn
        (message "Missing Emacs Lisp test dependencies: %s"
                 (mapconcat #'symbol-name missing ", "))
        (message "Run `make setup' from the project root, or make these features available on load-path.")
        (kill-emacs 1))
    (message "Required Emacs Lisp dependencies are loadable: %s"
             (mapconcat #'symbol-name duet-check-deps-required-features ", "))))

;;; check-deps.el ends here