commit | author | age
|
32921b
|
1 |
#! /usr/bin/ksh |
MT |
2 |
# |
|
3 |
# |
|
4 |
# This file and its contents are supplied under the terms of the |
|
5 |
# Common Development and Distribution License ("CDDL"), version 1.0. |
|
6 |
# You may only use this file in accordance with the terms of version |
|
7 |
# 1.0 of the CDDL. |
|
8 |
# |
|
9 |
# A full copy of the text of the CDDL should have accompanied this |
|
10 |
# source. A copy of the CDDL is also available via the Internet at |
|
11 |
# http://www.illumos.org/license/CDDL. |
|
12 |
# |
|
13 |
|
|
14 |
# |
|
15 |
# Copyright 2022 Marcel Telka |
|
16 |
# |
|
17 |
|
|
18 |
|
|
19 |
function usage |
|
20 |
{ |
|
21 |
[[ -n "$1" ]] && printf "ERROR: %s\n\n" "$1" |
7b930a
|
22 |
printf "Usage: perl-version-convert DISTRIBUTION VERSION\n" >&2 |
32921b
|
23 |
[[ -n "$1" ]] && exit 1 |
MT |
24 |
exit 0 |
|
25 |
} |
|
26 |
|
|
27 |
|
|
28 |
(($# == 0)) && usage |
|
29 |
(($# == 1)) && usage "Missing VERSION to convert" |
18b807
|
30 |
(($# > 2)) && usage "Too many arguments" |
32921b
|
31 |
|
7b930a
|
32 |
DISTRIBUTION="$1" |
32921b
|
33 |
VERSION="$2" |
MT |
34 |
|
|
35 |
|
|
36 |
function unsupported_version |
|
37 |
{ |
|
38 |
typeset -n C=$1 |
|
39 |
typeset VERSION=$2 |
|
40 |
|
|
41 |
printf "ERROR: Unsupported version format: %s\n" "$VERSION" >&2 |
|
42 |
C="UNSUPPORTED_VERSION_FORMAT_$VERSION" |
|
43 |
} |
|
44 |
|
|
45 |
function convert_version |
|
46 |
{ |
|
47 |
typeset -n C=$1 |
7b930a
|
48 |
typeset DIST=$2 |
32921b
|
49 |
typeset VERSION=$3 |
MT |
50 |
|
|
51 |
typeset -a VER |
|
52 |
|
|
53 |
# |
|
54 |
# Handle special cases |
|
55 |
# |
|
56 |
# Notes: |
|
57 |
# |
18b807
|
58 |
# (*) The version format for Authen-PAM is 0.XX, but it was integrated |
MT |
59 |
# as XX, so we need to follow that. |
|
60 |
# |
32921b
|
61 |
# (*) The actual version format for Crypt-PBKDF2 is 0.YYDDDR (YY - |
MT |
62 |
# year, DDD - day in year, R - release in the day) so it had to be |
|
63 |
# converted to 0.YY.DDD.R to be more accurate, but it was already |
|
64 |
# integrated as 0.YYDDDR, so we need to follow it for now, because |
|
65 |
# 0.YY.DDD.R would be considered older than 0.YYDDDR. Possible |
|
66 |
# conversion of 0.YYDDDR to YY.DDD.R would cause problem in a case the |
18b807
|
67 |
# Crypt-PBKDF2 bump their major version. |
32921b
|
68 |
# |
MT |
69 |
# (*) Module-Build uses apparently version format 0.XXYY so it had to |
|
70 |
# be converted to 0.XX.YY, but it was already integrated as 0.XXYY, so |
|
71 |
# we need to follow it for now. |
|
72 |
# |
7b930a
|
73 |
[[ "$DIST" == "Authen-PAM" && "${VERSION:0:2}" == "0." ]] && ((${#VERSION} == 4)) && VERSION=$((1${VERSION:2:2} - 100)) |
MT |
74 |
[[ "$DIST" == "Crypt-PBKDF2" && "${VERSION:0:2}" == "0." ]] && ((${#VERSION} == 8)) && VER[1]=$((1${VERSION:2:6} - 1000000)) && VERSION=${VERSION:0:1} |
|
75 |
[[ "$DIST" == "Email-Sender" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 8)) && VER[1]=${VERSION:2:1} && VER[2]=$((1${VERSION:3:5} - 100000)) && VERSION=${VERSION:0:1} |
|
76 |
[[ "$DIST" == "Email-Sender" && "${VERSION:0:2}" != "0." && "${VERSION:3:2}" == "00" ]] && ((${#VERSION} == 5)) && VER[1]=${VERSION:2:1} && VERSION=${VERSION:0:1} |
b89e7e
|
77 |
[[ "$DIST" == "Email-Sender" && "${VERSION:0:2}" != "0." ]] && ((${#VERSION} == 5)) && VER[1]=${VERSION:2:1} && VER[2]=$((1${VERSION:3:2} - 100)) && VERSION=${VERSION:0:1} |
f0e229
|
78 |
[[ "$DIST" == "Error" && "${VERSION:0:2}" == "0." ]] && ((${#VERSION} == 7)) && VER[2]=$((1${VERSION:4:3} - 1000)) && VERSION=${VERSION:0:4} |
3671db
|
79 |
[[ "$DIST" == "Geography-Countries" ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:4:2} - 100)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:4} |
f80154
|
80 |
[[ "$DIST" == "IPC-Run" ]] && ((${#VERSION} == 3)) && VERSION="${VERSION}0" |
MT |
81 |
[[ "$DIST" == "IPC-Run" ]] && ((${#VERSION} == 10)) && VER[3]=$((1${VERSION:9:1} - 10)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[1]=$((1${VERSION:4:2} - 100)) && VERSION=${VERSION:0:4} |
702a08
|
82 |
[[ "$DIST" == "Log-Dispatch" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 3)) && VERSION=${VERSION}0 |
MT |
83 |
[[ "$DIST" == "Log-Dispatch" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 5)) && VER[2]=$((1${VERSION:4:1} - 10)) && VERSION=${VERSION:0:4} |
e0934a
|
84 |
[[ "$DIST" == "Mail-AuthenticationResults" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:1} |
F |
85 |
[[ "$DIST" == "Mail-AuthenticationResults" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 12)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VER[4]=${VERSION:11:1} && VERSION=${VERSION:0:1} |
|
86 |
[[ "$DIST" == "Mail-AuthenticationResults" && "${VERSION:0:2}" == "2." ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:1} |
|
87 |
[[ "$DIST" == "Mail-AuthenticationResults" && "${VERSION:0:2}" == "2." ]] && ((${#VERSION} == 12)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VER[4]=${VERSION:11:1} && VERSION=${VERSION:0:1} |
1138c1
|
88 |
[[ "$DIST" == "Mail-DKIM" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:1} |
F |
89 |
[[ "$DIST" == "Mail-DKIM" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 12)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VER[4]=${VERSION:11:1} && VERSION=${VERSION:0:1} |
ca8412
|
90 |
[[ "$DIST" == "Mail-DMARC" && "${VERSION:1:1}" == "." ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:1} |
MT |
91 |
[[ "$DIST" == "Mail-DMARC" && "${VERSION:0:2}" == "0." ]] && ((${#VERSION} == 8)) && VER[1]=$((1${VERSION:2:2} - 100)) && VER[2]=$((1${VERSION:4:3} - 1000)) && VER[3]=$((1${VERSION:7:1} - 10)) && VERSION=${VERSION:0:1} |
a6ca76
|
92 |
if [[ "$DIST" == "Math-Pari" && "$VERSION" != "${VERSION/.}" ]] ; then |
MT |
93 |
V=${VERSION#*.} |
|
94 |
VERSION=${VERSION%.$V} |
|
95 |
[[ "${V%a}" != "$V" ]] && V="${V%a}0001" |
|
96 |
[[ "${V%b}" != "$V" ]] && V="${V%b}0002" |
|
97 |
((${#V} / 2 * 2 != ${#V})) && V="${V}0" |
|
98 |
i=1 |
|
99 |
while ((${#V})) ; do |
|
100 |
VER[$i]=$((1${V:0:2} - 100)) |
|
101 |
V=${V:2} |
|
102 |
i=$((i + 1)) |
|
103 |
done |
|
104 |
fi |
b959a2
|
105 |
[[ "$DIST" == "Mail-SPF" && "${VERSION:0:2}" == "3." ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:1} |
7b930a
|
106 |
[[ "$DIST" == "Module-Build" ]] && ((${#VERSION} == 6)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VERSION=${VERSION:0:1} |
MT |
107 |
[[ "$DIST" == "Mozilla-CA" ]] && ((${#VERSION} == 8)) && VER[1]=$((1${VERSION:4:2} - 100)) && VER[2]=$((1${VERSION:6:2} - 100)) && VERSION=${VERSION:0:4} |
1138c1
|
108 |
[[ "$DIST" == "Net-DNS-Resolver-Mock" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:2:4} - 10000)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:1} |
94d608
|
109 |
[[ "$DIST" == "Net-IMAP-Simple" ]] && ((${#VERSION} == 7)) && VER[3]=$((1${VERSION:6:1} - 10)) && VERSION=${VERSION:0:6} |
6b488c
|
110 |
[[ "$DIST" == "Perl-Critic" && "${VERSION:0:2}" == "0." ]] && ((${#VERSION} == 3)) && VERSION=${VERSION}0 |
MT |
111 |
[[ "$DIST" == "Perl-Critic" && "${VERSION:0:2}" == "1." ]] && ((${#VERSION} == 4)) && VERSION=${VERSION}0 |
dd2cfc
|
112 |
[[ "$DIST" == "Perl-Tidy" ]] && ((${#VERSION} == 8)) && VER[1]=$((1${VERSION:4:2} - 100)) && VER[2]=$((1${VERSION:6:2} - 100)) && VERSION=${VERSION:0:4} |
7b930a
|
113 |
[[ "$DIST" == "PkgConfig" && "${VERSION:4:3}" == "026" ]] && ((${#VERSION} == 7)) && VER[1]=$((1${VERSION:2:2} - 100)) && VERSION=${VERSION:0:1} |
a22cd1
|
114 |
[[ "$DIST" == "Proc-ProcessTable" && "${VERSION:0:2}" == "0." ]] && ((${#VERSION} == 5)) && VER[2]=$((1${VERSION:4:1} - 10)) && VERSION=${VERSION:0:4} |
5900db
|
115 |
[[ "$DIST" == "Regexp-Common" ]] && ((${#VERSION} == 10)) && VER[1]=$((1${VERSION:4:2} - 100)) && VER[2]=$((1${VERSION:6:2} - 100)) && VER[3]=$((1${VERSION:8:2} - 100)) && VERSION=${VERSION:0:4} |
32921b
|
116 |
|
MT |
117 |
C= |
|
118 |
VER[0]=${VERSION%%.*} |
|
119 |
|
|
120 |
if [[ "${VER[0]}" != "$VERSION" ]] ; then |
|
121 |
V=${VERSION#*.} |
|
122 |
|
|
123 |
# Currently we do not support underscore in version |
|
124 |
V=${V//*_*} |
|
125 |
|
|
126 |
case "$V" in |
|
127 |
?) VER[1]=$V ;; |
|
128 |
??) VER[1]=$((1$V - 100)) ;; |
|
129 |
?.?) VER[1]=${V:0:1} && VER[2]=${V:2:1} ;; |
|
130 |
???) VER[1]=$((1$V - 1000)) ;; |
|
131 |
?.??) VER[1]=${V:0:1} && VER[2]=$((1${V:2:2} - 100)) ;; |
|
132 |
??.?) VER[1]=$((1${V:0:2} - 100)) && VER[2]=${V:3:1} ;; |
|
133 |
????) VER[1]=$((1${V:0:2} - 100)) && VER[2]=$((1${V:2:2} - 100)) ;; |
a0176f
|
134 |
??.??) VER[1]=$((1${V:0:2} - 100)) && VER[2]=$((1${V:3:2} - 100)) ;; |
89b571
|
135 |
???.?) VER[1]=$((1${V:0:3} - 1000)) && VER[2]=$((1${V:4:1} - 10)) ;; |
32921b
|
136 |
?.????) unsupported_version C $VERSION ; return ;; |
MT |
137 |
??.???) unsupported_version C $VERSION ; return ;; |
|
138 |
???.??) unsupported_version C $VERSION ; return ;; |
|
139 |
????.?) unsupported_version C $VERSION ; return ;; |
|
140 |
??????) VER[1]=$((1${V:0:3} - 1000)) ; VER[2]=$((1${V:3:3} - 1000)) ;; |
a0176f
|
141 |
???.???)VER[1]=$((1${V:0:3} - 1000)) && VER[2]=$((1${V:4:3} - 1000)) ;; |
32921b
|
142 |
*) unsupported_version C $VERSION ; return ;; |
MT |
143 |
esac |
|
144 |
fi |
|
145 |
|
|
146 |
i=0 |
|
147 |
while ((i < ${#VER[@]})) ; do |
|
148 |
((i > 0)) && C="$C." |
|
149 |
C="$C${VER[$i]}" |
|
150 |
i=$((i + 1)) |
|
151 |
done |
|
152 |
} |
|
153 |
|
|
154 |
|
7b930a
|
155 |
# For convenience we replace '::' by '-' in a case somebody calls this script |
MT |
156 |
# with module name instead of distribution name. |
|
157 |
convert_version VER "${DISTRIBUTION//::/-}" "$VERSION" |
32921b
|
158 |
printf "%s\n" "$VER" |