[asdf-devel] asdf output locations --- content files
Robert Goldman
rpgoldman at sift.info
Tue Feb 2 01:08:52 UTC 2010
....
>
>> In the spirit of ASDF, we should be writing output-files methods and
>> then allowing your code to shuffle them, but that use-case seems to
>> break down a bit here.
>>
>> Consider providing an asdf system definition for a web site. You want
>> to specify the relative location of the content files, which may be
>> generated by asdf operations (e.g., my parenscript example). Those
>> content files must be findable by the code in your system. So this
>> seems like a case where the "let the end user decide where to put the
>> output files" breaks down.... Hm. Needs more thought. These web
>> content files are a case where the code/data distinction is not so
>> clear, and ASDF has not handled data files well (indeed, by
>> unpredictably relocating code files, it has broken our ability to find
>> data files using *load-truename*).
>>
> I don't have a clear solution for that problem at this point.
> If anyone has one, I'm curious.
>
> ASDF has no notion of "installed file".
Agreed, and this can be a real nuisance if your system carries data
along with it.
I thought I would mention this now. If we're reforming file writing, we
might want to try to pick off this problem as well.
The web application is a plausible one as is, for example, a graphical
app that has image files contained with it.
Using *load-truename* to find such files is, as I mentioned earlier,
broken by use of A-B-L or any other code that wrangles the output files
of the compile-op.
What I typically do is something unpleasant like this (from memory;
possibly slightly inaccurate):
1. In the asdf system definition file, do something like this:
(defparameter cl-user::*<sysname>-root-directory*
(merge-pathnames (make-pathname :type :unspecific :name :unspecific)
*load-truename*))
;; use cl-user because you don't have access to the package(s) in the
;; as yet not loaded system...
2. In the loaded files at some point
(with-open-file (str (merge-pathnames "imagefile.png"
cl-user::*<sysname>-root-directory*))
....)
I'd love to see a clean way to avoid this....
Cheers,
r
More information about the asdf-devel
mailing list