version ------- Generate, parse and modify versions purely with CMake. Supports Semantic Versioning 2.0.0, 1.0.0 and other version formats. Synopsis ^^^^^^^^ .. parsed-literal:: version(`PARSE`_ [REQUIRE [PATCH|TWEAK][;...]] ) version(`GENERATE`_ [COMPRESS] [MAJOR ] [MINOR ] [PATCH ] [TWEAK ] [PRERELEASE ] [BUILD ] [REQUIRE [PATCH|TWEAK][;...]]) version(`MODIFY`_ [COMPRESS] [MAJOR ] [MINOR ] [TWEAK ] [PRERELEASE ] [BUILD ] [REQUIRE [PATCH|TWEAK][;...]]) version(`COMPARE`_ ) The following version constructs are currently supported: .. code-block:: "." ["." ["." ]] [["-"] ["." [...]]] ["+" ["." [...]]] Parsing ^^^^^^^ .. _PARSE: .. code-block:: cmake version(PARSE [REQUIRE [PATCH|TWEAK][;...]] ) Attempts to parse the version in ```` and stores the individual compoents into ``_``. If a component is not present in the given version, it will be set to a false constant. If an error occurred, ``_ERROR`` will contain the error message otherwise it will be a false constant. The ``PRERELEASE`` and ``BUILD`` components support the dot-separation specifier and will be turned into a list if they are encountered. The optional ``REQUIRE`` allows forcing the components ``PATCH`` and ``TWEAK`` to always be defined. It is necessary to include a ``;`` for the ``REQUIRE`` parameter, even if there is only one required part. Generating ^^^^^^^^^^ .. _GENERATE: .. code-block:: cmake version(GENERATE [COMPRESS] [MAJOR ] [MINOR ] [PATCH ] [TWEAK ] [PRERELEASE ] [BUILD ] [REQUIRE [PATCH|TWEAK][;...]]) Generates a version from the components provided and stores the result in ````. The components ```` and ```` will default to ``0`` if not provided. If an error occurred, ``_ERROR`` will contain the error message otherwise it will be a false constant. The ``PRERELEASE`` and ``BUILD`` components support the dot-separation specifier and will be converted from a list if encountered. The optional ``REQUIRE`` allows forcing the components ``PATCH`` and ``TWEAK`` to always be defined. It is necessary to include a ``;`` for the ``REQUIRE`` parameter, even if there is only one required part. Modifying ^^^^^^^^^ .. _MODIFY: .. code-block:: cmake version(MODIFY [COMPRESS] [MAJOR ] [MINOR ] [TWEAK ] [PRERELEASE ] [BUILD ] [REQUIRE [PATCH|TWEAK][;...]]) Modifies the version provided in ```` with the components provided. The components ````, ````, ```` and ```` may have a prefix of ``+`` or ``-`` to add and subtract the value, or no prefix to replace. The result of this operation will be stored as a string in ````. If a component did not exist in the original, it will be added to the version as a replace operation. If an error occurred, ``_ERROR`` will contain the error message otherwise it will be a false constant. The optional ``REQUIRE`` allows forcing the components ``PATCH`` and ``TWEAK`` to always be defined. It is necessary to include a ``;`` for the ``REQUIRE`` parameter, even if there is only one required part. Comparing ^^^^^^^^^ .. _COMPARE: .. code-block:: cmake version(COMPARE ) Compares the version ```` against ```` and stores the result in ````. The provided version will be evaluated in the order MAJOR, MINOR, PATCH, TWEAK, PRERELEASE, and then BUILD. The following results should be expected: - If a component is only in ````, ```` will contain the componenent name prefixed by ``+``. - If a component is only in ````, ```` will contain the componenent name prefixed by ``-``. - If a component is numerical and the value is larger in ````, ```` will contain the componenent name prefixed by ``>``. - If a component is numerical and the value is larger in ````, ```` will contain the componenent name prefixed by ``<``. - If a component is alphanumerical and the value is different in either, ```` will contain the component name with no prefix. - If an error occurred, ``_ERROR`` will contain the error message otherwise it will be a false constant, and ```` will be a false constant. - In all other cases, ```` will be a false constant. There is no special handling for dot-separated ``PRERELEASE`` and ``BUILD`` component. They will be treated as if they were a string, as special handling for these is up to the application.