Syntax

Syntax: comment

An empty line, a line with only space characters and a line beginning with a # character is a comment line. For example:

# This is a comment.
    # This is also a comment.

Also, if a line contains a space character followed by a # character then this, and any following characters, are treated as an end of line comment and are ignored.

Syntax: declaration

The general syntax of a declaration consists of a label, a set of modifiers, a list of name-spaces, and a value:

label{mod:mod-value}[ns] = value
label{mod:mod-value} = value
label[ns] = value
label = value
label = value\
    value # "value    value"
label = value\
    \value # "valuevalue"

The label is compulsory. It defines the declaration, and may have one or more characters in the alpha-numeric, the underscore, the minus sign and the full stop. The label cannot be substituted with a variable.

The modifier is an optional part of the syntax, but may be a compulsory part of some declarations. The modifiers are embedded between a pair of curly braces and must come after the label, but before the name-spaces and the equal sign. It should be a comma-separated list of colon-separated key-value pairs, (i.e. {key1: value1, key2: value2, ...}). The value in each modifier is optional - if a key is set without a value, its value is assumed to be 1. The contents of the modifiers can be substituted using a variable.

The name-space is an optional part of the syntax, but may be a compulsory part of some declarations. The name-spaces are embedded between a pair of square braces and must come after the label and/or modifiers but before the equal sign. It should be a space-separated list of names. If a name contains space, the space character can be escaped using a backslash character or the name can be quoted. The contents of the name-spaces can be substituted using a variable.

The first non-space character after the equal sign begins the value of the declaration. If there is nothing after the equal sign, the value is an empty string. The contents of the value can be substituted using a variable. Trailing space characters are ignored. The end of line can be escaped using a backslash, and the value of the declaration will continue from the next non-comment line. If the first non-space character on that line is a backslash then the line contents up to and including that backslash are ignored.

Syntax: variable

A variable is used to substitute commonly used values in a declaration. It can refer to an environment variable or can be defined locally using the syntax:

$var = value    # Sets "var" variable to "value"
$var{?} = value # Sets "var" variable to "value" only if "var" is not defined
# E.g.:
$projects = foo bar baz
$long_path = src/path/is/very/very/very/long
$UMDIR{?} = /projects/um1
# time passes...
extract.ns = $projects
extract.path-excl[$projects egg ham] = doc man ${long_path}_longer
build.prop{cc.defs} = foo=\$foo # escape substitution

The name of a variable must begin with an alphabet or an underscore and followed by 0 or more alpha-numeric or underscore characters, (i.e. it must match this regular expression: ^[A-Za-z_][A-Za-z0-9_]*$).

Locally defined variables only apply in the context of the configuration file and are not passed down, for instance, to the compiler. If there is an environment variable with the same identifier, its value is normally overridden (within the context of the configuration file) by any local setting. However, if a ? modifier is given, it assigns the value to the variable only if the variable is not already defined (either as an environment variable or locally). Substitution can be escaped using a backslash character in front of the dollar sign. Any attempt to reference an undefined variable will trigger an exception.

Note: $HERE is a reserved variable to indicate the parent directory of the current configuration file. (The system ignores the $HERE environment variable, if there is one.) Any attempt to assign a value to $HERE will trigger an exception.

Syntax: include

An include declaration specifies the logical locations of a list of configuration files, where contents are to be included inline:

include{type:type} = location ...
# E.g.:
include = fcm:foo/path/to/config/file
include = svn://server/path/to/config/file@1234
include{type:svn} = http://server/path/to/config/file
include = /path/to/config/file $HERE/another-config-file
include = $HERE/another-config-file
include = ~/path/to/config/file ~fred/path/to/config/file

If the value of an include declaration is a relative path, the system will search the directory containing the current configuration file for the include file. More include search paths can be specified using the include-path declaration. E.g.:

# Define or replace include search paths
include-path=/path/to/some/cfg /path/to/more/cfg
# Append to include search paths
include-path{+}=host2:/path/to/cfg
include-path{type:svn,+}=https://host1/path/to/cfg
# ... Include files can now be relative paths
include=foo.cfg bar.cfg

Some commands, e.g. fcm make, accept one or more --config-file-path=PATH command line option, which can be used to pre-define the include search paths when they read their configuration files.

