aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/config-utilities.el12
-rw-r--r--tests/test-config-utilities--recompile-emacs-home.el23
2 files changed, 25 insertions, 10 deletions
diff --git a/modules/config-utilities.el b/modules/config-utilities.el
index 72427ef9..4332f407 100644
--- a/modules/config-utilities.el
+++ b/modules/config-utilities.el
@@ -131,12 +131,18 @@ Signals `user-error' if METHOD-SYMBOL is nil or not fboundp."
;;; ----------------------------- Config Compilation ----------------------------
+(defun cj/--native-comp-p ()
+ "Return non-nil when native compilation is available on this build.
+Detected with `native-comp-available-p', not `boundp' of the async function:
+`native-compile-async' is a function, so `boundp' is always nil."
+ (and (fboundp 'native-comp-available-p) (native-comp-available-p)))
+
(defun cj/--recompile-emacs-home (dir &optional native-p)
"Delete all .elc/.eln files under DIR, then recompile.
NATIVE-P chooses native compilation when non-nil, byte otherwise.
-Also removes the eln (native) or elc (byte) cache directory.
+Also removes the eln-cache (native) or elc (byte) cache directory.
Returns the compilation method used: \\='native or \\='byte."
- (let ((elt-dir (expand-file-name (if native-p "eln" "elc") dir)))
+ (let ((elt-dir (expand-file-name (if native-p "eln-cache" "elc") dir)))
(message "Deleting all compiled files in %s" dir)
(dolist (file (directory-files-recursively dir "\\(\\.elc\\|\\.eln\\)$"))
(delete-file file))
@@ -157,7 +163,7 @@ Returns the compilation method used: \\='native or \\='byte."
"Delete all compiled files in the Emacs home before recompiling.
Recompile natively when supported, otherwise fall back to byte compilation."
(interactive)
- (let* ((native (boundp 'native-compile-async))
+ (let* ((native (cj/--native-comp-p))
(mode-word (if native "native" "byte")))
(if (yes-or-no-p
(format "Please confirm recursive %s recompilation of %s: "
diff --git a/tests/test-config-utilities--recompile-emacs-home.el b/tests/test-config-utilities--recompile-emacs-home.el
index 18d17f96..da364e24 100644
--- a/tests/test-config-utilities--recompile-emacs-home.el
+++ b/tests/test-config-utilities--recompile-emacs-home.el
@@ -81,20 +81,29 @@ Returns the temp dir path."
(should-not (file-exists-p (expand-file-name "sub/c.elc" dir))))
(delete-directory dir t))))
-(ert-deftest test-config-utilities-recompile-removes-eln-dir-on-native-path ()
- "Boundary: the native path removes the eln cache directory when present."
+(ert-deftest test-config-utilities-recompile-removes-eln-cache-dir-on-native-path ()
+ "Boundary: the native path removes the eln-cache directory when present.
+The native cache is eln-cache/, not eln/, so that is the directory to clear."
(let ((dir (test-config-utilities--make-recompile-fixture))
- (eln-dir nil))
+ (eln-cache-dir nil))
(unwind-protect
(progn
- (setq eln-dir (expand-file-name "eln" dir))
- (make-directory eln-dir)
- (with-temp-file (expand-file-name "stale.eln" eln-dir) (insert ""))
+ (setq eln-cache-dir (expand-file-name "eln-cache" dir))
+ (make-directory eln-cache-dir)
+ (with-temp-file (expand-file-name "stale.eln" eln-cache-dir) (insert ""))
(cl-letf (((symbol-function 'native-compile-async) (lambda (&rest _) nil)))
(cj/--recompile-emacs-home dir t))
- (should-not (file-exists-p eln-dir)))
+ (should-not (file-exists-p eln-cache-dir)))
(delete-directory dir t))))
+(ert-deftest test-config-utilities-native-comp-detection-not-boundp ()
+ "Regression: native-comp detection must not test `boundp' of the async
+function -- native-compile-async is a function, so `boundp' is always nil and
+native compilation would never be selected. On a native-comp build, detection
+returns non-nil."
+ (when (and (fboundp 'native-comp-available-p) (native-comp-available-p))
+ (should (cj/--native-comp-p))))
+
(ert-deftest test-config-utilities-recompile-removes-elc-dir-on-byte-path ()
"Boundary: the byte path removes the elc cache directory when present."
(let ((dir (test-config-utilities--make-recompile-fixture))