#include <msp/builder/sysutils.h>
#include <msp/core/algorithm.h>
#include <msp/fs/dir.h>
+#include <msp/fs/stat.h>
#include <msp/strings/utils.h>
#include "microsofttools.h"
#include "msvcarchiver.h"
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));
{
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");
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);