summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2026-02-15 17:54:30 +0100
committerSander Vrijders <sander@ouroboros.rocks>2026-02-18 08:02:16 +0100
commit079035dbf4890e667c5e931295a1c24f28d9c0df (patch)
tree69bb016631636aea1541719e6634a6bebd588e4e
parente9ac4a01f3b1389f7d4d39e0faa6936f17e881ab (diff)
downloadouroboros-079035dbf4890e667c5e931295a1c24f28d9c0df.tar.gz
ouroboros-079035dbf4890e667c5e931295a1c24f28d9c0df.zip
build: Add git hash to version string
Embed git commit hash into version.h and irmd --version output using git describe. Regenerated at build time to stay current across commits. Ouroboros version MAJOR.MINOR.PATCH (TAG-COMMITS-GHASH-dirty) Example for dirty work tree (uncommitted changes): $ irmd --version Ouroboros version 0.22.0 (0.22.0-36-g86dba544-dirty) Example after commit: $ sudo irmd --version Ouroboros version 0.22.0-37-g55fa9445 Officical release (on tag): Ouroboros version 0.22.0 Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
-rw-r--r--cmake/include.cmake3
-rw-r--r--cmake/utils/GenVersionHeader.cmake11
-rw-r--r--cmake/utils/GetGitHash.cmake16
-rw-r--r--cmake/version.cmake18
-rw-r--r--include/ouroboros/version.h.in1
-rw-r--r--src/irmd/CMakeLists.txt2
-rw-r--r--src/irmd/main.c6
7 files changed, 50 insertions, 7 deletions
diff --git a/cmake/include.cmake b/cmake/include.cmake
index ace51d0f..414ea0ad 100644
--- a/cmake/include.cmake
+++ b/cmake/include.cmake
@@ -2,9 +2,6 @@ set(HEADERS_SOURCE_DIR "${CMAKE_SOURCE_DIR}/include/ouroboros")
# SOCK_BUF_SIZE is in cmake/config/global.cmake
-configure_file("${CMAKE_SOURCE_DIR}/include/ouroboros/version.h.in"
- "${CMAKE_BINARY_DIR}/include/ouroboros/version.h" @ONLY)
-
configure_file("${CMAKE_SOURCE_DIR}/include/ouroboros/sockets.h.in"
"${CMAKE_BINARY_DIR}/include/ouroboros/sockets.h" @ONLY)
diff --git a/cmake/utils/GenVersionHeader.cmake b/cmake/utils/GenVersionHeader.cmake
new file mode 100644
index 00000000..5f5821b9
--- /dev/null
+++ b/cmake/utils/GenVersionHeader.cmake
@@ -0,0 +1,11 @@
+include(${CMAKE_CURRENT_LIST_DIR}/GetGitHash.cmake)
+get_git_hash(${GIT_DIR} ${PACKAGE_VERSION_MAJOR} ${PACKAGE_VERSION_MINOR} ${PACKAGE_VERSION_PATCH} PACKAGE_VERSION_STRING)
+
+configure_file(${INPUT_FILE} ${OUTPUT_FILE}.tmp @ONLY)
+
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${OUTPUT_FILE}.tmp ${OUTPUT_FILE}
+)
+
+file(REMOVE ${OUTPUT_FILE}.tmp)
diff --git a/cmake/utils/GetGitHash.cmake b/cmake/utils/GetGitHash.cmake
new file mode 100644
index 00000000..8a9be41d
--- /dev/null
+++ b/cmake/utils/GetGitHash.cmake
@@ -0,0 +1,16 @@
+function(get_git_hash WORKING_DIR VERSION_MAJ VERSION_MIN VERSION_PAT OUTPUT_VAR)
+ execute_process(
+ COMMAND git describe --always --dirty
+ WORKING_DIRECTORY ${WORKING_DIR}
+ OUTPUT_VARIABLE _hash
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+ )
+
+ if(NOT _hash)
+ message(WARNING "Could not determine git hash")
+ set(_hash "${VERSION_MAJ}.${VERSION_MIN}.${VERSION_PAT}-custom")
+ endif()
+
+ set(${OUTPUT_VAR} "${_hash}" PARENT_SCOPE)
+endfunction()
diff --git a/cmake/version.cmake b/cmake/version.cmake
index 00183d34..1998e874 100644
--- a/cmake/version.cmake
+++ b/cmake/version.cmake
@@ -3,3 +3,21 @@ set(PACKAGE_VERSION_MINOR 22)
set(PACKAGE_VERSION_PATCH 0)
set(PACKAGE_VERSION
"${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}")
+
+include(utils/GetGitHash)
+get_git_hash(${CMAKE_SOURCE_DIR} ${PACKAGE_VERSION_MAJOR} ${PACKAGE_VERSION_MINOR} ${PACKAGE_VERSION_PATCH} PACKAGE_VERSION_STRING)
+
+configure_file("${CMAKE_SOURCE_DIR}/include/ouroboros/version.h.in"
+ "${CMAKE_BINARY_DIR}/include/ouroboros/version.h" @ONLY)
+
+add_custom_target(version_header ALL
+ COMMAND ${CMAKE_COMMAND}
+ -DGIT_DIR=${CMAKE_SOURCE_DIR}
+ -DINPUT_FILE=${CMAKE_SOURCE_DIR}/include/ouroboros/version.h.in
+ -DOUTPUT_FILE=${CMAKE_BINARY_DIR}/include/ouroboros/version.h
+ -DPACKAGE_VERSION_MAJOR=${PACKAGE_VERSION_MAJOR}
+ -DPACKAGE_VERSION_MINOR=${PACKAGE_VERSION_MINOR}
+ -DPACKAGE_VERSION_PATCH=${PACKAGE_VERSION_PATCH}
+ -P ${CMAKE_SOURCE_DIR}/cmake/utils/GenVersionHeader.cmake
+ COMMENT "Updating git hash in version.h"
+)
diff --git a/include/ouroboros/version.h.in b/include/ouroboros/version.h.in
index f2ff7ff4..13dd2921 100644
--- a/include/ouroboros/version.h.in
+++ b/include/ouroboros/version.h.in
@@ -26,5 +26,6 @@
#define OUROBOROS_VERSION_MAJOR @PACKAGE_VERSION_MAJOR@
#define OUROBOROS_VERSION_MINOR @PACKAGE_VERSION_MINOR@
#define OUROBOROS_VERSION_PATCH @PACKAGE_VERSION_PATCH@
+#define OUROBOROS_VERSION_STRING "@PACKAGE_VERSION_STRING@"
#endif /* OUROBOROS_VERSION_H */
diff --git a/src/irmd/CMakeLists.txt b/src/irmd/CMakeLists.txt
index d65635af..9aa747ca 100644
--- a/src/irmd/CMakeLists.txt
+++ b/src/irmd/CMakeLists.txt
@@ -44,6 +44,8 @@ set(IRMD_SOURCES
add_executable(irmd ${IRMD_SOURCES})
+add_dependencies(irmd version_header)
+
target_include_directories(irmd PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 9a927c46..c7a5715b 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -2192,10 +2192,8 @@ static void irm_argparse(int argc,
argc--;
argv++;
} else if (strcmp(*argv, "--version") == 0) {
- printf("Ouroboros version %d.%d.%d\n",
- OUROBOROS_VERSION_MAJOR,
- OUROBOROS_VERSION_MINOR,
- OUROBOROS_VERSION_PATCH);
+ printf("Ouroboros version %s\n",
+ OUROBOROS_VERSION_STRING);
exit(EXIT_SUCCESS);
#ifdef HAVE_TOML
} else if (strcmp (*argv, "--config") == 0) {