On Tue, Mar 30, 2010 at 4:06 PM, Robert Goldman rpgoldman@sift.info wrote:
FWIW, Faré provided a couple of new API functions to give ASDF users this function, notably
SYSTEM-RELATIVE-PATHNAME
and
SYSTEM-SOURCE-DIRECTORY
I insist on the following: in order to achieve purity in ASDF files we want to keep as far away as possible from using any kind of API in the compiled code.
The best system build system is one which is invisible to the code that it builds.
Exposing functions, imposing the dependency of the user code on ASDF API as well as imposing that the library code queries ASDF for its own system is a very bad design.
We want system definitions to be descriptive, not programatic, and we want the user code to be able to exist in an ASDF-free environment, as standalone systems. The existing situation does not allow this.
One may
1) Use *compile-file/load-truename* but that leads to very ugly code.
2) Enforce that *default-pathname-defaults* is set to the system root when loading or compiling
3) Provide logical hostnames
For what it's worth, I try to avoid logical-pathnames in portable code,
having been hoist too many times on the petard of ACL/SBCL incompatibility in handling logical pathnames (SBCL sticks to the spec, in the name of portability and standardization; ACL accepts sensible, spec-defying logical pathnames in the name of utility).
I do not have payware lisps, but I have been living with SBCL and ECL's logical pathnames without further problems.
Juanjo