Use pkg-config to find gRPC libraries if CMake package is not found

Look for the gRPC libraries using PkgConfig module. This helps to
find gRPC on systems that don't have CMake packages installed.

Task-number: QTBUG-108833
Change-Id: Iaaa9d38facd6490c3d96d9eb30b0cdddde46edde
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Alexey Edelev 2022-11-30 19:19:47 +01:00
parent 0d56724387
commit b27a709a18
1 changed files with 40 additions and 5 deletions

View File

@ -8,10 +8,7 @@ endif()
set(WrapgRPC_FOUND FALSE)
set(__WrapgRPC_find_package_args "")
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
list(APPEND __WrapgRPC_find_package_args QUIET)
endif()
set(__WrapgRPC_find_package_args QUIET)
if(NOT TARGET Threads::Threads)
find_package(Threads ${__WrapgRPC_find_package_args})
@ -34,7 +31,45 @@ if(TARGET ZLIB::ZLIB)
qt_internal_disable_find_package_global_promotion(ZLIB::ZLIB)
endif()
if(gRPC_FOUND AND TARGET gRPC::grpc AND TARGET gRPC::grpc++)
function(WrapgRPC_ensure_grpc_lib libname)
if(TARGET gRPC::${libname})
return()
endif()
pkg_check_modules(PC_${libname} QUIET ${libname})
if(NOT PC_${libname}_FOUND)
return()
endif()
find_library(${libname}_LIBRARY NAMES ${libname} HINTS ${PC_${libname}_LIBDIR})
if(NOT ${libname}_LIBRARY)
return()
endif()
find_path(${libname}_INCLUDE_DIRS NAMES ${libname}/${libname}.h ${PC_${libname}_INCLUDEDIR})
if(NOT ${libname}_INCLUDE_DIRS)
return()
endif()
add_library(gRPC::${libname} UNKNOWN IMPORTED)
set_target_properties(gRPC::${libname} PROPERTIES
IMPORTED_LOCATION ${${libname}_LIBRARY}
INTERFACE_INCLUDE_DIRECTORIES "${${libname}_INCLUDE_DIRS}"
)
endfunction()
if(NOT TARGET gRPC::grpc OR 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++)
add_library(WrapgRPC::WrapLibgRPC INTERFACE IMPORTED)
target_link_libraries(WrapgRPC::WrapLibgRPC INTERFACE gRPC::grpc gRPC::grpc++)
get_target_property(Grpc_INCLUDE_PATH gRPC::grpc++ INTERFACE_INCLUDE_DIRECTORIES)