From bfb587360d9a2577cf96d4ff8aa5d91fb91d2283 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 5 Aug 2025 23:22:45 +0200 Subject: [PATCH] Make version generation more sane for program --- CMakeLists.txt | 18 +++--------------- GenerateVersion.cmake | 26 ++++++++++++++++++++++++++ version.h.template | 4 ++++ 3 files changed, 33 insertions(+), 15 deletions(-) create mode 100644 GenerateVersion.cmake create mode 100644 version.h.template diff --git a/CMakeLists.txt b/CMakeLists.txt index d324901..3aa7a11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,29 +32,17 @@ aux_source_directory("src" CFILES) set(GEN_HEADER_PATH "${CMAKE_CURRENT_BINARY_DIR}/include/generated") - -if (DEFINED NO_VERSION_INFO) add_custom_target( version-header COMMAND - mkdir -p ${GEN_HEADER_PATH} && bash "${CMAKE_CURRENT_SOURCE_DIR}/gen_version_header.sh" "${GEN_HEADER_PATH}/version.h" "dummy" - WORKING_DIRECTORY - ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT "Generating version header dummy" - ) - set (NO_VERSION_INFO true) - message("${BoldMagenta}No Version Information will be built${ColorReset}") -else(DEFINED NO_VERSION_INFO) -add_custom_target( - version-header - COMMAND - mkdir -p ${GEN_HEADER_PATH} && bash "${CMAKE_CURRENT_SOURCE_DIR}/gen_version_header.sh" "${GEN_HEADER_PATH}/version.h" + ${CMAKE_COMMAND} -D SRC=${CMAKE_SOURCE_DIR}/version.h.template + -D DST=${GEN_HEADER_PATH}/version.h + -P ${CMAKE_SOURCE_DIR}/GenerateVersion.cmake WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Generating version header" ) add_subdirectory(man) -endif(DEFINED NO_VERSION_INFO) add_custom_target(schema-header DEPENDS "${GEN_HEADER_PATH}/schema-blob.h") add_custom_command( diff --git a/GenerateVersion.cmake b/GenerateVersion.cmake new file mode 100644 index 0000000..5c5e6b6 --- /dev/null +++ b/GenerateVersion.cmake @@ -0,0 +1,26 @@ +find_package(Git) + +if(GIT_EXECUTABLE) + get_filename_component(WORKING_DIR ${SRC} DIRECTORY) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --always --dirty + WORKING_DIRECTORY ${WORKING_DIR} + OUTPUT_VARIABLE PROGRAM_GIT_VERSION + RESULT_VARIABLE ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(NOT ERROR_CODE EQUAL "0") + set(PROGRAM_GIT_VERSION "") + endif() + +endif() + +if(PROGRAM_GIT_VERSION STREQUAL "") + set(PROGRAM_GIT_VERSION 0.0.0-unknown) + message(WARNING "Failed to determine version from Git tags. Using default version \"${PROGRAM_GIT_VERSION}\".") +else() +message("Git Version: \"${PROGRAM_GIT_VERSION}\".") +endif() + +configure_file(${SRC} ${DST} @ONLY) \ No newline at end of file diff --git a/version.h.template b/version.h.template new file mode 100644 index 0000000..addbca2 --- /dev/null +++ b/version.h.template @@ -0,0 +1,4 @@ +#ifndef _GENRATED_VERSION_H_ +#define _GENRATED_VERSION_H_ +#define GIT_VERSION_STRING "@PROGRAM_GIT_VERSION@" +#endif /* _GENRATED_VERSION_H_ */