These are the release notes for FCM 2-0. You can use this release of FCM freely under the terms of the FCM LICENSE, which you should receive with the distribution of this release.
FCM is maintained by the FCM team at the Met Office. Please feedback any bug reports or feature requests to us by e-mail.
fcm
make
: new commandfcm extract
and
fcm build
. See User Guide
> FCM Make for detail on how to use the new system. See also
fcm make: key differences compared with fcm
extract/build.fcm
branch-create
: new commandfcm branch --create
.fcm
branch-delete
: new commandfcm branch --delete
.fcm
branch-diff
: new commandfcm diff --branch
.fcm
branch-info
: new commandfcm branch --info
.fcm
branch-list
: new commandfcm branch --list
.fcm
browse
fcm trac
or fcm
www
.fcm
cfg-print
fcm cfg
.fcm
export-items
: new commandfcm_update_version_dir.pl
.Single command and framework of a configurable chain of steps, e.g. extract, mirror, preprocess, build, etc.
New configuration file format, with more powerful syntax and declarations. E.g.:
extract: automatically associates location keywords to source tree locations. E.g.:
fcm extract
configuration requires repeated declarations:
cfg::type ext repos::foo::base fcm:foo/trunk expsrc::foo::base repos::bar::base fcm:bar/trunk expsrc::bar::base
fcm make
configuration is much simpler:
steps = extract extract.ns = foo bar
extract: clearly distinguishes a base source tree from the diff source trees for each project. E.g.:
fcm extract
configuration requires arbitrary IDs for each
source tree, separate revision declarations, and assumes that the first
declared tree for a project is the base:
cfg::type ext repos::foo::base fcm:foo/trunk revision::foo::base 1234 expsrc::foo::base repos::foo::b1 fcm:foo/branches/dev/fred/r1234_b1 revision::foo::b1 2345 repos::foo::b2 fcm:foo/branches/dev/bob/r1234_b2 repos::foo::b3 fcm:foo/branches/dev/alice/r1234_b3
fcm make
configuration uses different declarations for the
location of the base source tree and the locations of the
diff source trees:
steps = extract extract.ns = foo extract.location[foo] = trunk@1234 extract.location{diff}[foo] = \ branches/dev/fred/r1234_b1@2345 \ branches/dev/bob/r1234_b2 \ branches/dev/alice/r1234_b3
extract: can easily filter parts of a project source tree, and/or change the root of the extract tree. E.g.:
fcm extract
configuration can cause confusion:
cfg::type ext repos::um::base fcm:um/trunk/src revision::foo::base vn7.7 expsrc::um::base repos::um::b1 fcm:um/branches/dev/fred/vn7.7_b1/src repos::um::b2 fcm:um/branches/dev/bob/vn7.7_b2/src repos::um::b3 fcm:um/branches/dev/alice/vn7.7_b3/src
fcm make
configuration is clearer and has more features:
steps = extract extract.ns = um extract.path-root[um] = src extract.path-excl[um] = configs scm extract.location[um] = trunk@vn7.7 extract.location{diff}[um] = \ branches/dev/fred/vn7.7_b1 \ branches/dev/bob/vn7.7_b2 \ branches/dev/alice/vn7.7_b3
extract: works with project source trees as opposed to individual source directories.
extract: can use multiple processes to retrieve source trees information and to export source tree files from the version control system.
mirror: is now an independent step.
build: can use multiple processes to analyse the source files for dependencies and other information.
build: uses an internal task manager and runner - more efficient logic possible:
build: has improved the logic for building Fortran program units.
build: has improved facilities for sources and targets selection.
fcm build
).build: automatically uses the Fortran compiler to link Fortran executables and the C compiler to link C executables.
build: has more diagnostics, e.g. on source dependencies, target build tree, etc.
preprocess: is now an independent step, but shares all the logic of the build system, e.g.:
fcm build
which changed, for example
.F90 extensions to .f90.Other notable changes:
fcm make
will always rebuild link targets and
re-install scripts in inherited builds. Therefore, to use the executables
from a build all you need to do is set your PATH environment
variable to point to $DEST/build/bin/ (where $DEST
is the destination of the make). Note that there is no
fcm_env.sh file produced by fcm make
.fcm extract
has the ability to fail if the declared
revision of a branch does not correspond to a changeset of that branch.
Furthermore, it can output the latest revision of a branch if the declared
revision is not the latest. fcm make
does not support
this.fcm cmp-ext-cfg
for FCM make configurations.fcm make
does not support defining a separate linker - it
always uses the compiler of the source file containing the main program
(which is the default with fcm build
).fcm make
does not recognise existing binaries as install
targets (unlike fcm build
). This feature is currently used to
allow the Met Office's Suite Control System (SCS) to "build" suites but is
no longer considered the best method. SCS will continue to use fcm
build
until such time as a better method is adopted or the system is
retired.fcm make
recognises data files as install targets in a
similar way to fcm build
. However, the default destination of
such targets is now the full name-space under the etc/
sub-directory.fcm make
supports the building of libraries but does not
generate the relevant exclude dependency configuration as is done by
fcm build
.fcm make
has no equivalent of the --archive
nor the --targets
options provided by fcm
build
.fcm build
recognises a file name without its extension as
a sub-package name. This is not true with fcm make
which only
recognises the full file name as a namespace.In addition to the differences noted above, fcm make
fixes
various subtle problems which can occur with fcm extract
and
fcm build
as a result of limitations in the internal design.
Overall, fcm make
is much better and we recommend that all users
migrate to it. fcm extract
and fcm build
will
continue to be maintained for legacy systems but will not be developed
further.
fcm build
Handle directory names with a dot extension.
Correct search path for inherited configuration file.
Always export OBJECTS in generated Makefile.
fcm cfg
Now an alias of fcm cfg-print
.
The default behaviour is to parse FCM 2 configuration files. To parse
FCM 1 configuration files, use the --fcm1
option.
The values in the output will no longer be lined up.
fcm extract
Fix double slashes in cache of extract with project root level files.
Correct search path for inherited configuration file.
Fix incremental mode behaviour of targets with deleted, overriding inherited status.
fcm keyword-print
fcm mkpatch
Don't use patch file if PDF file detected.
Handle property changes to directories.
Handle copies within new directories.
Handle replaced directories.
Fix handling of symbolic links.
Fix pattern match used when checking for excluded or copied paths.
Use --no-backup-if-mismatch
option to patch command to
ensure backup files not created if patch does not match exactly.
fcm
direct wrappers to svn
commandsThe core part of FCM is a set of Perl scripts and modules. At the Met Office, FCM runs on:
Text::ParseWords
(core Perl module) is upgraded to
version 3.22.
Met Office users do not use the code management commands and the extract system on this platform.
HTTP::Date
in libwww-perl is
required by fcm extract
and the extract system in fcm
make
. (libwww-perl 5.79 installed.)
XML::DOM in libxml-enno is required by the code management commands. (libxml-enno 1.02 installed.)
Tk is required by the
fcm gui
command. (Tk 804.027 installed.)
To use the code management commands (and relevant parts of the extract system) you need to have Subversion installed.
FCM requires Subversion 1.4.x or above. At the Met Office we are currently using Subversion 1.4.3.
Note: you can use the extract system to mirror code to a remote platform for building. Therefore it is only necessary to have Subversion installed on the platform where you do your code development. If you use other platforms purely for building and running then you do not need to have Subversion installed on these platforms.
The use of Trac is entirely optional (although highly recommended if you are using Subversion).
At the Met Office we are currently using Trac 0.11.7. Note:
--trac
and --wiki
options to the
fcm diff --branch
command allow you to view branch differences
using Trac. This requires Trac 0.10 or above.The fcm conflicts
command requires xxdiff. At the Met Office we are currently
using version 3.1. The fcm diff --graphical
command also uses
xxdiff by default although other graphical diff tools can also be used.
The fcm make
command uses gzip
. At the Met
Office we are currently using gzip 1.2.4 on AIX 5.3 and gzip 1.3.3 on RHEL
4.
The extract system uses diff3
, (which is part of GNU diffutils), to merge
together changes where the same file is modified by two different branches
(compared with the base branch). At the Met Office we are currently using
version 2.8.1.
The mirror system uses rsync to mirror source file to another machine. At the Met Office we are currently using version 2.6.3
The deprecated fcm build
requires GNU make. At the Met Office
we are currently using version 3.80.
FCM is intended to run on a Unix/Linux system. It is currently used at the Met Office on Linux (RHEL 4.8) and AIX 5.3.
FCM is distributed in the form of a compressed tar file. Un-pack the tar file into an appropriate location on your system. Add the bin/ directory into your PATH environment variable. Once you have done this you should now have full access to the FCM system, assuming that you have met the requirements described in the previous section.
You should find the following contents in the distribution:
fcm
command and other utilities.examples/svn-hooks/post-commit-background
).FCM::Admin::*
Perl library, which implements
the functionalities of the FCM admin utility commands.svnperms.py
if it,
and the associated svnperms.conf file, exist. This utility
checks whether the author of the current transaction has enough
permission to write to particular paths in the repository.post-commit-background
in the background.post-commit-background-custom
if it
exists.pre-revprop-change.pl
.trac-admin
command to resync
the revision
property cache stored in the corresponding Trac environment.fcm
.