From 1791063fa8644434c001b50b8543bad698ae713c Mon Sep 17 00:00:00 2001 From: Konstantin Lampalzer Date: Mon, 23 Sep 2024 13:34:10 +0200 Subject: [PATCH] cmake: add versioning module --- CMakeLists.txt | 20 +++++++++++++++++--- cmake/Versioning.cmake | 26 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 cmake/Versioning.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d37b18..54d6ded 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,15 @@ +######### +# Setup # +######### + +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +include(Versioning) + +######## +# Main # +######## + # After installation this project can be found by 'find_package' command: # # find_package(libcreate REQUIRED) @@ -6,11 +18,14 @@ # cmake_minimum_required(VERSION 3.28) -project(libcreate) +project( + libcreate + VERSION ${TAG_VERSION_MAJOR}.${TAG_VERSION_MINOR}.${TAG_VERSION_PATCH} +) add_compile_options(-Wall -Wextra -Wpedantic) -set(PACKAGE_VERSION 3.0.0) +set(PACKAGE_VERSION ${TAG_VERSION_MAJOR}.${TAG_VERSION_MINOR}.${TAG_VERSION_PATCH}) option(LIBCREATE_BUILD_TESTS "Enable the build of tests." ON) @@ -208,5 +223,4 @@ endif() # Packaging # ############# -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(Packing) \ No newline at end of file diff --git a/cmake/Versioning.cmake b/cmake/Versioning.cmake new file mode 100644 index 0000000..b082127 --- /dev/null +++ b/cmake/Versioning.cmake @@ -0,0 +1,26 @@ +find_package(Git) + +if(GIT_EXECUTABLE) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags + OUTPUT_VARIABLE TAG_VERSION + RESULT_VARIABLE ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(TAG_VERSION STREQUAL "") + set(TAG_VERSION 0.0.0) + message(WARNING "Failed to determine version from Git tags. Using default version \"${TAG_VERSION}\".") + endif() + + message(STATUS "Project version: ${TAG_VERSION}") + + # Split into major, minor, patch + string( + REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" + TAG_VERSION_MATCH ${TAG_VERSION} + ) + set(TAG_VERSION_MAJOR ${CMAKE_MATCH_1}) + set(TAG_VERSION_MINOR ${CMAKE_MATCH_2}) + set(TAG_VERSION_PATCH ${CMAKE_MATCH_3}) +endif() \ No newline at end of file