From 6e7628821dc4cb3b4f1a6356bbe839e94c58a81f Mon Sep 17 00:00:00 2001 From: Li Xinwei <1326710505@qq.com> Date: Fri, 22 Jan 2021 19:13:19 +0800 Subject: [PATCH] CMake: Fix HAVE_openssl config test when using static OpenSSL When using static OpenSSL, HAVE_openssl test will fail, because of unresolved external symbols. These symbols are from Ws2_32.lib and Crypt32.lib, which CMake does not link by default. In qmake build system, we can use OPENSSL_LIBS variable to specify these system libraries. But there is no similar variable in CMake build system. Accordingly, we should let OpenSSL::Crypto target link these libraries. Upstream issue: https://gitlab.kitware.com/cmake/cmake/-/issues/19263 Change-Id: I5f27790b251d0a0f71aaf2aed2b933aeb3326f1f Reviewed-by: Craig Scott Reviewed-by: Joerg Bornemann (cherry picked from commit 29a58af4caea921e641c27477e6a255274de27ea) Reviewed-by: Qt Cherry-pick Bot --- cmake/FindWrapOpenSSL.cmake | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmake/FindWrapOpenSSL.cmake b/cmake/FindWrapOpenSSL.cmake index 6e80862258b..ef9d49842cd 100644 --- a/cmake/FindWrapOpenSSL.cmake +++ b/cmake/FindWrapOpenSSL.cmake @@ -11,6 +11,18 @@ set(WrapOpenSSL_FOUND OFF) find_package(WrapOpenSSLHeaders ${WrapOpenSSL_FIND_VERSION}) if(OpenSSL_FOUND) + 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() + target_link_libraries(${writableLib} INTERFACE Ws2_32 Crypt32) + unset(libType) + unset(writableLib) + endif() + set(WrapOpenSSL_FOUND ON) add_library(WrapOpenSSL::WrapOpenSSL INTERFACE IMPORTED)