From: Mikko Rasa Date: Wed, 28 Dec 2022 12:47:49 +0000 (+0200) Subject: Avoid some failures from MicrosoftTools when running on Linux X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=b09e2a0c3fd164f02b325e30f8f546b6855d6967;p=builder.git 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. --- 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);