File: f3dVersion.cmake

package info (click to toggle)
f3d 3.2.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,668 kB
  • sloc: cpp: 99,109; python: 811; sh: 342; xml: 238; java: 101; javascript: 95; makefile: 25
file content (88 lines) | stat: -rw-r--r-- 3,505 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Modified from VTKDetermineVersion.cmake from VTK project
# Copyright (c) Kitware, Inc.
# License BSD 3 Clause

# Used to determine the version for F3D source using "git describe", if git
# is found. On success sets following variables in caller's scope:
#   ${var_prefix}_VERSION
#   ${var_prefix}_MAJOR_VERSION
#   ${var_prefix}_MINOR_VERSION
#   ${var_prefix}_PATCH_VERSION
#   ${var_prefix}_PATCH_VERSION_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 status message is printed.
#
# This expect ${var_prefix}_MAJOR_VERSION, ${var_prefix}_MINOR_VERSION, ${var_prefix}_PATCH_VERSION
# and ${var_prefix}_VERSION to be already set and will be used for checking when possible.
#
# Arguments are:
#   source_dir : Source directory
#   git_command : git executable
#   var_prefix : prefix for variables e.g. "f3d".
function(f3d_determine_version source_dir git_command var_prefix)
  if (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 ()
    set(output "")
  endif()

  unset(tmp_VERSION)
  f3d_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 main CMakeLists.txt. Discarding version from git.")
    else ()
      foreach(suffix VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION
                     PATCH_VERSION_EXTRA VERSION_FULL VERSION_IS_RELEASE)
        set(${var_prefix}_${suffix} ${tmp_${suffix}} PARENT_SCOPE)
      endforeach()
    endif()
  else()
    message(STATUS
      "Could not use git to determine source version, using version ${${var_prefix}_VERSION}")
  endif()
endfunction()

# Extracts components from a version string. See f3d_determine_version() for usage.
function(f3d_extract_version_components version_string var_prefix)
  set(CMAKE_MATCH_5 "") # Init the patch extra as it can be undefined
  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 contains 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}_MAJOR_VERSION ${major} PARENT_SCOPE)
    set(${var_prefix}_MINOR_VERSION ${minor} PARENT_SCOPE)
    set(${var_prefix}_PATCH_VERSION ${patch} PARENT_SCOPE)
    set(${var_prefix}_PATCH_VERSION_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()