Hi list,
I'm having trouble hot-upgrading asdf. My old setup was not checked out of a repository, but does have a file modified date of 2007-06-18. I also use asdf-binary-locations version "0.3.8".
To begin with, I have created the following config file (~ is at c:/home)
~/.config/common-lisp/source-registry.conf
(:source-registry (:directory "e:/src/ltk-0.90/") (:tree "c:/home/code/lisp/libs/") (:exclude "_darcs") :ignore-inherited-configuration)
I then load-file asdf.lisp from Slime. My clisp-2.47 (non-cygwin Windows) is previously already running with asdf, asdf-binary-locations, and many systems loaded (and other random work done).
I then tried to load a system that I could previously load just fine, in this case ironclad_0.27.
CL-USER> (asdf:load-system :ironclad) ; loading system definition from C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd into #<PACKAGE ASDF0> ;; Loading file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd ... ; registering #<SYSTEM :IRONCLAD #x26F7286D> as IRONCLAD ; registering #<SYSTEM IRONCLAD-TESTS #x26FE5225> as IRONCLAD-TESTS ;; Loaded file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd
; No value
This gave the following error.
TRANSLATE-PATHNAME: replacement pieces (NIL NIL (:DIRECTORY #1="home" #2="code" #3="lisp" #4="libs" #5="ironclad_0.27") "package" "fas" :NEWEST) do not fit into #P"C:\Documents and Settings\chewyong\Local Settings\Temporary Internet Files\common-lisp\**\*.*" [Condition of type SIMPLE-ERROR]
I browsed around in the stack trace (yes clisp stack traces are ugly), and looked deeper into this particular frame:
...
17: <1/1718> #<SYSTEM-FUNCTION TRANSLATE-PATHNAME> [1712] EVAL frame for form (TRANSLATE-PATHNAME (ASDF::DIRECTORIZE-PATHNAME-HOST-DEVICE ASDF::P) ASDF::ABSOLUTE-SOURCE ASDF::DESTINATION) Locals: ASDF::ABSOLUTE-SOURCE = #P"\**\*.*" ASDF::ROOT = #P"\" ASDF::DESTINATION = #P"C:\Documents and Settings\chewyong\Local Settings\Temporary Internet.. ASDF::SOURCE = T #:LIST-13280 = ((T ..)) ASDF::P = #P"\home\code\lisp\libs\ironclad_0.27\package.fas" #:PATTERN-13281 = (T ..) #:TYPECASE-KEY-13279 = #P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" #:TYPECASE-KEY-13278 = #P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" ASDF::PATH = #P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" ...
In particular, I'm guessing that this is related to truenamize (has it taken the wrong branch?) with respect to (line 677 on my version of asdf.lisp)
(ignore-errors (return (truename p)))
Am I close enough? See the following:
CL-USER> (truename (merge-pathnames #P"\home\code\lisp\libs\ironclad_0.27\package.fas"))
==>
TRUENAME: File #1=#P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" does not exist [Condition of type SYSTEM::SIMPLE-FILE-ERROR]
My package.fas, due to asdf-binary-locations, has been stored previously in ~/code/lisp/libs/ironclad_0.27/clisp-2.47-win32-i386/package.fas
I hope this is useful for fixing asdf + a-b-l hot upgrade. I can restart a new Lisp and give full backtraces or other further info, should that be necessary.
Cheers.
Ahem. Does it work better with 1.679?
It's hard to test these things without access to a Windows machine...
Also, I realize that in Unix, I rely on absolute-pathname-p meaning "a completely qualified pathname", which breaks down on Windows, with potentially "interesting" implications. Sigh.
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] The main difference between a computer salesman and a used car salesman is that the used car salesman can probably drive and knows when he's lying. - Peter da Silva
On 14 April 2010 20:46, szergling senatorzergling@gmail.com wrote:
Hi list,
I'm having trouble hot-upgrading asdf. My old setup was not checked out of a repository, but does have a file modified date of 2007-06-18. I also use asdf-binary-locations version "0.3.8".
To begin with, I have created the following config file (~ is at c:/home)
~/.config/common-lisp/source-registry.conf
(:source-registry (:directory "e:/src/ltk-0.90/") (:tree "c:/home/code/lisp/libs/") (:exclude "_darcs") :ignore-inherited-configuration)
I then load-file asdf.lisp from Slime. My clisp-2.47 (non-cygwin Windows) is previously already running with asdf, asdf-binary-locations, and many systems loaded (and other random work done).
I then tried to load a system that I could previously load just fine, in this case ironclad_0.27.
CL-USER> (asdf:load-system :ironclad) ; loading system definition from C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd into #<PACKAGE ASDF0> ;; Loading file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd ... ; registering #<SYSTEM :IRONCLAD #x26F7286D> as IRONCLAD ; registering #<SYSTEM IRONCLAD-TESTS #x26FE5225> as IRONCLAD-TESTS ;; Loaded file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd
; No value
This gave the following error.
TRANSLATE-PATHNAME: replacement pieces (NIL NIL (:DIRECTORY #1="home" #2="code" #3="lisp" #4="libs" #5="ironclad_0.27") "package" "fas" :NEWEST) do not fit into #P"C:\Documents and Settings\chewyong\Local Settings\Temporary Internet Files\common-lisp\**\*.*" [Condition of type SIMPLE-ERROR]
I browsed around in the stack trace (yes clisp stack traces are ugly), and looked deeper into this particular frame:
...
17: <1/1718> #<SYSTEM-FUNCTION TRANSLATE-PATHNAME> [1712] EVAL frame for form (TRANSLATE-PATHNAME (ASDF::DIRECTORIZE-PATHNAME-HOST-DEVICE ASDF::P) ASDF::ABSOLUTE-SOURCE ASDF::DESTINATION) Locals: ASDF::ABSOLUTE-SOURCE = #P"\**\*.*" ASDF::ROOT = #P"\" ASDF::DESTINATION = #P"C:\Documents and Settings\chewyong\Local Settings\Temporary Internet.. ASDF::SOURCE = T #:LIST-13280 = ((T ..)) ASDF::P = #P"\home\code\lisp\libs\ironclad_0.27\package.fas" #:PATTERN-13281 = (T ..) #:TYPECASE-KEY-13279 = #P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" #:TYPECASE-KEY-13278 = #P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" ASDF::PATH = #P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" ...
In particular, I'm guessing that this is related to truenamize (has it taken the wrong branch?) with respect to (line 677 on my version of asdf.lisp)
(ignore-errors (return (truename p)))
Am I close enough? See the following:
CL-USER> (truename (merge-pathnames #P"\home\code\lisp\libs\ironclad_0.27\package.fas"))
==>
TRUENAME: File #1=#P"C:\home\code\lisp\libs\ironclad_0.27\package.fas" does not exist [Condition of type SYSTEM::SIMPLE-FILE-ERROR]
My package.fas, due to asdf-binary-locations, has been stored previously in ~/code/lisp/libs/ironclad_0.27/clisp-2.47-win32-i386/package.fas
I hope this is useful for fixing asdf + a-b-l hot upgrade. I can restart a new Lisp and give full backtraces or other further info, should that be necessary.
Cheers.
asdf-devel mailing list asdf-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel
On 4/15/10, Faré fahree@gmail.com wrote:
Ahem. Does it work better with 1.679?
It's hard to test these things without access to a Windows machine...
Also, I realize that in Unix, I rely on absolute-pathname-p meaning "a completely qualified pathname", which breaks down on Windows, with potentially "interesting" implications. Sigh.
Hi again,
Ok, forget about the hot-upgrade issue. I had wrongly assumed without checking that asdf runs well on clisp win32. Apologies, I should've checked that before.
Here's what I discovered on deeper inspection. I had been sidetracked into the wrong line before, as the problem with truenamize lies elsewhere, and I've worked around it for now. A proper patch would require fixes to clisp (this is tentative for now) but may require version checking conditionalisation in any case. One should probably keep track of:
http://sourceforge.net/tracker/?func=detail&aid=2987521&group_id=135...
As an aside I made another edit which may also need version conditionalisation. Check out
http://sourceforge.net/tracker/?func=detail&aid=2959335&group_id=135...
maybe a dummy stub get-uid is required for clisp win32 in the future? And is the #-windows meant to be Lispworks only? Which implementation was it meant for?
[and I don't know why that posix:uid thing didn't throw an error before for me... very strange]
So the following are not patches to be applied, but merely highlights some issues that I don't know how to fix elegantly, as yet. Perhaps this issue should remain open for now, while we adopt a wait and see attitude?
Yong. PS And yep, I have now tried the 1.679 release.
$ diff -u 1.679.lisp asdf.lisp --- 1.679.lisp 2010-04-15 16:11:09.395991000 +1200 +++ asdf.lisp 2010-04-15 18:23:20.009511500 +1200 @@ -651,7 +651,8 @@
#-windows (progn -#+clisp (defun get-uid () (posix:uid)) +;; vvvvvvvvv---- This may need to be clisp version tested in the future? +#+(and clisp (not win32)) (defun get-uid () (posix:uid)) #+sbcl (defun get-uid () (sb-unix:unix-getuid)) #+cmu (defun get-uid () (unix:unix-getuid)) #+ecl (ffi:clines "#include <sys/types.h>" "#include <unistd.h>") @@ -705,9 +706,11 @@ :finally (return (merge-pathnames* - (make-pathname :host nil :device nil - :directory nil - :defaults p) + ;; Unwieldy, but fixes clisp pre-???2.47 bug + (merge-pathnames + (make-pathname :host nil :device nil + :directory nil) + p) sofar)))))))
(defun lispize-pathname (input-file)