Merge pull request #16684 from pwuertz:ignore_clang_mat_inl
authorPeter Würtz <pwuertz@gmail.com>
Fri, 28 Feb 2020 18:21:03 +0000 (19:21 +0100)
committerGitHub <noreply@github.com>
Fri, 28 Feb 2020 18:21:03 +0000 (21:21 +0300)
* Ignore clang warnings for deprecated enum+enum operations in mat.inl.hpp

* build: added customization macros, cmake flags for OpenCV build

cmake/OpenCVCompilerOptions.cmake
modules/core/include/opencv2/core/mat.inl.hpp

index eafca64..476156f 100644 (file)
@@ -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)
 
index 4d8d6f0..f2efe1c 100644 (file)
 #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