Warning, /libraries/kreport/cmake/modules/KReportMacros.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(__kreport_macros) 0009 return() 0010 endif() 0011 set(__kreport_macros YES) 0012 0013 include(KDbGenerateHeaders) # from KDb, adds support for generated headers to ECMGenerateHeaders 0014 include(KDbCreateSharedDataClasses) # from KDb 0015 include(GenerateExportHeader) 0016 include(GetGitRevisionDescription) 0017 include(KReportAddSimpleOption) 0018 0019 string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER) 0020 string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER) 0021 string(COMPARE EQUAL "${CMAKE_CXX_COMPILER_ID}" "Clang" CMAKE_COMPILER_IS_CLANG) 0022 0023 # Keep apps in the same bin dir so resources that are kept relative to this dir can be found 0024 # without installing. 0025 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 0026 0027 # x.81.z or larger means test release, so the stable major version is x+1 0028 if(PROJECT_VERSION_MINOR GREATER 80) 0029 set(PROJECT_UNSTABLE ON) 0030 math(EXPR PROJECT_STABLE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR} + 1") 0031 set(PROJECT_STABLE_VERSION_MINOR 0) 0032 set(PROJECT_STABLE_VERSION_PATCH 0) 0033 # x.y.81 or larger means test release, so the stable minor version is y+1 0034 elseif(PROJECT_VERSION_PATCH GREATER 80) 0035 set(PROJECT_STABLE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) 0036 math(EXPR PROJECT_STABLE_VERSION_MINOR "${PROJECT_VERSION_MINOR} + 1") 0037 set(PROJECT_STABLE_VERSION_PATCH 0) 0038 else() 0039 set(PROJECT_STABLE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) 0040 set(PROJECT_STABLE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) 0041 set(PROJECT_STABLE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) 0042 endif() 0043 0044 if(WIN32) 0045 set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR} 0046 RUNTIME DESTINATION ${BIN_INSTALL_DIR} 0047 LIBRARY ${INSTALL_TARGETS_DEFAULT_ARGS} 0048 ARCHIVE ${INSTALL_TARGETS_DEFAULT_ARGS} ) 0049 endif() 0050 0051 set(ICONS_INSTALL_DIR "${DATA_INSTALL_DIR}/${PROJECT_NAME_LOWER}${PROJECT_STABLE_VERSION_MAJOR}/icons") 0052 0053 # Fetches git revision and branch from the source dir of the current build if possible. 0054 # Sets ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING and ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING variables. 0055 # If git information is not available but ${CMAKE_SOURCE_DIR}/GIT_VERSION file exists, 0056 # it is parsed. This file can be created by scripts while preparing tarballs and is 0057 # supposed to contain two lines: hash and branch. 0058 macro(get_git_revision_and_branch) 0059 set(${PROJECT_NAME_UPPER}_GIT_SHA1_STRING "") 0060 set(${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING "") 0061 get_git_head_revision(GIT_REFSPEC ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING) 0062 get_git_branch(${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING) 0063 if(NOT ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING OR NOT ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING) 0064 if(EXISTS "${CMAKE_SOURCE_DIR}/GIT_VERSION") 0065 file(READ "${CMAKE_SOURCE_DIR}/GIT_VERSION" _ver) 0066 string(REGEX REPLACE "\n" ";" _ver "${_ver}") 0067 list(GET _ver 0 ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING) 0068 list(GET _ver 1 ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING) 0069 endif() 0070 endif() 0071 if(${PROJECT_NAME_UPPER}_GIT_SHA1_STRING OR ${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING) 0072 string(SUBSTRING ${${PROJECT_NAME_UPPER}_GIT_SHA1_STRING} 0 7 ${PROJECT_NAME_UPPER}_GIT_SHA1_STRING) 0073 else() 0074 set(${PROJECT_NAME_UPPER}_GIT_SHA1_STRING "") 0075 set(${PROJECT_NAME_UPPER}_GIT_BRANCH_STRING "") 0076 endif() 0077 endmacro() 0078 0079 # Adds ${PROJECT_NAME_UPPER}_UNFINISHED option. If it is ON, unfinished features 0080 # (useful for testing but may confuse end-user) are compiled-in. 0081 # This option is OFF by default. 0082 macro(add_unfinished_features_option) 0083 simple_option(${PROJECT_NAME_UPPER}_UNFINISHED 0084 "Include unfinished features (useful for testing but may confuse end-user)" OFF) 0085 endmacro() 0086 0087 # Sets detailed version information for library co-installability. 0088 # - adds PROJECT_STABLE_VERSION_MAJOR to the lib name 0089 # - sets VERSION to PROJECT_STABLE_VERSION_MAJOR.PROJECT_STABLE_VERSION_MINOR.PROJECT_STABLE_VERSION_PATCH 0090 # - sets SOVERSION to PROJECT_STABLE_VERSION_MAJOR 0091 # (special case for 3.0 < PROJECT_STABLE_VERSION < 4.0: sets SOVERSION to PROJECT_STABLE_VERSION_MAJOR + 1 0092 # to separate from incompatible version 3.0) 0093 # - sets ${_target_upper}_BASE_NAME variable to the final lib name 0094 # - sets ${_target_upper}_BASE_NAME_LOWER variable to the final lib name, lowercase 0095 # - sets ${_target_upper}_INCLUDE_INSTALL_DIR to include dir for library headers 0096 # - (where _target_upper is uppercase ${_target} 0097 macro(set_coinstallable_lib_version _target) 0098 set(_name ${_target}${PROJECT_STABLE_VERSION_MAJOR}) 0099 set(_soversion ${PROJECT_STABLE_VERSION_MAJOR}) 0100 if(${PROJECT_STABLE_VERSION_MAJOR} EQUAL 3) 0101 math(EXPR _soversion "${PROJECT_STABLE_VERSION_MAJOR} + 1") 0102 math(EXPR _version "${PROJECT_STABLE_VERSION_MAJOR} + 1") 0103 else() 0104 set(_soversion ${PROJECT_STABLE_VERSION_MAJOR}) 0105 endif() 0106 set(_version "${_version}.${PROJECT_STABLE_VERSION_MINOR}.${PROJECT_STABLE_VERSION_PATCH}") 0107 set_target_properties(${_target} 0108 PROPERTIES VERSION ${_version} 0109 SOVERSION ${_soversion} 0110 EXPORT_NAME ${_target} 0111 OUTPUT_NAME ${_name} 0112 ) 0113 string(TOUPPER ${_target} _target_upper) 0114 string(TOUPPER ${_target_upper}_BASE_NAME _var) 0115 set(${_var} ${_name}) 0116 string(TOLOWER ${_name} ${_var}_LOWER) 0117 set(${_target_upper}_INCLUDE_INSTALL_DIR ${INCLUDE_INSTALL_DIR}/${_name}) 0118 unset(_soversion) 0119 unset(_version) 0120 unset(_target_upper) 0121 unset(_var) 0122 endmacro() 0123 0124 # Adds custom target ${_target} that updates file ${_file} in the current working dir 0125 # using command ${_command} and add sources ${_sources} to the project files. 0126 # The command is run as a part of the project. 0127 function(add_update_file_target) 0128 set(options) 0129 set(oneValueArgs TARGET FILE) 0130 set(multiValueArgs COMMAND SOURCES) 0131 cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0132 add_custom_target(${ARG_TARGET} 0133 COMMAND ${ARG_COMMAND} 0134 SOURCES ${ARG_SOURCES} 0135 DEPENDS ${ARG_SOURCES} 0136 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 0137 COMMENT "Updating ${ARG_FILE}" 0138 VERBATIM 0139 ) 0140 endfunction() 0141 0142 # Checks if ${_package} has at most version ${_maximum_version}. 0143 macro(check_maximum_package_version _package _maximum_version) 0144 if(NOT ${_package}_FOUND OR NOT ${${_package}_VERSION} VERSION_LESS ${_maximum_version}) 0145 message(FATAL_ERROR "Maximum version of ${_package} is ${_maximum_version}, " 0146 "found ${${_package}_VERSION}") 0147 endif() 0148 endmacro()