[armedbear-cvs] r12644 - trunk/abcl/src/org/armedbear/lisp

Mark Evenson mevenson at common-lisp.net
Sat May 1 17:45:50 UTC 2010


Author: mevenson
Date: Sat May  1 13:45:49 2010
New Revision: 12644

Log:
Fix for loading ASDF systems from jar files under win32.

Changed synthetic '/:jar:file:/' path into the hopefully never used
'/___jar___file___root___/' string which doesn't turn out to be a
relative pathname under Windows (thanks to Carlos Ungil).

Add Windows drive letter to output translation path to allow
identically named jars on different drives to be handled.



Modified:
   trunk/abcl/src/org/armedbear/lisp/asdf.lisp

Modified: trunk/abcl/src/org/armedbear/lisp/asdf.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/asdf.lisp	(original)
+++ trunk/abcl/src/org/armedbear/lisp/asdf.lisp	Sat May  1 13:45:49 2010
@@ -2516,7 +2516,7 @@
     #+ecl (,(translate-logical-pathname "SYS:**;*.*") ()) ; only needed if LPNs are resolved manually.
     #+clozure (,(wilden (ccl::ccl-directory)) ()) ; not needed: no precompiled ASDF system
     #+abcl (#p"jar:file:/**/*.jar!/**/*.*" (:function translate-jar-pathname))
-    #+abcl (#p"/:jar:file/**/*.*" (:user-cache #p"**/*.*"))
+    #+abcl (#p"/___jar___file___root___/**/*.*" (:user-cache #p"**/*.*"))
     ;; All-import, here is where we want user stuff to be:
     :inherit-configuration
     ;; If we want to enable the user cache by default, here would be the place:
@@ -2706,14 +2706,20 @@
 #+abcl
 (defun translate-jar-pathname (source wildcard)
   (declare (ignore wildcard))
-  (let ((root (apply-output-translations
-               (concatenate 'string
-                            "/:jar:file/"
-                            (namestring (first (pathname-device
-                                                source))))))
-        (entry (make-pathname :directory (pathname-directory source)
-                              :name (pathname-name source)
-                              :type (pathname-type source))))
+  (let* ((p (first (pathname-device source)))
+	 (r (concatenate 'string  
+			 (if (and (find :windows *features*) 
+				  (not (null (pathname-device p))))
+			     (format nil "~A/" (pathname-device p))
+			     "")
+			 (namestring (make-pathname :directory (pathname-directory p)
+						    :name (pathname-name p)
+						    :type (pathname-type p)))))
+	 (root (apply-output-translations
+		(format nil "/___jar___file___root___/~A" r)))
+	 (entry (make-pathname :directory (pathname-directory source)
+			       :name (pathname-name source)
+			       :type (pathname-type source))))
     (concatenate 'string (namestring root) (namestring entry))))
 
 ;;;; -----------------------------------------------------------------




More information about the armedbear-cvs mailing list