# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. #.rst: # FindGit # ------- # # The module defines the following variables: # # ``GIT_EXECUTABLE`` # Path to Git command-line client. # ``Git_FOUND``, ``GIT_FOUND`` # True if the Git command-line client was found. # ``GIT_VERSION_STRING`` # The version of Git found. # # Example usage: # # .. code-block:: cmake # # find_package(Git) # if(Git_FOUND) # message("Git found: ${GIT_EXECUTABLE}") # endif() # Look for 'git' or 'eg' (easy git) # set(git_names git eg) # Prefer .cmd variants on Windows unless running in a Makefile # in the MSYS shell. # if(CMAKE_HOST_WIN32) if(NOT CMAKE_GENERATOR MATCHES "MSYS") set(git_names git.cmd git eg.cmd eg) # GitHub search path for Windows file(GLOB github_path "$ENV{LOCALAPPDATA}/Github/PortableGit*/cmd" "$ENV{LOCALAPPDATA}/Github/PortableGit*/bin" ) # SourceTree search path for Windows set(_git_sourcetree_path "$ENV{LOCALAPPDATA}/Atlassian/SourceTree/git_local/bin") endif() endif() # First search the PATH and specific locations. find_program(GIT_EXECUTABLE NAMES ${git_names} PATHS ${github_path} ${_git_sourcetree_path} 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) unset(_git_sourcetree_path) if(GIT_EXECUTABLE) execute_process(COMMAND ${GIT_EXECUTABLE} --version OUTPUT_VARIABLE git_version ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if (git_version MATCHES "^git version [0-9]") string(REPLACE "git version " "" GIT_VERSION_STRING "${git_version}") endif() unset(git_version) endif() include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) find_package_handle_standard_args(Git REQUIRED_VARS GIT_EXECUTABLE VERSION_VAR GIT_VERSION_STRING)