summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrea Corallo <akrl@sdf.org>2020-10-07 23:38:00 +0200
committerAndrea Corallo <akrl@sdf.org>2020-10-07 23:38:00 +0200
commitc3bc348f5edefa4231d38b6d3967f0c8f0bb5e6d (patch)
tree9a757a9ebbf08f165ff811d022a49985fe0fb57d /src
parent7041c32ec2cd985f1c324c75ecea8038f998a792 (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.c44
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)))