34 lines
1.4 KiB
CMake
34 lines
1.4 KiB
CMake
# Generate the Git Build ID information into a C source file
|
|
# This does not overwrite the file if the contents are up-to-date.
|
|
#
|
|
# Arguments:
|
|
# SOURCE_DIR The root directory of the project, expected to be a Git repo
|
|
# OUTPUT_FILE The file which gets written
|
|
# PREFIX An optional prefix for the constant name
|
|
|
|
find_package(Git QUIET)
|
|
|
|
function(make_git_build_id)
|
|
set(oneValueArgs SOURCE_DIR OUTPUT_FILE PREFIX)
|
|
cmake_parse_arguments(GBI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
get_filename_component(OUTPUT_NAME "${GBI_OUTPUT_FILE}" NAME)
|
|
get_filename_component(OUTPUT_DIR "${GBI_OUTPUT_FILE}" DIRECTORY)
|
|
message("(Git Build ID) Generating ${OUTPUT_NAME}")
|
|
|
|
file(MAKE_DIRECTORY "${OUTPUT_DIR}")
|
|
|
|
if(GIT_FOUND)
|
|
execute_process(COMMAND "${GIT_EXECUTABLE}" "rev-parse" "--short" "HEAD"
|
|
WORKING_DIRECTORY "${GBI_SOURCE_DIR}"
|
|
OUTPUT_VARIABLE GIT_COMMIT_ID
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
else()
|
|
set(GIT_COMMIT_ID "")
|
|
message("(Git Build ID) Error: could not find Git")
|
|
endif()
|
|
|
|
file(WRITE "${GBI_OUTPUT_FILE}.temp" "const char* ${GBI_PREFIX}GitBuildId = \"${GIT_COMMIT_ID}\";\n")
|
|
execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "copy_if_different" "${GBI_OUTPUT_FILE}.temp" "${GBI_OUTPUT_FILE}")
|
|
file(REMOVE "${GBI_OUTPUT_FILE}.temp")
|
|
endfunction()
|