fpm_model Module

The fpm package model

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.

Enumerations

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

Source scope: FPM_SCOPE_* Describes the scoping rules for using modules — controls module dependency resolution



Contents


Variables

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


Derived Types

type, public ::  fortran_features_t

Enabled Fortran language features

Components

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, public ::  fpm_model_t

Type describing everything required to build the root package and its dependencies.

Components

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, public ::  srcfile_t

Type for describing a source file

Components

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


Subroutines

public subroutine show_model(model)

Arguments

Type IntentOptional Attributes Name
type(fpm_model_t), intent(in) :: model