aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-01-23 15:48:54 -0800
committerAlexander Karatarakis <alkarata@microsoft.com>2017-01-23 15:48:54 -0800
commit691f337bb3e56487911615a14cd06c86c029eb4b (patch)
treee87ab9ff2f64e1dc8b91417543fe120d2d93e40a
parent50d5e12390636137fedc1472872a4ae777bf1b2c (diff)
downloadvcpkg-691f337bb3e56487911615a14cd06c86c029eb4b.tar.gz
vcpkg-691f337bb3e56487911615a14cd06c86c029eb4b.zip
[VS2017] Don't depend on a specific MSVC dir name
-rw-r--r--toolsrc/src/vcpkg_Environment.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/toolsrc/src/vcpkg_Environment.cpp b/toolsrc/src/vcpkg_Environment.cpp
index 00f7206e3..0f4d4b60a 100644
--- a/toolsrc/src/vcpkg_Environment.cpp
+++ b/toolsrc/src/vcpkg_Environment.cpp
@@ -5,6 +5,7 @@
#include "metrics.h"
#include "vcpkg_System.h"
#include "vcpkg_Strings.h"
+#include "vcpkg_Files.h"
namespace vcpkg::Environment
{
@@ -109,11 +110,29 @@ namespace vcpkg::Environment
// VS2017
for (const std::string& instance : vs2017_installation_instances)
{
- const fs::path dumpbin_path = Strings::format(R"(%s\VC\Tools\MSVC\14.10.24911\bin\HostX86\x86\dumpbin.exe)", instance);
- paths_examined.push_back(dumpbin_path);
- if (fs::exists(dumpbin_path))
+ const fs::path msvc_path = Strings::format(R"(%s\VC\Tools\MSVC)", instance);
+ std::vector<fs::path> msvc_subdirectories;
+ Files::non_recursive_find_matching_paths_in_dir(msvc_path, [&](const fs::path& current)
{
- return dumpbin_path;
+ return fs::is_directory(current);
+ }, &msvc_subdirectories);
+
+ Checks::check_exit(!msvc_subdirectories.empty(), "No subdirectories were found in %s", msvc_path.generic_string());
+
+ // Sort them so that latest comes first
+ std::sort(msvc_subdirectories.begin(), msvc_subdirectories.end(), [&](const fs::path& left, const fs::path& right)
+ {
+ return left.filename() > right.filename();
+ });
+
+ for (const fs::path& subdir : msvc_subdirectories)
+ {
+ const fs::path dumpbin_path = Strings::format(R"(%s\bin\HostX86\x86\dumpbin.exe)", subdir.generic_string());
+ paths_examined.push_back(dumpbin_path);
+ if (fs::exists(dumpbin_path))
+ {
+ return dumpbin_path;
+ }
}
}