Next: , Previous: , Up: What has changed between ASDF 1 ASDF 2 and ASDF 3?   [Contents][Index]

13.3.3 ASDF can portably name files in subdirectories

Common Lisp namestrings are not portable, except maybe for logical pathname namestrings, that themselves have various limitations and require a lot of setup that is itself ultimately non-portable.

In ASDF 1, the only portable ways to refer to pathnames inside systems and components were very awkward, using #.(make-pathname ...) and #.(merge-pathnames ...). Even the above were themselves were inadequate in the general case due to host and device issues, unless horribly complex patterns were used. Plenty of simple cases that looked portable actually weren’t, leading to much confusion and greavance.

ASDF 2 implements its own portable syntax for strings as pathname specifiers. Naming files within a system definition becomes easy and portable again. See system-relative-pathname, merge-pathnames*, coerce-pathname.

On the other hand, there are places where systems used to accept namestrings where you must now use an explicit pathname object: (defsystem ... :pathname "LOGICAL-HOST:PATH;TO;SYSTEM;" ...) must now be written with the #p syntax: (defsystem ... :pathname #p"LOGICAL-HOST:PATH;TO;SYSTEM;" ...). We recommend against using pathname objects in general and logical pathnames in particular. Your code will be much more portable using ASDF’s pathname specifiers.

See Pathname specifiers.