Next: Creating new component types, Previous: Common attributes of components, Up: Components

#### 3.2.2 Pre-defined subclasses of component

— Component: source-file

> A source file is any file that the system does not know how to generate from other components of the system.

> Note that this is not necessarily the same thing as “a file containing data that is typically fed to a compiler”. If a file is generated by some pre-processor stage (e.g. a `.h` file from `.h.in` by autoconf) then it is not, by this definition, a source file. Conversely, we might have a graphic file that cannot be automatically regenerated, or a proprietary shared library that we received as a binary: these do count as source files for our purposes.

> Subclasses of source-file exist for various languages. FIXME: describe these.

— Component: module

> A module is a collection of sub-components.

> A module component has the following extra initargs:

> - `:components` the components contained in this module
> - `:default-component-class` All child components which don't specify their class explicitly are inferred to be of this type.
> - `:if-component-dep-fails` This attribute takes one of the values `:fail`, `:try-next`, `:ignore`, its default value is `:fail`. The other values can be used for implementing conditional compilation based on implementation `*features*`, for the case where it is not necessary for all files in a module to be compiled.
> - `:serial` When this attribute is set, each subcomponent of this component is assumed to depend on all subcomponents before it in the list given to `:components`, i.e. all of them are loaded before a compile or load operation is performed on it.

> The default operation knows how to traverse a module, so most operations will not need to provide methods specialised on modules.

> `module` may be subclassed to represent components such as foreign-language linked libraries or archive files.

— Component: system

> `system` is a subclass of `module`.

> A system is a module with a few extra attributes for documentation purposes; these are given elsewhere. See The defsystem grammar.

> Users can create new classes for their systems: the default `defsystem` macro takes a `:classs` keyword argument.