|
@@ -77,14 +77,44 @@ unset(git_names)
|
|
|
unset(_git_sourcetree_path)
|
|
unset(_git_sourcetree_path)
|
|
|
|
|
|
|
|
if(GIT_EXECUTABLE)
|
|
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}")
|
|
|
|
|
|
|
+ # Avoid querying the version if we've already done that this run. For
|
|
|
|
|
+ # projects that use things like ExternalProject or FetchContent heavily,
|
|
|
|
|
+ # this saving can be measurable on some platforms.
|
|
|
|
|
+ set(__doGitVersionCheck YES)
|
|
|
|
|
+ if(DEFINED GIT_VERSION_STRING)
|
|
|
|
|
+ # This is an internal property, projects must not try to use it.
|
|
|
|
|
+ # We don't want this stored in the cache because it might still change
|
|
|
|
|
+ # between CMake runs, but it shouldn't change during a run.
|
|
|
|
|
+ get_property(__gitVersionProp GLOBAL
|
|
|
|
|
+ PROPERTY _CMAKE_FindGit_GIT_EXECUTABLE_VERSION
|
|
|
|
|
+ )
|
|
|
|
|
+ if(__gitVersionProp)
|
|
|
|
|
+ list(GET __gitVersionProp 0 __gitExe)
|
|
|
|
|
+ list(GET __gitVersionProp 1 __gitVersion)
|
|
|
|
|
+ if("${__gitExe}" STREQUAL "${GIT_EXECUTABLE}" AND
|
|
|
|
|
+ "${__gitVersion}" STREQUAL "${GIT_VERSION_STRING}")
|
|
|
|
|
+ set(__doGitVersionCheck NO)
|
|
|
|
|
+ endif()
|
|
|
|
|
+ endif()
|
|
|
|
|
+ unset(__gitVersionProp)
|
|
|
|
|
+ unset(__gitExe)
|
|
|
|
|
+ unset(__gitVersion)
|
|
|
|
|
+ endif()
|
|
|
|
|
+
|
|
|
|
|
+ if(__doGitVersionCheck)
|
|
|
|
|
+ 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}")
|
|
|
|
|
+ set_property(GLOBAL PROPERTY _CMAKE_FindGit_GIT_EXECUTABLE_VERSION
|
|
|
|
|
+ "${GIT_EXECUTABLE};${GIT_VERSION_STRING}"
|
|
|
|
|
+ )
|
|
|
|
|
+ endif()
|
|
|
|
|
+ unset(git_version)
|
|
|
endif()
|
|
endif()
|
|
|
- unset(git_version)
|
|
|
|
|
|
|
+ unset(__doGitVersionCheck)
|
|
|
|
|
|
|
|
get_property(_findgit_role GLOBAL PROPERTY CMAKE_ROLE)
|
|
get_property(_findgit_role GLOBAL PROPERTY CMAKE_ROLE)
|
|
|
if(_findgit_role STREQUAL "PROJECT" AND NOT TARGET Git::Git)
|
|
if(_findgit_role STREQUAL "PROJECT" AND NOT TARGET Git::Git)
|