Warning, /frameworks/extra-cmake-modules/modules/ECMSetupVersion.cmake is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2014 Alex Merry <alex.merry@kde.org> 0002 # SPDX-FileCopyrightText: 2012 Alexander Neundorf <neundorf@kde.org> 0003 # 0004 # SPDX-License-Identifier: BSD-3-Clause 0005 0006 #[=======================================================================[.rst: 0007 ECMSetupVersion 0008 --------------- 0009 0010 Handle library version information. 0011 0012 :: 0013 0014 ecm_setup_version(<version> 0015 VARIABLE_PREFIX <prefix> 0016 [SOVERSION <soversion>] 0017 [VERSION_HEADER <filename>] 0018 [PACKAGE_VERSION_FILE <filename> [COMPATIBILITY <compat>]] ) 0019 0020 This parses a version string and sets up a standard set of version variables. 0021 It can optionally also create a C version header file and a CMake package 0022 version file to install along with the library. 0023 0024 If the ``<version>`` argument is of the form ``<major>.<minor>.<patch>`` 0025 (or ``<major>.<minor>.<patch>.<tweak>``), The following CMake variables are 0026 set:: 0027 0028 <prefix>_VERSION_MAJOR - <major> 0029 <prefix>_VERSION_MINOR - <minor> 0030 <prefix>_VERSION_PATCH - <patch> 0031 <prefix>_VERSION - <version> 0032 <prefix>_SOVERSION - <soversion>, or <major> if SOVERSION was not given 0033 0034 For backward-compatibility also this variable is set (only if the minimum required 0035 version of ECM is < 5.83):: 0036 0037 <prefix>_VERSION_STRING - <version> (use <prefix>_VERSION instead) 0038 0039 If CMake policy CMP0048 is not ``NEW``, the following CMake variables will also 0040 be set:: 0041 0042 PROJECT_VERSION_MAJOR - <major> 0043 PROJECT_VERSION_MINOR - <minor> 0044 PROJECT_VERSION_PATCH - <patch> 0045 PROJECT_VERSION - <version> 0046 0047 For backward-compatibility, if CMake policy CMP0048 is not ``NEW``, also this variable is set 0048 (only if the minimum required version of ECM is < 5.83):: 0049 0050 PROJECT_VERSION_STRING - <version> (use PROJECT_VERSION instead) 0051 0052 If the ``VERSION_HEADER`` option is used, a simple C header is generated with the 0053 given filename. If filename is a relative path, it is interpreted as relative 0054 to ``CMAKE_CURRENT_BINARY_DIR``. The generated header contains the following 0055 macros:: 0056 0057 <prefix>_VERSION_MAJOR - <major> as an integer 0058 <prefix>_VERSION_MINOR - <minor> as an integer 0059 <prefix>_VERSION_PATCH - <patch> as an integer 0060 <prefix>_VERSION_STRING - <version> as a C string 0061 <prefix>_VERSION - the version as an integer 0062 0063 ``<prefix>_VERSION`` has ``<patch>`` in the bottom 8 bits, ``<minor>`` in the 0064 next 8 bits and ``<major>`` in the remaining bits. Note that ``<patch>`` and 0065 ``<minor>`` must be less than 256. 0066 0067 If the ``PACKAGE_VERSION_FILE`` option is used, a simple CMake package version 0068 file is created using the ``write_basic_package_version_file()`` macro provided by 0069 CMake. It should be installed in the same location as the Config.cmake file of 0070 the library so that it can be found by ``find_package()``. If the filename is a 0071 relative path, it is interpreted as relative to ``CMAKE_CURRENT_BINARY_DIR``. The 0072 optional ``COMPATIBILITY`` option is forwarded to 0073 ``write_basic_package_version_file()``, and defaults to ``AnyNewerVersion``. 0074 0075 If CMake policy CMP0048 is ``NEW``, an alternative form of the command is 0076 available:: 0077 0078 ecm_setup_version(PROJECT 0079 [VARIABLE_PREFIX <prefix>] 0080 [SOVERSION <soversion>] 0081 [VERSION_HEADER <filename>] 0082 [PACKAGE_VERSION_FILE <filename>] ) 0083 0084 This will use the version information set by the ``project()`` command. 0085 ``VARIABLE_PREFIX`` defaults to the project name. Note that ``PROJECT`` must be the 0086 first argument. In all other respects, it behaves like the other form of the 0087 command. 0088 0089 Since pre-1.0.0. 0090 0091 ``COMPATIBILITY`` option available since 1.6.0. 0092 #]=======================================================================] 0093 0094 include(CMakePackageConfigHelpers) 0095 0096 # save the location of the header template while CMAKE_CURRENT_LIST_DIR 0097 # has the value we want 0098 set(_ECM_SETUP_VERSION_HEADER_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/ECMVersionHeader.h.in") 0099 0100 function(ecm_setup_version _version) 0101 set(options ) 0102 set(oneValueArgs VARIABLE_PREFIX SOVERSION VERSION_HEADER PACKAGE_VERSION_FILE COMPATIBILITY) 0103 set(multiValueArgs ) 0104 0105 cmake_parse_arguments(ESV "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0106 0107 if(ESV_UNPARSED_ARGUMENTS) 0108 message(FATAL_ERROR "Unknown keywords given to ECM_SETUP_VERSION(): \"${ESV_UNPARSED_ARGUMENTS}\"") 0109 endif() 0110 0111 set(project_manages_version FALSE) 0112 set(use_project_version FALSE) 0113 cmake_policy(GET CMP0048 project_version_policy) 0114 if(project_version_policy STREQUAL "NEW") 0115 set(project_manages_version TRUE) 0116 if(_version STREQUAL "PROJECT") 0117 set(use_project_version TRUE) 0118 endif() 0119 elseif(_version STREQUAL "PROJECT") 0120 message(FATAL_ERROR "ecm_setup_version given PROJECT argument, but CMP0048 is not NEW") 0121 endif() 0122 0123 set(should_set_prefixed_vars TRUE) 0124 if(NOT ESV_VARIABLE_PREFIX) 0125 if(use_project_version) 0126 set(ESV_VARIABLE_PREFIX "${PROJECT_NAME}") 0127 set(should_set_prefixed_vars FALSE) 0128 else() 0129 message(FATAL_ERROR "Required argument PREFIX missing in ECM_SETUP_VERSION() call") 0130 endif() 0131 endif() 0132 0133 if(use_project_version) 0134 set(_version "${PROJECT_VERSION}") 0135 # drop leading 0 from values to avoid bogus octal values in c/C++ e.g. with 08 or 09 0136 string(REGEX REPLACE "0*([0-9]+)" "\\1" _major "${PROJECT_VERSION_MAJOR}") 0137 string(REGEX REPLACE "0*([0-9]+)" "\\1" _minor "${PROJECT_VERSION_MINOR}") 0138 string(REGEX REPLACE "0*([0-9]+)" "\\1" _patch "${PROJECT_VERSION_PATCH}") 0139 else() 0140 string(REGEX REPLACE "^0*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" _major "${_version}") 0141 string(REGEX REPLACE "^[0-9]+\\.0*([0-9]+)\\.[0-9]+.*" "\\1" _minor "${_version}") 0142 string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.0*([0-9]+).*" "\\1" _patch "${_version}") 0143 endif() 0144 0145 if(NOT DEFINED ESV_SOVERSION) # use DEFINED, so "0" as valid SO version is not evaluated to FALSE 0146 set(ESV_SOVERSION ${_major}) 0147 endif() 0148 0149 if(ECM_GLOBAL_FIND_VERSION VERSION_LESS 5.83.0) 0150 set(_set_backward_compat_version_string_vars TRUE) 0151 else() 0152 set(_set_backward_compat_version_string_vars FALSE) 0153 endif() 0154 0155 if(should_set_prefixed_vars) 0156 set(${ESV_VARIABLE_PREFIX}_VERSION "${_version}") 0157 set(${ESV_VARIABLE_PREFIX}_VERSION_MAJOR ${_major}) 0158 set(${ESV_VARIABLE_PREFIX}_VERSION_MINOR ${_minor}) 0159 set(${ESV_VARIABLE_PREFIX}_VERSION_PATCH ${_patch}) 0160 endif() 0161 0162 set(${ESV_VARIABLE_PREFIX}_SOVERSION ${ESV_SOVERSION}) 0163 0164 if(NOT project_manages_version) 0165 set(PROJECT_VERSION "${_version}") 0166 set(PROJECT_VERSION_MAJOR "${_major}") 0167 set(PROJECT_VERSION_MINOR "${_minor}") 0168 set(PROJECT_VERSION_PATCH "${_patch}") 0169 endif() 0170 0171 if(_set_backward_compat_version_string_vars) 0172 set(PROJECT_VERSION_STRING "${PROJECT_VERSION}") 0173 set(${ESV_VARIABLE_PREFIX}_VERSION_STRING "${${ESV_VARIABLE_PREFIX}_VERSION}") 0174 endif() 0175 0176 if(ESV_VERSION_HEADER) 0177 set(HEADER_PREFIX "${ESV_VARIABLE_PREFIX}") 0178 set(HEADER_VERSION "${_version}") 0179 set(HEADER_VERSION_MAJOR "${_major}") 0180 set(HEADER_VERSION_MINOR "${_minor}") 0181 set(HEADER_VERSION_PATCH "${_patch}") 0182 configure_file("${_ECM_SETUP_VERSION_HEADER_TEMPLATE}" "${ESV_VERSION_HEADER}") 0183 endif() 0184 0185 if(ESV_PACKAGE_VERSION_FILE) 0186 if(NOT ESV_COMPATIBILITY) 0187 set(ESV_COMPATIBILITY AnyNewerVersion) 0188 endif() 0189 write_basic_package_version_file("${ESV_PACKAGE_VERSION_FILE}" VERSION ${_version} COMPATIBILITY ${ESV_COMPATIBILITY}) 0190 endif() 0191 0192 if(should_set_prefixed_vars) 0193 set(${ESV_VARIABLE_PREFIX}_VERSION_MAJOR "${${ESV_VARIABLE_PREFIX}_VERSION_MAJOR}" PARENT_SCOPE) 0194 set(${ESV_VARIABLE_PREFIX}_VERSION_MINOR "${${ESV_VARIABLE_PREFIX}_VERSION_MINOR}" PARENT_SCOPE) 0195 set(${ESV_VARIABLE_PREFIX}_VERSION_PATCH "${${ESV_VARIABLE_PREFIX}_VERSION_PATCH}" PARENT_SCOPE) 0196 set(${ESV_VARIABLE_PREFIX}_VERSION "${${ESV_VARIABLE_PREFIX}_VERSION}" PARENT_SCOPE) 0197 endif() 0198 0199 # always set the soversion 0200 set(${ESV_VARIABLE_PREFIX}_SOVERSION "${${ESV_VARIABLE_PREFIX}_SOVERSION}" PARENT_SCOPE) 0201 0202 if(NOT project_manages_version) 0203 set(PROJECT_VERSION "${PROJECT_VERSION}" PARENT_SCOPE) 0204 set(PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" PARENT_SCOPE) 0205 set(PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR}" PARENT_SCOPE) 0206 set(PROJECT_VERSION_PATCH "${PROJECT_VERSION_PATCH}" PARENT_SCOPE) 0207 endif() 0208 0209 if(_set_backward_compat_version_string_vars) 0210 set(PROJECT_VERSION_STRING "${PROJECT_VERSION_STRING}" PARENT_SCOPE) 0211 set(${ESV_VARIABLE_PREFIX}_VERSION_STRING "${${ESV_VARIABLE_PREFIX}_VERSION}" PARENT_SCOPE) 0212 endif() 0213 endfunction()