Currently, the location can be a path in the file system, a Subversion URL, a FCM keyword pointing to a Subversion URL, or a location in the file system of a remote host accessible via passphrase-less SSH. The system will attempt to make an intelligent guess of the location type. To allow for future expansion, both the include and the include-path declarations accept a type:TYPE modifier (where TYPE can currently be fs for a file system path or svn for a Subversion location) to allow the location type to be defined where it is ambiguous.

FCM Keyword Configuration

The keyword configuration files are mainly used to define FCM location keywords and related settings. The fcm command searches for keyword configuration files from the following locations:

  1. (Deprecated) $HOME/.fcm - expects FCM 1 configuration file format. See Annex: Declarations in FCM 1 central/user configuration file for detail.
  2. $FCM/etc/fcm/keyword.cfg where $FCM/bin/ is the path at which fcm is installed.
  3. $HOME/.metomi/fcm/keyword.cfg.

The following are declarations recognised by the keyword configuration files:

location

description: Associates a namespace with a location, and allows the use of fcm:namespace as a substitute of the location.

modifier: primary: Optional. If specified, the location is a primary location, i.e. the system will create the _tr, _br, _tg, -tr, -br and -tg keywords for this location.

modifier: type: Optional. Specifies the type of the location. The system currently supports svn for a Subversion location and fs for a file system location. If not specified, the system will make an intelligent guess based on the given value.

namespace: The namespace to be associated with the location.

value: A valid location of a type supported by the system.

example:

location{primary}[var] = svn://fcm5/VAR_svn/VAR
location{primary, type:svn}[egg] = http://chicken/egg
revision

description: Associates a keyword with a revision of a location in a version control system.

namespace: The namespace of a location (already defined using the location declaration), followed by a colon and the namespace of the revision.

value: A valid revision of the location.

example:

revision[um:vn7.5] = 18479
revision[egg:free-range] = 1
browser.comp-pat

description: Specifies a regular expression to capture components in the scheme-specific part of a version control system location (already defined using the location{primary} declaration). These components can then be used in the browser.loc-tmpl template string.

namespace: Optional. The namespace of a location. If not specified, the declaration applies globally.

value: A valid regular expression.

example:

