forked from bartvdbraak/blender
5f2400414a
Before this console output contained messages about branch is not configured to use any upstream branch which is not useful information at all.
96 lines
3.6 KiB
CMake
96 lines
3.6 KiB
CMake
# This is called by cmake as an extermal process from
|
|
# ./source/creator/CMakeLists.txt to write ./source/creator/buildinfo.h
|
|
|
|
# Extract working copy information for SOURCE_DIR into MY_XXX variables
|
|
# with a default in case anything fails, for examble when using git-svn
|
|
set(MY_WC_HASH "unknown")
|
|
set(MY_WC_BRANCH "unknown")
|
|
set(MY_WC_COMMIT_TIMESTAMP 0)
|
|
|
|
# Guess if this is a SVN working copy and then look up the revision
|
|
if(EXISTS ${SOURCE_DIR}/.git)
|
|
# The FindGit.cmake module is part of the standard distribution
|
|
include(FindGit)
|
|
if(GIT_FOUND)
|
|
message("-- Found Git: ${GIT_EXECUTABLE}")
|
|
|
|
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()
|
|
|
|
execute_process(COMMAND git rev-parse --abbrev-ref HEAD
|
|
WORKING_DIRECTORY ${SOURCE_DIR}
|
|
OUTPUT_VARIABLE MY_WC_BRANCH
|
|
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)
|
|
|
|
# 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 odifications
|
|
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)
|
|
endif()
|
|
endif()
|
|
|
|
# BUILD_PLATFORM and BUILD_PLATFORM are taken from CMake
|
|
# but BUILD_DATE and BUILD_TIME are plataform dependant
|
|
if(UNIX)
|
|
execute_process(COMMAND date "+%Y-%m-%d" OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
execute_process(COMMAND date "+%H:%M:%S" OUTPUT_VARIABLE BUILD_TIME OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
endif()
|
|
if(WIN32)
|
|
execute_process(COMMAND cmd /c date /t OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
execute_process(COMMAND cmd /c time /t OUTPUT_VARIABLE BUILD_TIME OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
endif()
|
|
|
|
# Write a file with the SVNVERSION define
|
|
file(WRITE buildinfo.h.txt
|
|
"#define BUILD_HASH \"${MY_WC_HASH}\"\n"
|
|
"#define BUILD_COMMIT_TIMESTAMP ${MY_WC_COMMIT_TIMESTAMP}\n"
|
|
"#define BUILD_BRANCH \"${MY_WC_BRANCH}\"\n"
|
|
"#define BUILD_DATE \"${BUILD_DATE}\"\n"
|
|
"#define BUILD_TIME \"${BUILD_TIME}\"\n"
|
|
)
|
|
|
|
# Copy the file to the final header only if the version changes
|
|
# and avoid needless rebuilds
|
|
# TODO: verify this comment is true, as BUILD_TIME probably changes
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
buildinfo.h.txt buildinfo.h)
|