anchor.diff:  ;;;# ASDF component: GROVEL-FILE
   
   (eval-when (:compile-toplevel :load-toplevel :execute)
  -  (defclass asdf::iolib-grovel-file (process-op-input cc-flags-mixin)
  +  (defclass grovel-file (process-op-input cc-flags-mixin)
       ()
       (:default-initargs
  -     :generated-lisp-file-type "processed-iolib-grovel-file")
  +     :generated-lisp-file-type "processed-grovel-file")
       (:documentation
        "This ASDF component represents an input file that is processed
        by PROCESS-GROVEL-FILE.")))
   
  -(defmethod asdf:perform ((op process-op) (c asdf::iolib-grovel-file))
  -  (let ((output-file (asdf:output-file op c))
  -         (input-file (asdf:component-pathname c)))
  +(defmethod asdf:output-files ((op process-op) (c grovel-file))
  +  (let* ((input-file (asdf:component-pathname c))
  +         (output-file (make-pathname :type (generated-lisp-file-type c)
  +                                     :defaults input-file))
  +         (c-file (make-c-file-name output-file)))
  +    (list output-file
  +          c-file
  +          (exe-filename c-file))))
  +
  +(defmethod asdf:perform ((op process-op) (c grovel-file))
  +  (let ((output-file (first (asdf:output-files op c)))
  +        (input-file (asdf:component-pathname c)))
       (ensure-directories-exist (directory-namestring output-file))
  -    (let ((tmp-file    (process-grovel-file input-file (ensure-pathname output-file))))
  +    (let ((tmp-file (process-grovel-file input-file output-file)))
         (unwind-protect
              (alexandria:copy-file tmp-file output-file :if-to-exists :supersede)
           (delete-file tmp-file)))))
  
positive.code: ;;;# ASDF component: WRAPPER-FILE
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (defclass asdf::iolib-wrapper-file (process-op-input cc-flags-mixin)
      ((soname :initform nil :initarg :soname :accessor soname-of))
      (:default-initargs
       :generated-lisp-file-type "processed-iolib-wrapper-file")
      (:documentation
        "This ASDF component represents an input file that is processed
        by PROCESS-WRAPPER-FILE. This generates a foreign library and
        matching CFFI bindings that are subsequently compiled and
        loaded.")))
  
  (defmethod asdf:perform ((op process-op) (c asdf::iolib-wrapper-file))
    (let ((output-file (asdf:output-file op c))
          (input-file  (asdf:component-pathname c)))
      (ensure-directories-exist (directory-namestring output-file))
      (let ((tmp-file    (process-wrapper-file input-file output-file (or (soname-of c)
                                                                          (asdf:component-name c)))))
        (unwind-protect
             (alexandria:copy-file tmp-file output-file :if-to-exists :supersede)
          (delete-file tmp-file)))))
  
negative.code:     COMPILE-OP and LOAD-SOURCE-OP operations to the file generated by
      PROCESS-OP.")))
  
  (defmethod asdf:input-files ((op process-op) (c process-op-input))
    (list (asdf:component-pathname c)))
  
  (defmethod asdf:component-depends-on ((op process-op) (c process-op-input))
    `((asdf:prepare-op ,c)
  