Defines the fpm model data types which encapsulate all information required to correctly build a package and its dependencies.
The process (see build_model
) for generating a valid fpm_model
involves
source files discovery (fpm_sources) and parsing (fpm_source_parsing).
Once a valid fpm_model
has been constructed, it may be passed to targets_from_sources
to
generate a list of build targets for the backend.
Source type: FPM_UNIT_*
Describes the type of source file — determines build target generation
The logical order of precedence for assigning unit_type
is as follows:
if source-file contains program then
unit_type = FPM_UNIT_PROGRAM
else if source-file contains non-module subroutine/function then
unit_type = FPM_UNIT_SUBPROGRAM
else if source-file contains submodule then
unit_type = FPM_UNIT_SUBMODULE
else if source-file contains module then
unit_type = FPM_UNIT_MODULE
end if
A source file is only designated FPM_UNIT_MODULE
if it only contains modules - no non-module subprograms.
(This allows tree-shaking/pruning of build targets based on unused module dependencies.)
Source scope: FPM_SCOPE_*
Describes the scoping rules for using modules — controls module dependency resolution
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | parameter | :: | FPM_SCOPE_APP | = | 3 |
Module-use scope is library/dependency and app modules |
integer, | public, | parameter | :: | FPM_SCOPE_DEP | = | 2 |
Module-use scope is library/dependency modules only |
integer, | public, | parameter | :: | FPM_SCOPE_EXAMPLE | = | 5 | |
integer, | public, | parameter | :: | FPM_SCOPE_LIB | = | 1 |
Module-use scope is library/dependency modules only |
integer, | public, | parameter | :: | FPM_SCOPE_TEST | = | 4 |
Module-use scope is library/dependency and test modules |
integer, | public, | parameter | :: | FPM_SCOPE_UNKNOWN | = | -1 |
Source has no module-use scope |
integer, | public, | parameter | :: | FPM_UNIT_CHEADER | = | 6 |
Source type is c header file |
integer, | public, | parameter | :: | FPM_UNIT_CPPSOURCE | = | 7 |
Souce type is c++ source file. |
integer, | public, | parameter | :: | FPM_UNIT_CSOURCE | = | 5 |
Source type is c source file |
integer, | public, | parameter | :: | FPM_UNIT_MODULE | = | 2 |
Source only contains one or more fortran modules |
integer, | public, | parameter | :: | FPM_UNIT_PROGRAM | = | 1 |
Source contains a fortran program |
integer, | public, | parameter | :: | FPM_UNIT_SUBMODULE | = | 3 |
Source contains one or more fortran submodules |
integer, | public, | parameter | :: | FPM_UNIT_SUBPROGRAM | = | 4 |
Source contains one or more fortran subprogram not within modules |
integer, | public, | parameter | :: | FPM_UNIT_UNKNOWN | = | -1 |
Source type unknown |
Enabled Fortran language features
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
logical, | public | :: | implicit_external | = | .false. |
Use implicit external interface |
|
logical, | public | :: | implicit_typing | = | .false. |
Use default implicit typing |
|
character(len=:), | public, | allocatable | :: | source_form |
Form to use for all Fortran sources |
Type describing everything required to build the root package and its dependencies.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(archiver_t), | public | :: | archiver |
Archiver object |
|||
character(len=:), | public, | allocatable | :: | build_prefix |
Base directory for build |
||
character(len=:), | public, | allocatable | :: | c_compile_flags |
Command line flags passed to C for compilation |
||
type(compiler_t), | public | :: | compiler |
Compiler object |
|||
character(len=:), | public, | allocatable | :: | cxx_compile_flags |
Command line flags passed to C++ for compilation |
||
type(dependency_tree_t), | public | :: | deps |
Project dependencies |
|||
logical, | public | :: | enforce_module_names | = | .false. |
Whether module names should be prefixed with the package name |
|
type(string_t), | public, | allocatable | :: | external_modules(:) |
External modules used |
||
character(len=:), | public, | allocatable | :: | fortran_compile_flags |
Command line flags passed to fortran for compilation |
||
type(string_t), | public, | allocatable | :: | include_dirs(:) |
Include directories |
||
logical, | public | :: | include_tests | = | .true. |
Whether tests should be added to the build list |
|
character(len=:), | public, | allocatable | :: | link_flags |
Command line flags passed to the linker |
||
type(string_t), | public, | allocatable | :: | link_libraries(:) |
Native libraries to link against |
||
type(string_t), | public | :: | module_prefix |
Prefix for all module names |
|||
character(len=:), | public, | allocatable | :: | package_name |
Name of root package |
||
type(package_t), | public, | allocatable | :: | packages(:) |
Array of packages (including the root package) |
Type for describing a source file
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=int64), | public | :: | digest |
Current hash |
|||
character(len=:), | public, | allocatable | :: | exe_name |
Name of executable for FPM_UNIT_PROGRAM |
||
character(len=:), | public, | allocatable | :: | file_name |
File path relative to cwd |
||
type(string_t), | public, | allocatable | :: | include_dependencies(:) |
Files INCLUDEd by this source file |
||
type(string_t), | public, | allocatable | :: | link_libraries(:) |
Native libraries to link against |
||
type(string_t), | public, | allocatable | :: | modules_provided(:) |
Modules provided by this source file (lowerstring) |
||
type(string_t), | public, | allocatable | :: | modules_used(:) |
Modules USEd by this source file (lowerstring) |
||
type(string_t), | public, | allocatable | :: | parent_modules(:) |
Parent modules (submodules only) |
||
integer, | public | :: | unit_scope | = | FPM_SCOPE_UNKNOWN |
Target module-use scope |
|
integer, | public | :: | unit_type | = | FPM_UNIT_UNKNOWN |
Type of source unit |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(fpm_model_t), | intent(in) | :: | model |