The majority of FCM functionalities are provided by a set of Perl modules. Old modules developed prior to release 2-0 reside in the FCM1::* name-space. Modules developed thereafter reside in the FCM::* name-space. These are sub-divided into the following name-spaces:

FCM::Class

Provides an internal object class framework.

The majority of the classes in the FCM::* name-space are sub-classes of either FCM::Class::CODE or FCM::Class::HASH. The former creates classes that are blessed CODE references, and is intended for configurable functional (i.e. mostly stateless) objects. The latter creates classes that are blessed HASH references, and is intended for data objects.

Note: In theory, we could use the standard module Class::Struct or the modern MOOSE framework. The problem is that the former is not powerful enough to give us what we need, and the latter is not a standard module and is too heavy weight for our intends and purposes. Instead, the developer decides that it is easier to go for a light weight and in house solution.

FCM::CLI

Provides the logic and configuration of the command line interface (CLI).

It is made up of the following components:

FCM::CLI
Logic to provide help and invoke functions of FCM::System.
FCM::CLI::Exception
CLI exception.
FCM::CLI::Parser
CLI option parser and configuration.
fcm-*.pod
Help files for the CLI commands.
FCM::Context::*

Provides the data structures for storing the run time contexts.

The objects of these classes do very little, but they provide the data structures that define the states of the program at run time.

FCM::Exception

Provides the base class for exceptions.

FCM::System

Provides a façade to the functionalities of the FCM system.

The actual implementation is delegated to the following:

FCM::System::CM
The code management system. Currently a thin adapter to FCM1::Cm.
FCM::System::Misc
Miscellaneous functions, e.g. browse, cfg-print, keyword-print.
FCM::System::Old
Thin adapter to the old extract and build systems.
FCM::System::Make
The logic of the FCM make system.
FCM::System::Make::Build
FCM make: build system logic.
FCM::System::Make::Build::*
FCM make: build system components: File type and task specific logic.
FCM::System::Make::Extract
FCM make: extract system logic.
FCM::System::Make::Mirror
FCM make: mirror system logic.
FCM::System::Make::Preprocess
FCM make: preprocess system logic, actually a configuration of FCM::System::Make::Build.
FCM::System::Make::Share::*
Shared logic between all subsystems in FCM::System::Make::*.
FCM::Util

Provides supporting utilities.

Functionalities include:

  • abstract utilities for SVN URLs and file system paths.
  • configuration file reader.
  • event handler.
  • file utilities.
  • message report.
  • name space utilities.
  • shell invocation.
  • multi-process task runner.
  • timer.

The logic of the more complex utilities are delegated to modules in the FCM::Util::* name space.

Note: The majority of modules in the old FCM1::* name space are considered deprecated, with the exception of FCM1::Cm and those providing support functionalities for it. The functionalities of these modules will eventually be absorbed into the FCM::System::CM framework.


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