summaryrefslogtreecommitdiffstats
path: root/debian/patches/0001-Pull-version-information-from-debian-changelog-avoid.patch
blob: a08e667670b6b94a47faf98b0775091a90e73c08 (plain)
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
Date: Thu, 28 Oct 2021 10:18:00 -0400
Subject: Pull version information from debian/changelog (avoid git
 shenanigans)

Forwarded: not-needed
---
 cmake/version.cmake | 93 +++++++----------------------------------------------
 1 file changed, 11 insertions(+), 82 deletions(-)

diff --git a/cmake/version.cmake b/cmake/version.cmake
index f74126e..ff100f4 100644
--- a/cmake/version.cmake
+++ b/cmake/version.cmake
@@ -67,93 +67,22 @@ function(extract_version_info version var_prefix)
 endfunction()
 
 function(determine_version source_dir var_prefix)
-  set(has_release_tag NO)
-  set(has_version_txt NO)
-  set(local_prefix "_determine_ver")
-  # find out base version via version.txt
-  set(base_version "0.0.0")
-  if (EXISTS "${source_dir}/version.txt")
-    set(has_version_txt YES)
-    file(STRINGS "${source_dir}/version.txt" version_file)
-    extract_version_info("${version_file}" "${local_prefix}")
-    set(base_version "${${local_prefix}_VERSION}")
-    message(STATUS "Found version.txt with ${version_file}")
+  # Debian-specific version information
+  if(DEFINED ENV{DEB_VERSION})
+    set(version_full "$ENV{DEB_VERSION}")
   else()
-    message(STATUS "Found no version.txt.")
+    message(FATAL_ERROR "DEB_VERSION not defined")
   endif()
-  # for GIT_EXECUTABLE
-  find_package(Git)
-  # get a description of the version, something like:
-  #   v1.9.1-0-g38ffe82        (a tagged release)
-  #   v1.9.1-0-g38ffe82-dirty  (a tagged release with local modifications)
-  #   v1.9.0-3-g5b92266        (post-release snapshot)
-  #   v1.9.0-3-g5b92266-dirty  (post-release snapshot with local modifications)
-  _git(version describe --abbrev=${GIT_REV_LEN} --match "v[0-9]*" --long --dirty)
-  if (NOT _git_ec EQUAL 0)
-    # no annotated tags, fake one
-    message(STATUS "Found no annotated tags.")
-    _git(revision rev-parse --short=${GIT_REV_LEN} --verify HEAD)
-    if (_git_ec EQUAL 0)
-      set(version "v${base_version}-0-g${revision}")
-      # check if dirty (this won't detect untracked files, but should be ok)
-      _git(changes diff-index --quiet HEAD --)
-      if (NOT _git_ec EQUAL 0)
-        string(APPEND version "-dirty")
-      endif()
-      # append the commit timestamp of the most recent commit (only
-      # in non-release branches -- typically master)
-      _git(commit_timestamp show -s --format=%ct)
-      if (_git_ec EQUAL 0)
-        string(APPEND version "+${commit_timestamp}")
-      endif()
-    elseif(has_version_txt)
-      # Nothing to get from git - so use version.txt completely
-      set(version "${version_file}")
-    else()
-      # Sad case - no git, no version.txt
-      set(version "v${base_version}")
-    endif()
+  if(DEFINED ENV{SOURCE_DATE_EPOCH})
+    set(commit_timestamp "$ENV{SOURCE_DATE_EPOCH}")
   else()
-    set(has_release_tag YES)
-    message(STATUS "Found annotated tag ${version}")
+    message(FATAL_ERROR "SOURCE_DATE_EPOCH not defined")
   endif()
-  extract_version_info("${version}" "${local_prefix}")
-  if ("${has_version_txt}" AND NOT ${base_version} STREQUAL ${local_prefix}_VERSION)
-    message(WARNING "Tagged version ${${local_prefix}_VERSION} doesn't match one from the version.txt: ${base_version}")
-    if (${base_version} VERSION_GREATER ${local_prefix}_VERSION)
-      set(${local_prefix}_VERSION ${base_version})
-    endif()
-  endif()
-  foreach(suffix VERSION VERSION_NCOMMITS VERSION_GIT_REV VERSION_IS_DIRTY VERSION_COMMIT_TIMESTAMP)
-    if (NOT DEFINED ${local_prefix}_${suffix})
-      message(FATAL_ERROR "Unable to determine version.")
-    endif()
-    set(${var_prefix}_${suffix} "${${local_prefix}_${suffix}}" PARENT_SCOPE)
-    message(STATUS "${var_prefix}_${suffix}: ${${local_prefix}_${suffix}}")
-  endforeach()
-  # Set VERSION_SUFFIX and VERSION_FULL. When making changes, be aware that
-  # this is used in packaging as well and will affect ordering.
-  # | state                 | version_full                |
-  # |-----------------------------------------------------|
-  # | exact tag             | 0.9.0                       |
-  # | exact tag, dirty      | 0.9.0+git20180604           |
-  # | after tag             | 0.9.0+git20180604.1.085039f |
-  # | no tag, version.txt   | 0.9.0+git20180604.2ee02af   |
-  # | no tag, no version.txt| 0.0.0+git20180604.2ee02af   |
-  string(TIMESTAMP date "%Y%m%d" UTC)
-  set(version_suffix "")
-  if (NOT ${local_prefix}_VERSION_NCOMMITS EQUAL 0)
-    # 0.9.0+git20150604.4.289818b
-    string(APPEND version_suffix "+git${date}.${${local_prefix}_VERSION_NCOMMITS}.${${local_prefix}_VERSION_GIT_REV}")
-  elseif ((NOT has_release_tag) AND ((NOT has_version_txt) OR ("${base_version}" STREQUAL "0.0.0") OR (NOT "${revision}" STREQUAL "")))
-    # 0.9.0+git20150604.289818b
-    string(APPEND version_suffix "+git${date}.${${local_prefix}_VERSION_GIT_REV}")
-  elseif(${local_prefix}_VERSION_IS_DIRTY)
-    # 0.9.0+git20150604
-    string(APPEND version_suffix "+git${date}")
-  endif()
-  set(version_full "${${local_prefix}_VERSION}${version_suffix}")
+  string(REGEX REPLACE "^.*-" "-" version_suffix "${version_full}")
+  string(REGEX REPLACE "-[^-]*$" "" version_upstream "${version_full}")
   # set the results
+  set(${var_prefix}_VERSION "${version_upstream}" PARENT_SCOPE)
+  set(${var_prefix}_VERSION_COMMIT_TIMESTAMP "${commit_timestamp}" PARENT_SCOPE)
   set(${var_prefix}_VERSION_SUFFIX "${version_suffix}" PARENT_SCOPE)
   set(${var_prefix}_VERSION_FULL "${version_full}" PARENT_SCOPE)
   # for informational purposes