diff options
| author | Andrea Corallo <akrl@sdf.org> | 2020-10-07 23:38:00 +0200 |
|---|---|---|
| committer | Andrea Corallo <akrl@sdf.org> | 2020-10-07 23:38:00 +0200 |
| commit | c3bc348f5edefa4231d38b6d3967f0c8f0bb5e6d (patch) | |
| tree | 9a757a9ebbf08f165ff811d022a49985fe0fb57d /src | |
| parent | 7041c32ec2cd985f1c324c75ecea8038f998a792 (diff) | |
* Fix failure when eln-cache is removed (introduced by 4a1bb46260)
* src/comp.c (make_directory_wrapper, make_directory_wrapper_1):
New functions.
(Fcomp_el_to_eln_filename): If base_dir is not
specified and we are searching across `comp-load-path' try to
create a directory if does not exists.
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp.c | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/src/comp.c b/src/comp.c index ba4089e5aeb..1b96bffeb87 100644 --- a/src/comp.c +++ b/src/comp.c @@ -4013,6 +4013,19 @@ compile_function (Lisp_Object func) /* In use by Fcomp_el_to_eln_filename. */ static Lisp_Object loadsearch_re_list; +static Lisp_Object +make_directory_wrapper (Lisp_Object directory) +{ + CALL2I (make-directory, directory, Qt); + return Qnil; +} + +static Lisp_Object +make_directory_wrapper_1 (Lisp_Object ignore) +{ + return Qt; +} + DEFUN ("comp-el-to-eln-filename", Fcomp_el_to_eln_filename, Scomp_el_to_eln_filename, 1, 2, 0, doc: /* Given a source FILENAME return the corresponding .eln filename. @@ -4087,14 +4100,31 @@ If BASE-DIR is nil use the first entry in `comp-eln-load-path'. */) { Lisp_Object eln_load_paths = Vcomp_eln_load_path; FOR_EACH_TAIL (eln_load_paths) - if (!NILP (Ffile_writable_p (XCAR (eln_load_paths)))) - { - base_dir = XCAR (eln_load_paths); - break; - } - /* If we can't find it return Nil. */ + { + Lisp_Object dir = XCAR (eln_load_paths); + if (!NILP (Ffile_exists_p (dir))) + { + if (!NILP (Ffile_writable_p (dir))) + { + base_dir = dir; + break; + } + } + else + { + /* Try to create the directory and if succeeds use it. */ + if (NILP (internal_condition_case_1 (make_directory_wrapper, + dir, Qt, + make_directory_wrapper_1))) + { + base_dir = dir; + break; + } + } + } if (NILP (base_dir)) - return Qnil; + error ("Cannot find suitable directory for output in " + "`comp-native-laod-path'."); } if (!file_name_absolute_p (SSDATA (base_dir))) |
