Bläddra i källkod

FindGit: Avoid finding VS 2017 non-general Git installation

At a VS 2017 command prompt the `PATH` contains a directory that happens
to have a `Git/cmd/git.exe` inside it.  However, this executable is not
meant for general use.  Revise our use of `Git/` path suffixes to be
more specific to its original purpose of searching in the typical
`c:/Program Files*/Git/` installation directories.  Avoid using the
suffixes on `PATH` entries.

Fixes: #16706
Brad King 8 år sedan
förälder
incheckning
c4d481e5b8
1 ändrade filer med 15 tillägg och 1 borttagningar
  1. 15 1
      Modules/FindGit.cmake

+ 15 - 1
Modules/FindGit.cmake

@@ -43,12 +43,26 @@ if(CMAKE_HOST_WIN32)
   endif()
 endif()
 
+# First search the PATH and specific locations.
 find_program(GIT_EXECUTABLE
   NAMES ${git_names}
   PATHS ${github_path} ${_git_sourcetree_path}
-  PATH_SUFFIXES Git/cmd Git/bin
   DOC "Git command line client"
   )
+
+if(CMAKE_HOST_WIN32)
+  # Now look for installations in Git/ directories under typical installation
+  # prefixes on Windows.  Exclude PATH from this search because VS 2017's
+  # command prompt happens to have a PATH entry with a Git/ subdirectory
+  # containing a minimal git not meant for general use.
+  find_program(GIT_EXECUTABLE
+    NAMES ${git_names}
+    PATH_SUFFIXES Git/cmd Git/bin
+    NO_SYSTEM_ENVIRONMENT_PATH
+    DOC "Git command line client"
+    )
+endif()
+
 mark_as_advanced(GIT_EXECUTABLE)
 
 unset(git_names)