Warning, /kdevelop/kdevelop/cmake/modules/KDevelopMacrosInternal.cmake is written in an unsupported language. File is not indexed.
0001 # 0002 # KDevelop Private Macros 0003 # 0004 # The following macros are defined here: 0005 # 0006 # add_compile_flag_if_supported(<flag> [CXX_ONLY]) 0007 # add_target_compile_flag_if_supported(<target> <INTERFACE|PUBLIC|PRIVATE> <flag>) 0008 # declare_qt_logging_category(<sourcevarname> 0009 # TYPE LIBRARY|PLUGIN|APP [IDENTIFIER <id>] [CATEGORY_BASENAME <name>] 0010 # [HEADER <filename>] [DESCRIPTION <desc>]) 0011 # install_qt_logging_categories(TYPE LIBRARY|APP_PLUGIN) 0012 # kdevelop_add_private_library(<target> SOURCES <source1> [<source2> [...]]) 0013 # 0014 0015 #============================================================================= 0016 # SPDX-FileCopyrightText: 2018, 2020 Friedrich W. H. Kossebau <kossebau@kde.org> 0017 # SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de> 0018 # 0019 # SPDX-License-Identifier: BSD-3-Clause 0020 #============================================================================= 0021 0022 include(CMakeParseArguments) 0023 0024 # helper method to ensure consistent cache var names 0025 function(_varname_for_compile_flag_check_result _varname _flag ) 0026 string(REGEX REPLACE "[-=]" "_" _varname ${_flag}) 0027 string(TOUPPER ${_varname} _varname) 0028 set(_varname "KDEV_HAVE${_varname}" PARENT_SCOPE) 0029 endfunction() 0030 0031 0032 # add_compile_flag_if_supported(<flag> [CXX_ONLY]) 0033 # Optional argument CXX_ONLY to set the flag only for C++ code. 0034 # 0035 # Example: 0036 # add_compile_flag_if_supported(-Wsuggest-override CXX_ONLY) 0037 function(add_compile_flag_if_supported _flag) 0038 _varname_for_compile_flag_check_result(_varname ${_flag}) 0039 check_cxx_compiler_flag("${_flag}" "${_varname}") 0040 0041 if (${${_varname}}) 0042 if("${ARGV1}" STREQUAL "CXX_ONLY") 0043 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}" PARENT_SCOPE) 0044 else() 0045 add_compile_options(${_flag}) 0046 endif() 0047 endif() 0048 endfunction() 0049 0050 0051 # add_target_compile_flag_if_supported(<target> <INTERFACE|PUBLIC|PRIVATE> <flag>) 0052 # 0053 # Example: 0054 # add_target_compile_flag_if_supported(kdevqtc-qmlsupport PRIVATE "-Wno-suggest-override") 0055 function(add_target_compile_flag_if_supported _target _scope _flag) 0056 _varname_for_compile_flag_check_result(_varname ${_flag}) 0057 check_cxx_compiler_flag("${_flag}" "${_varname}") 0058 0059 if (${${_varname}}) 0060 target_compile_options(${_target} ${_scope} "${_flag}") 0061 endif() 0062 endfunction() 0063 0064 0065 # helper method 0066 # _declare_qt_logging_category(<sourcevarname> 0067 # HEADER <filename> IDENTIFIER <id> CATEGORY_NAME <name> 0068 # EXPORT <target> DESCRIPTION <desc>) 0069 # 0070 # Example: 0071 # _declare_qt_logging_category(Foo_LIB_SRCS 0072 # HEADER debug.h 0073 # IDENTIFIER FOO 0074 # CATEGORY_NAME "bar.foo" 0075 # DESCRIPTION "The foo of bar" 0076 # EXPORT BarCategories 0077 # ) 0078 macro(_declare_qt_logging_category sources) 0079 set(options ) 0080 set(oneValueArgs HEADER IDENTIFIER CATEGORY_NAME EXPORT DESCRIPTION) 0081 set(multiValueArgs) 0082 0083 cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0084 0085 if(NOT DEFINED ARGS_HEADER) 0086 message(FATAL_ERROR "HEADER needs to be defined when calling _declare_qt_logging_category().") 0087 endif() 0088 if(NOT DEFINED ARGS_IDENTIFIER) 0089 message(FATAL_ERROR "IDENTIFIER needs to be defined when calling _declare_qt_logging_category().") 0090 endif() 0091 if(NOT DEFINED ARGS_CATEGORY_NAME) 0092 message(FATAL_ERROR "CATEGORY_NAME needs to be defined when calling _declare_qt_logging_category().") 0093 endif() 0094 if(NOT DEFINED ARGS_DESCRIPTION) 0095 message(FATAL_ERROR "DESCRIPTION needs to be defined when calling _declare_qt_logging_category().") 0096 endif() 0097 0098 ecm_qt_declare_logging_category(${sources} 0099 HEADER ${ARGS_HEADER} 0100 IDENTIFIER ${ARGS_IDENTIFIER} 0101 CATEGORY_NAME ${ARGS_CATEGORY_NAME} 0102 ) 0103 0104 if (NOT IS_ABSOLUTE "${ARGS_HEADER}") 0105 set(ARGS_HEADER "${CMAKE_CURRENT_BINARY_DIR}/${ARGS_HEADER}") 0106 endif() 0107 list(APPEND ${sources} "${ARGS_HEADER}") 0108 0109 set(_propertyprefix "KDEV_QT_LOGGING_CATEGORY_${ARGS_EXPORT}") 0110 set_property(GLOBAL APPEND PROPERTY "${_propertyprefix}_CATEGORIES" ${ARGS_CATEGORY_NAME}) 0111 set_property(GLOBAL PROPERTY "${_propertyprefix}_IDENTIFIER_${ARGS_CATEGORY_NAME}" "${ARGS_IDENTIFIER}") 0112 set_property(GLOBAL PROPERTY "${_propertyprefix}_DESCRIPTION_${ARGS_CATEGORY_NAME}" "${ARGS_DESCRIPTION}") 0113 endmacro() 0114 0115 0116 set(_platformlib_qt_logging_categories_export_name "KDevPlatformCategories") 0117 set(_app_plugin_qt_logging_categories_export_name "KDevelopCategories") 0118 0119 0120 # declare_qt_logging_category(<sourcevarname> 0121 # TYPE LIBRARY|PLUGIN|APP [IDENTIFIER <id>] [CATEGORY_BASENAME <name>] 0122 # [HEADER <filename>] [DESCRIPTION <desc>]) 0123 # 0124 # CATEGORY_BASENAME <name> is unused of TYPE APP. 0125 # IDENTIFIER <id> defaults to upper-case CATEGORY_BASENAME <name>. 0126 # HEADER <filename> defaults to "debug.h" 0127 # DESCRIPTION <desc> defaults to CATEGORY_BASENAME <name>. 0128 # 0129 # Example: 0130 # declare_qt_logging_category(Foo_LIB_SRCS 0131 # TYPE PLUGIN 0132 # HEADER foodebug.h 0133 # IDENTIFIER FOO 0134 # CATEGORY_BASENAME "foo" 0135 # ) 0136 macro(declare_qt_logging_category sources) 0137 set(options ) 0138 set(oneValueArgs HEADER IDENTIFIER CATEGORY_BASENAME DESCRIPTION TYPE) 0139 set(multiValueArgs) 0140 0141 cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0142 0143 if(NOT DEFINED ARGS_TYPE) 0144 message(FATAL_ERROR "TYPE needs to be defined when calling declare_qt_logging_category().") 0145 endif() 0146 if(NOT DEFINED ARGS_IDENTIFIER) 0147 if(ARGS_TYPE STREQUAL "LIBRARY" OR ARGS_TYPE STREQUAL "PLUGIN") 0148 string(TOUPPER ${ARGS_CATEGORY_BASENAME} ARGS_IDENTIFIER) 0149 else() 0150 message(FATAL_ERROR "IDENTIFIER needs to be defined when calling declare_qt_logging_category().") 0151 endif() 0152 endif() 0153 if(NOT DEFINED ARGS_CATEGORY_BASENAME) 0154 if(ARGS_TYPE STREQUAL "LIBRARY" OR ARGS_TYPE STREQUAL "PLUGIN") 0155 message(FATAL_ERROR "CATEGORY_BASENAME needs to be defined when calling declare_qt_logging_category() with TYPE of LIBRARY or PLUGIN.") 0156 endif() 0157 endif() 0158 if(NOT DEFINED ARGS_HEADER) 0159 set(ARGS_HEADER debug.h) 0160 endif() 0161 if(NOT DEFINED ARGS_DESCRIPTION) 0162 set(ARGS_DESCRIPTION ${ARGS_CATEGORY_BASENAME}) 0163 endif() 0164 0165 if(ARGS_TYPE STREQUAL "LIBRARY") 0166 _declare_qt_logging_category(${sources} 0167 HEADER ${ARGS_HEADER} 0168 IDENTIFIER ${ARGS_IDENTIFIER} 0169 CATEGORY_NAME "kdevplatform.${ARGS_CATEGORY_BASENAME}" 0170 DESCRIPTION "KDevPlatform lib: ${ARGS_DESCRIPTION}" 0171 EXPORT ${_platformlib_qt_logging_categories_export_name} 0172 ) 0173 elseif(ARGS_TYPE STREQUAL "PLUGIN") 0174 _declare_qt_logging_category(${sources} 0175 HEADER ${ARGS_HEADER} 0176 IDENTIFIER ${ARGS_IDENTIFIER} 0177 CATEGORY_NAME "kdevelop.plugins.${ARGS_CATEGORY_BASENAME}" 0178 DESCRIPTION "KDevelop plugin: ${ARGS_DESCRIPTION}" 0179 EXPORT ${_app_plugin_qt_logging_categories_export_name} 0180 ) 0181 elseif(ARGS_TYPE STREQUAL "APP") 0182 _declare_qt_logging_category(${sources} 0183 HEADER ${ARGS_HEADER} 0184 IDENTIFIER ${ARGS_IDENTIFIER} 0185 CATEGORY_NAME "kdevelop.app" 0186 DESCRIPTION "KDevelop app" 0187 EXPORT ${_app_plugin_qt_logging_categories_export_name} 0188 ) 0189 else() 0190 message(FATAL_ERROR "Unknown \"${ARGS_TYPE}\" with TYPE when calling declare_qt_logging_category().") 0191 endif() 0192 endmacro() 0193 0194 0195 # helper method 0196 # _install_qt_logging_categories(EXPORT <target> FILE <name> MACRONAME <macro>) 0197 # 0198 # Needs to be called after the last _declare_qt_logging_category call which uses the same EXPORT name. 0199 # 0200 # Example: 0201 # _install_qt_logging_categories( 0202 # EXPORT KDevPlatformCategories 0203 # FILE kdevplatform.categories 0204 # ) 0205 function(_install_qt_logging_categories) 0206 set(options ) 0207 set(oneValueArgs FILE EXPORT MACRONAME) 0208 set(multiValueArgs) 0209 0210 cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0211 0212 if(NOT DEFINED ARGS_FILE) 0213 message(FATAL_ERROR "FILE needs to be defined when calling _install_qt_logging_categories().") 0214 endif() 0215 0216 if(NOT DEFINED ARGS_EXPORT) 0217 message(FATAL_ERROR "EXPORT needs to be defined when calling _install_qt_logging_categories().") 0218 endif() 0219 0220 if(NOT DEFINED ARGS_MACRONAME) 0221 message(FATAL_ERROR "MACRONAME needs to be defined when calling _install_qt_logging_categories().") 0222 endif() 0223 0224 set(_propertyprefix "KDEV_QT_LOGGING_CATEGORY_${ARGS_EXPORT}") 0225 get_property(has_category GLOBAL PROPERTY "${_propertyprefix}_CATEGORIES" SET) 0226 0227 if (NOT has_category) 0228 message(FATAL_ERROR "${ARGS_EXPORT} is an unknown qt logging category export name.") 0229 endif() 0230 0231 get_property(_categories GLOBAL PROPERTY "${_propertyprefix}_CATEGORIES") 0232 list(SORT _categories) 0233 0234 set(_content 0235 "# KDebugSettings data file 0236 # This file was generated by ${ARGS_MACRONAME}(). DO NOT EDIT! 0237 0238 ") 0239 0240 foreach(_category IN LISTS _categories) 0241 get_property(_description GLOBAL PROPERTY "${_propertyprefix}_DESCRIPTION_${_category}") 0242 get_property(_identifier GLOBAL PROPERTY "${_propertyprefix}_IDENTIFIER_${_category}") 0243 0244 # Format: 0245 # logname<space>description(optional <space> DEFAULT_SEVERITY [DEFAULT_CATEGORY] as WARNING/DEBUG/INFO/CRITICAL) optional IDENTIFIER [...]) 0246 string(APPEND _content "${_category} ${_description} IDENTIFIER [${_identifier}]\n") 0247 endforeach() 0248 0249 if (NOT IS_ABSOLUTE ${ARGS_FILE}) 0250 set(ARGS_FILE "${CMAKE_CURRENT_BINARY_DIR}/${ARGS_FILE}") 0251 endif() 0252 file(GENERATE 0253 OUTPUT "${ARGS_FILE}" 0254 CONTENT "${_content}" 0255 ) 0256 0257 install( 0258 FILES "${ARGS_FILE}" 0259 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR} 0260 ) 0261 endfunction() 0262 0263 # install_qt_logging_categories(TYPE LIBRARY|APP_PLUGIN) 0264 # 0265 # Needs to be called after the last declare_qt_logging_category call for the same TYPE(s). 0266 function(install_qt_logging_categories) 0267 set(options ) 0268 set(oneValueArgs TYPE) 0269 set(multiValueArgs) 0270 0271 cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0272 0273 if(NOT DEFINED ARGS_TYPE) 0274 message(FATAL_ERROR "TYPE needs to be defined when calling install_qt_logging_categories().") 0275 endif() 0276 0277 if(ARGS_TYPE STREQUAL "LIBRARY") 0278 _install_qt_logging_categories( 0279 EXPORT ${_platformlib_qt_logging_categories_export_name} 0280 FILE kdevplatform.categories 0281 MACRONAME install_qt_logging_categories 0282 ) 0283 elseif(ARGS_TYPE STREQUAL "APP_PLUGIN") 0284 _install_qt_logging_categories( 0285 EXPORT ${_app_plugin_qt_logging_categories_export_name} 0286 FILE kdevelop.categories 0287 MACRONAME install_qt_logging_categories 0288 ) 0289 else() 0290 message(FATAL_ERROR "Unknown \"${ARGS_TYPE}\" with TYPE when calling declare_qt_logging_category().") 0291 endif() 0292 endfunction() 0293 0294 # kdevelop_add_private_library(<target> SOURCES <source1> [<source2> [...]]) 0295 function(kdevelop_add_private_library target) 0296 set(options) 0297 set(oneValueArgs) 0298 set(multiValueArgs SOURCES) 0299 0300 cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0301 0302 string(REPLACE "KDev" "" shortTargetName ${target}) 0303 if (${shortTargetName} STREQUAL ${target}) 0304 message(FATAL_ERROR "Target passed to kdevelop_add_private_library needs to start with \"KDev\", was \"${target}\"") 0305 endif() 0306 0307 string(TOLOWER ${shortTargetName} shortTargetNameToLower) 0308 0309 add_library(${target} SHARED ${ARGS_SOURCES}) 0310 add_library(KDev::${shortTargetName} ALIAS ${target}) 0311 0312 generate_export_header(${target} EXPORT_FILE_NAME ${shortTargetNameToLower}export.h) 0313 0314 target_include_directories(${target} 0315 INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>" # useful for the "something.export.h" includes 0316 ) 0317 set_target_properties(${target} PROPERTIES 0318 VERSION ${KDEV_PLUGIN_VERSION} 0319 SOVERSION ${KDEV_PLUGIN_VERSION} 0320 ) 0321 0322 install(TARGETS ${target} ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY NAMELINK_SKIP) 0323 endfunction()