]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow for native compiling .el.gz files
authorAndrea Corallo <akrl@sdf.org>
Sun, 16 Aug 2020 12:33:25 +0000 (14:33 +0200)
committerAndrea Corallo <akrl@sdf.org>
Mon, 17 Aug 2020 16:04:23 +0000 (18:04 +0200)
This is needed for installed instances compiled with NATIVE_FAST_BOOT

* src/comp.c (maybe_defer_native_compilation): Search for .el.gz
too as a source if the .el is not found.
(Fcomp_el_to_eln_filename): Remove the .gz in case to
generate the hash.

* lisp/emacs-lisp/comp.el (comp-valid-source-re): New defconst.
(comp-run-async-workers, native-compile-async): Make use of
`comp-valid-source-re'.

lisp/emacs-lisp/comp.el
src/comp.c

index b5ab4ebdccb3bec64664e2c1055fef03f9f2f637..85b5562f280b2d6f284819ee65f7f7ec48d1e559 100644 (file)
@@ -137,6 +137,9 @@ before compilation.  Usable to modify the compiler environment."
 (defvar comp-dry-run nil
   "When non nil run everything but the C back-end.")
 
+(defconst comp-valid-source-re (rx ".el" (? ".gz") eos)
+  "Regexp to match filename of valid input source files.")
+
 (defconst comp-log-buffer-name "*Native-compile-Log*"
   "Name of the native-compiler log buffer.")
 
@@ -2564,7 +2567,7 @@ display a message."
         (cl-loop
          for (source-file . load) = (pop comp-files-queue)
          while source-file
-         do (cl-assert (string-match-p (rx ".el" eos) source-file) nil
+         do (cl-assert (string-match-p comp-valid-source-re source-file) nil
                        "`comp-files-queue' should be \".el\" files: %s"
                        source-file)
          when (or comp-always-compile
@@ -2724,8 +2727,8 @@ LOAD can be nil t or 'late."
     (dolist (path paths)
       (cond ((file-directory-p path)
              (dolist (file (if recursively
-                               (directory-files-recursively path (rx ".el" eos))
-                             (directory-files path t (rx ".el" eos))))
+                               (directory-files-recursively path comp-valid-source-re)
+                             (directory-files path t comp-valid-source-re)))
                (push file files)))
             ((file-exists-p path) (push path files))
             (t (signal 'native-compiler-error
index d42bb4f8eb5ae75d73028e9d1c3fb4e666108626..f4111e2a29137f78696db5bcbe3bb533730b7d28 100644 (file)
@@ -3867,6 +3867,8 @@ If BASE-DIR is nil use the first entry in `comp-eln-load-path'.  */)
   (Lisp_Object file_name, Lisp_Object base_dir)
 {
   CHECK_STRING (file_name);
+  if (suffix_p (file_name, ".gz"))
+    file_name = Fsubstring (file_name, Qnil, make_fixnum (-3));
   file_name = Fexpand_file_name (file_name, Qnil);
   Lisp_Object hashed = Fsubstring (comp_hash_string (file_name), Qnil,
                                   make_fixnum (ELN_FILENAME_HASH_LEN));
@@ -4494,7 +4496,11 @@ maybe_defer_native_compilation (Lisp_Object function_name,
     concat2 (CALL1I (file-name-sans-extension, Vload_true_file_name),
             build_pure_c_string (".el"));
   if (NILP (Ffile_exists_p (src)))
-    return;
+    {
+      src = concat2 (src, build_pure_c_string (".gz"));
+      if (NILP (Ffile_exists_p (src)))
+       return;
+    }
 
   /* This is to have deferred compilaiton able to compile comp
      dependecies breaking circularity.  */