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
update:
adding explicit
(pushnew (namestring (merge-pathnames #P"slime-2.14/" *ecl-home*)) asdf:*central-registry*)
solved the problem. Is it a desired feature that asdf can "reach" asd file from some subdirectory but can't load such a system?
Regards, Daniel
Daniel Kochmański writes:
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
I don't understand your question. 1- SLIME has its own compilation and cache machinery, independent from ASDF. 2- The source-registry, recommended way of using ASDF (for speed, use the cl-source-registry-cache), has both :directory and :tree
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Keynesians: why bring prosperity to other countries through war's devastation? Let's bring back the troops and have them bomb OUR cities!
On Tue, Oct 20, 2015 at 8:05 AM, Daniel Kochmański daniel@turtleware.eu wrote:
update:
adding explicit
(pushnew (namestring (merge-pathnames #P"slime-2.14/" *ecl-home*)) asdf:*central-registry*)
solved the problem. Is it a desired feature that asdf can "reach" asd file from some subdirectory but can't load such a system?
Regards, Daniel
Daniel Kochmański writes:
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
-- Daniel Kochmański | Poznań, Poland ;; aka jackdaniel
"Be the change that you wish to see in the world." - Mahatma Gandhi
Thanks for the reply.
Faré writes:
I don't understand your question.
I'm sorry to hear that. Problem was related to the fact, that I was able to load the system definition file from the _subdirectory_ of the path pointed by *central-registry* but couldn't load the system.
1- SLIME has its own compilation and cache machinery, independent from ASDF.
Didn't know about that - assumed that having swank.asd present means that the build process controlled by ASDF. It must be the problem with slime then(?).
2- The source-registry, recommended way of using ASDF (for speed, use the cl-source-registry-cache), has both :directory and :tree
I'll use source-registry when I overcome the problems I work on now.
Thanks, Daniel
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Keynesians: why bring prosperity to other countries through war's devastation? Let's bring back the troops and have them bomb OUR cities!
On Tue, Oct 20, 2015 at 8:05 AM, Daniel Kochmański daniel@turtleware.eu wrote:
update:
adding explicit
(pushnew (namestring (merge-pathnames #P"slime-2.14/" *ecl-home*)) asdf:*central-registry*)
solved the problem. Is it a desired feature that asdf can "reach" asd file from some subdirectory but can't load such a system?
Regards, Daniel
Daniel Kochmański writes:
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
-- Daniel Kochmański | Poznań, Poland ;; aka jackdaniel
"Be the change that you wish to see in the world." - Mahatma Gandhi
I'm sorry to hear that. Problem was related to the fact, that I was able to load the system definition file from the _subdirectory_ of the path pointed by *central-registry* but couldn't load the system.
The *central-registry* has never recursed through subdirectories, and never will. It's a trivial mechanism, really, which is what makes it relatively fast.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Surprise exists in the map, not in the territory. — Eliezer Yudkowsky