From 5012fc5d23eba9d6e75a521ea01f096f7b7d4c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20W=C3=BCrtz?= Date: Fri, 28 Feb 2020 19:21:03 +0100 Subject: [PATCH] Merge pull request #16684 from pwuertz:ignore_clang_mat_inl * Ignore clang warnings for deprecated enum+enum operations in mat.inl.hpp * build: added customization macros, cmake flags for OpenCV build --- cmake/OpenCVCompilerOptions.cmake | 4 ++++ modules/core/include/opencv2/core/mat.inl.hpp | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/cmake/OpenCVCompilerOptions.cmake b/cmake/OpenCVCompilerOptions.cmake index eafca64068..476156f256 100644 --- a/cmake/OpenCVCompilerOptions.cmake +++ b/cmake/OpenCVCompilerOptions.cmake @@ -151,6 +151,10 @@ if(CV_GCC OR CV_CLANG) if(CV_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) add_extra_compiler_option(-Wno-missing-field-initializers) # GCC 4.x emits warnings about {}, fixed in GCC 5+ endif() + if(CV_CLANG AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0) + add_extra_compiler_option(-Wno-deprecated-enum-enum-conversion) + add_extra_compiler_option(-Wno-deprecated-anon-enum-enum-conversion) + endif() endif() add_extra_compiler_option(-fdiagnostics-show-option) diff --git a/modules/core/include/opencv2/core/mat.inl.hpp b/modules/core/include/opencv2/core/mat.inl.hpp index 4d8d6f059d..f2efe1c820 100644 --- a/modules/core/include/opencv2/core/mat.inl.hpp +++ b/modules/core/include/opencv2/core/mat.inl.hpp @@ -54,6 +54,21 @@ #pragma warning( disable: 4127 ) #endif +#if defined(CV_SKIP_DISABLE_CLANG_ENUM_WARNINGS) + // nothing +#elif defined(CV_FORCE_DISABLE_CLANG_ENUM_WARNINGS) + #define CV_DISABLE_CLANG_ENUM_WARNINGS +#elif defined(__clang__) && defined(__has_warning) + #if __has_warning("-Wdeprecated-enum-enum-conversion") && __has_warning("-Wdeprecated-anon-enum-enum-conversion") + #define CV_DISABLE_CLANG_ENUM_WARNINGS + #endif +#endif +#ifdef CV_DISABLE_CLANG_ENUM_WARNINGS +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion" +#pragma clang diagnostic ignored "-Wdeprecated-anon-enum-enum-conversion" +#endif + namespace cv { CV__DEBUG_NS_BEGIN @@ -4034,4 +4049,9 @@ inline void UMatData::markDeviceCopyObsolete(bool flag) #pragma warning( pop ) #endif +#ifdef CV_DISABLE_CLANG_ENUM_WARNINGS +#undef CV_DISABLE_CLANG_ENUM_WARNINGS +#pragma clang diagnostic pop +#endif + #endif