# FCM: User Guide: System Overview

The FCM system is designed to simplify the task of managing and building source code. It consists of the following components:

## Code Management

FCM uses Subversion for version control. For a summary of its main features please refer to the Version Control with Subversion book. Subversion is a generalised tool which can be used in lots of different ways. This makes some day-to-day tasks more complex than they need be. FCM defines a simplified process and appropriate naming conventions. It then adds a layer on top of Subversion to provide a natural interface which is specifically tailored to this process. Where appropriate it simply makes use of the command line tools provided by Subversion. However, in other cases it provides significant additional functionality, e.g.:

- By making some assumptions about the repository layout (i.e. by imposing a standard working practice) FCM simplifies the task of creating branches and enforces a standard branch naming convention.
- Having defined working practices and standard log messages allows FCM to greatly simplify the process of merging changes between branches.
- FCM makes use of xxdiff (a graphical diff and merge tool) to allow users to easily examine changes they have made and to simplify the process of resolving any conflicts which result from a merge.

FCM uses Trac, a powerful web based tool, to manage software projects. Trac has the following features:

- A flexible issue tracker which can be used to keep track of bugs, feature requests, etc. Each issue (known as a ticket within Trac) can be given a priority and assigned to a particular person. Changes made to your Subversion repository can easily be traced to the relevant ticket. Where appropriate, tickets can be used to record information about who has reviewed each change.
- A roadmap feature which helps you to plan and manage project releases. Each ticket can be associated with a particular milestone. Trac can then easily show you what features or fixes went into a particular release or what work remains before a particular milestone is reached.
- A wiki which can be used for project documentation.
- A browser for viewing your Subversion repository which allows you to browse the project tree / files and examine revision logs and changesets.
- A timeline view which summarises all the activity on a project (changes to the tickets, wiki pages or the Subversion repository).

## Build and Extract

FCM features a powerful build system, mainly aimed at building modern Fortran software applications. It has the following features:

- Parallel build.
- Efficient incremental build. Changes to the checksums of source files and/or the build configuration (e.g. changes to the compiler flags) trigger the appropriate re-compilation.
- Inheritance of items from an existing build.
- Build dependency analysis.
- Automatic generation of include files to contain the calling interfaces of standalone functions and subroutinues in Fortran source files.
- Extract of source files from multiple repositories and working copies.
- Extract and merge of source files from different branches of development.
- Minimal configuration.

## Illustration

The diagram below illustrates how these components fit together.