On 16 Mar 2018, at 15:03, Robert Dodier wrote:
Thanks, Robert, that helps a lot. Using ASDF:SYSTEM-RELATIVE-PATHNAME
is a big step forward.
A follow-up question: Is there a way to know, within a file which is
being loaded, whether or not it's being loaded via ASDF? The index
file might be loaded via CL:LOAD also.
Just to clarify the situation a little, the .info is created from
.texi by makeinfo, and then it's parsed (by a Perl script -- OH MY
WHAT HAVE I DONE?? Ha ha, only serious) to get the offset and length
of each documentation item, which is stored in the index, which is
implemented as a Lisp program that reads the .info and builds suitable
hash tables, to be used by Maxima's documentation system at run time.
All that with makeinfo and the info parser happens long before ASDF
comes into the picture. The .info and index.lisp are packaged with the
rest of the code, and that's the package that ASDF sees.
I don't doubt that this systems has flaws, but at this point I am
taking it as a given; I'm trying to make progress on a lot of fronts,
and cleaning up this monstrosity is a lower priority item.
Another trick you could try is to define a special class of files for
the info files (probably just a subclass of `cl-source-file`). Then you
could tell ASDF not to move that class of files, by providing a method
on `OUTPUT-FILES`. Here's the relevant `DEFGENERIC`:
(defgeneric output-files (operation component)
(:documentation "Methods for this function return two values: a
list of output files
corresponding to this action, and a boolean indicating if they have
already been subjected
to relevant output translations and should not be further translated.
Methods on PERFORM *must* call this function to determine where their
outputs are to be located.
They may rely on the order of the files to discriminate between outputs.
You can return T for the second value in order to have
output-translations *not* apply, IIRC.