Next: How do I create a system definition where all the source files have a .cl extension?, Previous: How can I maintain non-Lisp (e.g. C) source files?, Up: Issues with using and extending ASDF to define systems [Contents][Index]
By default, the files contained in an asdf module go
in a subdirectory with the same name as the module.
However, this can be overridden by adding a :pathname "" argument
to the module description.
For example, here is how it could be done
in the spatial-trees ASDF system definition for ASDF 2 or later:
(asdf:defsystem "spatial-trees"
:components
((:module "base"
:pathname ""
:components
((:file "package")
(:file "basedefs" :depends-on ("package"))
(:file "rectangles" :depends-on ("package"))))
(:module tree-impls
:depends-on ("base")
:pathname ""
:components
((:file "r-trees")
(:file "greene-trees" :depends-on ("r-trees"))
(:file "rstar-trees" :depends-on ("r-trees"))
(:file "rplus-trees" :depends-on ("r-trees"))
(:file "x-trees" :depends-on ("r-trees" "rstar-trees"))))
(:module viz
:depends-on ("base")
:pathname ""
:components
((:static-file "spatial-tree-viz.lisp")))
(:module tests
:depends-on ("base")
:pathname ""
:components
((:static-file "spatial-tree-test.lisp")))
(:static-file "LICENCE")
(:static-file "TODO")))
All of the files in the tree-impls module are at the top level,
instead of in a tree-impls/ subdirectory.
Note that the argument to :pathname can be either a pathname object or a string.
A pathname object can be constructed with the #p"foo/bar/" syntax,
but this is discouraged because the results of parsing a namestring are not portable.
A pathname can only be portably constructed with such syntax as
#.(make-pathname :directory '(:relative "foo" "bar")),
and similarly the current directory can only be portably specified as
#.(make-pathname :directory '(:relative)).
However, as of ASDF 2, you can portably use a string to denote a pathname.
The string will be parsed as a /-separated path from the current directory,
such that the empty string "" denotes the current directory, and
"foo/bar" (no trailing / required in the case of modules)
portably denotes the same subdirectory as above.
When files are specified, the last /-separated component is interpreted
either as the name component of a pathname
(if the component class specifies a pathname type),
or as a name component plus optional dot-separated type component
(if the component class doesn’t specifies a pathname type).