diff --git a/cmake/FindWrapgRPC.cmake b/cmake/FindWrapgRPC.cmake index dd90e9c2..63d1896e 100644 --- a/cmake/FindWrapgRPC.cmake +++ b/cmake/FindWrapgRPC.cmake @@ -17,11 +17,13 @@ if(TARGET Threads::Threads) qt_internal_disable_find_package_global_promotion(Threads::Threads) endif() -set(__WrapgRPC_CMAKE_FIND_PACKAGE_PREFER_CONFIG_save ${CMAKE_FIND_PACKAGE_PREFER_CONFIG}) -set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) -find_package(gRPC ${__WrapgRPC_find_package_args}) -set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${__WrapgRPC_CMAKE_FIND_PACKAGE_PREFER_CONFIG_save}) -unset(__WrapgRPC_CMAKE_FIND_PACKAGE_PREFER_CONFIG_save) +if(NOT TARGET gRPC::grpc++) + set(__WrapgRPC_CMAKE_FIND_PACKAGE_PREFER_CONFIG_save ${CMAKE_FIND_PACKAGE_PREFER_CONFIG}) + set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) + find_package(gRPC ${__WrapgRPC_find_package_args}) + set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${__WrapgRPC_CMAKE_FIND_PACKAGE_PREFER_CONFIG_save}) + unset(__WrapgRPC_CMAKE_FIND_PACKAGE_PREFER_CONFIG_save) +endif() if(TARGET gRPC::grpc_cpp_plugin) qt_internal_disable_find_package_global_promotion(gRPC::grpc_cpp_plugin) @@ -58,20 +60,38 @@ function(WrapgRPC_ensure_grpc_lib libname) endfunction() -if(NOT TARGET gRPC::grpc OR NOT TARGET gRPC::grpc++) +if(NOT TARGET gRPC::grpc++) find_package(PkgConfig QUIET) if(PkgConfig_FOUND) - WrapgRPC_ensure_grpc_lib(grpc) WrapgRPC_ensure_grpc_lib(grpc++) endif() endif() unset(WrapgRPC_ensure_grpc_lib) -if(TARGET gRPC::grpc - AND TARGET gRPC::grpc++) +if(TARGET gRPC::grpc++ AND TARGET gRPC::grpc) + ## Check all required target dependencies for gRPC + ## the gRPCConfig.cmake assumes that they are available in the system + ## and links them as INTERFACE_LINK_LIBRARIES, + ## which can result in error: + ## The link interface of target "gRPC::grpc" contains: + set(__all_dependencies_found TRUE) + get_target_property(__all_dependencies_required gRPC::grpc INTERFACE_LINK_LIBRARIES) + foreach(__grpc_dep ${__all_dependencies_required}) + if(NOT ${__grpc_dep} MATCHES ".*::.*") + continue() + endif() + if(NOT TARGET ${__grpc_dep}) + message(WARNING "gRPC was found, but the ${__grpc_dep} dependency is missing.") + set(__all_dependencies_found FALSE) + endif() + endforeach() + if(NOT __all_dependencies_found) + return() + endif() + add_library(WrapgRPC::WrapLibgRPC INTERFACE IMPORTED) - target_link_libraries(WrapgRPC::WrapLibgRPC INTERFACE gRPC::grpc gRPC::grpc++) + target_link_libraries(WrapgRPC::WrapLibgRPC INTERFACE gRPC::grpc++) get_target_property(Grpc_INCLUDE_PATH gRPC::grpc++ INTERFACE_INCLUDE_DIRECTORIES) set_property(GLOBAL PROPERTY WrapgRPC_INCLUDE_PATH "${Grpc_INCLUDE_PATH}") diff --git a/tests/auto/grpc/client/CMakeLists.txt b/tests/auto/grpc/client/CMakeLists.txt index c06860d8..4c8a84df 100644 --- a/tests/auto/grpc/client/CMakeLists.txt +++ b/tests/auto/grpc/client/CMakeLists.txt @@ -1,6 +1,10 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause +if(NOT TARGET testserver) + return() +endif() + qt6_add_protobuf(tst_grpc_client_qtgrpc_gen OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/qt_grpc_generated" diff --git a/tests/auto/grpc/shared/test_server/CMakeLists.txt b/tests/auto/grpc/shared/test_server/CMakeLists.txt index 73fb4fd6..0a1dedaa 100644 --- a/tests/auto/grpc/shared/test_server/CMakeLists.txt +++ b/tests/auto/grpc/shared/test_server/CMakeLists.txt @@ -1,9 +1,13 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause -find_package(WrapgRPCPlugin REQUIRED) -find_package(WrapProtobuf REQUIRED) -find_package(WrapgRPC REQUIRED) +find_package(WrapgRPCPlugin) +find_package(WrapProtobuf) +find_package(WrapgRPC) + +if(NOT WrapgRPCPlugin_Found OR NOT WrapProtobuf_Found OR NOT WrapgRPC_Found) + return() +endif() set(proto_files "${CMAKE_CURRENT_LIST_DIR}/../proto/testservice.proto") set(out_dir ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/tests/auto/grpc/ssl_client/CMakeLists.txt b/tests/auto/grpc/ssl_client/CMakeLists.txt index 161ed9fe..25c6fc90 100644 --- a/tests/auto/grpc/ssl_client/CMakeLists.txt +++ b/tests/auto/grpc/ssl_client/CMakeLists.txt @@ -1,6 +1,10 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause +if(NOT TARGET securetestserver) + return() +endif() + qt6_add_protobuf(tst_grpc_ssl_client_qtgrpc_gen OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/qt_grpc_generated"