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()