diff --git a/find-msvc-tools/src/find_tools.rs b/find-msvc-tools/src/find_tools.rs index f697dd2cd..02809c5cf 100644 --- a/find-msvc-tools/src/find_tools.rs +++ b/find-msvc-tools/src/find_tools.rs @@ -787,7 +787,7 @@ mod impl_ { instance_path: &Path, env_getter: &dyn EnvGetter, ) -> Option<(PathBuf, PathBuf, PathBuf, PathBuf, Option, PathBuf)> { - let version = vs15plus_vc_read_version(instance_path)?; + let version = vs15plus_vc_read_version(instance_path, env_getter)?; let hosts = match host_arch() { X86 => &["X86"], @@ -843,7 +843,13 @@ mod impl_ { )) } - fn vs15plus_vc_read_version(dir: &Path) -> Option { + fn vs15plus_vc_read_version(dir: &Path, env_getter: &dyn EnvGetter) -> Option { + if let Some(version) = env_getter.get_env("VCToolsVersion") { + // Restrict the search to a specific msvc version; if it doesn't exist then + // our caller will fail to find the tool for this instance and move on. + return version.to_str().map(|s| s.to_string()); + } + // Try to open the default version file. let mut version_path: PathBuf = dir.join(r"VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"); @@ -919,6 +925,11 @@ mod impl_ { target: TargetArch, env_getter: &dyn EnvGetter, ) -> Option { + if env_getter.get_env("VCToolsVersion").is_some() { + // VCToolsVersion is not set/supported for MSVC 14 + return None; + } + let vcdir = get_vc_dir("14.0")?; let sdk_info = get_sdks(target, env_getter)?; let mut tool = get_tool(tool, &vcdir, target, &sdk_info)?;