Plaster

common-lisp
(defun print-licenses (s) (let ((systems ())) (labels ((rec (p c) (let ((c (asdf::resolve-dependency-spec p c))) (when c (dolist (s (asdf:system-depends-on c)) (rec c s)) (dolist (s (asdf:system-defsystem-depends-on c)) (rec c s)) (pushnew c systems))))) (rec (asdf:find-system s) (asdf:find-system s)) (setf systems (sort systems #'string< :key #'asdf:component-name)) (dolist (s systems) (format T "~&~a~30t~a~%" (asdf:component-name s) (asdf:system-licence s))) (format T "~&~%Licenses used: ~{~% ~a~}~%" (remove-duplicates (sort (mapcar #'asdf:system-licence systems) #'string<) :test #'string-equal))))) #| Example: CL-USER> (print-licenses "cl-gamepad") alexandria Public Domain / 0-clause MIT babel MIT cffi MIT cl-gamepad zlib documentation-utils zlib trivial-features MIT trivial-indent zlib uiop NIL Licenses used: MIT NIL Public Domain / 0-clause MIT zlib |#