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.

best,
Robert Dodier

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.