From fced4b881c550eb2630787a0a3370e80d76a3d63 Mon Sep 17 00:00:00 2001 From: ArtemNabok Date: Thu, 19 Feb 2026 12:39:24 +0000 Subject: [PATCH 1/2] Fix ADS_VERSION support for builds without git dependency - Move CMAKE_MODULE_PATH outside if(NOT ADS_VERSION) block so it's always available - Parse ADS_VERSION to set PROJECT_VERSION_* variables for Versioning.cmake - Update Versioning.cmake to use predefined version when available, fallback to git This allows building with -DADS_VERSION=X.Y.Z without requiring git repository. Co-authored-by: Qwen-Coder --- CMakeLists.txt | 9 ++++- cmake/modules/Versioning.cmake | 63 ++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9b1d7f4..1b4c21ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,12 +4,14 @@ if (POLICY CMP0091) cmake_policy(SET CMP0091 NEW) endif (POLICY CMP0091) +# Add cmake modules path (required for Versioning.cmake and git revision description) +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) + # By default, the version information is extracted from the git index. However, # we can override this behavior by explicitly setting ADS_VERSION and # skipping the git checks. This is useful for cases where this project is being # used independently of its original git repo (e.g. vendored in another project) if(NOT ADS_VERSION) - set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) include(GetGitRevisionDescription) git_describe(GitTagVersion --tags) string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GitTagVersion}") @@ -23,6 +25,11 @@ else() if(VERSION_DOT_COUNT EQUAL 2) set(VERSION_SHORT ${ADS_VERSION}) string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_SONAME "${ADS_VERSION}") + # Set PROJECT_VERSION_* variables for Versioning.cmake + string(REGEX MATCHALL "[0-9]+" VERSION_PARTS "${ADS_VERSION}") + list(GET VERSION_PARTS 0 PROJECT_VERSION_MAJOR) + list(GET VERSION_PARTS 1 PROJECT_VERSION_MINOR) + list(GET VERSION_PARTS 2 PROJECT_VERSION_PATCH) else() message(FATAL_ERROR "ADS_VERSION must be in major.minor.patch format, e.g. 3.8.1. Got ${ADS_VERSION}") endif() diff --git a/cmake/modules/Versioning.cmake b/cmake/modules/Versioning.cmake index dc582375..282828d9 100644 --- a/cmake/modules/Versioning.cmake +++ b/cmake/modules/Versioning.cmake @@ -8,43 +8,46 @@ set(_VERSIONING_MODULE_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE INTERNAL "Versioning module directory") # ------------------------------------------------------------ -# Extract version information from Git +# Extract version information from Git or use predefined version # ------------------------------------------------------------ +if(NOT DEFINED PROJECT_VERSION_MAJOR OR NOT DEFINED PROJECT_VERSION_MINOR OR NOT DEFINED PROJECT_VERSION_PATCH) + # Get tag (expected: v1.2.3 or 1.2.3 or 1.2.3-12-gHASH) + execute_process( + COMMAND git describe --tags --dirty + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESC_RAW + OUTPUT_STRIP_TRAILING_WHITESPACE + ) -# Get tag (expected: v1.2.3 or 1.2.3 or 1.2.3-12-gHASH) -execute_process( - COMMAND git describe --tags --dirty - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_DESC_RAW - OUTPUT_STRIP_TRAILING_WHITESPACE -) + # Remove leading "v" if present + string(REGEX REPLACE "^v" "" GIT_DESC "${GIT_DESC_RAW}") -# Remove leading "v" if present -string(REGEX REPLACE "^v" "" GIT_DESC "${GIT_DESC_RAW}") + # Extract major.minor.patch + string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ "${GIT_DESC}") + set(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}") + set(PROJECT_VERSION_MINOR "${CMAKE_MATCH_2}") + set(PROJECT_VERSION_PATCH "${CMAKE_MATCH_3}") -# Extract major.minor.patch -string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ "${GIT_DESC}") -set(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}") -set(PROJECT_VERSION_MINOR "${CMAKE_MATCH_2}") -set(PROJECT_VERSION_PATCH "${CMAKE_MATCH_3}") -set(PROJECT_VERSION_STRING - "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" -) -# Commit hash (full + short) -execute_process( - COMMAND git rev-parse HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE PROJECT_GIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE -) + # Commit hash (full + short) + execute_process( + COMMAND git rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE PROJECT_GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process( + COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE PROJECT_GIT_HASH_SHORT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() -execute_process( - COMMAND git rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE PROJECT_GIT_HASH_SHORT - OUTPUT_STRIP_TRAILING_WHITESPACE +set(PROJECT_VERSION_STRING + "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" ) # Export variables to parent scope From 5a1858d5d7ef50bfa2d4eabe49bfd865bc438e04 Mon Sep 17 00:00:00 2001 From: ArtemNabok Date: Thu, 19 Feb 2026 12:50:09 +0000 Subject: [PATCH 2/2] Add ADS_PLATFORM_DIR option to customize output directory Co-authored-by: Qwen-Coder --- CMakeLists.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b4c21ad..2cd9d08c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,10 +41,15 @@ project(QtADS LANGUAGES CXX VERSION ${VERSION_SHORT}) option(BUILD_STATIC "Build the static library" OFF) option(BUILD_EXAMPLES "Build the examples" ON) -if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") - set(ads_PlatformDir "x86") +# Platform directory: auto-detected based on pointer size, or manually set +if(NOT ADS_PLATFORM_DIR) + if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") + set(ads_PlatformDir "x86") + else() + set(ads_PlatformDir "x64") + endif() else() - set(ads_PlatformDir "x64") + set(ads_PlatformDir "${ADS_PLATFORM_DIR}") endif() add_subdirectory(src)