From 2ce35e24ba218ed5e79b2d70f4589e408e01db5c Mon Sep 17 00:00:00 2001 From: Alexander Lohnau Date: Sun, 9 Jan 2022 20:22:30 +0100 Subject: Rename KDEDeprecationSettings to ECMDeprecationSettings Semantically this is an ECM module, because it can be used to manage deprecated Qt API and from any project which use ecm_generate_export_headers --- docs/kde-module/KDEDeprecationSettings.rst | 1 - docs/module/ECMDeprecationSettings.rst | 1 + kde-modules/KDEDeprecationSettings.cmake | 128 ----------------------------- modules/ECMDeprecationSettings.cmake | 128 +++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 129 deletions(-) delete mode 100644 docs/kde-module/KDEDeprecationSettings.rst create mode 100644 docs/module/ECMDeprecationSettings.rst delete mode 100644 kde-modules/KDEDeprecationSettings.cmake create mode 100644 modules/ECMDeprecationSettings.cmake diff --git a/docs/kde-module/KDEDeprecationSettings.rst b/docs/kde-module/KDEDeprecationSettings.rst deleted file mode 100644 index 54638d61..00000000 --- a/docs/kde-module/KDEDeprecationSettings.rst +++ /dev/null @@ -1 +0,0 @@ -.. ecm-module:: ../../kde-modules/KDEDeprecationSettings.cmake diff --git a/docs/module/ECMDeprecationSettings.rst b/docs/module/ECMDeprecationSettings.rst new file mode 100644 index 00000000..62a1d60c --- /dev/null +++ b/docs/module/ECMDeprecationSettings.rst @@ -0,0 +1 @@ +.. ecm-module:: ../../modules/ECMDeprecationSettings.cmake diff --git a/kde-modules/KDEDeprecationSettings.cmake b/kde-modules/KDEDeprecationSettings.cmake deleted file mode 100644 index 87591253..00000000 --- a/kde-modules/KDEDeprecationSettings.cmake +++ /dev/null @@ -1,128 +0,0 @@ -# SPDX-FileCopyrightText: 2021 Alexander Lohnau -# -# SPDX-License-Identifier: BSD-3-Clause - -#[=======================================================================[.rst: -KDEDeprecationSettings ------------------------ - -This module provides the ``ecm_set_disabled_deprecation_versions`` function setting the excluding -deprecated API for QT and KF projects. - -This method expects pairs of the identifier and deprecation version. -For the identifier "QT" this functions adds the definition "QT_DISABLE_DEPRECATED_BEFORE" with the given version in a hexadecimal format. -Otherwise the name for the definition is generated using `${IDENTIFIER}_DISABLE_DEPRECATED_BEFORE_AND_AT`, -following the naming of the generated code in :kde-module:`ECMGenerateExportHeaders`. -The version for the definition can be overwritten, by passing definition name and the deprecation version -as a CMake defintion. This allows one to exclude deprecations without having to edit the CMakeLists.txt file. - -This module provides the following function: - -:: - - ecm_set_disabled_deprecation_versions( - [SHOW_DEPRECATIONS] - [ ] - [ ] - ) -``SHOW_DEPRECATIONS`` if this option is used, deprecation warnings for the current major version are emitted. - - -Example usage: - -.. code-block:: cmake - - set(QT_MIN_VERSION "5.15.0") - set(KF5_MIN_VERSION "5.90") - - ecm_set_disabled_deprecation_versions(SHOW_DEPRECATIONS - QT ${QT_MIN_VERSION} - KF ${KF5_MIN_VERSION} - KCOREADDONS 5.89.0 # In case we depend on deprecated KCoreAddons API - ) - - - -Since 5.91 -#]=======================================================================] - -function (ecm_set_disabled_deprecation_versions) - include(CMakeParseArguments) - cmake_parse_arguments(ARGS "SHOW_DEPRECATIONS" "" "" ${ARGN}) - if (ARGS_DEPRECATION_WARNINGS) - if (NOT "${ARGS_DEPRECATION_WARNINGS}" MATCHES "CURRENT_VERSION|MAJOR_VERSION") - message(FATAL_ERROR "Unknown argument given for DEPRECATION_WARNINGS parameter, expected CURRENT_VERSION or MAJOR_VERSION") - endif() - endif() - list(LENGTH ARGS_UNPARSED_ARGUMENTS PAIR_COUNT) - math(EXPR is_even_number "${PAIR_COUNT} % 2") - if (NOT is_even_number EQUAL 0) - message(FATAL_ERROR "Expected number of argumments an even number of identifiers and version") - endif() - math(EXPR number_pairs "(${PAIR_COUNT} / 2) - 1") - foreach (it RANGE ${number_pairs}) - # get values - math(EXPR current_index "${it} * 2") - list(GET ARGS_UNPARSED_ARGUMENTS ${current_index} DEPRECATION_NAME) - math(EXPR next_index "(${it} *2) + 1") - list(GET ARGS_UNPARSED_ARGUMENTS ${next_index} DEPRECATION_VERSION) - - # get the string identifier for the target definition - string(COMPARE EQUAL ${DEPRECATION_NAME} "QT" IS_QT_DEPRECATION) - if (IS_QT_DEPRECATION) - set(DEPRECATION_DEFINITION_NAME QT_DISABLE_DEPRECATED_BEFORE) - else() - set(DEPRECATION_DEFINITION_NAME ${DEPRECATION_NAME}_DISABLE_DEPRECATED_BEFORE_AND_AT) - endif() - # we want to be able to set this version without being forced to edit the CMakeLists.txt file - if (${${DEPRECATION_DEFINITION_NAME}}) - set(DEPRECATION_VERSION "${${DEPRECATION_DEFINITION_NAME}}") - endif() - - # make a sanity check to make sure we do not get malformed versions - _ecm_version_triple_sanity_check("${DEPRECATION_VERSION}") - - # add the actual compile definition with the given hex value - _ecm_geh_generate_hex_number_from_version(DEPRECATION_HEX_VERSION ${DEPRECATION_VERSION}) - add_definitions(-D${DEPRECATION_DEFINITION_NAME}=${DEPRECATION_HEX_VERSION}) - - # Set the version for the deprecation warnings - if (ARGS_DEPRECATION_WARNINGS) - string(REGEX MATCH "([0-9]+)\\." _ ${DEPRECATION_VERSION}) - if (NOT CMAKE_MATCH_1) - message(FATAL_ERROR "Failed to get major version from ${DEPRECATION_VERSION}") - endif() - # Add 1 to the major version and sture it as a hex value - math(EXPR next_major_version "(${CMAKE_MATCH_1} + 1) * 65536 " OUTPUT_FORMAT HEXADECIMAL) - add_definitions(-D${DEPRECATION_NAME}_DEPRECATED_WARNINGS_SINCE=${next_major_version}) - endif() - - endforeach() -endfunction() - -# helper method -function(_ecm_geh_generate_hex_number_from_version _var_name _version) - set(_hexnumber 0) - - string(REGEX MATCH "^([0-9]+)\\.([0-9]+)(\\.([0-9]+))?$" _ ${_version}) - - # Set the patch version to 0, if none is specified by the regex. - # This is the case for min. versions that don't specify the patch level, like in the snipped of the method docs. - if (NOT CMAKE_MATCH_4) - set(CMAKE_MATCH_4 "0") - endif() - - math(EXPR _hexnumber "${CMAKE_MATCH_1}*65536 + ${CMAKE_MATCH_2}*256 + ${CMAKE_MATCH_4}" OUTPUT_FORMAT HEXADECIMAL) - set(${_var_name} ${_hexnumber} PARENT_SCOPE) -endfunction() - -function (_ecm_version_triple_sanity_check unchecked_version) - # helper string - set(_version_triple_regexp "^([0-9]+)\\.([0-9]+)(\\.([0-9]+))?$") - # args sanity check - if (NOT unchecked_version) - message(FATAL_ERROR "No VERSION passed when calling ecm_set_deprecation_versions().") - elseif(NOT unchecked_version MATCHES ${_version_triple_regexp}) - message(FATAL_ERROR "VERSION ${unchecked_version} expected to be in x.y.z format when calling ecm_set_deprecation_versions().") - endif() -endfunction() diff --git a/modules/ECMDeprecationSettings.cmake b/modules/ECMDeprecationSettings.cmake new file mode 100644 index 00000000..e298a2bf --- /dev/null +++ b/modules/ECMDeprecationSettings.cmake @@ -0,0 +1,128 @@ +# SPDX-FileCopyrightText: 2021 Alexander Lohnau +# +# SPDX-License-Identifier: BSD-3-Clause + +#[=======================================================================[.rst: +ECMDeprecationSettings +----------------------- + +This module provides the ``ecm_set_disabled_deprecation_versions`` function setting the excluding +deprecated API for QT and KF projects. + +This method expects pairs of the identifier and deprecation version. +For the identifier "QT" this functions adds the definition "QT_DISABLE_DEPRECATED_BEFORE" with the given version in a hexadecimal format. +Otherwise the name for the definition is generated using `${IDENTIFIER}_DISABLE_DEPRECATED_BEFORE_AND_AT`, +following the naming of the generated code in :kde-module:`ECMGenerateExportHeaders`. +The version for the definition can be overwritten, by passing definition name and the deprecation version +as a CMake defintion. This allows one to exclude deprecations without having to edit the CMakeLists.txt file. + +This module provides the following function: + +:: + + ecm_set_disabled_deprecation_versions( + [SHOW_DEPRECATIONS] + [ ] + [ ] + ) +``SHOW_DEPRECATIONS`` if this option is used, deprecation warnings for the current major version are emitted. + + +Example usage: + +.. code-block:: cmake + + set(QT_MIN_VERSION "5.15.0") + set(KF5_MIN_VERSION "5.90") + + ecm_set_disabled_deprecation_versions(SHOW_DEPRECATIONS + QT ${QT_MIN_VERSION} + KF ${KF5_MIN_VERSION} + KCOREADDONS 5.89.0 # In case we depend on deprecated KCoreAddons API + ) + + + +Since 5.91 +#]=======================================================================] + +function (ecm_set_disabled_deprecation_versions) + include(CMakeParseArguments) + cmake_parse_arguments(ARGS "SHOW_DEPRECATIONS" "" "" ${ARGN}) + if (ARGS_DEPRECATION_WARNINGS) + if (NOT "${ARGS_DEPRECATION_WARNINGS}" MATCHES "CURRENT_VERSION|MAJOR_VERSION") + message(FATAL_ERROR "Unknown argument given for DEPRECATION_WARNINGS parameter, expected CURRENT_VERSION or MAJOR_VERSION") + endif() + endif() + list(LENGTH ARGS_UNPARSED_ARGUMENTS PAIR_COUNT) + math(EXPR is_even_number "${PAIR_COUNT} % 2") + if (NOT is_even_number EQUAL 0) + message(FATAL_ERROR "Expected number of argumments an even number of identifiers and version") + endif() + math(EXPR number_pairs "(${PAIR_COUNT} / 2) - 1") + foreach (it RANGE ${number_pairs}) + # get values + math(EXPR current_index "${it} * 2") + list(GET ARGS_UNPARSED_ARGUMENTS ${current_index} DEPRECATION_NAME) + math(EXPR next_index "(${it} *2) + 1") + list(GET ARGS_UNPARSED_ARGUMENTS ${next_index} DEPRECATION_VERSION) + + # get the string identifier for the target definition + string(COMPARE EQUAL ${DEPRECATION_NAME} "QT" IS_QT_DEPRECATION) + if (IS_QT_DEPRECATION) + set(DEPRECATION_DEFINITION_NAME QT_DISABLE_DEPRECATED_BEFORE) + else() + set(DEPRECATION_DEFINITION_NAME ${DEPRECATION_NAME}_DISABLE_DEPRECATED_BEFORE_AND_AT) + endif() + # we want to be able to set this version without being forced to edit the CMakeLists.txt file + if (${${DEPRECATION_DEFINITION_NAME}}) + set(DEPRECATION_VERSION "${${DEPRECATION_DEFINITION_NAME}}") + endif() + + # make a sanity check to make sure we do not get malformed versions + _ecm_version_triple_sanity_check("${DEPRECATION_VERSION}") + + # add the actual compile definition with the given hex value + _ecm_geh_generate_hex_number_from_version(DEPRECATION_HEX_VERSION ${DEPRECATION_VERSION}) + add_definitions(-D${DEPRECATION_DEFINITION_NAME}=${DEPRECATION_HEX_VERSION}) + + # Set the version for the deprecation warnings + if (ARGS_DEPRECATION_WARNINGS) + string(REGEX MATCH "([0-9]+)\\." _ ${DEPRECATION_VERSION}) + if (NOT CMAKE_MATCH_1) + message(FATAL_ERROR "Failed to get major version from ${DEPRECATION_VERSION}") + endif() + # Add 1 to the major version and sture it as a hex value + math(EXPR next_major_version "(${CMAKE_MATCH_1} + 1) * 65536 " OUTPUT_FORMAT HEXADECIMAL) + add_definitions(-D${DEPRECATION_NAME}_DEPRECATED_WARNINGS_SINCE=${next_major_version}) + endif() + + endforeach() +endfunction() + +# helper method +function(_ecm_geh_generate_hex_number_from_version _var_name _version) + set(_hexnumber 0) + + string(REGEX MATCH "^([0-9]+)\\.([0-9]+)(\\.([0-9]+))?$" _ ${_version}) + + # Set the patch version to 0, if none is specified by the regex. + # This is the case for min. versions that don't specify the patch level, like in the snipped of the method docs. + if (NOT CMAKE_MATCH_4) + set(CMAKE_MATCH_4 "0") + endif() + + math(EXPR _hexnumber "${CMAKE_MATCH_1}*65536 + ${CMAKE_MATCH_2}*256 + ${CMAKE_MATCH_4}" OUTPUT_FORMAT HEXADECIMAL) + set(${_var_name} ${_hexnumber} PARENT_SCOPE) +endfunction() + +function (_ecm_version_triple_sanity_check unchecked_version) + # helper string + set(_version_triple_regexp "^([0-9]+)\\.([0-9]+)(\\.([0-9]+))?$") + # args sanity check + if (NOT unchecked_version) + message(FATAL_ERROR "No VERSION passed when calling ecm_set_deprecation_versions().") + elseif(NOT unchecked_version MATCHES ${_version_triple_regexp}) + message(FATAL_ERROR "VERSION ${unchecked_version} expected to be in x.y.z format when calling ecm_set_deprecation_versions().") + endif() +endfunction() -- cgit v1.2.1