Next: The defsystem grammar, Previous: The defsystem form, Up: Defining systems with defsystem
Let's illustrate some more involved uses of defsystem via a
slightly convoluted example:
(defsystem "foo"
:version "1.0"
:components ((:module "foo" :components ((:file "bar") (:file"baz")
(:file "quux"))
:perform (compile-op :after (op c)
(do-something c))
:explain (compile-op :after (op c)
(explain-something c)))
(:file "blah")))
The method-form tokens need explaining: essentially, this part:
:perform (compile-op :after (op c)
(do-something c))
:explain (compile-op :after (op c)
(explain-something c))
has the effect of
(defmethod perform :after ((op compile-op) (c (eql ...)))
(do-something c))
(defmethod explain :after ((op compile-op) (c (eql ...)))
(explain-something c))
where ... is the component in question; note that although this
also supports :before methods, they may not do what you want
them to – a :before method on perform ((op compile-op) (c
(eql ...))) will run after all the dependencies and sub-components
have been processed, but before the component in question has been
compiled.