[Bf-blender-cvs] [cc21388] master: CMake: Avoid call of find_package(Git) for every compile with buildinfo enabled
Sergey Sharybin
noreply at git.blender.org
Fri Mar 11 10:48:32 CET 2016
Commit: cc2138888a0219874ca5e25128b7edd54fa296ff
Author: Sergey Sharybin
Date: Fri Mar 11 13:05:44 2016 +0500
Branches: master
https://developer.blender.org/rBcc2138888a0219874ca5e25128b7edd54fa296ff
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
===================================================================
M CMakeLists.txt
M build_files/cmake/buildinfo.cmake
===================================================================
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f149cfb..b24945d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -704,6 +704,13 @@ else()
set(COMPILER_SSE2_FLAG)
endif()
+if(WITH_BUILDINFO)
+ find_package(Git)
+ if(NOT GIT_FOUND)
+ set(WITH_BUILDINFO OFF)
+ endif()
+endif()
+
TEST_SHARED_PTR_SUPPORT()
TEST_UNORDERED_MAP_SUPPORT()
diff --git a/build_files/cmake/buildinfo.cmake b/build_files/cmake/buildinfo.cmake
index 1f996b3..4caa4a9 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
More information about the Bf-blender-cvs
mailing list