Browse Source

IRSL: Detect versioned Windows Universal CRT directories

Windows SDK version 10.0.17763.0 now places the uCRT libraries in a
versioned directory.

Fixes: #18603
Brad King 7 years ago
parent
commit
01c7d9ce86
1 changed files with 19 additions and 3 deletions
  1. 19 3
      Modules/InstallRequiredSystemLibraries.cmake

+ 19 - 3
Modules/InstallRequiredSystemLibraries.cmake

@@ -302,7 +302,15 @@ if(MSVC)
       get_filename_component(windows_kits_dir
         "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot10]" ABSOLUTE)
       set(programfilesx86 "ProgramFiles(x86)")
-      find_path(WINDOWS_KITS_DIR NAMES Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
+      if(";${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION};$ENV{UCRTVersion};$ENV{WindowsSDKVersion};" MATCHES [=[;(10\.[0-9.]+)[;\]]=])
+        set(__ucrt_version "${CMAKE_MATCH_1}/")
+      else()
+        set(__ucrt_version "")
+      endif()
+      find_path(WINDOWS_KITS_DIR
+        NAMES
+          Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
+          Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
         PATHS
         $ENV{CMAKE_WINDOWS_KITS_10_DIR}
         "${windows_kits_dir}"
@@ -313,11 +321,19 @@ if(MSVC)
 
       # Glob the list of UCRT DLLs.
       if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-        file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
+        if(EXISTS "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll")
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
+        else()
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
+        endif()
         list(APPEND __install__libs ${__ucrt_dlls})
       endif()
       if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-        file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${CMAKE_MSVC_ARCH}/ucrt/*.dll")
+        if(EXISTS "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/ucrtbased.dll")
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/*.dll")
+        else()
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${CMAKE_MSVC_ARCH}/ucrt/*.dll")
+        endif()
         list(APPEND __install__libs ${__ucrt_dlls})
       endif()
     endif()