From b09e2a0c3fd164f02b325e30f8f546b6855d6967 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Wed, 28 Dec 2022 14:47:49 +0200 Subject: [PATCH] Avoid some failures from MicrosoftTools when running on Linux Don't try to run vswhere.exe if it isn't found. If running on WSL, map its result to the mount location to the Windows drive. --- plugins/msvc/microsofttools.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/plugins/msvc/microsofttools.cpp b/plugins/msvc/microsofttools.cpp index af435bb..0370f45 100644 --- a/plugins/msvc/microsofttools.cpp +++ b/plugins/msvc/microsofttools.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "microsofttools.h" #include "msvcarchiver.h" @@ -17,7 +18,8 @@ MicrosoftTools::MicrosoftTools(Builder &builder, const Architecture &arch): Toolchain("msvc", get_priority(arch)) { find_vc_bin_dir(builder, arch); - find_windows_sdk_dir(builder); + if(!vc_base_dir.empty()) + find_windows_sdk_dir(builder); add_tool(new MsvcCompiler(builder, arch, "CC", *this)); add_tool(new MsvcCompiler(builder, arch, "CXX", *this)); @@ -29,8 +31,12 @@ void MicrosoftTools::find_vc_bin_dir(Builder &builder, const Architecture &arch) { FS::Path program_files_x86 = get_program_files_x86_dir(); + FS::Path vswhere = program_files_x86/"Microsoft Visual Studio"/"Installer"/"vswhere.exe"; + if(!FS::exists(vswhere)) + return; + ExternalTask::Arguments argv; - argv.push_back((program_files_x86/"Microsoft Visual Studio"/"Installer"/"vswhere.exe").str()); + argv.push_back(vswhere.str()); argv.push_back("-latest"); argv.push_back("-property"); argv.push_back("installationPath"); @@ -39,6 +45,12 @@ void MicrosoftTools::find_vc_bin_dir(Builder &builder, const Architecture &arch) string output = ExternalTask::run_and_capture_output(argv, FS::Path(), true); FS::Path vs_path = strip(output); + if(!vs_path.is_absolute()) + { + string drive = vs_path[1]; + if(drive.size()==2 && drive[0]>='A' && drive[0]<='Z' && drive[1]==':') + vs_path = FS::Path("/mnt")/string(1, tolower(drive[0]))/vs_path.subpath(2); + } builder.get_logger().log("tools", "Visual Studio found in %s", vs_path); -- 2.45.2