bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#59334: 29.0.50; loading native-compiled init file sets user-init-fil


From: Juanma Barranquero
Subject: bug#59334: 29.0.50; loading native-compiled init file sets user-init-file to .eln
Date: Fri, 18 Nov 2022 03:25:34 +0100

This fix works. It assumes (as the original code does) that the source will either be an .el file, or extensionless (though when an .eln was loaded, the source will always be .el), so the following code will check for staleness of the .elc as usual.

In other words, with this patch, it will still warn if the source file is newer than the .elc (as it does now Emacs), regardless of whether the init file was loaded from an .elc or .eln. (The age of the .eln is irrelevant here, that's for the native compiler to check and act upon.)


diff --git i/lisp/startup.el w/lisp/startup.el
index 70267fc857..62984426e5 100644
--- i/lisp/startup.el
+++ w/lisp/startup.el
@@ -1064,7 +1064,11 @@ startup--load-user-init-file
             ;; If we loaded a compiled file, set `user-init-file' to
             ;; the source version if that exists.
-            (when (equal (file-name-extension user-init-file)
-                         "elc")
-              (let* ((source (file-name-sans-extension user-init-file))
+            (when (member (file-name-extension user-init-file)
+                          '("elc" "eln"))
+              (let* ((source (file-name-sans-extension
+                              (or (gethash
+                                   (file-name-nondirectory user-init-file)
+                                   comp-eln-to-el-h)
+                                  user-init-file)))
                      (alt (concat source ".el")))
                 (setq source (cond ((file-exists-p alt) alt)



Testing this patch allowed me to discover another bug:

If you use ~/.emacs instead of ~.emacs.d/init.el, and happen to compile .emacs, Emacs loads .emacs.elc (as it has always done), but the native compiler does *not* know how to compile it (because it does not know how to locate its source), so it gives a warning:

022-11-18 02:54:01+0100 Warning (comp): Cannot look up eln file as no source file was found for d:/Home/.emacs.elc

and then it assigns the user-init-file to warnings.el!

ELISP> user-init-file
"d:/Home/.emacs.d/native/29.0.50-a4a10996/warnings-28e75f4d-02da775e.eln"


which, if my patch is installed, gets converted to its source file:

ELISP> user-init-file
"d:/Devel/emacs/repo/trunk/lisp/emacs-lisp/warnings.el"

So this is a double bug for anyone compiling their .emacs: they will always get a warning, and an erroneous user-init-file.

Do you want me to file this as a separate bug?

reply via email to

[Prev in Thread] Current Thread [Next in Thread]