From ab299e36d18d04c3d88a38b762004f154d4390a3 Mon Sep 17 00:00:00 2001 From: VintagePC <53943260+vintagepc@users.noreply.github.com> Date: Thu, 7 Sep 2023 19:38:07 -0400 Subject: [PATCH] Use commit number as version tweak value --- CMakeLists.txt | 17 ++++++++++++-- Firmware/Configuration.h | 3 ++- Firmware/util.cpp | 3 +-- cmake/GetGitRevisionDescription.cmake | 32 ++++++++++++++++++++++++--- cmake/ProjectVersion.cmake | 6 ++++- 5 files changed, 52 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5a6f4c9c..8d29d8064 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,10 +39,10 @@ set(FN_PREFIX "FW${PROJECT_VERSION}+${PROJECT_VERSION_SUFFIX}") message(STATUS "Project version (Configuration.h): ${PROJECT_VERSION}") message(STATUS "Project version suffix ..........: ${PROJECT_VERSION_SUFFIX}") message(STATUS "Project version description......: ${PROJECT_VERSION_FULL}") -message(STATUS "PROJECT() VERSION argument.......: ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}") -string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") +if(NOT "${PROJECT_VERSION_SUFFIX}" STREQUAL "UNKNOWN") # No commit hash is known... likely no git. +string(REGEX MATCH "v([0-9]+)\.([0-9]+)\.([0-9]+)-.+-([0-9]+)" TAG_VERSION "${FW_COMMIT_DSC}") if(NOT ${CMAKE_MATCH_1} STREQUAL ${PROJECT_VERSION_MAJOR}) message(FATAL_ERROR "Major version of current tag disagrees with Configuration.h ${CMAKE_MATCH_1}!=${PROJECT_VERSION_MAJOR}") @@ -56,7 +56,19 @@ if(NOT ${CMAKE_MATCH_3} STREQUAL ${PROJECT_VERSION_REV}) message(FATAL_ERROR "Rev version of current tag disagrees with Configuration.h ${CMAKE_MATCH_3}!=${PROJECT_VERSION_REV}") endif() +# Note - we don't check the commit counter, that'd be too much of a headache. Maybe it +# should be an error only on a tagged build? + MESSAGE(STATUS "Configuration.h and tag match: OK (${PROJECT_VERSION}/${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3})") +MESSAGE(STATUS "Commit nr: Configuration.h: ${PROJECT_VERSION_TWEAK} Tag: ${CMAKE_MATCH_4}") +MESSAGE(STATUS "These tag values will override Configuration.h") +SET(PROJECT_VERSION ${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${CMAKE_MATCH_4}) +else(GIT_FOUND) + +MESSAGE(STATUS "Git was not found. Falling back to Configuration.h values (${PROJECT_VERSION}).") +set(FW_COMMIT_HASH "0") # Clear it, the code expects a binary... + +endif() # Language configuration set(MAIN_LANGUAGES @@ -335,6 +347,7 @@ function(add_base_binary variant_name) FW_MAJOR=${PROJECT_VERSION_MAJOR} FW_MINOR=${PROJECT_VERSION_MINOR} FW_REVISION=${PROJECT_VERSION_REV} + FW_COMMITNR=${PROJECT_VERSION_TWEAK} ) endfunction() diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 6a44e9fc8..a2c607d5f 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -19,12 +19,13 @@ extern const char _sPrinterMmuName[] PROGMEM; #define FW_MAJOR 3 #define FW_MINOR 13 #define FW_REVISION 0 +#define FW_COMMITNR 6853 #warning "** Not sure why I had to touch this, but it seems like v3.13.1 is not in the linear history of this branch yet?" #endif #define FW_FLAVOR RC //uncomment if DEBUG, DEVEL, ALPHA, BETA or RC #define FW_FLAVERSION 1 //uncomment if FW_FLAVOR is defined and versioning is needed. Limited to max 8. -#warning "^^^These are temporary and need to be provided by cmake" +#warning "^^^These are temporary and still need to be provided by cmake" #ifndef FW_FLAVOR #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) diff --git a/Firmware/util.cpp b/Firmware/util.cpp index 63cf34075..626feaae0 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -14,8 +14,7 @@ const uint16_t FW_VERSION_NR[4] PROGMEM = { FW_MAJOR, FW_MINOR, FW_REVISION, -(uint16_t)(FW_COMMIT_HASH) // explicitly truncate the hash to fit -#warning "^^^ this is wrong and needs fixing. Should it be build nr or the flavour?" + FW_COMMITNR }; const uint32_t FW_VERSION_HASH PROGMEM = FW_COMMIT_HASH; diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index aa0755de1..29fa5c413 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -189,7 +189,7 @@ function(git_describe _var) endif() if(NOT hash) set(${_var} - "0" # This is an integer in the code... + "HEAD-HASH-NOTFOUND" PARENT_SCOPE) return() endif() @@ -229,9 +229,9 @@ function(git_describe_working_tree _var) PARENT_SCOPE) return() endif() - + git_head_commit_number(COMMIT_COUNT) #Bake the commit count into the full DSC execute_process( - COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN} + COMMAND "${GIT_EXECUTABLE}" describe --abbrev=0 --dirty=-${COMMIT_COUNT}-D --broken=-B ${ARGN} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out @@ -358,3 +358,29 @@ function(git_head_commit_data _var _format) ${out} PARENT_SCOPE) endfunction() + +function(git_head_commit_number _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + if(NOT GIT_FOUND) + set(${_var} + "GIT-NOTFOUND" + PARENT_SCOPE) + return() + endif() + + execute_process( + COMMAND "${GIT_EXECUTABLE}" rev-list --count HEAD + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + RESULT_VARIABLE res + OUTPUT_VARIABLE out + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT res EQUAL 0) + set(out "${out}-${res}-NOTFOUND") + endif() + + set(${_var} + "${out}" + PARENT_SCOPE) +endfunction() diff --git a/cmake/ProjectVersion.cmake b/cmake/ProjectVersion.cmake index f7afa7a27..fd40b4548 100644 --- a/cmake/ProjectVersion.cmake +++ b/cmake/ProjectVersion.cmake @@ -21,6 +21,7 @@ file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/Configuration.h CFG_VER_DATA list(GET CFG_VER_DATA 0 PROJECT_VERSION_MAJOR) list(GET CFG_VER_DATA 1 PROJECT_VERSION_MINOR) list(GET CFG_VER_DATA 2 PROJECT_VERSION_REV) +list(GET CFG_VER_DATA 3 PROJECT_VERSION_TWEAK) string(REGEX MATCH "FW_MAJOR ([0-9]+)" PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") set(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}") @@ -31,7 +32,10 @@ set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_1}) string(REGEX MATCH "FW_REVISION +([0-9]+)" PROJECT_VERSION_REV "${PROJECT_VERSION_REV}") set(PROJECT_VERSION_REV ${CMAKE_MATCH_1}) -set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}") +string(REGEX MATCH "FW_COMMITNR +([0-9]+)" PROJECT_VERSION_TWEAK "${PROJECT_VERSION_TWEAK}") +set(PROJECT_VERSION_TWEAK ${CMAKE_MATCH_1}) + +set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}.${PROJECT_VERSION_TWEAK}") function(resolve_version_variables) if(FW_COMMIT_DSC)