瀏覽代碼

VS: Restore support for two-part default toolset version

Since commit f972e4fd3a (cmVSGenerator: Add support for two-part toolset
versions for Visual Studio, 2022-09-01, v3.25.0-rc1~180^2), if a
two-part toolset version is requested, we fail early if globbing finds
no auxiliary toolsets with that version.  This broke our existing
support for detecting when the default toolset matches the two-part
version requested.  Fix the logic to ignore the two-part globbing
results if they are empty so we fall through to checking the default
version.

Fixes: #24107
Brad King 3 年之前
父節點
當前提交
c50df859c5
共有 1 個文件被更改,包括 20 次插入18 次删除
  1. 20 18
      Source/cmGlobalVisualStudioVersionedGenerator.cxx

+ 20 - 18
Source/cmGlobalVisualStudioVersionedGenerator.cxx

@@ -802,26 +802,28 @@ cmGlobalVisualStudioVersionedGenerator::FindAuxToolset(
                "*/Microsoft.VCToolsVersion."_s, twoComponent, "*.txt"_s);
     cmsys::Glob glob;
     glob.SetRecurseThroughSymlinks(false);
-    // Since we are only using the first two components of the toolset version,
-    // we require a definite match
-    if (glob.FindFiles(pattern) && glob.GetFiles().size() == 1) {
-      std::string const& txt = glob.GetFiles()[0];
-      std::string ver;
-      cmsys::ifstream fin(txt.c_str());
-      if (fin && std::getline(fin, ver)) {
-        // Strip trailing whitespace.
-        ver = ver.substr(0, ver.find_first_not_of("0123456789."));
-        // We assume the version is correct, since it is the only one that
-        // matched.
-        cmsys::RegularExpression extractVersion(
-          "VCToolsVersion\\.([0-9.]+)\\.txt$");
-        if (extractVersion.find(txt)) {
-          version = extractVersion.match(1);
+    if (glob.FindFiles(pattern) && !glob.GetFiles().empty()) {
+      // Since we are only using the first two components of the
+      // toolset version, we require a single match.
+      if (glob.GetFiles().size() == 1) {
+        std::string const& txt = glob.GetFiles()[0];
+        std::string ver;
+        cmsys::ifstream fin(txt.c_str());
+        if (fin && std::getline(fin, ver)) {
+          // Strip trailing whitespace.
+          ver = ver.substr(0, ver.find_first_not_of("0123456789."));
+          // We assume the version is correct, since it is the only one that
+          // matched.
+          cmsys::RegularExpression extractVersion(
+            "VCToolsVersion\\.([0-9.]+)\\.txt$");
+          if (extractVersion.find(txt)) {
+            version = extractVersion.match(1);
+          }
         }
+      } else {
+        props = cmStrCat(instancePath, "/VC/Auxiliary/Build/"_s);
+        return AuxToolset::PropsIndeterminate;
       }
-    } else {
-      props = cmStrCat(instancePath, "/VC/Auxiliary/Build/"_s);
-      return AuxToolset::PropsIndeterminate;
     }
   }