Browse Source

Fall back on finding devenv and MSBuild via the previous registry-based method

wintest
nmlgc 6 years ago
parent
commit
2ddf9564b6
  1. 33
      src/windows_registry.rs

33
src/windows_registry.rs

@ -237,29 +237,42 @@ mod impl_ {
None
}
// It may seem that the paths to Visual Studio 2017's devenv and MSBuild
// could also be retrieved from the [registry], but SetupConfiguration's
// method seems to be [more reliable], and preferred according to Microsoft.
// While the paths to Visual Studio 2017's devenv and MSBuild could
// potentially be retrieved from the registry, finding them via
// SetupConfiguration has shown to be [more reliable], and is preferred
// according to Microsoft. To help head off potential regressions though,
// we keep the registry method as a fallback option.
//
// [registry]: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7
// [more reliable]: https://github.com/alexcrichton/cc-rs/pull/331
fn find_tool_in_vs15_path(tool: &str, target: &str) -> Option<Tool> {
otry!(vs15_instances())
let mut path = match vs15_instances() {
Some(instances) => instances
.filter_map(|instance| {
instance
.ok()
.and_then(|instance| instance.installation_path().ok())
})
.map(|ip| PathBuf::from(ip).join(tool))
.filter(|ref path| path.is_file())
.map(|path| {
}).map(|path| PathBuf::from(path).join(tool))
.find(|ref path| path.is_file()),
None => None,
};
if path.is_none() {
let key = r"SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7";
path = LOCAL_MACHINE
.open(key.as_ref())
.ok()
.and_then(|key| key.query_str("15.0").ok())
.map(|path| PathBuf::from(path).join(tool))
.filter(|ref path| path.is_file());
}
path.map(|path| {
let mut tool = Tool::new(path);
if target.contains("x86_64") {
tool.env.push(("Platform".into(), "X64".into()));
}
tool
})
.next()
}
fn tool_from_vs15_instance(tool: &str, target: &str, instance: &SetupInstance) -> Option<Tool> {

Loading…
Cancel
Save