On 1/25/10 Jan 25 -1:58 PM, Robert Brown wrote: > Thanks again for responding to my questions. I've interleaved > a few comments below. > > On 1/23/10, Robert Goldman <rpgold...@sift.info> wrote: >> On 1/23/10 Jan 23 -1:13 PM, Robert Brown wrote: >>> Protocol description files (suffix .proto) need to be converted >>> into Lisp source, which is then compiled and loaded. I'm trying >>> to get the dependencies right in one of my COMPONENT-DEPENDS-ON >>> methods. > >> I may be able to help with this --- I have some examples of cases where >> I have written preprocessors that turn some outside languages into lisp >> through preprocessing. > > I believe I have something that works, but it's a bit suboptimal. For each > proto file I have 2 components, one that converts the proto file into a Lisp > source file, and a second that compiles and loads the Lisp code. It would > be nice to combine these two components into just one ASDF component.
I wrote an ASDF operation that took the output of the Protege ontology GUI and pushed it through a colleague's perl script to yield lisp output that ASDF then compiles and loads. I did this by adding a new type of component that's a subclass of cl-source-file and adding a new operation that must be done before doing the compile-op. That new operation finds the /real/ source file and pushes it through the perl script... This last aspect is a little undesirable --- it would probably be better if the code was written so that you specify the real source file, and we were to compute the input-files for the lisp from that. But that would have required more new code writing... Here are some snippets. If you correct/improve them, please share it, and maybe we can turn this into a howto: ;;; need to add methods that will handle the making of this from the protege ;;; ontology input file. [2008/09/23:rpg] (defclass pont-file (cl-source-file) () (:documentation "This is an ontology file that must be built from a protege ontology output file.") ) (defclass pont-to-lisp (operation) () (:documentation "The process of translating a Protege ontology to a lisp source file, performed by a perl script.") ) (defmethod component-depends-on ((op compile-op) (c pont-file)) (append (call-next-method) `((pont-to-lisp ,(component-name c))))) (defmethod output-files ((op pont-to-lisp) (c pont-file)) ;; this is my shorthand ;; way of saying that the process of doing pont-to-lisp on a pont-filename ;; should yield this lisp filename... [2008/09/24:rpg] (list (component-pathname c))) ;;; there's a horrible method for input-files on pont-to-lisp X ;;; pont-file which I will spare you to save myself embarrassment (defmethod perform ((op pont-to-lisp) (c pont-file)) (asdf:run-shell-command "perl ~a ~a > ~a" *ptolisp* (namestring (first (input-files op c))) (namestring (first (output-files op c))))) This seems to mostly work, but I've never been confident that it is the right thing. > > .... > >> Have you tried looking at component-do-first as well as in-order-to? > > I think I see what's going on now. In addition to the IN-ORDER-TO > dependencies, ASDF records an additional dependency in the DO-FIRST > slot. When :depends-on is specified, the DO-FIRST slot is set: > > (setf (slot-value ret 'do-first) `((compile-op (load-op ,@depends-on)))) > > This is strange to me. Why put dependencies in two different places? > The DO-FIRST dependency cannot be supplied by providing a new > implementation of the COMPONENT-DEPENDS-ON method. It's > only set when :depends-on is used in the system definition. > > I'm unfamiliar with ASDF internals, but I think the semantics of ASDF > dependencies would be more straightforward if DO-FIRST were removed and > IN-ORDER-TO used for all dependencies. I wish I could tell you --- I don't see any comments here. I presume that there's some good reason for this having been added, but I don't know what it would be. I wonder if it's a method-combination thing --- like the way that some functions were forced into standard method combination because CLISP once upon a time didn't have PROGN, AND, APPEND, etc. Maybe Dan Barlow or somebody will see this and comment... Sorry I can't be more helpful. best, r _______________________________________________ asdf-devel mailing list asdf-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel