[Armedbear-cvs] r14720 - trunk/abcl/contrib/asdf-jar
mevenson at common-lisp.net
mevenson at common-lisp.net
Sun Aug 17 19:32:06 UTC 2014
Author: mevenson
Date: Sun Aug 17 19:32:05 2014
New Revision: 14720
Log:
asdf-jar: Stablize recent fixes across more cases. (Eduardo Bellani)
<http://abcl.org/trac/ticket/364>
Modified:
trunk/abcl/contrib/asdf-jar/asdf-jar.lisp
Modified: trunk/abcl/contrib/asdf-jar/asdf-jar.lisp
==============================================================================
--- trunk/abcl/contrib/asdf-jar/asdf-jar.lisp Sun Aug 17 18:30:33 2014 (r14719)
+++ trunk/abcl/contrib/asdf-jar/asdf-jar.lisp Sun Aug 17 19:32:05 2014 (r14720)
@@ -66,12 +66,65 @@
(add-system-files-to-mapping! system mapping base name root verbose)))
mapping))
+(defun add-system-files-to-mapping! (system
+ mapping
+ system-base
+ system-name
+ &optional root verbose)
+ "Auxiliary procedure that adds all the files of a SYSTEM to the
+MAPPING with a given SYSTEM-BASE and SYSTEM-NAME. The whole idea of
+this procedure is to modify MAPPING, so a NIL is returned."
+ (let ((abcl-file-type "abcl"))
+ (loop :for component :in (all-files system)
+ :for source = (slot-value component 'asdf::absolute-pathname)
+ :for source-entry = (archive-relative-path system-base system-name source)
+ :do (setf (gethash source mapping)
+ (if root
+ (merge-pathnames source-entry (make-pathname :directory root))
+ source-entry))
+ :do (format verbose "~&~A~& => ~A" source source-entry)
+ :when (and (typep component 'asdf::source-file)
+ (not (typep component 'asdf::static-file)))
+ :do (let ((output
+ (make-pathname
+ :defaults (asdf:apply-output-translations source)
+ :type abcl-file-type))
+ (output-entry
+ (make-pathname :defaults source-entry
+ :type abcl-file-type
+ :directory
+ (append root
+ (cadr (pathname-directory source-entry))))))
+ (format verbose "~&~A~& => ~A" output output-entry)
+ (setf (gethash output mapping)
+ output-entry)))))
+
+(defun systems->hash-table (systems &optional root verbose)
+ "Auxiliary function that, given a list of SYSTEMS, builds a hash
+table mapping absolute file names to of these systems into relative
+path names. This mapping will be used to zip the files of the system
+into a JAR file."
+ (let ((mapping (make-hash-table :test 'equal)))
+ (dolist (system systems)
+ (let ((base (slot-value system 'asdf::absolute-pathname))
+ (name (slot-value system 'asdf::name))
+ (asdf (slot-value system 'asdf::source-file)))
+ (setf (gethash asdf mapping)
+ (let ((relative-path (archive-relative-path base name asdf)))
+ (if root
+ (merge-pathnames
+ relative-path
+ (make-pathname :directory root))
+ relative-path)))
+ (add-system-files-to-mapping! system mapping base name root verbose)))
+ mapping))
+
(defun package (system &key
(out #p"/var/tmp/")
(recursive t) ; whether to package dependencies
(force nil) ; whether to force ASDF compilation
- (root nil)
- (verbose t))
+ (root '(:relative))
+ (verbose nil))
"Compile and package the asdf SYSTEM in a jar.
When RECURSIVE is true (the default), recursively add all asdf
@@ -89,6 +142,14 @@
is to add the paths to an internal directory, such as (list :relative
\"META-INF\" \"resources\") for generating WAR files.
+VERBOSE controls how many messages will be logged to
+*standard-output*.
+
+ROOT controls if the relative pathnames will be appended to something
+before being added to the mapping. The purpose of having this option
+is to add the paths to an internal directory, such as (list :relative
+\"META-INF\" \"resources\") for generating WAR files.
+
Returns the pathname of the packaged jar archive.
"
(when (not (typep system 'asdf:system))
@@ -99,10 +160,10 @@
(when v
v)))
(package-jar-name
- (format nil "~A~A~A" name (if recursive "-all" "")
- (if version
- (format nil "-~A" version)
- "")))
+ (format nil "~A~A~A" name (if recursive "-all" "")
+ (if version
+ (format nil "-~A" version)
+ "")))
(package-jar
(make-pathname :name package-jar-name
:type "jar"
@@ -114,18 +175,18 @@
(asdf:compile-system system :force force)
(when verbose
(format verbose "~&Packaging contents in ~A" package-jar))
- (system:zip package-jar
- (systems->hash-table
- (append (list system)
- (when recursive
- (let ((dependencies (dependent-systems system)))
- (when (and verbose dependencies)
- (format verbose
- "~& with recursive dependencies~{ ~A~^, ~}."
- dependencies)
- (mapcar #'asdf:find-system dependencies)))))
- root
- verbose))))
+ (system:zip package-jar
+ (systems->hash-table
+ (append (list system)
+ (when recursive
+ (let ((dependencies (dependent-systems system)))
+ (when (and verbose dependencies)
+ (format verbose
+ "~& with recursive dependencies~{ ~A~^, ~}."
+ dependencies)
+ (mapcar #'asdf:find-system dependencies)))))
+ root
+ verbose))))
(defun all-files (component)
(loop :for c
More information about the armedbear-cvs
mailing list