diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-03-11 11:05:44 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-03-11 12:46:18 +0300 |
commit | cc2138888a0219874ca5e25128b7edd54fa296ff (patch) | |
tree | b8b6c3196bd42d0a59112dab1a133a459246ab3f /build_files/cmake | |
parent | e7eb91365b3dc86e3555643ff8f89d7f306de900 (diff) |
CMake: Avoid call of find_package(Git) for every compile with buildinfo enabled
This is a bit tricky, find_package(Git) was only used to check if git is installed
and actual git command was assumed to be in the PATH (while ideally it should have
been GIT_COMMAND variable).
This commit makes re-compile output cleaner, especially when using Ninja.
Adding proper GIT_COMMAND to buildinfo.cmake is also possible via argument.
Reviewers: campbellbarton
Reviewed By: campbellbarton
Differential Revision: https://developer.blender.org/D1847
Diffstat (limited to 'build_files/cmake')
-rw-r--r-- | build_files/cmake/buildinfo.cmake | 170 |
1 files changed, 83 insertions, 87 deletions
diff --git a/build_files/cmake/buildinfo.cmake b/build_files/cmake/buildinfo.cmake index 1f996b30ba6..4caa4a954ea 100644 --- a/build_files/cmake/buildinfo.cmake +++ b/build_files/cmake/buildinfo.cmake @@ -9,124 +9,120 @@ set(MY_WC_COMMIT_TIMESTAMP 0) # Guess if this is a git working copy and then look up the revision if(EXISTS ${SOURCE_DIR}/.git) - # The FindGit.cmake module is part of the standard distribution - find_package(Git) - if(GIT_FOUND) - execute_process(COMMAND git rev-parse --abbrev-ref HEAD + execute_process(COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE MY_WC_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(MY_WC_BRANCH STREQUAL "HEAD") + # Detached HEAD, check whether commit hash is reachable + # in the master branch + execute_process(COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE MY_WC_BRANCH + OUTPUT_VARIABLE MY_WC_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) - if(MY_WC_BRANCH STREQUAL "HEAD") - # Detached HEAD, check whether commit hash is reachable - # in the master branch - execute_process(COMMAND git rev-parse --short HEAD + execute_process(COMMAND git branch --list master --contains ${MY_WC_HASH} + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE _git_contains_check + OUTPUT_STRIP_TRAILING_WHITESPACE) + + STRING(REGEX REPLACE "^[ \t]+" "" _git_contains_check "${_git_contains_check}") + if(_git_contains_check STREQUAL "master") + set(MY_WC_BRANCH "master") + else() + execute_process(COMMAND git show-ref --tags -d WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE MY_WC_HASH + OUTPUT_VARIABLE _git_tag_hashes OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND git branch --list master --contains ${MY_WC_HASH} + execute_process(COMMAND git rev-parse HEAD WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE _git_contains_check + OUTPUT_VARIABLE _git_head_hash OUTPUT_STRIP_TRAILING_WHITESPACE) - STRING(REGEX REPLACE "^[ \t]+" "" _git_contains_check "${_git_contains_check}") - if(_git_contains_check STREQUAL "master") + if(_git_tag_hashes MATCHES "${_git_head_hash}") set(MY_WC_BRANCH "master") - else() - execute_process(COMMAND git show-ref --tags -d - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE _git_tag_hashes - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND git rev-parse HEAD - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE _git_head_hash - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if(_git_tag_hashes MATCHES "${_git_head_hash}") - set(MY_WC_BRANCH "master") - endif() - - unset(_git_tag_hashes) - unset(_git_head_hashs) endif() + unset(_git_tag_hashes) + unset(_git_head_hashs) + endif() + - unset(_git_contains_check) + unset(_git_contains_check) + else() + execute_process(COMMAND git log HEAD..@{u} + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE _git_below_check + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + if(NOT _git_below_check STREQUAL "") + # If there're commits between HEAD and upstream this means + # that we're reset-ed to older revision. Use it's hash then. + execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE MY_WC_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) else() - execute_process(COMMAND git log HEAD..@{u} + execute_process(COMMAND git rev-parse --short @{u} WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE _git_below_check + OUTPUT_VARIABLE MY_WC_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) - if(NOT _git_below_check STREQUAL "") - # If there're commits between HEAD and upstream this means - # that we're reset-ed to older revision. Use it's hash then. + + if(MY_WC_HASH STREQUAL "") + # Local branch, not set to upstream. + # Well, let's use HEAD for now execute_process(COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${SOURCE_DIR} OUTPUT_VARIABLE MY_WC_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) - else() - execute_process(COMMAND git rev-parse --short @{u} - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE MY_WC_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET) - - if(MY_WC_HASH STREQUAL "") - # Local branch, not set to upstream. - # Well, let's use HEAD for now - execute_process(COMMAND git rev-parse --short HEAD - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE MY_WC_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() - endif() - - if(MY_WC_BRANCH MATCHES "^blender-v") - set(MY_WC_BRANCH "master") endif() - - unset(_git_below_check) endif() - execute_process(COMMAND git log -1 --format=%ct - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE MY_WC_COMMIT_TIMESTAMP - OUTPUT_STRIP_TRAILING_WHITESPACE) - # May fail in rare cases - if(MY_WC_COMMIT_TIMESTAMP STREQUAL "") - set(MY_WC_COMMIT_TIMESTAMP 0) + if(MY_WC_BRANCH MATCHES "^blender-v") + set(MY_WC_BRANCH "master") endif() - # Update GIT index before getting dirty files - execute_process(COMMAND git update-index -q --refresh - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_STRIP_TRAILING_WHITESPACE) + unset(_git_below_check) + endif() - execute_process(COMMAND git diff-index --name-only HEAD -- - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE _git_changed_files - OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND git log -1 --format=%ct + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE MY_WC_COMMIT_TIMESTAMP + OUTPUT_STRIP_TRAILING_WHITESPACE) + # May fail in rare cases + if(MY_WC_COMMIT_TIMESTAMP STREQUAL "") + set(MY_WC_COMMIT_TIMESTAMP 0) + endif() - if(NOT _git_changed_files STREQUAL "") + # Update GIT index before getting dirty files + execute_process(COMMAND git update-index -q --refresh + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process(COMMAND git diff-index --name-only HEAD -- + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE _git_changed_files + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(NOT _git_changed_files STREQUAL "") + set(MY_WC_BRANCH "${MY_WC_BRANCH} (modified)") + else() + # Unpushed commits are also considered local modifications + execute_process(COMMAND git log @{u}.. + WORKING_DIRECTORY ${SOURCE_DIR} + OUTPUT_VARIABLE _git_unpushed_log + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + if(NOT _git_unpushed_log STREQUAL "") set(MY_WC_BRANCH "${MY_WC_BRANCH} (modified)") - else() - # Unpushed commits are also considered local modifications - execute_process(COMMAND git log @{u}.. - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE _git_unpushed_log - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET) - if(NOT _git_unpushed_log STREQUAL "") - set(MY_WC_BRANCH "${MY_WC_BRANCH} (modified)") - endif() - unset(_git_unpushed_log) endif() - - unset(_git_changed_files) + unset(_git_unpushed_log) endif() + + unset(_git_changed_files) endif() # BUILD_PLATFORM and BUILD_PLATFORM are taken from CMake |