summaryrefslogtreecommitdiff
path: root/cmake/GitVersion.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/GitVersion.cmake')
-rw-r--r--cmake/GitVersion.cmake50
1 files changed, 50 insertions, 0 deletions
diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake
new file mode 100644
index 000000000..7044aaffc
--- /dev/null
+++ b/cmake/GitVersion.cmake
@@ -0,0 +1,50 @@
+find_package(Git)
+
+# Extract a version from the latest tag matching something like v1.2.3.4
+function(get_git_version var dir)
+ if(NOT DEFINED ${var})
+ set(version "0.0")
+ if(GIT_EXECUTABLE)
+ set(command
+ "${GIT_EXECUTABLE}"
+ -C
+ "${dir}"
+ describe
+ --abbrev=0
+ --tags
+ --match
+ v*
+ )
+ execute_process(
+ COMMAND ${command}
+ RESULT_VARIABLE result
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE version
+ )
+ if(NOT result EQUAL 0)
+ message(
+ WARNING
+ "Getting ${var} failed: ${command} returned ${result}"
+ )
+ elseif("${version}" MATCHES "^v([0-9]+(\.[0-9]+)*).*")
+ set(version "${CMAKE_MATCH_1}")
+ else()
+ message(
+ WARNING
+ "Couldn't parse numeric version (like v1.2.3) from ${version}"
+ )
+ endif()
+ else()
+ message(
+ WARNING
+ "Couldn't find git executable to get ${var}, please use -D${var}"
+ )
+ endif()
+ endif()
+
+ set(${var}
+ ${version}
+ CACHE STRING
+ "The project version, detected using git if available"
+ )
+endfunction()