@@ -7,8 +7,64 @@ if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
77 set (CMAKE_CUDA_ARCHITECTURES 75)
88endif ()
99
10+ # function to get the project version from the most recent git tag
11+ function (get_version_from_git )
12+ find_package (Git QUIET )
13+ if (NOT Git_FOUND)
14+ message (WARNING "Git not found" )
15+ return ()
16+ endif ()
17+
18+ execute_process (
19+ COMMAND ${GIT_EXECUTABLE} describe --tags --always
20+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
21+ OUTPUT_VARIABLE GIT_TAG
22+ OUTPUT_STRIP_TRAILING_WHITESPACE
23+ RESULT_VARIABLE GIT_RESULT
24+ )
25+
26+ if (NOT GIT_RESULT EQUAL 0)
27+ message (WARNING "Failed to get git tag" )
28+ return ()
29+ endif ()
30+
31+ execute_process (
32+ COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD
33+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
34+ OUTPUT_VARIABLE GIT_COMMIT_SHORT_HASH
35+ OUTPUT_STRIP_TRAILING_WHITESPACE
36+ )
37+
38+ string (REGEX REPLACE "^v" "" CLEAN_TAG "${GIT_TAG} " )
39+ if (CLEAN_TAG MATCHES "^([0-9]+)\\ .([0-9]+)\\ .([0-9]+)(-.*)?$" )
40+
41+ set (PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1} )
42+ set (PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE )
43+ set (PROJECT_VERSION_MINOR ${CMAKE_MATCH_2} )
44+ set (PROJECT_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE )
45+ set (PROJECT_VERSION_PATCH ${CMAKE_MATCH_3} )
46+ set (PROJECT_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE )
47+
48+ set (FULL_VERSION "${CMAKE_MATCH_1} .${CMAKE_MATCH_2} .${CMAKE_MATCH_3} +${GIT_COMMIT_SHORT_HASH} " )
49+ set (FULL_VERSION "${CMAKE_MATCH_1} .${CMAKE_MATCH_2} .${CMAKE_MATCH_3} +${GIT_COMMIT_SHORT_HASH} " PARENT_SCOPE )
50+ set (PROJECT_VERSION "${CMAKE_MATCH_1} .${CMAKE_MATCH_2} .${CMAKE_MATCH_3} " )
51+ set (PROJECT_VERSION "${CMAKE_MATCH_1} .${CMAKE_MATCH_2} .${CMAKE_MATCH_3} " PARENT_SCOPE )
52+ else ()
53+ message (WARNING "Tag '${CLEAN_TAG} ' does not match semver format" )
54+ endif ()
55+ endfunction ()
56+
1057# set the project name and version
11- project (nuTens VERSION 0.4.0)
58+ get_version_from_git ()
59+ message (INFO "nuTens PROJECT_VERSION: ${PROJECT_VERSION} " )
60+ project (nuTens VERSION ${PROJECT_VERSION} )
61+
62+ # configure the version.h file with all above version info
63+ configure_file (
64+ ${PROJECT_SOURCE_DIR} /cmake/templates/version.h.in
65+ ${PROJECT_BINARY_DIR} /include/version.h
66+ )
67+
1268
1369# Changes default install path to be a subdirectory of the build dir.
1470# Can set build dir at configure time with -DCMAKE_INSTALL_PREFIX=/install/path
0 commit comments