From 082c0375d9f21ada36bdd8fd710720e553bcdbbb Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 27 Mar 2017 11:40:47 -0400 Subject: InstallRequiredSystemLibraries: Split VS 2017 search paths VS 2017 does not have the same registry entries or other paths we search for other VS versions. Split the search code paths to treat it separately. --- Modules/InstallRequiredSystemLibraries.cmake | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake index 1061da0..9750a06 100644 --- a/Modules/InstallRequiredSystemLibraries.cmake +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -191,19 +191,26 @@ if(MSVC) set(vs "${_MSVCRT_IDE_VERSION}") # Find the runtime library redistribution directory. - get_filename_component(msvc_install_dir - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE) - set(programfilesx86 "ProgramFiles(x86)") if(vs VERSION_LESS 15 AND DEFINED MSVC${vs}_REDIST_DIR AND EXISTS "${MSVC${vs}_REDIST_DIR}") set(MSVC_REDIST_DIR "${MSVC${vs}_REDIST_DIR}") # use old cache entry endif() - find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC${vs}0.CRT - PATHS - "${msvc_install_dir}/../../VC/redist" + if(NOT vs VERSION_LESS 15) + set(_vs_redist_paths "") + else() + get_filename_component(_vs_dir + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE) + set(programfilesx86 "ProgramFiles(x86)") + set(_vs_redist_paths + "${_vs_dir}/../../VC/redist" "${base_dir}/VC/redist" "$ENV{ProgramFiles}/Microsoft Visual Studio ${vs}.0/VC/redist" "$ENV{${programfilesx86}}/Microsoft Visual Studio ${vs}.0/VC/redist" - ) + ) + unset(_vs_dir) + unset(programfilesx86) + endif() + find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC${vs}0.CRT PATHS ${_vs_redist_paths}) + unset(_vs_redist_paths) mark_as_advanced(MSVC_REDIST_DIR) set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${vs}0.CRT") -- cgit v0.12 From cf784d9ff5555eda82d6790c359b6d6ea7f88345 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 27 Mar 2017 11:21:22 -0400 Subject: Add undocumented CMake language means to find VS 2017 Add a query to the `cmake_host_system_information` command to get the location of a VS 2017 installation. Leave it undocumented and for internal use for now. --- Source/cmCMakeHostSystemInformationCommand.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Source/cmCMakeHostSystemInformationCommand.cxx b/Source/cmCMakeHostSystemInformationCommand.cxx index 7da93ac..e135ac6 100644 --- a/Source/cmCMakeHostSystemInformationCommand.cxx +++ b/Source/cmCMakeHostSystemInformationCommand.cxx @@ -7,6 +7,12 @@ #include "cmMakefile.h" #include "cmsys/SystemInformation.hxx" +#if defined(_WIN32) +#include "cmSystemTools.h" +#include "cmVSSetupHelper.h" +#define HAVE_VS_SETUP_HELPER +#endif + class cmExecutionStatus; // cmCMakeHostSystemInformation @@ -70,6 +76,13 @@ bool cmCMakeHostSystemInformationCommand::GetValue( value = this->ValueToString(info.GetTotalPhysicalMemory()); } else if (key == "AVAILABLE_PHYSICAL_MEMORY") { value = this->ValueToString(info.GetAvailablePhysicalMemory()); +#ifdef HAVE_VS_SETUP_HELPER + } else if (key == "VS_15_DIR") { + cmVSSetupAPIHelper vsSetupAPIHelper; + if (vsSetupAPIHelper.GetVSInstanceInfo(value)) { + cmSystemTools::ConvertToUnixSlashes(value); + } +#endif } else { std::string e = "does not recognize " + key; this->SetError(e); -- cgit v0.12 From 6eb609fd59d989fede93fadfc67b928ee7ab7fc2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 27 Mar 2017 11:42:48 -0400 Subject: InstallRequiredSystemLibraries: Find VS 2017 redist directory Use our undocumented `cmake_host_system_information` query to find the VS 2017 installation directory by asking the VS installer tool. Then look relative to that for the redist directory. Fixes: #16737 --- Modules/InstallRequiredSystemLibraries.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake index 9750a06..a3478a3 100644 --- a/Modules/InstallRequiredSystemLibraries.cmake +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -196,6 +196,11 @@ if(MSVC) endif() if(NOT vs VERSION_LESS 15) set(_vs_redist_paths "") + cmake_host_system_information(RESULT _vs_dir QUERY VS_${vs}_DIR) # undocumented query + if(IS_DIRECTORY "${_vs_dir}") + file(GLOB _vs_redist_paths "${_vs_dir}/VC/Redist/MSVC/*") + endif() + unset(_vs_dir) else() get_filename_component(_vs_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE) -- cgit v0.12