Function: native-compile-prune-cache
native-compile-prune-cache is an interactive and byte-compiled
function defined in comp.el.gz.
Signature
(native-compile-prune-cache)
Documentation
Remove *.eln files that aren't usable by the current Emacs build.
This command removes all the *.eln files in native-comp-eln-load-path
which are incompatible with the Emacs session in which you invoke this
command. This includes the *.eln files compiled by all the Emacs
sessions where comp-native-version-dir had a value different from the
current session.
Note that this command does not prune the *.eln files in the last
directory in native-comp-eln-load-path, which holds *.eln files
compiled during the Emacs build process.
Probably introduced at or before Emacs version 29.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/comp.el.gz
(defun native-compile-prune-cache ()
"Remove *.eln files that aren't usable by the current Emacs build.
This command removes all the *.eln files in `native-comp-eln-load-path'
which are incompatible with the Emacs session in which you invoke this
command. This includes the *.eln files compiled by all the Emacs
sessions where `comp-native-version-dir' had a value different from the
current session.
Note that this command does not prune the *.eln files in the last
directory in `native-comp-eln-load-path', which holds *.eln files
compiled during the Emacs build process."
(interactive)
(unless (featurep 'native-compile)
(user-error "This Emacs isn't built with native-compile support"))
;; The last directory in 'native-comp-eln-load-path' is assumed to be a
;; system directory, so don't try to delete anything there (bug#59658).
(dolist (dir (butlast native-comp-eln-load-path))
;; If a directory is non absolute it is assumed to be relative to
;; `invocation-directory'.
(setq dir (expand-file-name dir invocation-directory))
(when (file-exists-p dir)
(dolist (subdir (seq-filter
(lambda (f) (not (string-match (rx "/." (? ".") eos) f)))
(directory-files dir t)))
(when (and (file-directory-p subdir)
(file-writable-p subdir)
(not (equal (file-name-nondirectory
(directory-file-name subdir))
comp-native-version-dir)))
(message "Deleting `%s'..." subdir)
;; We're being overly cautious here -- there shouldn't be
;; anything but .eln files in these directories.
(dolist (eln (directory-files subdir t "\\.eln\\(\\.tmp\\)?\\'"))
(when (file-writable-p eln)
(delete-file eln)))
(when (directory-empty-p subdir)
(delete-directory subdir))))))
(message "Cache cleared"))