]> git.eshelyaron.com Git - emacs.git/commitdiff
* Fix MacOS Emacs.app installation (bug#43532)
authorAndrea Corallo <akrl@sdf.org>
Mon, 21 Sep 2020 19:07:04 +0000 (21:07 +0200)
committerAndrea Corallo <akrl@sdf.org>
Tue, 22 Sep 2020 12:43:21 +0000 (14:43 +0200)
* src/comp.c (Fcomp_el_to_eln_filename): Adapt the filename
hashing algorithm to allow for producing a MacOS self-contained
Emacs.app.

src/comp.c

index 15d85d30fcb3055fce6f80f66f0fd3f7d053a439..63a58be264cbcc14e605a914a068654c2ebd112c 100644 (file)
@@ -4054,18 +4054,30 @@ If BASE-DIR is nil use the first entry in `comp-eln-load-path'.  */)
 
   if (NILP (loadsearch_re_list))
     {
-      Lisp_Object loadsearch_list =
-       Fcons (build_string (PATH_DUMPLOADSEARCH),
-              Fcons (build_string (PATH_LOADSEARCH), Qnil));
-      FOR_EACH_TAIL (loadsearch_list)
-       loadsearch_re_list =
-         Fcons (Fregexp_quote (XCAR (loadsearch_list)), loadsearch_re_list);
+      Lisp_Object sys_re;
+#ifdef __APPLE__
+      /* On MacOS we relax the match on PATH_LOADSEARCH making
+        everything before ".app/" a wildcard.  This to obtain a
+        self-contained Emacs.app (bug#43532).  */
+      char *c;
+      if ((c = strstr (PATH_LOADSEARCH, ".app/")))
+       sys_re =
+         concat2 (build_string ("\\`[[:ascii:]]+"),
+                  Fregexp_quote (build_string (c)));
+      else
+       sys_re = Fregexp_quote (build_string (PATH_LOADSEARCH));
+#else
+      sys_re = Fregexp_quote (build_string (PATH_LOADSEARCH));
+#endif
+      loadsearch_re_list =
+       list2 (sys_re, Fregexp_quote (build_string (PATH_DUMPLOADSEARCH)));
     }
-  Lisp_Object loadsearch_res = loadsearch_re_list;
-  FOR_EACH_TAIL (loadsearch_res)
+
+  Lisp_Object lds_re_tail = loadsearch_re_list;
+  FOR_EACH_TAIL (lds_re_tail)
     {
       Lisp_Object match_idx =
-       Fstring_match (XCAR (loadsearch_res), filename, Qnil);
+       Fstring_match (XCAR (lds_re_tail), filename, Qnil);
       if (EQ (match_idx, make_fixnum (0)))
        {
          filename =