Skip to content
asdf-dependency-grovel.asd 1.52 KiB
Newer Older
Andreas Fuchs's avatar
Andreas Fuchs committed
;;; -*- Mode: Lisp -*-

(cl:in-package #:asdf)
Andreas Fuchs's avatar
Andreas Fuchs committed

(defclass grovel-handlers (module)
     ((%components :accessor %handler-components)))

(defun handler-input-file-list (pathname parent)
  (map 'list
       (lambda (f)
         (make-instance 'cl-source-file
            :name (pathname-name f)
            :parent parent
            :pathname f))
       (sort (directory (make-pathname :defaults pathname
                                       :name :wild
                                       :type "lisp"
                                       :version :newest))
             #'string<
             :key #'namestring)))

(defmethod module-components ((c grovel-handlers))
  (if (slot-boundp c '%components)
      (%handler-components c)
      (setf (%handler-components c)
            (handler-input-file-list (component-pathname c) c))))

(defsystem :asdf-dependency-grovel
  :depends-on (:asdf)
Andreas Fuchs's avatar
Andreas Fuchs committed
  :components ((:file "package")
               (:file "variables" :depends-on ("package"))
               (:file "classes" :depends-on ("package" "variables"))
               (:file "asdf-classes" :depends-on ("package"))
               (:file "grovel" :depends-on ("package" "variables" "classes" "asdf-classes"))
               (:file "asdf-ops" :depends-on ("package" "variables" "grovel"))
               (:grovel-handlers "handlers" :pathname #p"handlers/"

(defmethod perform :after ((op load-op) (c (eql (find-system :asdf-dependency-grovel))))
  (push :asdf-dependency-grovel *features*))