asdf:find-system
(asdf:find-system name &optional (error-p t))
Returns the system metaobject for the named system: a CLOS instance of
asdf:system (or of asdf:package-inferred-system
for a :class :package-inferred-system one). The instance is memoized per
name — repeated calls answer the same object (eq), like real ASDF — and
passing a component object back in answers it unchanged. name is a string,
keyword or symbol designator (a symbol downcases, a string stays verbatim).
A name that is not registered signals an error, unless error-p is nil — then
the answer is nil, the probe shape libraries use
((asdf:find-system name nil) guarding a load-system). Registered means:
defined by a prior asdf:defsystem or a loaded .asd,
derived as a package-inferred sub-system, or one of the built-in shim systems.
find-system never searches the filesystem itself.
The component model behind the instance is real ASDF's: the classes
asdf:component, asdf:child-component / asdf:parent-component,
asdf:module, asdf:system, asdf:package-inferred-system,
asdf:source-file, asdf:cl-source-file and asdf:static-file are real CLOS
classes on every backend, so typep, typecase and defmethod specializers
over them all work.
Backend support
Works on all four backends. The interpreter answers from its live system
registry; a compiled program carries the registry that was spliced at compile
time, so find-system knows exactly the systems the program loaded (plus every
defsystem the .asds declared). A literal
(asdf:system-source-directory (asdf:find-system 'lib nil)) still folds to a
literal namestring at compile time, so the bundled-data-file idiom needs no
runtime registry.