ソースを参照

find_program: Explicitly skip WindowsApps/python*.exe app installer links

Windows provide a "python" executable like this:

    %USERPROFILE%\AppData\Local\Microsoft\WindowsApps\python.exe

It is actually a Windows app exec link.  If it points to an app
installer, avoid mistaking it for a working Python.
Brad King 4 年 前
コミット
37c2f722fc
1 ファイル変更20 行追加0 行削除
  1. 20 0
      Source/cmFindProgramCommand.cxx

+ 20 - 0
Source/cmFindProgramCommand.cxx

@@ -103,6 +103,26 @@ struct cmFindProgramHelper
                        });
   }
   bool FileIsExecutable(std::string const& file) const
+  {
+#ifdef _WIN32
+    if (!this->FileIsExecutableCMP0109(file)) {
+      return false;
+    }
+    // Pretend the Windows "python" app installer alias does not exist.
+    if (cmSystemTools::LowerCase(file).find("/windowsapps/python") !=
+        std::string::npos) {
+      std::string dest;
+      if (cmSystemTools::ReadSymlink(file, dest) &&
+          cmHasLiteralSuffix(dest, "\\AppInstallerPythonRedirector.exe")) {
+        return false;
+      }
+    }
+    return true;
+#else
+    return this->FileIsExecutableCMP0109(file);
+#endif
+  }
+  bool FileIsExecutableCMP0109(std::string const& file) const
   {
     switch (this->PolicyCMP0109) {
       case cmPolicies::OLD: