@@ -19,89 +19,100 @@ version (DeimosOpenSSL_1_0_0)
19
19
{
20
20
// https://www.openssl.org/news/changelog.html#openssl-100
21
21
// OpenSSL 1.0.0t was released 2015-12-03
22
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! " 1.0.0t" ;
22
+ public enum OpenSSLVersion = parseOpenSSLVersion( " 1.0.0t" ) ;
23
23
}
24
24
else version (DeimosOpenSSL_1_0_1)
25
25
{
26
26
// https://www.openssl.org/news/changelog.html#openssl-101
27
27
// OpenSSL 1.0.1u was released 2016-09-22
28
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! " 1.0.1u" ;
28
+ public enum OpenSSLVersion = parseOpenSSLVersion( " 1.0.1u" ) ;
29
29
}
30
30
else version (DeimosOpenSSL_1_0_2)
31
31
{
32
32
// https://www.openssl.org/news/changelog.html#openssl-102
33
33
// OpenSSL 1.0.2t was released 2019-09-10
34
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! " 1.0.2t" ;
34
+ public enum OpenSSLVersion = parseOpenSSLVersion( " 1.0.2t" ) ;
35
35
}
36
36
else version (DeimosOpenSSL_1_1_0)
37
37
{
38
38
// https://www.openssl.org/news/changelog.html#openssl-110
39
39
// OpenSSL 1.1.0l was released 2019-09-10
40
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! " 1.1.0l" ;
40
+ public enum OpenSSLVersion = parseOpenSSLVersion( " 1.1.0l" ) ;
41
41
}
42
42
else version (DeimosOpenSSL_1_1_1)
43
43
{
44
44
// https://www.openssl.org/news/changelog.html#openssl-111
45
45
// OpenSSL 1.1.1m was released 2021-12-14
46
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! " 1.1.1m" ;
46
+ public enum OpenSSLVersion = parseOpenSSLVersion( " 1.1.1m" ) ;
47
47
}
48
48
else version (DeimosOpenSSL_3_0)
49
49
{
50
50
// https://www.openssl.org/news/changelog.html#openssl-30
51
51
// OpenSSL 3.0.3 was released 2022-05-03
52
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! " 3.0.3" ;
52
+ public enum OpenSSLVersion = parseOpenSSLVersion( " 3.0.3" ) ;
53
53
}
54
54
else version (DeimosOpenSSLAutoDetect)
55
55
{
56
56
import deimos.openssl.version_;
57
57
58
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! OpenSSLTextVersion;
58
+ public enum OpenSSLVersion = parseOpenSSLVersion( OpenSSLTextVersion) ;
59
59
}
60
60
else
61
61
{
62
62
// It was decided in https://github.com/D-Programming-Deimos/openssl/pull/66
63
63
// that we should fall back to the latest supported version of the bindings,
64
64
// should the user provide neither explicit version nor `DeimosOpenSSLAutoDetect`
65
- public alias OpenSSLVersion = OpenSSLVersionTemplate ! " 1.1.0h" ;
65
+ public enum OpenSSLVersion = parseOpenSSLVersion( " 1.1.0h" ) ;
66
66
}
67
67
68
68
// Publicly aliased above
69
- private struct OpenSSLVersionTemplate ( string textVersion)
69
+ private struct OpenSSLVersionStruct
70
70
{
71
+ string text;
72
+ uint major, minor, patch;
73
+ int build;
74
+ }
75
+
76
+ private OpenSSLVersionStruct parseOpenSSLVersion ()(string textVersion)
77
+ {
78
+ OpenSSLVersionStruct v;
79
+
71
80
import std.ascii : isDigit;
72
81
import std.algorithm.iteration : splitter;
73
82
import std.algorithm.searching : canFind;
74
83
import std.conv : to;
75
84
import std.range : dropExactly;
76
85
77
- enum text = textVersion;
86
+ v. text = textVersion;
78
87
79
- enum uint major = textVersion.splitter(' .' )
88
+ v. major = textVersion.splitter(' .' )
80
89
.front.to! uint ;
81
- static assert (major >= 0 );
90
+ assert (v. major >= 0 );
82
91
83
- enum uint minor = textVersion.splitter(' .' )
92
+ v. minor = textVersion.splitter(' .' )
84
93
.dropExactly(1 )
85
94
.front.to! uint ;
86
- static assert (minor >= 0 );
95
+ assert (v. minor >= 0 );
87
96
88
97
// `std.algorithm.iteration : splitWhen` not usable at CT
89
98
// so we're using `canFind`.
90
- private enum string patchText = textVersion.splitter(' .' )
99
+ string patchText = textVersion.splitter(' .' )
91
100
.dropExactly(2 ).front;
92
- private enum patchChar = patchText.canFind! (
101
+ auto patchChar = patchText.canFind! (
93
102
(dchar c) => ! c.isDigit());
94
103
95
- enum uint patch = patchText[0 .. $ - patchChar].to! uint ;
96
- static assert (patch >= 0 );
104
+ v. patch = patchText[0 .. $ - patchChar].to! uint ;
105
+ assert (v. patch >= 0 );
97
106
98
- static if (patchChar)
107
+ if (patchChar)
99
108
{
100
- enum int build = (patchText[$ - 1 ] - ' `' );
101
- static assert (build >= 0 );
109
+ v. build = (patchText[$ - 1 ] - ' `' );
110
+ assert (v. build >= 0 );
102
111
}
103
112
else
104
- enum int build = 0 ;
113
+ v.build = 0 ;
114
+
115
+ return v;
105
116
}
106
117
107
118
/* Numeric release version identifier:
0 commit comments