browser.comp-pat = (?msx-i:\A // ([^/]+) /+ ([^/]+)_svn /*(.*) \z) # default
browser.comp-pat[egg] = (?msx-i:\A//([^/]+)/(.*)\z)
browser.loc-tmpl

description: Specifies a template string, in which the components captured by the browser.comp.pat regular expression are used to fill in the numbered fields. The template should have one more field than the number of components captured by browser.comp-pat. The final field is used to place the revision, which is generated via the browser.rev-tmpl.

namespace: Optional. The namespace of a location. If not specified, the declaration applies globally.

value: A valid template.

example:

browser.loc-tmpl = http://{1}/projects/{2}/intertrac/source:/{3}{4} # default
browser.loc-tmpl[egg] = http://{1}/intertrac/source:/{3}{4}
browser.rev-tmpl

description: Specifies a template string, which should have a single numbered field for filling in the revision number.

namespace: Optional. The namespace of a location. If not specified, the declaration applies globally.

value: A valid template.

example:

browser.rev-tmpl = @{1} # default

FCM External Configuration

The external configuration files are used to define the name of external commands used by the FCM system. The fcm command searches for external configuration files from the following locations:

  1. $FCM/etc/fcm/external.cfg where $FCM/bin/ is the path at which fcm is installed.
  2. $HOME/.metomi/fcm/external.cfg.

The following are declarations recognised by the external configuration files:

browser

description: Specifies the command to invoke the web browser. (default=firefox)

example:

browser = konqueror
diff3

description: The shell command used by the extract system of FCM Make to perform a 3-way merge. (default=diff3)

example:

diff3 = diff3
diff3.flags

description: The options used by the 3-way merge shell command. (default=-E -m)

example:

diff3.flags = -E -m
graphic-diff

description: Specifies the command to invoke the graphic diff tool. (default=xxdiff)

example:

graphic-diff = tkdiff
graphic-merge

description: Specifies the command to invoke the graphic merge tool. (default=xxdiff)

example:

graphic-merge = xxdiff
ssh

description: The secure remote shell command to execute commands on a remote host. (default=ssh)

example:

ssh = ssh
ssh.flags

description: The options used by the secure shell command to execute commands on a remote host. (default=-n -oBatchMode=yes)

example:

ssh.flags = -n -oBatchMode=yes
rsync

description: The rsync command. (default=rsync)

example:

rsync = rsync
rsync.flags

description: The options used by the rsync command. (default=-a --exclude=.* --delete-excluded --timeout=900 --rsh=ssh\ -oBatchMode=yes)

example:

rsync.flags = -a --exclude=.* --delete-excluded --timeout=900 --rsh=ssh\ -oBatchMode=yes

FCM Make Configuration

A typical FCM make configuration consists of some top level declarations to define the make, and specific declarations for each step. The top level declarations are described below, and the specific declarations for each type of step will be described in the sub-sections to follow.

Note:

  • Unless stated otherwise, FCM make configuration declarations are non-cumulative, i.e. if more than one declarations apply to the same configuration, the value of the last declaration overrides those of the earlier ones. E.g.:
    # Sets the Fortran compiler flags for the root name-space
    build.prop{fc.flags} = -O3
    # build.prop{fc.flags}[/] = -O3
    
    # Sets the C/Fortran compiler flags for the "foo/bar" name-space
    build.prop{cc.flags, fc.flags}[foo/bar] = -g -C
    # build.prop{cc.flags}[foo/bar] = -g -C
    # build.prop{fc.flags}[/] = -O3
    # build.prop{fc.flags}[foo/bar] = -g -C
    
    # Sets the Fortran compiler flags for the root and "foo/bar" name-spaces
    build.prop{fc.flags}[/ foo/bar] = -O2
    # build.prop{cc.flags}[foo/bar] = -g -C
    # build.prop{fc.flags}[/] = -O2
    # build.prop{fc.flags}[foo/bar] = -O2
    
    # Sets the Fortran compiler flags for the "foo/bar" name-spaces
    build.prop{fc.flags}[foo/bar] = -O1
    # build.prop{cc.flags}[foo/bar] = -g -C
    # build.prop{fc.flags}[/] = -O2
    # build.prop{fc.flags}[foo/bar] = -O1
    
  • Unless stated otherwise, declarations are inherited.
  • The default values of the property settings of each step class (e.g. build.prop{fc}) can be modified in:
    1. The site configuration file $FCM/etc/fcm/make.cfg where $FCM/bin/ is the path at which fcm is installed.
    2. The user configuration file $HOME/.metomi/fcm/make.cfg.
    3. *.prop{class,*} declarations in the FCM make configuration file of the current session.

    The syntax is identical to a normal FCM make configuration file declaration except that:

    • Only *.prop{*} declarations are accepted.
    • The settings apply to a step class, not an individual step.
    • Name-space is not allowed.

For further details, please refer to the chapter on FCM Make.

description

description: Specifies a description string for the current make.

value: A string.

example:

description = Release 2.71.82
dest

description: Specifies the output destination of the make system. If not specified, the system assumes the output destination to be the current working directory. This setting is not inherited.

value: A writable directory path.

example:

dest = path
# E.g.:
dest = $HERE
name

description: Specifies the NAME of the make, so that the command will search for fcm-makeNAME.cfg instead of fcm-make.cfg, and will write context files in .fcm-makeNAME/ and log files as fcm-makeNAME.log, etc.

value: A file name friendly string.

example:

name = -friend
require-version

description: Specifies the minimum FCM version and optionally the maximum FCM version that can be used on the current configuration. If specified, FCM make fails immediately if its version does not meet the criteria.

value: The minimum version required, and optionally the maximum version required.

example:

# Requires minimum FCM release at 2016.02.0
require-version = 2016.02.0
# Requires minimum FCM release at 2016.02.0, and maximum at 2038.01.0
require-version = 2016.02.0 2038.01.0
steps

description: Specifies a list of steps for the make system to invoke. Each specified step can either be the ID of a known sub-system, i.e. extract, mirror, preprocess and build, or an ID defined using the step.class declaration. (See below.)

value: A list of steps for the make system to invoke.

example:

steps = id-1 id-2 ...
# E.g.:
steps = extract mirror
step.class

description: Defines custom step IDs. This allows built-in steps to be renamed, or re-used in multiple steps.

namespace: Specifies the step IDs.

value: An ID of a known sub-system, i.e. extract, mirror, preprocess and build.

example:

step.class[id ...] = id-of-class
# E.g.:
step.class[build-qxrecon build-ieee] = build
use

description: Specifies inheritance locations. It is worth noting that this declaration is cumulative, i.e. a use declaration adds more inheritance locations rather than overrides the inheritance locations of any previous use declarations.

value: A list of paths where this make can inherit items and properties from.

example:

use = path1 path2 ...
E.g.:
use = /path/to/inherit

FCM Make Configuration: Extract

All declarations are prefixed with extract.*. Where appropriate, replace the leading extract with the appropriate step ID. With the exception of the extract.location{diff} declaration, any attempt to specify any extract declarations in an inherited extract will result in an exception.

extract.ns

description: Specifies a list of names of the projects to extract.

value: A space-delimited list of names of the projects to extract.

example:

extract.ns = gen ops um var ver
extract.location

description: Specifies the location of the base source tree a project. If the base source tree is not specified for a Subversion project, the system will try to use trunk@HEAD.

modifier: type: Specifies the type of the locations. The system currently supports svn for a Subversion location, ssh for a file system on a remote host accessible via SSH and RSYNC, and fs for a file system location. (default=svn if the location is recognised as a Subversion URL, ssh if the location has the form [USER@]HOST:PATH and HOST is a valid remote host, fs otherwise)

namespace: A space-delimited list of project IDs.

value: A location, which can be a full path in the file system, or a relative location of the project root.

example:

extract.location[um] = trunk@vn7.5
extract.location[gen ops var] = trunk@HEAD
extract.location{diff}

description: Specifies the location(s) of one or more diff source trees of a project. It is OK to add more diff source trees in an inheriting extract.

modifier: type: -as above-

namespace: A project ID.

value: A space-delimited list of locations. A location can be a full path in the file system, or a relative location of the project root.

example:

extract.location{diff}[gen] = \
    branches/dev/fred/r12345_678 \
    branches/dev/free/r12345_678@123
extract.location{primary}

description: Specifies the project locations for an extract, if they are not already defined in the keyword configuration.

modifier: type: -as above-

namespace: A project ID.

value: A project location. The location can be a path in the file system, a Subversion URL or a FCM keyword pointing to a Subversion URL.

example:

extract.location{primary}[egg] = svn://server2/egg
extract.location{primary,type:svn}[foo] = http://server1/foo
extract.path-excl / extract.path-incl

description: Specifies the paths in a project tree to exclude/include. (A path-incl takes precedence over a path-excl declaration.)

namespace: A space-delimited list of project IDs.

value: A space-delimited list of paths in a project tree.

example:

extract.path-excl[foo] = / # everything
extract.path-incl[foo] = bin lib src/code
extract.path-root

description: Specifies the root paths in the source trees of the projects to be extracted. By default, the root path is the root of a source tree. If this setting is specified, the system will only extract source files under the specified root path. The system will also adjust the name-space of each source file to be relative to the specified root path. The extract.path-excl and extract.path-incl declarations will apply from the level of the specified root path.

namespace: A space-delimited list of project IDs.

value: A relative path in the project source trees.

example:

extract.path-root[gen] = src/code
extract.prop

description: Sets or modifies a property.

modifier: diff3: The shell command to perform a 3-way merge. If not specified, use the diff3 setting of the FCM external configuration.

modifier: diff3.flags: The options used by the 3-way merge shell command. If not specified, use the diff3.flags setting of the FCM external configuration.

value: The value of the property.

example:

extract.prop{diff3} = diff3
extract.prop{diff3.flags} = -E -m

FCM Make Configuration: Mirror

All declarations are prefixed with mirror.*. Where appropriate, replace the leading mirror with the appropriate ID.

mirror.target

description: Specifies the mirror target. This setting is not inherited.

value: The mirror target.

example:

mirror.target = fred@server:/path/of/dest

# Or if the current user ID is "fred"
# Or if the user ID for "server" is configured under "~/.ssh/config"
mirror.target = server:/path/of/dest

# Or if mirroring to a path accessible only by user ID "bob"
mirror.target = bob@localhost:/path/of/dest

# Or if the current user ID is "fred" and local host is "server"
mirror.target = /path/of/dest
mirror.prop

description: Sets or modifies a property.

modifier: See below.

value: The value of the property.

example:

mirror.prop{rsync} = cnysr

The following is a list of properties accepted by the mirror.prop declaration:

config-file.name
The context name to be included in the generated configuration file in the mirror destination.
config-file.steps
The steps to be included in the generated configuration file in the mirror destination.
no-config-file
If specified, do not generate a fcm-make.cfg in the mirror target.
ssh
The secure remote shell command to execute commands on a remote machine. If not specified, use the ssh setting of the FCM external configuration.
ssh.flags
The flags used by the remote shell command to execute commands on a remote machine. If not specified, use the ssh.flags setting of the FCM external configuration.
rsync
The rsync command. If not specified, use the rsync setting of the FCM external configuration.
rsync.flags
The options used by the rsync command. If not specified, use the rsync.flags setting of the FCM external configuration.

FCM Make Configuration: Build

All declarations are prefixed with build.*. Where appropriate, replace the leading build with the appropriate ID.

build.source

description: Specifies one or more source files and/or directories.

namespace: Optional. Specifies the namespace of the specified paths.

value: A list of space-delimited file system paths.

example:

build.source[foo] = $HOME/foo $DATADIR/foo
build.ns-excl / build.ns-incl

description: Specifies the name-spaces in the source tree to exclude/include. (A build.ns-incl takes precedence over a build.ns-excl declaration.)

value: A list of space-delimited items. Each item is a name-space to exclude/include.

example:

build.ns-excl = / # exclude everything
build.ns-incl = foo bar/baz # include items in these name-spaces
build.target

description: Selects targets to build according to their keys, categories and tasks.

modifier: key (default if no modifier specified), category or task

namespace: Not allowed if modifier is key. Optional if modifier is category or task. If specified, setting only applies to given name-spaces. Otherwise, setting applies to all name-spaces.

value: A list of space-delimited items (according to the modifier).

example:

build.target{category}[etc/namelists etc/configs] = etc
build.target{category}[src/hello src/greet src/world] = bin lib
build.target{task}[src/public] = archive install
build.target = egg.sh mince.py
build.target-rename

description: Rename targets.

value: A list of space-delimited items. Each item should be the (automatic) key of a target, followed by a colon and its preferred key.

example:

build.target-rename = hello.exe:hello
build.prop

description: Sets or modifies a property.

modifier: The name of one (or more) property. See below.

namespace: Optional. A list of space-delimited namespaces to which this setting applies. The namespaces can be target names, when used with target properties (dependency properties are regarded as source properties), or the hierarchical namespaces of source files. If not specified, the setting applies to the global/root namespace. N.B. Not all build properties accept a namespace. See below for detail.

value: The value of the property.

example:

build.prop{fc} = gfortran
build.prop{cc.flags,fc.flags} = -C -g
build.prop{fc.flags}[foo/bar] = -C -g -W
build.prop{fc.flags}[egg ham bacon] = -C -W
build.prop{fc.flag-define} = -D%s
build.prop{cc.defs,fc.defs}[gen] = LOWERCASE UNDERSCORE
build.prop{fc.libs}[myprog.exe] = netcdf grib

The following is a list of properties accepted by the build.prop declaration. The default value is an empty string unless given otherwise. Properties that do not accept a namespace are marked with an asterisk (*).

ar
The archive command. (default=ar)
ar.flags
If a list of values is specified, the system will not inherit sources with the name-spaces matching the specified values. If the value is a *, the system will not inherit any sources.
The options used by the archive command. (default=rs)
archive-ok-target-category *
If fcm make is invoked with the --archive option, sub-directories in categories containing intermediate build files will be put into TAR-GZIP files. E.g. with the default setting, include/ and o/ will become include.tar.gz and o.tar.gz respectively. (default=include o)
cc
The C compiler and linker. (default=gcc)
cc.defs
The C compiler will pre-define each word in this setting as a macro.
cc.flags
The options used by the C compiler at compile time.
cc.flags-ld
The options used by the C compiler at link time.
cc.flag-compile
The option used by the C compiler to suppress the linking stage. (default=-c)
cc.flag-define
The option used by the C compiler to define a macro. (default=-D%s)
cc.flag-include
The option used by the C compiler to specify an include search path. (default=-I%s)
cc.flag-lib
The option used by the C compiler at link time to specify a library. (default=-l%s)
cc.flag-lib-path
The option used by the C compiler at link time to specify a library search path. (default=-L%s)
cc.flag-omp
The option used by the C compiler to switch on OpenMP.
cc.flag-output
The option used by the C compiler to specify the output file name. (default=-o%s)
cc.include-paths
The C compiler will add each directory in this setting as an include search path.
cc.libs
The C linker will add each item in this setting as a link library.
cc.lib-paths
The C linker will add each directory in this setting as a library search path.
checksum-method
The checksum method to use to determine if the content of a file is changed or not. Either MD5 or one of the SHA algorithms supported by the Perl module Digest::SHA can be used. (default=md5)
cxx
The C++ compiler and linker. (default=g++)
cxx.defs
The C++ compiler will pre-define each word in this setting as a macro.
cxx.flags
The options used by the C++ compiler at compile time.
cxx.flags-ld
The options used by the C++ compiler at link time.
cxx.flag-compile
The option used by the C++ compiler to suppress the linking stage. (default=-c)
cxx.flag-define
The option used by the C++ compiler to define a macro. (default=-D%s)
cxx.flag-include
The option used by the C++ compiler to specify an include search path. (default=-I%s)
cxx.flag-lib
The option used by the C++ compiler at link time to specify a library. (default=-l%s)
cxx.flag-lib-path
The option used by the C++ compiler at link time to specify a library search path. (default=-L%s)
cxx.flag-omp
The option used by the C++ compiler to switch on OpenMP.
cxx.flag-output
The option used by the C++ compiler to specify the output file name. (default=-o%s)
cxx.include-paths
The C++ compiler will add each directory in this setting as an include search path.
cxx.libs
The C++ linker will add each item in this setting as a link library.
cxx.lib-paths
The C++ linker will add each directory in this setting as a library search path.
dep.bin
Specifies a list of manual dependencies on external executable commands.
dep.f.module
Specifies a list of manual Fortran module dependencies. Note: This modifier does not work if the name-space is specified using a target name.
dep.include
Specifies a list of manual include dependencies.
dep.o
Specifies a list of manual object dependencies.
dep.o.special
Specifies a list of manual object dependencies, which must appear on the command line of the linker, (e.g. an object containing a Fortran blockdata program unit).
fc
The Fortran compiler and linker. (default=gfortran)
fc.defs
The Fortran compiler will pre-define each word in this setting as a macro.
fc.flags
The options used by the Fortran compiler at compile time.
fc.flags-ld
The options used by the Fortran compiler at link time.
fc.flag-compile
The option used by the Fortran compiler to suppress the linking stage. (default=-c)
fc.flag-define
The option used by the Fortran compiler to define a macro. (default=-D%s)
fc.flag-include
The option used by the Fortran compiler to specify an include search path. (default=-I%s)
fc.flag-lib
The option used by the Fortran compiler at link time to specify a library. (default=-l%s)
fc.flag-lib-path
The option used by the Fortran compiler at link time to specify a library search path. (default=-L%s)
fc.flag-module
The option used by the Fortran compiler to specify a module search path.
fc.flag-omp
The option used by the Fortran compiler to switch on OpenMP. If specified, the build system will treat USE and INCLUDE statements that are protected by !$ sentinels as normal dependency statements.
fc.flag-output
The option used by the Fortran compiler to specify the output file name. (default=-o%s)
fc.include-paths
The Fortran compiler will add each directory in this setting as an include search path.
fc.libs
The Fortran linker will add each item in this setting as a link library.
fc.lib-paths
The Fortran linker will add each directory in this setting as a library search path.
file-ext.a *
Specifies the extension of an object archive file. (default=.a)
file-ext.bin *
Specifies the extension of a binary executable file. (default=.exe)
file-ext.c *
Specifies the extensions of a C source file. (default=.c .i .m .mi)
file-ext.cxx *
Specifies the extensions of a C++ source file. (default=.cc .cp .cxx .cpp .CPP .c++ .C .mm .M .mii)
file-ext.fortran *
Specifies the extensions of a Fortran source file. (default=.F .FOR .FTN .F90 .F95 .f .for .ftn .f90 .f95 .inc)
file-ext.f90-interface *
Specifies the extension of a Fortran interface file. (default=.interface)
file-ext.f90-mod *
Specifies the extension of a compiled Fortran module file. (default=.mod)
file-ext.h *
Specifies the extensions of a C/C++ header file. (default=.h)
file-ext.o *
Specifies the extension of a compiled object file. (default=.o)
file-ext.script *
Specifies the extensions of script files.
file-name-option.f90-mod *
Specifies other options for naming a compiled Fortran module file. Accepts case=upper or case=lower (default).
file-pat.script *
Specifies a regular expression for matching the name of script files.
ignore-missing-dep-ns *
Specifies a list of source name-spaces, in which targets can ignore missing dependencies.
keep-lib-o
Relevant when linking a binary executable and link-without-ar is not set to true. If true, create and keep the dependent object library as lib/libNAME.a, where NAME is the root name of the executable. In the absence of this setting, the behaviour is to create the dependent object library in a temporary directory, which is removed after the linker command is completed.
ld
The linker command. If not specified, use the compiler of the source file.
Relevant when linking a binary executable. If true, do not create the dependent object library when linking. Instead, locations of the dependent objects will be specified on the command line of the linker. In the absence of this setting, the behaviour is to create the dependent object library in a temporary directory, with the location of the object library specified using the relevant options of the linker.
no-dep.bin
Switches off a list of automatic dependencies on external executable. If the value is a *, switches off all automatic external executable dependencies.
no-dep.f.module
Switches off a list of automatic Fortran module dependencies. If the value is a *, switches off all automatic Fortran module dependencies. Note: This modifier does not work if the name-space is specified using a target name.
no-dep.include
Switches off a list of automatic include dependencies. If the value is a *, switches off all automatic include dependencies.
no-dep.o
Switches off a list of automatic object dependencies. If the value is a *, switches off all automatic object dependencies.
no-inherit-source *
If a list of values is specified, the system will not inherit sources with the name-spaces matching the specified values. If the value is a *, the system will not inherit any sources.
no-inherit-target-category *
If a list of values is specified, the system will not inherit a target in a category matching a specified value. (default=bin etc lib)
no-step-source *
If a list of make steps is specified, the system will not search for source files from the specified make steps.
ns-dep.o
Specifies a list of link-time object dependencies on all objects in the list of name-spaces in the value.

FCM Make Configuration: Preprocess

The preprocess system uses the same declarations as the build system (see FCM Make Configuration: Build), although their prefixes should be replaced with preprocess.* or the appropriate step ID. The following is a list of modifiers accepted by the preprocess.prop declaration. The default value of a property is an empty string unless given otherwise. Properties that do not accept a namespace are marked with an asterisk (*).

cpp
The command of the C/C++ pre-processor. (default=cpp)
cpp.defs
The C/C++ pre-processor will pre-define each word in this setting as a macro.
cpp.flags
The options used by the C/C++ pre-processor.
cpp.flag-define
The option used by the C/C++ pre-processor to define a macro. (default=-D%s)
cpp.flag-include
The option used by the C/C++ pre-processor to specify the include search path. (default=-I%s)
cpp.include-paths
The C/C++ preprocessor will add each directory in this setting as an include search path.
dep.include
Specifies a list of manual include dependencies.
file-ext.cpp *
Specifies the extensions of C/C++ source file. (default=.c .m .cc .cp .cxx .cpp .CPP .c++ .C .mm .M)
file-ext.fpp *
Specifies the extensions of Fortran source file requiring preprocessing. (default=.F .FOR .FTN .F90 .F95)
file-ext.h *
Specifies the extensions of a C/C++ header file. (default=.h)
fpp
The command of the Fortran pre-processor. (default=cpp)
fpp.defs
The Fortran pre-processor will pre-define each word in this setting as a macro.
fpp.flags
The options used by the Fortran pre-processor. (default=-P -traditional)
fpp.flag-define
The option used by the Fortran pre-processor to define a macro. (default=-D%s)
fpp.flag-include
The option used by the Fortran pre-processor to specify the include search path. (default=-I%s)
fpp.include-paths
The Fortran preprocessor will add each directory in this setting as an include search path.
no-dep.include
Switches off a list of automatic include dependencies. If the value is a *, it switches off all automatic include dependencies.
no-inherit-source *
Same as the build property of the same name.
no-inherit-target-category *
Same as the build property of the same name.
no-step-source *
Same as the build property of the same name.

Copyright © 2006-2021 British Crown (Met Office) & Contributors. Met Office. See Terms of Use.
This document is released under the British Open Government Licence.