X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=plugins%2Fmsvc%2Fmicrosofttools.cpp;h=0370f455d34b5c6a0bae7c1720bd0fa5de922354;hb=b09e2a0c3fd164f02b325e30f8f546b6855d6967;hp=af435bb2e85d73380343cd3f101bf61d119205e5;hpb=c22188be255cebc35998406df4072629283b8ba5;p=builder.git 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);