| 1 | # SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | # Function to provide information regarding the Netdata version. |
| 3 | # |
| 4 | # The high-level logic is (a) use git-describe, (b) fallback to info from |
| 5 | # packaging/version. This version field are used for cmake's project, |
| 6 | # cpack's packaging, and the agent's functionality. |
| 7 | function(netdata_version) |
| 8 | find_package(Git) |
| 9 | |
| 10 | if(GIT_EXECUTABLE) |
| 11 | execute_process(COMMAND ${GIT_EXECUTABLE} describe |
| 12 | WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
| 13 | RESULT_VARIABLE GIT_DESCRIBE_RESULT |
| 14 | OUTPUT_VARIABLE GIT_DESCRIBE_OUTPUT) |
| 15 | if(GIT_DESCRIBE_RESULT) |
| 16 | file(STRINGS "${CMAKE_SOURCE_DIR}/packaging/version" GIT_DESCRIBE_OUTPUT) |
| 17 | message(WARNING "using version from packaging/version: '${GIT_DESCRIBE_OUTPUT}'") |
| 18 | endif() |
| 19 | else() |
| 20 | file(STRINGS packaging/version GIT_DESCRIBE_OUTPUT) |
| 21 | message(WARNING "using version from packaging/version: '${GIT_DESCRIBE_OUTPUT}'") |
| 22 | endif() |
| 23 | |
| 24 | string(STRIP ${GIT_DESCRIBE_OUTPUT} GIT_DESCRIBE_OUTPUT) |
| 25 | set(NETDATA_VERSION_STRING "${GIT_DESCRIBE_OUTPUT}" PARENT_SCOPE) |
| 26 | |
| 27 | string(REGEX MATCH "v?([0-9]+)\\.([0-9]+)\\.([0-9]+)-?([0-9]+)?-?([0-9a-zA-Z]+)?" MATCHES "${GIT_DESCRIBE_OUTPUT}") |
| 28 | if(CMAKE_MATCH_COUNT EQUAL 3) |
| 29 | set(NETDATA_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) |
| 30 | set(NETDATA_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) |
| 31 | set(NETDATA_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) |
| 32 | set(NETDATA_VERSION_TWEAK 0 PARENT_SCOPE) |
| 33 | set(NETDATA_VERSION_DESCR "N/A" PARENT_SCOPE) |
| 34 | elseif(CMAKE_MATCH_COUNT EQUAL 4) |
| 35 | set(NETDATA_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) |
| 36 | set(NETDATA_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) |
| 37 | set(NETDATA_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) |
| 38 | set(NETDATA_VERSION_TWEAK ${CMAKE_MATCH_4} PARENT_SCOPE) |
| 39 | set(NETDATA_VERSION_DESCR "N/A" PARENT_SCOPE) |
| 40 | elseif(CMAKE_MATCH_COUNT EQUAL 5) |
| 41 | set(NETDATA_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) |
| 42 | set(NETDATA_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) |
| 43 | set(NETDATA_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) |
| 44 | set(NETDATA_VERSION_TWEAK ${CMAKE_MATCH_4} PARENT_SCOPE) |
| 45 | set(NETDATA_VERSION_DESCR ${CMAKE_MATCH_5} PARENT_SCOPE) |
| 46 | else() |
| 47 | message(FATAL_ERROR "Wrong version regex match count ${CMAKE_MATCH_COUNT} (should be in 3, 4 or 5)") |
| 48 | endif() |
| 49 | endfunction() |