[asdf-devel] android ECL port cache directory problem

Daniel Kochmański daniel at turtleware.eu
Tue Oct 20 10:43:44 UTC 2015


I'm currently working on ECL port for the android. I've managed to make
it more or less usable, but I've encountered some problem with the cache
directory translation in ASDF. Not sure how to solve it.

Everything from the application has to be put in it's directory (in this
case its /data/data/org.lisp.ecl/) under directories app_resources/,
cache/ etc.

To achieve it I set necessary directories from the initializatio script

sprintf(tmp, "(setq *default-pathname-defaults* #p\"%s/\")", home);
si_safe_eval(3, c_string_to_object(tmp), Cnil, OBJNULL);
si_select_package(ecl_make_simple_base_string("CL-USER", 7));
si_safe_eval(3, c_string_to_object("(load \"init\")"), Cnil, OBJNULL);

Where home points to /data/data/org.lisp.ecl/app_resources/

Also related part of the init.lisp file:
-- CUT HERE --
(format t "Setting environment variables~%")
(setq *default-directory*
(defvar *ecl-home* *default-directory*)
(ext:setenv "HOME" (namestring *ecl-home*))
(ext:setenv "USER-CACHE"
            (namestring (merge-pathnames #P"../cache/" *ecl-home*)))
(setf asdf:*user-cache*
            (merge-pathnames #P"../cache/" *default-pathname-defaults*))

(format t "Loading the modules~%")
(require :ASDF)
(require :SOCKETS)
(require :SERVE-EVENT)

(pushnew (namestring *default-pathname-defaults*)

;; (asdf::ensure-output-translations)
(format t "XXX: DIAG:~%
    (asdf:compute-output-translations) ~A~%
    (ext:getenv \"HOME\"               ~A~%
    asdf:*user-cache*                  ~A~%
    (truename \"SYS:\")                ~A~%
    *default-pathname-defaults*        ~A~%~%"
        (ext:getenv "HOME")
        asdf:*user-cache* (truename "SYS:") *default-pathname-defaults*)

(format t "Preparing swank~%")
(handler-case (asdf:oos 'asdf:load-op :swank :verbose t)
  (condition (c)
    (format t "condition ~A happened~%" c)
    (format t "filepath SYS:SLIME-2.14;SWANK.ASD.NEWEST: ~A~%"
            (truename #P"SYS:SLIME-2.14;SWANK.ASD.NEWEST"))
    (error c)))
-- CUT HERE --

But this fails with filesystem error for pathname

Related part of the logcat output:
-- CUT HERE --
I/stdout  (19157): Setting environment variables
I/stdout  (19157): Loading the modules
I/stdout  (19157): XXX: DIAG:
I/stdout  (19157):     (asdf:compute-output-translations) ((SYS:**;*.*.* T)
I/stdout  (19157):                                         (/data/data/org.lisp.ecl/cache/**/*.*
I/stdout  (19157):                                          T)
I/stdout  (19157):                                         (T
I/stdout  (19157):                                          /data/data/org.lisp.ecl/cache/**/*.*))
I/stdout  (19157):     (ext:getenv "HOME"               /data/data/org.lisp.ecl/app_resources/
I/stdout  (19157):     asdf:*user-cache*                  /data/data/org.lisp.ecl/app_resources/../cache/
I/stdout  (19157):     (truename "SYS:")                /data/data/org.lisp.ecl/app_resources/
I/stdout  (19157):     *default-pathname-defaults*        /data/data/org.lisp.ecl/app_resources/
I/stdout  (19157): Preparing swank
I/stdout  (19157): condition Filesystem error with pathname #P"/SLIME-2.14/SWANK-LOADER-tmpWIW7CRE5.FASC".
I/stdout  (19157): Either
I/stdout  (19157):  1) the file does not exist, or
I/stdout  (19157):  2) we are not allowed to access the file, or
I/stdout  (19157):  3) the pathname points to a broken symbolic link. happened
I/stdout  (19157): filepath SYS:SLIME-2.14;SWANK.ASD.NEWEST: /data/data/org.lisp.ecl/app_resources/slime-2.14/swank.asd
I/native-activity(19157): EXIT TOP LEVEL

As you can see caches seem to be set up properly. But ECL tries to load
the FASC file from the root directory.

Note, that if slime files are put directly in app_resources, not in
slime-2.14 directory everything loads fine.

I would be greatful for any hints.


Daniel Kochmański | Poznań, Poland
;; aka jackdaniel

"Be the change that you wish to see in the world." - Mahatma Gandhi

More information about the asdf-devel mailing list