From b254b0651ef093476322165f919e0a930534473b Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 11 Oct 2019 13:43:46 -0400 Subject: CMakeVersion: Prefer Git information provided by 'git archive' exports Update the approach from commit fe2c558ba6 (CMakeVersion: Preserve Git information during 'git archive', 2019-07-25, v3.16.0-rc1~337^2) to prefer `export-subst` information. This will allow exported source trees to be imported into unrelated Git repositories while still using the original upstream CMake commit information. --- Source/CMakeVersion.cmake | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 0f2a2d2..092f64d 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -19,7 +19,12 @@ else() set(CMake_VERSION_IS_RELEASE 0) endif() -if(EXISTS ${CMake_SOURCE_DIR}/.git) +# If this source was exported by 'git archive', use its commit info. +set(git_info [==[$Format:%h %s$]==]) + +# Otherwise, try to identify the current development source version. +if(NOT git_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]?[0-9a-f]?)[0-9a-f]* " + AND EXISTS ${CMake_SOURCE_DIR}/.git) find_package(Git QUIET) if(GIT_FOUND) macro(_git) @@ -32,16 +37,11 @@ if(EXISTS ${CMake_SOURCE_DIR}/.git) ) endmacro() endif() -endif() - -# Try to identify the current development source version. -if(COMMAND _git) - # Get the commit checked out in this work tree. - _git(log -n 1 HEAD "--pretty=format:%h %s" --) - set(git_info "${_git_out}") -else() - # Get the commit exported by 'git archive'. - set(git_info [==[$Format:%h %s$]==]) + if(COMMAND _git) + # Get the commit checked out in this work tree. + _git(log -n 1 HEAD "--pretty=format:%h %s" --) + set(git_info "${_git_out}") + endif() endif() # Extract commit information if available. -- cgit v0.12 From 874396a30d8dc85d45176de4ec53dc951179010e Mon Sep 17 00:00:00 2001 From: Kyle Edwards Date: Fri, 11 Oct 2019 12:41:11 -0400 Subject: CMakeVersion: Add option to disable Git suffix Distro maintainers who are building from Git with patches added on may want to disable the automatic Git suffixing, as it does not provide any useful information and simply confuses the end user. Add an undocumented CMake_VERSION_NO_GIT variable to disable this. --- Source/CMakeVersion.cmake | 88 ++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 092f64d..9e785da 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -19,55 +19,57 @@ else() set(CMake_VERSION_IS_RELEASE 0) endif() -# If this source was exported by 'git archive', use its commit info. -set(git_info [==[$Format:%h %s$]==]) +if(NOT CMake_VERSION_NO_GIT) + # If this source was exported by 'git archive', use its commit info. + set(git_info [==[$Format:%h %s$]==]) -# Otherwise, try to identify the current development source version. -if(NOT git_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]?[0-9a-f]?)[0-9a-f]* " - AND EXISTS ${CMake_SOURCE_DIR}/.git) - find_package(Git QUIET) - if(GIT_FOUND) - macro(_git) - execute_process( - COMMAND ${GIT_EXECUTABLE} ${ARGN} - WORKING_DIRECTORY ${CMake_SOURCE_DIR} - RESULT_VARIABLE _git_res - OUTPUT_VARIABLE _git_out OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_VARIABLE _git_err ERROR_STRIP_TRAILING_WHITESPACE - ) - endmacro() - endif() - if(COMMAND _git) - # Get the commit checked out in this work tree. - _git(log -n 1 HEAD "--pretty=format:%h %s" --) - set(git_info "${_git_out}") + # Otherwise, try to identify the current development source version. + if(NOT git_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]?[0-9a-f]?)[0-9a-f]* " + AND EXISTS ${CMake_SOURCE_DIR}/.git) + find_package(Git QUIET) + if(GIT_FOUND) + macro(_git) + execute_process( + COMMAND ${GIT_EXECUTABLE} ${ARGN} + WORKING_DIRECTORY ${CMake_SOURCE_DIR} + RESULT_VARIABLE _git_res + OUTPUT_VARIABLE _git_out OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE _git_err ERROR_STRIP_TRAILING_WHITESPACE + ) + endmacro() + endif() + if(COMMAND _git) + # Get the commit checked out in this work tree. + _git(log -n 1 HEAD "--pretty=format:%h %s" --) + set(git_info "${_git_out}") + endif() endif() -endif() -# Extract commit information if available. -if(git_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]?[0-9a-f]?)[0-9a-f]* (.*)$") - # Have commit information. - set(git_hash "${CMAKE_MATCH_1}") - set(git_subject "${CMAKE_MATCH_2}") + # Extract commit information if available. + if(git_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]?[0-9a-f]?)[0-9a-f]* (.*)$") + # Have commit information. + set(git_hash "${CMAKE_MATCH_1}") + set(git_subject "${CMAKE_MATCH_2}") - # If this is not the exact commit of a release, add dev info. - if(NOT "${git_subject}" MATCHES "^[Cc][Mm]ake ${CMake_VERSION}$") - set(CMake_VERSION "${CMake_VERSION}-g${git_hash}") - endif() + # If this is not the exact commit of a release, add dev info. + if(NOT "${git_subject}" MATCHES "^[Cc][Mm]ake ${CMake_VERSION}$") + set(CMake_VERSION "${CMake_VERSION}-g${git_hash}") + endif() - # If this is a work tree, check whether it is dirty. - if(COMMAND _git) - _git(update-index -q --refresh) - _git(diff-index --name-only HEAD --) - if(_git_out) - set(CMake_VERSION_IS_DIRTY 1) + # If this is a work tree, check whether it is dirty. + if(COMMAND _git) + _git(update-index -q --refresh) + _git(diff-index --name-only HEAD --) + if(_git_out) + set(CMake_VERSION_IS_DIRTY 1) + endif() + endif() + else() + # No commit information. + if(NOT CMake_VERSION_IS_RELEASE) + # Generic development version. + set(CMake_VERSION "${CMake_VERSION}-git") endif() - endif() -else() - # No commit information. - if(NOT CMake_VERSION_IS_RELEASE) - # Generic development version. - set(CMake_VERSION "${CMake_VERSION}-git") endif() endif() -- cgit v0.12