diff options
author | Brad King <brad.king@kitware.com> | 2014-06-09 14:28:45 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2014-06-09 14:28:45 (GMT) |
commit | 074ac5dbe9380ff462fd6767b5428a30fe82af69 (patch) | |
tree | 2b303d5c76d42d370f66977f03c230c0bc99c69d /Modules | |
parent | a0861931ead8cdcb6401e204ca4072c60af46101 (diff) | |
parent | 62863106f0e03a98d6de2fb8580162dce8702c1a (diff) | |
download | CMake-074ac5dbe9380ff462fd6767b5428a30fe82af69.zip CMake-074ac5dbe9380ff462fd6767b5428a30fe82af69.tar.gz CMake-074ac5dbe9380ff462fd6767b5428a30fe82af69.tar.bz2 |
Merge topic 'WriteCompilerDetectionHeader-deprecated-define'
62863106 WCDH: Add compatibility defines for deprecation.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/WriteCompilerDetectionHeader.cmake | 62 |
1 files changed, 52 insertions, 10 deletions
diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake index f80943d..6e64cd2 100644 --- a/Modules/WriteCompilerDetectionHeader.cmake +++ b/Modules/WriteCompilerDetectionHeader.cmake @@ -133,16 +133,37 @@ # ``static_assert``, or ignored if using the backward compatibility # implementation. # -# ====================== ================================ =================== -# Feature Define Symbol -# ====================== ================================ =================== -# ``cxx_alignas`` ``<PREFIX>_ALIGNAS`` ``alignas`` -# ``cxx_alignof`` ``<PREFIX>_ALIGNOF`` ``alignof`` -# ``cxx_nullptr`` ``<PREFIX>_NULLPTR`` ``nullptr`` -# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT`` ``static_assert`` -# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT_MSG`` ``static_assert`` -# ====================== ================================ =================== - +# The ``cxx_attribute_deprecated`` feature provides a macro definition +# ``<PREFIX>_DEPRECATED``, which expands to either the standard +# ``[[deprecated]]`` attribute or a compiler-specific decorator such +# as ``__attribute__((__deprecated__))`` used by GNU compilers. +# +# ============================= ================================ ===================== +# Feature Define Symbol +# ============================= ================================ ===================== +# ``cxx_alignas`` ``<PREFIX>_ALIGNAS`` ``alignas`` +# ``cxx_alignof`` ``<PREFIX>_ALIGNOF`` ``alignof`` +# ``cxx_nullptr`` ``<PREFIX>_NULLPTR`` ``nullptr`` +# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT`` ``static_assert`` +# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT_MSG`` ``static_assert`` +# ``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED`` ``[[deprecated]]`` +# ``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED_MSG`` ``[[deprecated]]`` +# ============================= ================================ ===================== +# +# A use-case which arises with such deprecation macros is the deprecation +# of an entire library. In that case, all public API in the library may +# be decorated with the ``<PREFIX>_DEPRECATED`` macro. This results in +# very noisy build output when building the library itself, so the macro +# may be may be defined to empty in that case when building the deprecated +# library: +# +# .. code-block:: cmake +# +# add_library(compat_support ${srcs}) +# target_compile_definitions(compat_support +# PRIVATE +# CompatSupport_DEPRECATED= +# ) #============================================================================= # Copyright 2014 Stephen Kelly <steveire@gmail.com> @@ -402,6 +423,27 @@ function(write_compiler_detection_header # endif \n") endif() + if (feature STREQUAL cxx_attribute_deprecated) + set(def_name ${prefix_arg}_${feature_PP}) + set(def_value "${prefix_arg}_DEPRECATED") + set(file_content "${file_content} +# ifndef ${def_value} +# if ${def_name} +# define ${def_value} [[deprecated]] +# define ${def_value}_MSG(MSG) [[deprecated(MSG)]] +# elif defined(__GNUC__) || defined(__clang__) +# define ${def_value} __attribute__((__deprecated__)) +# define ${def_value}_MSG(MSG) __attribute__((__deprecated__(MSG))) +# elif defined(_MSC_VER) +# define ${def_value} __declspec(deprecated) +# define ${def_value}_MSG(MSG) __declspec(deprecated(MSG)) +# else +# define ${def_value} +# define ${def_value}_MSG(MSG) +# endif +# endif +\n") + endif() endforeach() set(file_content "${file_content}#endif\n") |