Hello,
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 with:
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* *default-pathname-defaults*) (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:*central-registry*)
;; (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~%~%" (asdf::compute-output-translations) (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")) (force-output) (error c))) -- CUT HERE --
But this fails with filesystem error for pathname #P"/SLIME-2.14/SWANK-LOADER-tmpWIW7CRE5.FASC"
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 -- CUT HERE--
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.
Thanks, Daniel