faa26be44c
Since f19ce3898e
we link OpenSSL to
QTlsBackendOpenSSLPlugin instead of QtNetwork itself. In dependent Qt
repositories this leads to the following situation:
QTlsBackendOpenSSLPlugin's dependencies call
find_dependency(WrapOpenSSLHeaders), and OpenSSL_FOUND is set to ON in
that scope. Later, we call find_package(WrapOpenSSL) in a different
scope. find_package(WrapOpenSSLHeaders) bails out early, because the
target WrapOpenSSLHeaders::WrapOpenSSLHeaders exists.
find_package(OpenSSL) is not called again. The check for OpenSSL_FOUND
fails, because the variable is not visible in the scope of
FindWrapOpenSSL.cmake, and we don't create the WrapOpenSSL::WrapOpenSSL
target.
Fix this by checking for the existence of the target OpenSSL::SSL
instead of the OpenSSL_FOUND variable.
Pick-to: 6.2 6.3
Fixes: QTBUG-99623
Change-Id: Idd0e8a60fabd0c7772413d557442c0012b0b436c
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
40 lines
1.2 KiB
CMake
40 lines
1.2 KiB
CMake
# We can't create the same interface imported target multiple times, CMake will complain if we do
|
|
# that. This can happen if the find_package call is done in multiple different subdirectories.
|
|
if(TARGET WrapOpenSSL::WrapOpenSSL)
|
|
set(WrapOpenSSL_FOUND ON)
|
|
return()
|
|
endif()
|
|
|
|
set(WrapOpenSSL_FOUND OFF)
|
|
|
|
# Reuse logic from the headers find script.
|
|
find_package(WrapOpenSSLHeaders ${WrapOpenSSL_FIND_VERSION})
|
|
|
|
if(TARGET OpenSSL::SSL)
|
|
if(WIN32)
|
|
get_target_property(libType OpenSSL::Crypto TYPE)
|
|
if(libType STREQUAL "ALIAS")
|
|
get_target_property(writableLib OpenSSL::Crypto ALIASED_TARGET)
|
|
else()
|
|
set(writableLib OpenSSL::Crypto)
|
|
endif()
|
|
set_property(TARGET ${writableLib} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ws2_32 crypt32)
|
|
unset(libType)
|
|
unset(writableLib)
|
|
endif()
|
|
|
|
set(WrapOpenSSL_FOUND ON)
|
|
|
|
add_library(WrapOpenSSL::WrapOpenSSL INTERFACE IMPORTED)
|
|
target_link_libraries(WrapOpenSSL::WrapOpenSSL INTERFACE OpenSSL::SSL)
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(WrapOpenSSL
|
|
REQUIRED_VARS
|
|
OPENSSL_CRYPTO_LIBRARY
|
|
OPENSSL_INCLUDE_DIR
|
|
VERSION_VAR
|
|
OPENSSL_VERSION
|
|
)
|