From 7b15c20dafc9133f93bbc65354ec3a36af168fd3 Mon Sep 17 00:00:00 2001 From: "Friedrich W. H. Kossebau" Date: Wed, 4 Sep 2019 19:19:27 +0200 Subject: Add ECMGenerateExportHeader, for improved handling of deprecated API Summary: Generates additional macros in the export header which can be used for fine-grained disabling of warnings & visibility as well as excluding from the build. Reviewers: #frameworks, #build_system Subscribers: chehrlic, dfaure, cgiboudeaux, kde-frameworks-devel, kde-buildsystem Tags: #frameworks, #build_system Differential Revision: https://phabricator.kde.org/D23789 --- .../library/CMakeLists.txt | 40 ++++++++++++++++++++++ .../library/library.cpp | 33 ++++++++++++++++++ .../library/library.hpp | 35 +++++++++++++++++++ tests/ECMGenerateExportHeaderTest/library/main.cpp | 4 +++ 4 files changed, 112 insertions(+) create mode 100644 tests/ECMGenerateExportHeaderTest/library/CMakeLists.txt create mode 100644 tests/ECMGenerateExportHeaderTest/library/library.cpp create mode 100644 tests/ECMGenerateExportHeaderTest/library/library.hpp create mode 100644 tests/ECMGenerateExportHeaderTest/library/main.cpp (limited to 'tests/ECMGenerateExportHeaderTest/library') diff --git a/tests/ECMGenerateExportHeaderTest/library/CMakeLists.txt b/tests/ECMGenerateExportHeaderTest/library/CMakeLists.txt new file mode 100644 index 00000000..eb925c9b --- /dev/null +++ b/tests/ECMGenerateExportHeaderTest/library/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.0.0) + +# keep version in sync with the one used in consumer/CMakeLists.txt for the library +# ideally would be send over by an exported target property, +# but exporting custom properties via EXPORT_PROPERTIES only was added in CMake 3.12 +project(library VERSION 2.40.0) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../modules) +include(ECMGenerateExportHeader) + +set(_public_includedir "include/library") + +add_library(library library.cpp) +target_include_directories(library + PUBLIC + "$" + "$" +) + +if(SET_GROUP) + set(_group_args GROUP_BASE_NAME LIBGROUP) +endif() + +ecm_generate_export_header(library + ${_group_args} + VERSION ${library_VERSION} + DEPRECATION_VERSIONS 2.0 2.12 + EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT} +) + +install(TARGETS library DESTINATION lib EXPORT library_targets) + +install(EXPORT library_targets FILE LibraryTargets.cmake DESTINATION lib/library) +install(FILES + library.hpp + "${CMAKE_CURRENT_BINARY_DIR}/library_export.h" + DESTINATION ${_public_includedir} +) + +add_executable(dummy main.cpp) diff --git a/tests/ECMGenerateExportHeaderTest/library/library.cpp b/tests/ECMGenerateExportHeaderTest/library/library.cpp new file mode 100644 index 00000000..9d08838c --- /dev/null +++ b/tests/ECMGenerateExportHeaderTest/library/library.cpp @@ -0,0 +1,33 @@ +#include "library.hpp" + +#if LIBRARY_BUILD_DEPRECATED_SINCE(2, 0) +void function_deprecatedAt2_0() +{ +} +#endif + +#if LIBRARY_BUILD_DEPRECATED_SINCE(2, 12) +void function_deprecatedAt2_12() +{ +} +#endif + +void function_not_deprecated() +{ +} + +#if LIBRARY_BUILD_DEPRECATED_SINCE(2, 0) +void Class::method_deprecatedAt2_0() +{ +} +#endif + +#if LIBRARY_BUILD_DEPRECATED_SINCE(2, 12) +void Class::method_deprecatedAt2_12() +{ +} +#endif + +void Class::method_not_deprecated() +{ +} diff --git a/tests/ECMGenerateExportHeaderTest/library/library.hpp b/tests/ECMGenerateExportHeaderTest/library/library.hpp new file mode 100644 index 00000000..2124bf8a --- /dev/null +++ b/tests/ECMGenerateExportHeaderTest/library/library.hpp @@ -0,0 +1,35 @@ +#include + +enum Enum { +#if LIBRARY_BUILD_DEPRECATED_SINCE(2, 0) + Enumerator_deprecatedAt2_0, +#endif + Enumerator_not_deprecated, +}; + +#if LIBRARY_ENABLE_DEPRECATED_SINCE(2, 0) +LIBRARY_DEPRECATED_VERSION(2, 0, "Deprecated at 2.0") +LIBRARY_EXPORT void function_deprecatedAt2_0(); +#endif + +#if LIBRARY_ENABLE_DEPRECATED_SINCE(2, 12) +LIBRARY_DEPRECATED_VERSION(2, 12, "Deprecated at 2.12") +LIBRARY_EXPORT void function_deprecatedAt2_12(); +#endif + +LIBRARY_EXPORT void function_not_deprecated(); + +class LIBRARY_EXPORT Class { +public: +#if LIBRARY_BUILD_DEPRECATED_SINCE(2, 0) + LIBRARY_DEPRECATED_VERSION(2, 0, "Deprecated at 2.0") + virtual void method_deprecatedAt2_0(); +#endif + +#if LIBRARY_BUILD_DEPRECATED_SINCE(2, 12) + LIBRARY_DEPRECATED_VERSION(2, 12, "Deprecated at 2.12") + virtual void method_deprecatedAt2_12(); +#endif + + virtual void method_not_deprecated(); +}; diff --git a/tests/ECMGenerateExportHeaderTest/library/main.cpp b/tests/ECMGenerateExportHeaderTest/library/main.cpp new file mode 100644 index 00000000..0f45ea60 --- /dev/null +++ b/tests/ECMGenerateExportHeaderTest/library/main.cpp @@ -0,0 +1,4 @@ +int main(int, char**) +{ + return 0; +} -- cgit v1.2.1