Check required dependencies for gRPC before adding WrapgRPC library

Check required dependencies for gRPC, which are linked as
INTERFACE_LINK_LIBRARIES which results in error when trying to use
gRPC library.

Fixes: QTBUG-109372
Pick-to: 6.5
Change-Id: Ib1adb7f9aff3041c50fabaa47bf269081342a639
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Konrad Kujawa 2022-12-14 11:59:21 +01:00
parent b5662a170f
commit cb1bf672a1
4 changed files with 45 additions and 13 deletions

View File

@ -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: <missing library>
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}")

View File

@ -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"

View File

@ -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})

View File

@ -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"