Skip to content
wild-modules.lisp 1.35 KiB
Newer Older
Rahul Jain's avatar
Rahul Jain committed
(in-package :asdf)

(defclass wild-module (module)
  ((component-class :accessor wild-module-component-class
                    :initform 'static-file :initarg :component-class)
   (component-options :accessor wild-module-component-options
                      :initform nil :initarg :component-options)))

(defmethod (setf module-components) (new-value (module wild-module))
  (when  new-value
    (sysdef-error "Cannot explicitly set wild-module ~A's components. Please ~
use a wild pathname instead." module)))
Rahul Jain's avatar
Rahul Jain committed

(defmethod reinitialize-instance :after ((self wild-module) &key)
  (let ((pathname (component-pathname self)))
    (unless (and pathname (wild-pathname-p pathname))
      (sysdef-error "Wild-module ~A specified with non-wild pathname ~A."
                    self pathname))
Rahul Jain's avatar
Rahul Jain committed
    (setf (slot-value self 'components)
          (let* ((files (directory pathname))
Rahul Jain's avatar
Rahul Jain committed
                 (class (wild-module-component-class self))
                 (options (wild-module-component-options self)))
            (mapcar (lambda (file)
                      (apply #'make-instance class
Rahul Jain's avatar
Rahul Jain committed
                             :pathname file
                             :parent self
                             options))
                    files)))
    (compute-module-components-by-name self)
    (values)))
Rahul Jain's avatar
Rahul Jain committed