Warning, /libraries/kdb/cmake/modules/KDbMacros.cmake is written in an unsupported language. File is not indexed.

0001 # Additional CMake macros
0002 #
0003 # Copyright (C) 2015-2018 Jarosław Staniek <staniek@kde.org>
0004 #
0005 # Redistribution and use is allowed according to the terms of the BSD license.
0006 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
0007 
0008 if(__kdb_macros)
0009   return()
0010 endif()
0011 set(__kdb_macros YES)
0012 
0013 include(GenerateExportHeader)
0014 include(GetGitRevisionDescription)
0015 include(KDbAddSimpleOption)
0016 
0017 string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
0018 string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
0019 string(COMPARE EQUAL "${CMAKE_CXX_COMPILER_ID}" "Clang" CMAKE_COMPILER_IS_CLANG)
0020 
0021 # x.81.z or larger means test release, so the stable major version is x+1
0022 if(PROJECT_VERSION_MINOR GREATER 80)
0023     set(PROJECT_UNSTABLE ON)
0024     math(EXPR PROJECT_STABLE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR} + 1")
0025     set(PROJECT_STABLE_VERSION_MINOR 0)
0026     set(PROJECT_STABLE_VERSION_PATCH 0)
0027 # x.y.81 or larger means test release, so the stable minor version is y+1
0028 elseif(PROJECT_VERSION_PATCH GREATER 80)
0029     set(PROJECT_STABLE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
0030     math(EXPR PROJECT_STABLE_VERSION_MINOR "${PROJECT_VERSION_MINOR} + 1")
0031     set(PROJECT_STABLE_VERSION_PATCH 0)
0032 else()
0033     set(PROJECT_STABLE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
0034     set(PROJECT_STABLE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
0035     set(PROJECT_STABLE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
0036 endif()
0037 
0038 # Fetches git revision and branch from the source dir of the current build if possible.
0039 # Sets ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING and ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING variables.
0040 # If git information is not available but ${CMAKE_SOURCE_DIR}/GIT_VERSION file exists,
0041 # it is parsed. This file can be created by scripts while preparing tarballs and is
0042 # supposed to contain two lines: hash and branch.
0043 macro(get_git_revision_and_branch)
0044   set(${PROJECT_NAME_UPPER}_GIT_SHA1_STRING "")
0045   set(${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING "")
0046   get_git_head_revision(GIT_REFSPEC ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING)
0047   get_git_branch(${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING)
0048   if(NOT ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING OR NOT ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING)
0049     if(EXISTS "${CMAKE_SOURCE_DIR}/GIT_VERSION")
0050       file(READ "${CMAKE_SOURCE_DIR}/GIT_VERSION" _ver)
0051       string(REGEX REPLACE "\n" ";" _ver "${_ver}")
0052       list(GET _ver 0 ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING)
0053       list(GET _ver 1 ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING)
0054     endif()
0055   endif()
0056   if(${PROJECT_NAME_UPPER}_GIT_SHA1_STRING OR ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING)
0057     string(SUBSTRING ${${PROJECT_NAME_UPPER}_GIT_SHA1_STRING} 0 7 ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING)
0058   else()
0059     set(${PROJECT_NAME_UPPER}_GIT_SHA1_STRING "")
0060     set(${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING "")
0061   endif()
0062 endmacro()
0063 
0064 # Adds ${PROJECT_NAME_UPPER}_UNFINISHED option. If it is ON, unfinished features
0065 # (useful for testing but may confuse end-user) are compiled-in.
0066 # This option is OFF by default.
0067 macro(add_unfinished_features_option)
0068   simple_option(${PROJECT_NAME_UPPER}_UNFINISHED
0069                 "Include unfinished features (useful for testing but may confuse end-user)" OFF)
0070 endmacro()
0071 
0072 # Sets detailed version information for library co-installability.
0073 # - adds PROJECT_STABLE_VERSION_MAJOR to the lib name
0074 # - sets VERSION to PROJECT_STABLE_VERSION_MAJOR.PROJECT_STABLE_VERSION_MINOR.PROJECT_STABLE_VERSION_PATCH
0075 # - sets SOVERSION to PROJECT_STABLE_VERSION_MAJOR
0076 #        (special case for 3.0 < PROJECT_STABLE_VERSION < 4.0: sets SOVERSION to PROJECT_STABLE_VERSION_MAJOR + 1
0077 #         to separate from incompatible version 3.0)
0078 # - sets ${_target_upper}_BASE_NAME variable to the final lib name
0079 # - sets ${_target_upper}_BASE_NAME_LOWER variable to the final lib name, lowercase
0080 # - sets ${_target_upper}_INCLUDE_INSTALL_DIR to include dir for library headers
0081 # - (where _target_upper is uppercase ${_target}
0082 macro(set_coinstallable_lib_version _target)
0083     set(_name ${_target}${PROJECT_STABLE_VERSION_MAJOR})
0084     set(_soversion ${PROJECT_STABLE_VERSION_MAJOR})
0085     if(${PROJECT_STABLE_VERSION_MAJOR} EQUAL 3)
0086         math(EXPR _soversion "${PROJECT_STABLE_VERSION_MAJOR} + 1")
0087         math(EXPR _version "${PROJECT_STABLE_VERSION_MAJOR} + 1")
0088     else()
0089         set(_soversion ${PROJECT_STABLE_VERSION_MAJOR})
0090     endif()
0091     set(_version "${_version}.${PROJECT_STABLE_VERSION_MINOR}.${PROJECT_STABLE_VERSION_PATCH}")
0092     set_target_properties(${_target}
0093         PROPERTIES VERSION ${_version}
0094                    SOVERSION ${_soversion}
0095                    EXPORT_NAME ${_target}
0096                    OUTPUT_NAME ${_name}
0097     )
0098     string(TOUPPER ${_target} _target_upper)
0099     string(TOUPPER ${_target_upper}_BASE_NAME _var)
0100     set(${_var} ${_name})
0101     string(TOLOWER ${_name} ${_var}_LOWER)
0102     set(${_target_upper}_INCLUDE_INSTALL_DIR ${INCLUDE_INSTALL_DIR}/${_name})
0103     unset(_soversion)
0104     unset(_version)
0105     unset(_target_upper)
0106     unset(_var)
0107 endmacro()