Browse Source

Autodetect VS 2019

urgh
John Kåre Alsaker 6 years ago
parent
commit
8e37948c38
  1. 32
      src/windows_registry.rs

32
src/windows_registry.rs

@ -217,6 +217,34 @@ mod impl_ {
} }
} }
fn vs16_instance() -> Option<PathBuf> {
vs15_instances()?.find_map(|instance| {
let instance = instance.ok()?;
let installation_name = instance.installation_name().ok()?;;
if installation_name.to_str()?.starts_with("VisualStudio/16.") {
Some(PathBuf::from(instance.installation_path().ok()?))
} else {
None
}
})
}
fn find_tool_in_vs16_path(tool: &str, target: &str) -> Option<Tool> {
let path = vs16_instance()?.join(tool);
if !path.is_file() {
return None;
}
let mut tool = Tool::new(path);
if target.contains("x86_64") {
tool.env.push(("Platform".into(), "X64".into()));
}
Some(tool)
}
fn find_msbuild_vs16(target: &str) -> Option<Tool> {
find_tool_in_vs16_path(r"MSBuild\Current\Bin\MSBuild.exe", target)
}
// In MSVC 15 (2017) MS once again changed the scheme for locating // In MSVC 15 (2017) MS once again changed the scheme for locating
// the tooling. Now we must go through some COM interfaces, which // the tooling. Now we must go through some COM interfaces, which
// is super fun for Rust. // is super fun for Rust.
@ -662,6 +690,10 @@ mod impl_ {
pub fn has_msbuild_version(version: &str) -> bool { pub fn has_msbuild_version(version: &str) -> bool {
match version { match version {
"16.0" => {
find_msbuild_vs16("x86_64-pc-windows-msvc").is_some()
|| find_msbuild_vs16("i686-pc-windows-msvc").is_some()
}
"15.0" => { "15.0" => {
find_msbuild_vs15("x86_64-pc-windows-msvc").is_some() find_msbuild_vs15("x86_64-pc-windows-msvc").is_some()
|| find_msbuild_vs15("i686-pc-windows-msvc").is_some() || find_msbuild_vs15("i686-pc-windows-msvc").is_some()

Loading…
Cancel
Save