81 lines
2.4 KiB
CMake
81 lines
2.4 KiB
CMake
#[[
|
|
# This file is responsible for setting the following variables:
|
|
#
|
|
# ~~~
|
|
# PROJECT_VERSION_MAJOR (4)
|
|
# PROJECT_VERSION_MINOR (0)
|
|
# PROJECT_VERSION_REV (3)
|
|
# PROJECT_VERSION (4.0.3)
|
|
# FW_COMMIT_DSC ("v4.0.3-deadbeef")
|
|
# FW_COMMIT_HASH (deadbeef)
|
|
# FW_COMMIT_DATE (1665051856)
|
|
#
|
|
# The `PROJECT_VERSION` variable is set as soon as the file is included.
|
|
# To set the rest, the function `resolve_version_variables` has to be called.
|
|
# ~~~
|
|
#]]
|
|
|
|
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/Configuration.h CFG_VER_DATA
|
|
REGEX "#define FW_[A-Z]+ ([0-9]+)"
|
|
)
|
|
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}")
|
|
|
|
string(REGEX MATCH "FW_MINOR ([0-9]+)" PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
|
|
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})
|
|
|
|
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)
|
|
return()
|
|
endif()
|
|
if(NOT GIT_FOUND)
|
|
find_package(Git QUIET)
|
|
endif()
|
|
git_head_commit_data(FW_COMMIT_HASH "%h")
|
|
set(ERRORS "GIT-NOTFOUND" "HEAD-FORMAT-NOTFOUND")
|
|
if(FW_COMMIT_HASH IN_LIST ERRORS)
|
|
# git not available, set fallback values
|
|
set(FW_COMMIT_HASH "UNKNOWN")
|
|
set(FW_COMMIT_DSC "v${PROJECT_VERSION}-${FW_COMMIT_HASH}")
|
|
string(TIMESTAMP FW_COMMIT_DATE "%s")
|
|
else()
|
|
git_describe_working_tree(FW_COMMIT_DSC)
|
|
git_head_commit_data(FW_COMMIT_DATE "%ct")
|
|
endif()
|
|
set(FW_COMMIT_DSC
|
|
"${FW_COMMIT_DSC}"
|
|
PARENT_SCOPE
|
|
)
|
|
set(FW_COMMIT_HASH
|
|
"${FW_COMMIT_HASH}"
|
|
PARENT_SCOPE
|
|
)
|
|
set(FW_COMMIT_DATE
|
|
"${FW_COMMIT_DATE}"
|
|
PARENT_SCOPE
|
|
)
|
|
|
|
# PROJECT_VERSION_TIMESTAMP
|
|
if(NOT PROJECT_VERSION_TIMESTAMP)
|
|
git_head_commit_timestamp(timestamp)
|
|
set(PROJECT_VERSION_TIMESTAMP
|
|
"${timestamp}"
|
|
PARENT_SCOPE
|
|
)
|
|
endif()
|
|
|
|
endfunction()
|