emacs-diffs
[Top][All Lists]
Advanced

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

master f7d88f4a047: Make eln files re-dumpable (bug#45103)


From: Andrea Corallo
Subject: master f7d88f4a047: Make eln files re-dumpable (bug#45103)
Date: Tue, 24 Oct 2023 13:58:02 -0400 (EDT)

branch: master
commit f7d88f4a0478d89f70243456af8c4d4817d6b251
Author: Andrea Corallo <acorallo@gnu.org>
Commit: Andrea Corallo <acorallo@gnu.org>

    Make eln files re-dumpable (bug#45103)
    
    * lisp/loadup.el (load--bin-dest-dir, load--eln-dest-dir): New
    variable.
    (load--fixup-all-elns): New function.
    * src/pdumper.c (Fdump_emacs_portable): Update to call
    'load--fixup-all-elns'.
    * src/print.c (print_vectorlike): Improve CU printing.
---
 lisp/loadup.el | 50 ++++++++++++++++++++++++++++++--------------------
 src/pdumper.c  |  4 ++++
 src/print.c    |  2 +-
 3 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/lisp/loadup.el b/lisp/loadup.el
index 35c59dba453..07895228d0d 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -496,23 +496,23 @@ lost after dumping")))
 ;; At this point, we're ready to resume undo recording for scratch.
 (buffer-enable-undo "*scratch*")
 
-(defvar comp-subr-arities-h)
-(when (featurep 'native-compile)
-  ;; Save the arity for all primitives so the compiler can always
-  ;; retrive it even in case of redefinition.
-  (mapatoms (lambda (f)
-              (when (subr-primitive-p (symbol-function f))
-                (puthash f (func-arity f) comp-subr-arities-h))))
-  ;; Fix the compilation unit filename to have it working when
-  ;; installed or if the source directory got moved.  This is set to be
-  ;; a pair in the form of:
-  ;;     (rel-filename-from-install-bin . rel-filename-from-local-bin).
-  (let ((bin-dest-dir (cadr (member "--bin-dest" command-line-args)))
-        (eln-dest-dir (cadr (member "--eln-dest" command-line-args))))
-    (when (and bin-dest-dir eln-dest-dir)
-      (setq eln-dest-dir
-            (concat eln-dest-dir "native-lisp/" comp-native-version-dir "/"))
-      (maphash (lambda (_ cu)
+(defvar load--bin-dest-dir nil
+  "Store the original value passed by \"--bin-dest\" during dump.
+Internal use only.")
+(defvar load--eln-dest-dir nil
+  "Store the original value passed by \"--eln-dest\" during dump.
+Internal use only.")
+
+(defun load--fixup-all-elns ()
+  "Fix all compilation unit filename.
+This to have it working when installed or if Emacs source
+directory got moved.  This is set to be a pair in the form of:
+\(rel-filename-from-install-bin . rel-filename-from-local-bin)."
+  (when (and load--bin-dest-dir load--eln-dest-dir)
+    (setq eln-dest-dir
+          (concat load--eln-dest-dir "native-lisp/" comp-native-version-dir 
"/"))
+    (maphash (lambda (_ cu)
+               (when (stringp (native-comp-unit-file cu))
                  (let* ((file (native-comp-unit-file cu))
                         (preloaded (equal (substring (file-name-directory file)
                                                      -10 -1)
@@ -529,10 +529,20 @@ lost after dumping")))
                                           (file-name-nondirectory
                                            file)
                                           eln-dest-dir-eff)
-                                         bin-dest-dir)
+                                         load--bin-dest-dir)
                      ;; Relative filename from the built uninstalled binary.
-                     (file-relative-name file invocation-directory)))))
-              comp-loaded-comp-units-h)))
+                     (file-relative-name file invocation-directory))))))
+            comp-loaded-comp-units-h)))
+
+(defvar comp-subr-arities-h)
+(when (featurep 'native-compile)
+  ;; Save the arity for all primitives so the compiler can always
+  ;; retrive it even in case of redefinition.
+  (mapatoms (lambda (f)
+              (when (subr-primitive-p (symbol-function f))
+                (puthash f (func-arity f) comp-subr-arities-h))))
+  (setq load--bin-dest-dir (cadr (member "--bin-dest" command-line-args)))
+  (setq load--eln-dest-dir (cadr (member "--eln-dest" command-line-args)))
   ;; Set up the mechanism to allow inhibiting native-comp via
   ;; file-local variables.
   (defvar comp--no-native-compile (make-hash-table :test #'equal)))
diff --git a/src/pdumper.c b/src/pdumper.c
index ce4faefdaea..315a31e2bcb 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -4090,6 +4090,10 @@ types.  */)
   if (!NILP (XCDR (Fall_threads ())))
     error ("No other Lisp threads can be running when this function is 
called");
 
+#ifdef HAVE_NATIVE_COMP
+  CALLN (Ffuncall, intern_c_string ("load--fixup-all-elns"));
+#endif
+
   check_pure_size ();
 
   /* Clear out any detritus in memory.  */
diff --git a/src/print.c b/src/print.c
index eb20cfb1c47..4eee8319f65 100644
--- a/src/print.c
+++ b/src/print.c
@@ -2008,7 +2008,7 @@ print_vectorlike (Lisp_Object obj, Lisp_Object 
printcharfun, bool escapeflag,
       {
        struct Lisp_Native_Comp_Unit *cu = XNATIVE_COMP_UNIT (obj);
        print_c_string ("#<native compilation unit: ", printcharfun);
-       print_string (cu->file, printcharfun);
+       print_object (cu->file, printcharfun, escapeflag);
        printchar (' ', printcharfun);
        print_object (cu->optimize_qualities, printcharfun, escapeflag);
        printchar ('>', printcharfun);



reply via email to

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