diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/build-info.cmake | 53 | ||||
| -rwxr-xr-x | scripts/build-info.sh | 22 | 
2 files changed, 75 insertions, 0 deletions
| diff --git a/scripts/build-info.cmake b/scripts/build-info.cmake new file mode 100644 index 0000000..fb46ed2 --- /dev/null +++ b/scripts/build-info.cmake @@ -0,0 +1,53 @@ +set(TEMPLATE_FILE "${CMAKE_BINARY_DIR}/BUILD_INFO.h.in") +set(HEADER_FILE "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h") +set(BUILD_NUMBER 0) +set(BUILD_COMMIT "unknown") + +# Look for git +find_package(Git) +if(NOT Git_FOUND) +    execute_process( +        COMMAND which git +        OUTPUT_VARIABLE GIT_EXECUTABLE +        OUTPUT_STRIP_TRAILING_WHITESPACE +    ) +    if(NOT GIT_EXECUTABLE STREQUAL "") +        set(Git_FOUND TRUE) +        message(STATUS "Found Git using 'which': ${GIT_EXECUTABLE}") +    else() +        message(WARNING "Git not found using 'find_package' or 'which'. Build info will not be accurate. Consider installing Git or ensuring it is in the PATH.") +    endif() +endif() + +# Get the commit count and hash +if(Git_FOUND) +    execute_process( +        COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD +        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +        OUTPUT_VARIABLE HEAD +        OUTPUT_STRIP_TRAILING_WHITESPACE +        RESULT_VARIABLE GIT_HEAD_RESULT +    ) +    execute_process( +        COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD +        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +        OUTPUT_VARIABLE COUNT +        OUTPUT_STRIP_TRAILING_WHITESPACE +        RESULT_VARIABLE GIT_COUNT_RESULT +    ) +    if(GIT_HEAD_RESULT EQUAL 0 AND GIT_COUNT_RESULT EQUAL 0) +        set(BUILD_COMMIT ${HEAD}) +        set(BUILD_NUMBER ${COUNT}) +    endif() +endif() + +# Only write the header if it's changed to prevent unnecessary recompilation +if(EXISTS ${HEADER_FILE}) +    file(STRINGS ${HEADER_FILE} CONTENTS REGEX "BUILD_COMMIT \"([^\"]*)\"") +    list(GET CONTENTS 0 EXISTING) +    if(NOT EXISTING STREQUAL "#define BUILD_COMMIT \"${BUILD_COMMIT}\"") +        configure_file(${TEMPLATE_FILE} ${HEADER_FILE}) +    endif() +else() +    configure_file(${TEMPLATE_FILE} ${HEADER_FILE}) +endif() diff --git a/scripts/build-info.sh b/scripts/build-info.sh new file mode 100755 index 0000000..507d7e1 --- /dev/null +++ b/scripts/build-info.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +BUILD_NUMBER="0" +BUILD_COMMIT="unknown" + +REV_LIST=$(git rev-list --count HEAD) +if [ $? -eq 0 ]; then +  BUILD_NUMBER=$REV_LIST +fi + +REV_PARSE=$(git rev-parse --short HEAD) +if [ $? -eq 0 ]; then +  BUILD_COMMIT=$REV_PARSE +fi + +echo "#ifndef BUILD_INFO_H" +echo "#define BUILD_INFO_H" +echo "" +echo "#define BUILD_NUMBER $BUILD_NUMBER" +echo "#define BUILD_COMMIT \"$BUILD_COMMIT\"" +echo "" +echo "#endif // BUILD_INFO_H" | 
