| # Setup our dependency on Abseil. | |
| set(ABSL_PROPAGATE_CXX_STD ON) | |
| if(TARGET absl::strings) | |
| # If Abseil is included already, skip including it. | |
| # (https://github.com/protocolbuffers/protobuf/issues/10435) | |
| elseif(protobuf_ABSL_PROVIDER STREQUAL "module") | |
| if(NOT ABSL_ROOT_DIR) | |
| set(ABSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/abseil-cpp) | |
| endif() | |
| if(EXISTS "${ABSL_ROOT_DIR}/CMakeLists.txt") | |
| if(protobuf_INSTALL) | |
| # When protobuf_INSTALL is enabled and Abseil will be built as a module, | |
| # Abseil will be installed along with protobuf for convenience. | |
| set(ABSL_ENABLE_INSTALL ON) | |
| endif() | |
| add_subdirectory(${ABSL_ROOT_DIR} third_party/abseil-cpp) | |
| else() | |
| message(WARNING "protobuf_ABSL_PROVIDER is \"module\" but ABSL_ROOT_DIR is wrong") | |
| endif() | |
| if(protobuf_INSTALL AND NOT _protobuf_INSTALL_SUPPORTED_FROM_MODULE) | |
| message(WARNING "protobuf_INSTALL will be forced to FALSE because protobuf_ABSL_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.") | |
| set(protobuf_INSTALL FALSE) | |
| endif() | |
| elseif(protobuf_ABSL_PROVIDER STREQUAL "package") | |
| # Use "CONFIG" as there is no built-in cmake module for absl. | |
| find_package(absl REQUIRED CONFIG) | |
| endif() | |
| set(_protobuf_FIND_ABSL "if(NOT TARGET absl::strings)\n find_package(absl CONFIG)\nendif()") | |
| if (BUILD_SHARED_LIBS AND MSVC) | |
| # On MSVC Abseil is bundled into a single DLL. | |
| set(protobuf_ABSL_USED_TARGETS abseil_dll) | |
| # As a workaround for https://github.com/abseil/abseil-cpp/issues/1118, | |
| # make sure ABSL_CONSUME_DLL gets set for all subsequent builds. | |
| add_definitions(-DABSL_CONSUME_DLL) | |
| else() | |
| set(protobuf_ABSL_USED_TARGETS | |
| absl::algorithm | |
| absl::base | |
| absl::bind_front | |
| absl::bits | |
| absl::btree | |
| absl::cleanup | |
| absl::cord | |
| absl::core_headers | |
| absl::debugging | |
| absl::dynamic_annotations | |
| absl::flags | |
| absl::flat_hash_map | |
| absl::flat_hash_set | |
| absl::function_ref | |
| absl::hash | |
| absl::layout | |
| absl::memory | |
| absl::node_hash_map | |
| absl::node_hash_set | |
| absl::optional | |
| absl::span | |
| absl::status | |
| absl::statusor | |
| absl::strings | |
| absl::synchronization | |
| absl::time | |
| absl::utility | |
| absl::variant | |
| ) | |
| endif () |