autocmake/modules/git_info/git_info.cmake
2016-11-17 19:51:17 +01:00

81 lines
2.2 KiB
CMake

#.rst:
#
# Creates git_info.h in the build directory.
# This file can be included in sources to print
# Git repository version and status information
# to the program output.
#
# autocmake.yml configuration::
#
# url_root: https://github.com/coderefinery/autocmake/raw/master/
# fetch:
# - "%(url_root)modules/git_info/git_info.h.in"
get_filename_component(_current_dir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(generate_git_info_header)
# _header_location: where the Git info header file should be generated
# _header_name: the Git info header name, complete with extension (.h, .hpp, .hxx or whatever)
if(${ARGC} EQUAL 2)
set(_header_location ${ARGV0})
set(_header_name ${ARGV1})
elseif(${ARGC} EQUAL 0)
set(_header_location ${PROJECT_BINARY_DIR})
set(_header_name git_info.h)
else()
message(FATAL_ERROR "generate_git_info_header function accepts either two or no arguments")
endif()
find_package(Git)
set(_git_last_commit_hash "unknown")
set(_git_last_commit_author "unknown")
set(_git_last_commit_date "unknown")
set(_git_branch "unknown")
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} --no-pager show -s --pretty=format:%h -n 1
OUTPUT_VARIABLE _git_last_commit_hash
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} --no-pager show -s --pretty=format:%aN -n 1
OUTPUT_VARIABLE _git_last_commit_author
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} --no-pager show -s --pretty=format:%ad -n 1
OUTPUT_VARIABLE _git_last_commit_date
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE _git_branch
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endif()
configure_file(
${_current_dir}/git_info.h.in
${_header_location}/${_header_name}
@ONLY
)
unset(_git_last_commit_hash)
unset(_git_last_commit_author)
unset(_git_last_commit_date)
unset(_git_branch)
add_custom_target(
git_info
ALL DEPENDS ${_header_location}/${_header_name}
)
endfunction()