diff --git a/modules/git_info/git_info.cmake b/modules/git_info/git_info.cmake index f33895c..8d33c20 100644 --- a/modules/git_info/git_info.cmake +++ b/modules/git_info/git_info.cmake @@ -5,22 +5,66 @@ # Git repository version and status information # to the program output. # -# autocmake.cfg configuration:: +# autocmake.yml configuration:: # -# fetch: https://github.com/scisoft/autocmake/raw/master/modules/git_info/git_info_sub.cmake -# https://github.com/scisoft/autocmake/raw/master/modules/git_info/git_info.h.in +# url_root: https://github.com/coderefinery/autocmake/raw/master/ +# fetch: +# - "%(url_root)modules/git_info/git_info_sub.cmake" +# - "%(url_root)modules/git_info/git_info.h.in" -# CMAKE_CURRENT_LIST_DIR is undefined in CMake 2.8.2 -# see https://public.kitware.com/Bug/print_bug_page.php?bug_id=11675 -# workaround: create CMAKE_CURRENT_LIST_DIR -get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) -add_custom_command( - OUTPUT ${PROJECT_BINARY_DIR}/git_info.h - COMMAND ${CMAKE_COMMAND} -D_target_dir=${PROJECT_BINARY_DIR} -P git_info_sub.cmake - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} +# _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) +function(generate_git_info_header _header_location _header_name) + 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( + ${PROJECT_SOURCE_DIR}/cmake/downloaded/git_info.h.in + ${_header_location}/${_header_name} + @ONLY ) -add_custom_target( + 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 ${PROJECT_BINARY_DIR}/git_info.h + ALL DEPENDS ${_header_location}/${_header_name} ) +endfunction() diff --git a/modules/git_info/git_info_sub.cmake b/modules/git_info/git_info_sub.cmake deleted file mode 100644 index de2a6ad..0000000 --- a/modules/git_info/git_info_sub.cmake +++ /dev/null @@ -1,64 +0,0 @@ -#.rst: -# -# Creates git_info.h in the build directory. -# This file can be included in sources to print -# Git status information to the program output -# for reproducibility reasons. - -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} rev-list --max-count=1 --abbrev-commit HEAD - OUTPUT_VARIABLE _git_last_commit_hash - ERROR_QUIET - ) - - if(_git_last_commit_hash) - string(STRIP ${_git_last_commit_hash} _git_last_commit_hash) - endif() - - execute_process( - COMMAND ${GIT_EXECUTABLE} log --max-count=1 HEAD - OUTPUT_VARIABLE _git_last_commit - ERROR_QUIET - ) - - if(_git_last_commit) - string(REGEX MATCH "Author: +(.+) <.*@" temp "${_git_last_commit}") - set(_git_last_commit_author ${CMAKE_MATCH_1}) - string(STRIP ${_git_last_commit_author} _git_last_commit_author) - string(REGEX MATCH "Date: +(.+[0-9][0-9][0-9][0-9] [+-][0-9][0-9][0-9][0-9])" temp "${_git_last_commit}") - set(_git_last_commit_date ${CMAKE_MATCH_1}) - endif() - - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - OUTPUT_VARIABLE _git_branch - ERROR_QUIET - ) - - if(_git_branch) - string(STRIP ${_git_branch} _git_branch) - endif() -endif() - -# CMAKE_CURRENT_LIST_DIR is undefined in CMake 2.8.2 -# see https://public.kitware.com/Bug/print_bug_page.php?bug_id=11675 -# workaround: create CMAKE_CURRENT_LIST_DIR -get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) -configure_file( - ${CMAKE_CURRENT_LIST_DIR}/git_info.h.in - ${_target_dir}/git_info.h - @ONLY - ) - -unset(_git_last_commit_hash) -unset(_git_last_commit_author) -unset(_git_last_commit_date) -unset(_git_branch)