Next: Getting the latest version, Previous: Error handling, Up: Top [Contents][Index]
FIXME: Add discussion of run-shell-command
? Others?
ASDF includes several additional features that are generally useful for system definition and development. These include:
It’s often handy to locate a file relative to some system.
The system-relative-pathname
function meets this need.
It takes two arguments: the name of a system and a relative pathname.
It returns a pathname built from the location of the system’s source file
and the relative pathname. For example
> (asdf:system-relative-pathname 'cl-ppcre #p"regex.data") #P"/repository/other/cl-ppcre/regex.data"
Instead of a pathname, you can provide a symbol or a string,
and optionally a keyword argument type
.
The arguments will then be interpreted in the same way
as pathname specifiers for components.
See Pathname specifiers.
ASDF does not provide a turnkey solution for locating
data (or other miscellaneous) files
that are distributed together with the source code of a system.
Programmers can use system-source-directory
to find such files.
Returns a pathname object.
The system-designator may be a string, symbol, or ASDF system object.
It is sometimes useful to force recompilation of a previously loaded system.
In these cases, it may be useful to (asdf:clear-system :foo)
to remove the system from the table of currently loaded systems;
the next time the system foo
or one that depends on it is re-loaded,
foo
will then be loaded again.
Alternatively, you could touch foo.asd
or
remove the corresponding fasls from the output file cache.
(It was once conceived that one should provide
a list of systems the recompilation of which to force
as the :force
keyword argument to load-system
;
but this has never worked, and though the feature was fixed in ASDF 2.000,
it remains cerror
’ed out as nobody ever used it.)
Note that this does not and cannot by itself undo the previous loading
of the system. Common Lisp has no provision for such an operation,
and its reliance on irreversible side-effects to global datastructures
makes such a thing impossible in the general case.
If the software being re-loaded is not conceived with hot upgrade in mind,
this re-loading may cause many errors, warnings or subtle silent problems,
as packages, generic function signatures, structures, types, macros, constants, etc.
are being redefined incompatibly.
It is up to the user to make sure that reloading is possible and has the desired effect.
In some cases, extreme measures such as recursively deleting packages,
unregistering symbols, defining methods on update-instance-for-redefined-class
and much more are necessary for reloading to happen smoothly.
ASDF itself goes through notable pains to make such a hot upgrade possible
with respect to its own code, and what it does is ridiculously complex;
look at the beginning of asdf.lisp to see what it does.
Next: Getting the latest version, Previous: Error handling, Up: Top [Contents][Index]