module which can create git_info.h at build time
This commit is contained in:
		
							
								
								
									
										17
									
								
								modules/git_info/git_info.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								modules/git_info/git_info.cmake
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| #.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. | ||||
|  | ||||
| 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} | ||||
|     ) | ||||
|  | ||||
| add_custom_target( | ||||
|     check | ||||
|     ALL DEPENDS ${PROJECT_BINARY_DIR}/git_info.h | ||||
|     ) | ||||
							
								
								
									
										9
									
								
								modules/git_info/git_info.h.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								modules/git_info/git_info.h.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| #ifndef GIT_INFO_H_INCLUDED | ||||
| #define GIT_INFO_H_INCLUDED | ||||
|  | ||||
| #define GIT_COMMIT_HASH "@_git_last_commit_hash@" | ||||
| #define GIT_COMMIT_AUTHOR "@_git_last_commit_author@" | ||||
| #define GIT_COMMIT_DATE "@_git_last_commit_date@" | ||||
| #define GIT_BRANCH "@_git_branch@" | ||||
|  | ||||
| #endif /* GIT_INFO_H_INCLUDED */ | ||||
							
								
								
									
										57
									
								
								modules/git_info/git_info_sub.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								modules/git_info/git_info_sub.cmake
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| #.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])" 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 | ||||
|         ) | ||||
|     string(STRIP ${_git_branch} _git_branch) | ||||
| endif() | ||||
|  | ||||
| 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) | ||||
		Reference in New Issue
	
	Block a user