Browse Source

FindOpenSSL: Search for -pthread flag

Because -pthread doesn't begin with -l, it doesn't show up in the
pkgconfig LIBRARIES variable, causing FindOpenSSL to not add the
Threads::Threads dependency. Explicitly search LDFLAGS_EXTRA
for -pthread and add the dependency if it's found.

Fixes: #24532
Kyle Edwards 2 years ago
parent
commit
24c7279a6f
1 changed files with 14 additions and 1 deletions
  1. 14 1
      Modules/FindOpenSSL.cmake

+ 14 - 1
Modules/FindOpenSSL.cmake

@@ -120,12 +120,13 @@ macro(_OpenSSL_test_and_find_dependencies ssl_library crypto_library)
     unset(_OpenSSL_has_dependency_zlib)
     if(OPENSSL_USE_STATIC_LIBS)
       set(_OpenSSL_libs "${_OPENSSL_STATIC_LIBRARIES}")
+      set(_OpenSSL_ldflags_other "${_OPENSSL_STATIC_LDFLAGS_OTHER}")
     else()
       set(_OpenSSL_libs "${_OPENSSL_LIBRARIES}")
+      set(_OpenSSL_ldflags_other "${_OPENSSL_LDFLAGS_OTHER}")
     endif()
     if(_OpenSSL_libs)
       unset(_OpenSSL_has_dependency_dl)
-      unset(_OpenSSL_has_dependency_threads)
       foreach(_OPENSSL_DEP_LIB IN LISTS _OpenSSL_libs)
         if (_OPENSSL_DEP_LIB STREQUAL "ssl" OR _OPENSSL_DEP_LIB STREQUAL "crypto")
           # ignoring: these are the targets
@@ -141,10 +142,22 @@ macro(_OpenSSL_test_and_find_dependencies ssl_library crypto_library)
       unset(_OPENSSL_DEP_LIB)
     else()
       set(_OpenSSL_has_dependency_dl TRUE)
+    endif()
+    if(_OpenSSL_ldflags_other)
+      unset(_OpenSSL_has_dependency_threads)
+      foreach(_OPENSSL_DEP_LDFLAG IN LISTS _OpenSSL_ldflags_other)
+        if (_OPENSSL_DEP_LDFLAG STREQUAL "-pthread")
+          set(_OpenSSL_has_dependency_threads TRUE)
+          find_package(Threads)
+        endif()
+      endforeach()
+      unset(_OPENSSL_DEP_LDFLAG)
+    else()
       set(_OpenSSL_has_dependency_threads TRUE)
       find_package(Threads)
     endif()
     unset(_OpenSSL_libs)
+    unset(_OpenSSL_ldflags_other)
   else()
     set(_OpenSSL_has_dependencies FALSE)
   endif()