.. _cppversion:

Version and build information
=============================

The Arbor library records version and configuration information in
two ways:

* The ``version.hpp`` header has preprocessor defines with the prefix ``ARB_``.

* The library presents this information in variables within the ``arb::`` namespace.

Version information
-------------------

The Arbor version string is in the format MAJOR.MINOR.PATCH,
or for development versions MAJOR.MINOR.PATCH-DEV, where DEV
is a string, usually literally "dev".

:c:macro:`ARB_VERSION`
    Full Arbor version string. Available as :cpp:var:`arb::version`.

:c:macro:`ARB_VERSION_MAJOR`
    Major version number. Available as :cpp:var:`arb::version_major`.

:c:macro:`ARB_VERSION_MINOR`
    Major version number. Available as :cpp:var:`arb::version_minor`.

:c:macro:`ARB_VERSION_PATCH`
    Major version number. Available as :cpp:var:`arb::version_patch`.

:c:macro:`ARB_VERSION_DEV`
    Development version suffix string. Only defined if Arbor is a development version.
    Available as :cpp:var:`arb::version_dev`, which will be an empty string
    if :c:macro:`ARB_VERSION_DEV` is not defined.

Source information
------------------

:c:macro:`ARB_SOURCE_ID`
   The source id contains the git commit time stamp, the commit hash,
   and if there are uncommitted changes in the source tree, a suffix "modified",
   e.g. ``"2020-01-02T03:04:05+06:00 b1946ac92492d2347c6235b4d2611184 modified"``.
   Available as :cpp:var:`arb::source_id`.

Build information
-----------------

Arbor can be built in the default 'Release' configuration, or in an unoptimized
'Debug' configuration that is useful for development. Additionally, it can be
built for a particular CPU architecture given by the ``ARB_ARCH`` CMake configuration
variable.

:c:macro:`ARB_BUILD_CONFIG`
    Configuration string, all uppercase. Will be ``"DEBUG"`` or ``"RELEASE"``.
    Available as :cpp:var:`arb::build_config`.

:c:macro:`ARB_ARCH`
    Value of the ``ARB_ARCH`` configuration variable, e.g. ``"native"``.
    Available as :cpp:var:`arb::arch`.

Features
--------

Configuration-time features are enabled in Arbor via CMake configuration variables
such as ``ARB_WITH_MPI`` and ``ARB_WITH_PYTHON``. Each enabled feature has
a corresponding preprocessor symbol in ``version.hpp`` of the form ``ARB_FEATURENAME_ENABLED``.
Examples include :c:macro:`ARB_MPI_ENABLED`, :c:macro:`ARB_ASSERT_ENABLED`.

Full build information
----------------------

A single string containing all the identification information for an Arbor build
is available in the macro :c:macro:`ARB_FULL_BUILD_ID` and in the variable
:cpp:var:`arb::full_build_id`. This string contains the source id, the full version,
the build configuration, the target architecture, and a list of enabled features.

