diff --git a/action.lisp b/action.lisp index 832df24cc605564ea2da22b237b0c55cbe22bbea..5ecf77ee295004d08a39d44d20acd1f4a5d25dea 100644 --- a/action.lisp +++ b/action.lisp @@ -192,7 +192,30 @@ E.g. before a component may be loaded by LOAD-OP, it must have been compiled by (defmethod component-depends-on ((o selfward-operation) (c component)) `(,@(loop :for op :in (ensure-list (selfward-operation o)) :collect `(,op ,c)) - ,@(call-next-method)))) + ,@(call-next-method))) + + (defclass non-propagating-operation (operation) + () + (:documentation "A NON-PROPAGATING-OPERATION is an operation that propagates +no dependencies whatsoever. It is supplied in order that the programmer be able +to specify that s/he is intentionally specifying an operation which invokes no +dependencies."))) + + +;;;--------------------------------------------------------------------------- +;;; Help programmers catch obsolete OPERATION subclasses +;;;--------------------------------------------------------------------------- +(defmethod initialize-instance :before ((obj operation) &key) + (unless + (loop :for x :in '(downward-operation upward-operation sideway-operation + selfward-operation non-propagating-operation) + :when (typep obj x) + :return t + :finally (return nil)) + (error "No dependency propagating scheme specified for operation ~a.~ +This is likely because the OPERATION subclass of this object has not been ~ +updated for ASDF 3." obj))) + ;;;; Inputs, Outputs, and invisible dependencies diff --git a/interface.lisp b/interface.lisp index cf8000d6a63a0e3faad7e3ce9ab3c74241fe2ad2..d0c2d641a6429af89b6f764ddc3e02927854e882 100644 --- a/interface.lisp +++ b/interface.lisp @@ -26,6 +26,7 @@ #:require-system #:test-system #:clear-system #:operation #:make-operation #:find-operation #:upward-operation #:downward-operation #:sideway-operation #:selfward-operation + #:non-propagating-operation #:build-system #:build-op #:load-op #:prepare-op #:compile-op #:prepare-source-op #:load-source-op #:test-op