diff --git a/contrib/detect-multiply-used-files.lisp b/contrib/detect-multiply-used-files.lisp new file mode 100644 index 0000000000000000000000000000000000000000..a8f0909f608f6fc8c8d39029158d5908324d9ab6 --- /dev/null +++ b/contrib/detect-multiply-used-files.lisp @@ -0,0 +1,30 @@ +(uiop:define-package :detect-multiply-used-files + (:use :asdf :uiop :common-lisp) + (:export #:find-fishy-components #:register-component-files #:*file-components*)) + +(in-package :detect-multiply-used-files) + +(defparameter *file-components* (make-hash-table :test 'equal)) + +(defun register-component-files (component) + (let ((c (find-component () component))) + (if-let (p (component-pathname c)) + (pushnew (component-find-path c) (gethash (namestring p) *file-components*))) + (when (typep c 'parent-component) + (dolist (cc (component-children c)) + (register-component-files cc))))) + +(defun table-keys (table) + (loop :for s :being :the :hash-keys :of table :collect s)) + +(defun find-fishy-components () + (clrhash *file-components*) + (map () 'register-component-files (table-keys asdf::*defined-systems*)) + (loop :for p :in (sort (table-keys *file-components*) 'string<) + :for l = (gethash p *file-components*) + :when (and (file-pathname-p p) (not (length=n-p l 1))) + :do (format t "~&~S =>~{ ~S~}~%" p l))) + +#| ;; Use it like that: +(detect-multiply-used-files:find-fishy-components) +|#