mirror of
https://github.com/opencv/opencv.git
synced 2026-07-21 19:33:03 +04:00
Merge pull request #24372 from Kumataro:fix24369
Supporting protobuf v22 and later(with abseil-cpp/C++17) #24372 fix https://github.com/opencv/opencv/issues/24369 related https://github.com/opencv/opencv/issues/23791 1. This patch supports external protobuf v22 and later, it required abseil-cpp and c++17. Even if the built-in protobuf is upgraded to v22 or later, the dependency on abseil-cpp and the requirement for C++17 will continue. 2. Some test for caffe required patched protobuf, so this patch disable them. This patch is tested by following libraries. - Protobuf: /usr/local/lib/libprotobuf.so (4.24.4) - abseil-cpp: YES (20230125) ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [x] There is a reference to the original bug report and related work - [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [x] The feature is well documented and sample code can be built with the project CMake
This commit is contained in:
@@ -30,8 +30,14 @@ if(BUILD_PROTOBUF)
|
||||
set(Protobuf_LIBRARIES "libprotobuf")
|
||||
set(HAVE_PROTOBUF TRUE)
|
||||
else()
|
||||
# we still need this for command PROTOBUF_GENERATE_CPP.
|
||||
set(protobuf_MODULE_COMPATIBLE ON)
|
||||
|
||||
unset(Protobuf_VERSION CACHE)
|
||||
find_package(Protobuf QUIET)
|
||||
find_package(Protobuf QUIET CONFIG)
|
||||
if(NOT Protobuf_FOUND)
|
||||
find_package(Protobuf QUIET)
|
||||
endif()
|
||||
|
||||
# Backwards compatibility
|
||||
# Define camel case versions of input variables
|
||||
@@ -67,6 +73,20 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# See https://github.com/opencv/opencv/issues/24369
|
||||
# In Protocol Buffers v22.0 and later drops C++11 support and depends abseil-cpp.
|
||||
# Details: https://protobuf.dev/news/2022-08-03/
|
||||
# And if std::text_view is in abseil-cpp requests C++17 and later.
|
||||
|
||||
if(HAVE_PROTOBUF)
|
||||
if(NOT (Protobuf_VERSION VERSION_LESS 22))
|
||||
if((CMAKE_CXX_STANDARD EQUAL 98) OR (CMAKE_CXX_STANDARD LESS 17))
|
||||
message(STATUS "CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} is too old to support protobuf(${Protobuf_VERSION}) and/or abseil-cpp. Use C++17 or later. Turning HAVE_PROTOBUF off")
|
||||
set(HAVE_PROTOBUF FALSE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(HAVE_PROTOBUF AND PROTOBUF_UPDATE_FILES AND NOT COMMAND PROTOBUF_GENERATE_CPP)
|
||||
message(FATAL_ERROR "Can't configure protobuf dependency (BUILD_PROTOBUF=${BUILD_PROTOBUF} PROTOBUF_UPDATE_FILES=${PROTOBUF_UPDATE_FILES})")
|
||||
endif()
|
||||
@@ -74,15 +94,20 @@ endif()
|
||||
if(HAVE_PROTOBUF)
|
||||
list(APPEND CUSTOM_STATUS protobuf)
|
||||
if(NOT BUILD_PROTOBUF)
|
||||
unset( __location)
|
||||
if(TARGET "${Protobuf_LIBRARIES}")
|
||||
get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION_RELEASE)
|
||||
if(NOT __location)
|
||||
get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION)
|
||||
endif()
|
||||
elseif(Protobuf_LIBRARY)
|
||||
set(__location "${Protobuf_LIBRARY}")
|
||||
else()
|
||||
set(__location "${Protobuf_LIBRARIES}")
|
||||
endif()
|
||||
|
||||
if(NOT __location)
|
||||
if(Protobuf_LIBRARY)
|
||||
set(__location "${Protobuf_LIBRARY}")
|
||||
else()
|
||||
set(__location "${Protobuf_LIBRARIES}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
list(APPEND CUSTOM_STATUS_protobuf " Protobuf:"
|
||||
|
||||
Reference in New Issue
Block a user