Browse Source

FindOpenSSL: Distinguish 32-bit and 64-bit search paths on Windows

Fixes: #21611
Ma Br 5 years ago
parent
commit
a6e03b2e6f
1 changed files with 19 additions and 5 deletions
  1. 19 5
      Modules/FindOpenSSL.cmake

+ 19 - 5
Modules/FindOpenSSL.cmake

@@ -141,16 +141,30 @@ if (WIN32)
     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
     ENV OPENSSL_ROOT_DIR
     )
-  file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
+
+  if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
+    set(_arch "Win64")
+    file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
+  else()
+    set(_arch "Win32")
+    set(_progfiles_x86 "ProgramFiles(x86)")
+    if(NOT "$ENV{${_progfiles_x86}}" STREQUAL "")
+      # under windows 64 bit machine
+      file(TO_CMAKE_PATH "$ENV{${_progfiles_x86}}" _programfiles)
+    else()
+      # under windows 32 bit machine
+      file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _programfiles)
+    endif()
+  endif()
+
   set(_OPENSSL_ROOT_PATHS
     "${_programfiles}/OpenSSL"
-    "${_programfiles}/OpenSSL-Win32"
-    "${_programfiles}/OpenSSL-Win64"
+    "${_programfiles}/OpenSSL-${_arch}"
     "C:/OpenSSL/"
-    "C:/OpenSSL-Win32/"
-    "C:/OpenSSL-Win64/"
+    "C:/OpenSSL-${_arch}/"
     )
   unset(_programfiles)
+  unset(_arch)
 else ()
   set(_OPENSSL_ROOT_HINTS
     ${OPENSSL_ROOT_DIR}