diff --git a/src/vcpkg/tools.cpp b/src/vcpkg/tools.cpp index 9836d269d5..20c19af394 100644 --- a/src/vcpkg/tools.cpp +++ b/src/vcpkg/tools.cpp @@ -292,6 +292,13 @@ namespace vcpkg MessageSink& status_sink, const Path& exe_path) const = 0; + // returns true if and only if `exe_path` is a usable version of this tool, cheap check + virtual bool cheap_is_acceptable(const Path& exe_path) const + { + (void)exe_path; + return true; + } + // returns true if and only if `exe_path` is a usable version of this tool virtual bool is_acceptable(const Path& exe_path) const { @@ -344,6 +351,14 @@ namespace vcpkg out_candidate_paths.push_back(*pf / "CMake" / "bin" / "cmake.exe"); } } + + virtual bool cheap_is_acceptable(const Path& exe_path) const override + { + // the cmake version from mysys and cygwin can not be used because that version can't handle 'C:' in paths + auto path = exe_path.generic_u8string(); + return !Strings::ends_with(path, "/usr/bin") && !Strings::ends_with(path, "/cygwin64/bin"); + } + #endif virtual ExpectedL get_version(const ToolCache&, MessageSink&, const Path& exe_path) const override { @@ -765,6 +780,7 @@ namespace vcpkg for (auto&& candidate : candidates) { if (!fs.exists(candidate, IgnoreErrors{})) continue; + if (!tool_provider.cheap_is_acceptable(candidate)) continue; auto maybe_version = tool_provider.get_version(*this, status_sink, candidate); log_candidate(candidate, maybe_version); const auto version = maybe_version.get();