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"))