97 lines
3.8 KiB
CMake
97 lines
3.8 KiB
CMake
##============================================================================
|
|
## Copyright (c) Kitware, Inc.
|
|
## All rights reserved.
|
|
## See LICENSE.txt for details.
|
|
##
|
|
## This software is distributed WITHOUT ANY WARRANTY; without even
|
|
## the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
## PURPOSE. See the above copyright notice for more information.
|
|
##============================================================================
|
|
|
|
# Used to determine the version for VTK-m source using "git describe", if git
|
|
# is found. On success sets the 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
|
|
# ${var_prefix}_VERSION_IS_RELEASE is true, if patch-extra is empty.
|
|
#
|
|
# If git is not found, or git describe cannot be run successfully, then these
|
|
# variables are left unchanged and a status message is printed.
|
|
#
|
|
# Arguments are:
|
|
# source_dir : Source directory
|
|
# git_command : git executable
|
|
# var_prefix : prefix for variables e.g. "VTKm".
|
|
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 VTKm_GIT_DESCRIBE AND
|
|
EXISTS ${git_command} AND
|
|
EXISTS ${source_dir}/.git)
|
|
execute_process(
|
|
COMMAND ${git_command} describe
|
|
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 VTKm_GIT_DESCRIBE is not defined.
|
|
set(output "${VTKm_GIT_DESCRIBE}")
|
|
endif()
|
|
|
|
unset(tmp_VERSION)
|
|
extract_version_components("${output}" tmp)
|
|
if(DEFINED tmp_VERSION)
|
|
if (NOT "${tmp_VERSION}" STREQUAL "${${var_prefix}_VERSION}")
|
|
message(WARNING
|
|
"Version from git (${tmp_VERSION}) disagrees with hard coded version (${${var_prefix}_VERSION}). Either update the git tags or version.txt.")
|
|
endif()
|
|
foreach(suffix VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH
|
|
VERSION_PATCH_EXTRA VERSION_FULL VERSION_IS_RELEASE)
|
|
set(${var_prefix}_${suffix} ${tmp_${suffix}} PARENT_SCOPE)
|
|
endforeach()
|
|
else()
|
|
message(STATUS
|
|
"Could not use git to determine source version, using version ${${var_prefix}_VERSION_FULL}")
|
|
endif()
|
|
endfunction()
|
|
|
|
# Extracts components from a version string. See determine_version() for usage.
|
|
function(extract_version_components 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}" 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)
|
|
if("${major}.${minor}.${patch}" VERSION_EQUAL "${full}")
|
|
set(${var_prefix}_VERSION_IS_RELEASE TRUE PARENT_SCOPE)
|
|
else()
|
|
set(${var_prefix}_VERSION_IS_RELEASE FALSE PARENT_SCOPE)
|
|
endif()
|
|
endif()
|
|
endfunction()
|