diff options
author | Andrea Corallo <akrl@sdf.org> | 2020-09-21 21:07:04 +0200 |
---|---|---|
committer | Andrea Corallo <akrl@sdf.org> | 2020-09-22 14:43:21 +0200 |
commit | 4a50f541447eddefcca3ebc6bedb110ac0041f90 (patch) | |
tree | 1484460a0deb75d332088b24fb69ccbdf415ef63 /src | |
parent | 89a2e79b7d9fa9dc640951bbb3cb0d78dbfbc310 (diff) | |
download | emacs-4a50f541447eddefcca3ebc6bedb110ac0041f90.tar.gz emacs-4a50f541447eddefcca3ebc6bedb110ac0041f90.tar.bz2 emacs-4a50f541447eddefcca3ebc6bedb110ac0041f90.zip |
* Fix MacOS Emacs.app installation (bug#43532)
* src/comp.c (Fcomp_el_to_eln_filename): Adapt the filename
hashing algorithm to allow for producing a MacOS self-contained
Emacs.app.
Diffstat (limited to 'src')
-rw-r--r-- | src/comp.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/comp.c b/src/comp.c index 15d85d30fcb..63a58be264c 100644 --- a/src/comp.c +++ b/src/comp.c @@ -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 = |