forked from transmission/transmission
-
Notifications
You must be signed in to change notification settings - Fork 0
/
update-version-h.sh
executable file
·109 lines (96 loc) · 3.82 KB
/
update-version-h.sh
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
#!/bin/bash
# Generate files to be included: only overwrite them if changed so make
# won't rebuild everything unless necessary
replace_if_differs() {
if cmp "$1" "$2" > /dev/null 2>&1; then
rm -f "$1"
else
mv -f "$1" "$2"
fi
}
echo "creating libtransmission/version.h"
major_version=$(grep 'set[(]TR_VERSION_MAJOR' CMakeLists.txt | cut -d \" -f 2)
minor_version=$(grep 'set[(]TR_VERSION_MINOR' CMakeLists.txt | cut -d \" -f 2)
patch_version=$(grep 'set[(]TR_VERSION_PATCH' CMakeLists.txt | cut -d \" -f 2)
beta_number=$(grep 'set[(]TR_VERSION_BETA_NUMBER' CMakeLists.txt | cut -d \" -f 2)
if grep -q 'set[(]TR_VERSION_DEV TRUE)' CMakeLists.txt; then
is_dev=true
else
is_dev=false
fi
if [ "$is_dev" != true ] && [ -z "${beta_number}" ]; then
release_number=1
fi
# derived from above: semver version string. https://semver.org/
# '4.0.0-beta.1'
# '4.0.0-beta.1.dev' (a dev release between beta 1 and 2)
# '4.0.0-beta.2'
# '4.0.0'
user_agent_prefix="${major_version}.${minor_version}.${patch_version}"
if [ "$is_dev" = true ] || [ -n "${beta_number}" ]; then
user_agent_prefix="${user_agent_prefix}-"
if [ -n "${beta_number}" ]; then
user_agent_prefix="${user_agent_prefix}beta.${beta_number}"
fi
if [ "$is_dev" = true ] && [ -n "${beta_number}" ]; then
user_agent_prefix="${user_agent_prefix}."
fi
if [ "$is_dev" = true ]; then
user_agent_prefix="${user_agent_prefix}dev";
fi
fi
# derived from above: peer-id prefix. https://www.bittorrent.org/beps/bep_0020.html
# chars 4, 5, 6 are major, minor, patch in https://en.wikipedia.org/wiki/Base62
# char 7 is '0' for a stable release, 'B' for a beta release, or 'Z' for a dev build
# '-TR400B-' (4.0.0 Beta)
# '-TR400Z-' (4.0.0 Dev)
# '-TR4000-' (4.0.0)
BASE62=($(echo {0..9} {A..Z} {a..z}))
peer_id_prefix="-TR${BASE62[$(( 10#$major_version ))]}${BASE62[$(( 10#$minor_version ))]}${BASE62[$(( 10#$patch_version ))]}"
if [ "$is_dev" = true ]; then
peer_id_prefix="${peer_id_prefix}Z"
elif [ -n "${beta_number}" ]; then
peer_id_prefix="${peer_id_prefix}B"
else
peer_id_prefix="${peer_id_prefix}0"
fi
peer_id_prefix="${peer_id_prefix}-"
vcs_revision=
vcs_revision_file=REVISION
if [ -n "$JENKINS_URL" ] && [ -n "$GIT_COMMIT" ]; then
vcs_revision=$GIT_COMMIT
elif [ -n "$TEAMCITY_PROJECT_NAME" ] && [ -n "$BUILD_VCS_NUMBER" ]; then
vcs_revision=$BUILD_VCS_NUMBER
elif [ -e ".git" ] && type git > /dev/null 2>&1; then
vcs_revision=$(git rev-list --max-count=1 HEAD)
elif [ -f "$vcs_revision_file" ]; then
vcs_revision=$(cat "$vcs_revision_file")
fi
if [ -n "$vcs_revision" ]; then
[ -f "$vcs_revision_file" ] && [ "$(cat "$vcs_revision_file")" = "$vcs_revision" ] || echo "$vcs_revision" > "$vcs_revision_file"
else
vcs_revision=0
rm -f "$vcs_revision_file"
fi
vcs_revision=$(echo $vcs_revision | head -c10)
cat > libtransmission/version.h.new << EOF
#pragma once
#define PEERID_PREFIX "${peer_id_prefix}"
#define USERAGENT_PREFIX "${user_agent_prefix}"
#define VCS_REVISION "${vcs_revision}"
#define VCS_REVISION_NUM ${vcs_revision}
#define SHORT_VERSION_STRING "${user_agent_prefix}"
#define LONG_VERSION_STRING "${user_agent_prefix} (${vcs_revision})"
#define VERSION_STRING_INFOPLIST ${user_agent_prefix}
#define BUILD_STRING_INFOPLIST $((major_version + 14714)).${minor_version}.$((patch_version * 100 + release_number * 99 + beta_number))
#define MAJOR_VERSION ${major_version}
#define MINOR_VERSION ${minor_version}
#define PATCH_VERSION ${patch_version}
EOF
# Add a release definition
case "${peer_id_prefix}" in
*X-) echo '#define TR_BETA_RELEASE 1' ;;
*Z-) echo '#define TR_NIGHTLY_RELEASE 1' ;;
*) echo '#define TR_STABLE_RELEASE 1' ;;
esac >> "libtransmission/version.h.new"
replace_if_differs libtransmission/version.h.new libtransmission/version.h