Recompile Spacemacs core .elc files when Emacs version changes

This commit is contained in:
JAremko 2021-01-31 12:37:17 +02:00 committed by Eugene Yaremenko
parent 6ae9364a57
commit 88980363b6
2 changed files with 21 additions and 2 deletions

View File

@ -12,6 +12,12 @@
(require 'cl-lib)
(require 'subr-x)
(defvar spacemacs--last-emacs-version ""
"This variable is set during Emacs initialization to its version.")
(defconst spacemacs--last-emacs-version-file
(expand-file-name (concat spacemacs-cache-directory "last-emacs-version"))
"File that sets `spacemacs--last-emacs-version' variable.")
(defconst spacemacs--compiled-files
'(;; Built-in libs that we changed
"core/libs/forks/load-env-vars.el"
@ -54,4 +60,12 @@ File paths are relative to the `spacemacs-start-directory'.")
(when (file-newer-than-file-p file-el file-elc)
(cl-return t)))))
(defun spacemacs//update-last-emacs-version ()
"Update `spacemacs--last-emacs-version' and its saved value."
(with-temp-file spacemacs--last-emacs-version-file
(insert (format "(setq spacemacs--last-emacs-version %S)"
(setq spacemacs--last-emacs-version emacs-version)))
(make-directory (file-name-directory spacemacs--last-emacs-version-file)
t)))
(provide 'core-compilation)

View File

@ -25,12 +25,17 @@
(load (concat spacemacs-core-directory "core-dumper.el")
nil (not init-file-debug))
;; Clean compiled files if they become stale or Emacs version has changed.
(load (concat spacemacs-core-directory "core-compilation.el")
nil (not init-file-debug))
(load spacemacs--last-emacs-version-file t (not init-file-debug))
(let ((default-directory spacemacs-start-directory))
(when (spacemacs//contains-newer-than-byte-compiled-p
spacemacs--compiled-files)
(when (or (not (string= spacemacs--last-emacs-version emacs-version))
(spacemacs//contains-newer-than-byte-compiled-p
spacemacs--compiled-files))
(spacemacs//remove-byte-compiled-files spacemacs--compiled-files)))
(when (not (string= spacemacs--last-emacs-version emacs-version))
(spacemacs//update-last-emacs-version))
(if (not (version<= spacemacs-emacs-min-version emacs-version))
(error (concat "Your version of Emacs (%s) is too old. "