Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun component-equal (component other)
- (string-equal (asdf:component-name component)
- (asdf:component-name other)))
- (defun asdf-inferred-system-deps (system &optional (visited nil))
- ;; A "proper-dep" is a dependency with the same primary system name (i.e., not an external library)
- (flet ((proper-dep-p (dep) (string-equal (asdf:primary-system-name dep) (asdf:primary-system-name system)))
- (recurse (prev dep) (asdf-inferred-system-deps dep prev)))
- (let* ((proper-deps (remove-if-not #'proper-dep-p (mapcar #'asdf:find-system (asdf:system-depends-on system))))
- (unvisited-deps (set-difference proper-deps visited :test #'component-equal)))
- (reduce #'recurse unvisited-deps :initial-value (append unvisited-deps visited)))))
- (defun asdf-inferred-system-files (system ending)
- (let ((system-pathname (asdf:component-pathname system)))
- (flet ((dep-pathname (dep)
- (let ((name (asdf:component-name dep)))
- (parse-namestring (concatenate
- 'string
- (namestring system-pathname )
- (subseq name (1+ (position #\/ name)))
- ending)))))
- (mapcar #'dep-pathname (asdf-inferred-system-deps system)))))
- (defun asdf-inferred-system-files (system ending)
- (let ((system-pathname (asdf:component-pathname system)))
- (flet ((dep-pathname (dep)
- (let ((name (asdf:component-name dep)))
- (parse-namestring (concatenate
- 'string
- (namestring system-pathname )
- (subseq name (1+ (position #\/ name)))
- ending)))))
- (mapcar #'dep-pathname (asdf-inferred-system-deps system)))))
- (defun asdf-component-source-files (component)
- (if (and #+asdf3 (typep component 'asdf:package-inferred-system))
- (asdf-inferred-system-files component ".lisp")
- (let ((files ()))
- (labels ((f (x)
- (typecase x
- (asdf:source-file
- (let ((truename (uiop:truenamize (asdf:component-pathname x))))
- (push truename files)))
- (asdf:module
- (map nil #'f (asdf:module-components x))))))
- (f component))
- files)))
- (defun pathname-system (pathname)
- "Find an `asdf:system' to which `pathname' belongs to, or nil if no such system exists."
- (let ((pathname (uiop:ensure-absolute-pathname pathname *default-pathname-defaults*)))
- (block nil
- (asdf:map-systems
- (lambda (system)
- (when (find pathname (asdf-component-source-files system) :test #'uiop:pathname-equal)
- (return system)))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement