Add GitDetermineVersion.cmake
This will be used to determine the ExprTk version through the git tag.
This commit is contained in:
parent
f46bffcd69
commit
70389029ba
|
@ -0,0 +1,94 @@
|
|||
# **************************************************************
|
||||
# * C++ Mathematical Expression Toolkit Library *
|
||||
# * *
|
||||
# * Author: Arash Partow (1999-2023) *
|
||||
# * URL: https://www.partow.net/programming/exprtk/index.html *
|
||||
# * *
|
||||
# * Copyright notice: *
|
||||
# * Free use of the Mathematical Expression Toolkit Library is *
|
||||
# * permitted under the guidelines and in accordance with the *
|
||||
# * most current version of the MIT License. *
|
||||
# * http://www.opensource.org/licenses/MIT *
|
||||
# * *
|
||||
# **************************************************************
|
||||
|
||||
# Used to determine the version of a repository using "git describe", if git
|
||||
# is found. On success sets following variables in caller's scope:
|
||||
# ${var_prefix}_VERSION
|
||||
# ${var_prefix}_VERSION_MAJOR
|
||||
# ${var_prefix}_VERSION_MINOR
|
||||
# ${var_prefix}_VERSION_PATCH
|
||||
# ${var_prefix}_VERSION_PATCH_EXTRA
|
||||
# ${var_prefix}_VERSION_FULL
|
||||
#
|
||||
# If git is not found, or git describe cannot be run successfully, then these
|
||||
# variables are left unchanged and status message is printed.
|
||||
#
|
||||
# Arguments are:
|
||||
# source_dir : Source directory
|
||||
# git_command : git executable
|
||||
# var_prefix : prefix for variables e.g. "Project".
|
||||
function(determine_version source_dir git_command var_prefix)
|
||||
if ("$Format:$" STREQUAL "")
|
||||
# We are in an exported tarball and should use the shipped version
|
||||
# information. Just return here to avoid the warning message at the end of
|
||||
# this function.
|
||||
return()
|
||||
elseif (NOT ${CMAKE_PROJECT_NAME}_GIT_DESCRIBE} AND
|
||||
EXISTS ${git_command} AND
|
||||
EXISTS ${source_dir}/.git)
|
||||
execute_process(
|
||||
COMMAND ${git_command} describe --tags
|
||||
WORKING_DIRECTORY ${source_dir}
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE output
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE)
|
||||
if (NOT result EQUAL 0)
|
||||
# git describe failed (bad return code).
|
||||
set(output "")
|
||||
endif ()
|
||||
else ()
|
||||
# note, output may be set to empty if ${CMAKE_PROJECT_NAME}_GIT_DESCRIBE is not defined.
|
||||
set(output "${CMAKE_PROJECT_NAME}_GIT_DESCRIBE")
|
||||
endif ()
|
||||
|
||||
# check the output is not empty
|
||||
if (NOT output)
|
||||
message(STATUS
|
||||
"Could not use git to determine source version")
|
||||
return()
|
||||
endif ()
|
||||
extract_version_components(${source_dir} "${output}" tmp)
|
||||
if (DEFINED tmp_VERSION)
|
||||
foreach (suffix VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH
|
||||
VERSION_PATCH_EXTRA VERSION_FULL)
|
||||
set(${var_prefix}_${suffix} ${tmp_${suffix}} PARENT_SCOPE)
|
||||
endforeach ()
|
||||
else ()
|
||||
message(STATUS "Could not use git to determine source version")
|
||||
endif ()
|
||||
endfunction()
|
||||
|
||||
# Extracts components from a version string. See determine_version() for usage.
|
||||
function(extract_version_components source_dir version_string var_prefix)
|
||||
string(REGEX MATCH "^v?(([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*))$"
|
||||
version_matches "${version_string}")
|
||||
if (CMAKE_MATCH_0)
|
||||
# note, we don't use CMAKE_MATCH_0 for `full` since it may or may not have
|
||||
# the `v` prefix.
|
||||
set(full ${CMAKE_MATCH_1})
|
||||
set(major ${CMAKE_MATCH_2})
|
||||
set(minor ${CMAKE_MATCH_3})
|
||||
set(patch ${CMAKE_MATCH_4})
|
||||
set(patch_extra ${CMAKE_MATCH_5})
|
||||
|
||||
set(${var_prefix}_VERSION "${major}.${minor}.${patch}" PARENT_SCOPE)
|
||||
set(${var_prefix}_VERSION_MAJOR ${major} PARENT_SCOPE)
|
||||
set(${var_prefix}_VERSION_MINOR ${minor} PARENT_SCOPE)
|
||||
set(${var_prefix}_VERSION_PATCH ${patch} PARENT_SCOPE)
|
||||
set(${var_prefix}_VERSION_PATCH_EXTRA ${patch_extra} PARENT_SCOPE)
|
||||
set(${var_prefix}_VERSION_FULL ${full} PARENT_SCOPE)
|
||||
endif ()
|
||||
endfunction()
|
Loading…
Reference in New Issue