Gentoo Archives: gentoo-commits

From: Quentin Retornaz <gentoo@××××××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/proj/libressl:master commit in: dev-qt/qtbase/, dev-qt/qtbase/files/
Date: Tue, 31 Jan 2023 23:14:52
Message-Id: 1675206823.ddd7427f0a2703ab44da44a15d47b336ea58987e.quentin@gentoo
1 commit: ddd7427f0a2703ab44da44a15d47b336ea58987e
2 Author: Anna “CyberTailor” <cyber <AT> sysrq <DOT> in>
3 AuthorDate: Fri Jan 27 00:07:54 2023 +0000
4 Commit: Quentin Retornaz <gentoo <AT> retornaz <DOT> com>
5 CommitDate: Tue Jan 31 23:13:43 2023 +0000
6 URL: https://gitweb.gentoo.org/repo/proj/libressl.git/commit/?id=ddd7427f
7
8 dev-qt/qtbase: new package, add 6.4.2
9
10 Signed-off-by: Anna “CyberTailor” <cyber <AT> sysrq.in>
11 Closes: https://github.com/gentoo/libressl/pull/491
12 Signed-off-by: Quentin Retornaz <gentoo <AT> retornaz.com>
13
14 dev-qt/qtbase/Manifest | 1 +
15 dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch | 445 ++++++++++++++++++++++++
16 dev-qt/qtbase/metadata.xml | 38 ++
17 dev-qt/qtbase/qtbase-6.4.2.ebuild | 190 ++++++++++
18 4 files changed, 674 insertions(+)
19
20 diff --git a/dev-qt/qtbase/Manifest b/dev-qt/qtbase/Manifest
21 new file mode 100644
22 index 0000000..e77cc5d
23 --- /dev/null
24 +++ b/dev-qt/qtbase/Manifest
25 @@ -0,0 +1 @@
26 +DIST qtbase-everywhere-src-6.4.2.tar.xz 47987188 BLAKE2B 5d25d8b912ba775faa5855ad4326cbd19580cc7f98b997a9bbdb4a2216550a60b2c8a7a2ef1741a5dfd66ebde0d1cf5d0394215474c39c7779648b03c3892812 SHA512 b00cce7bfc29d3a34c9a2f08db147c4bfd962e178916d60033e1845b25eaeaa4fbd42f5c1d7e39453ddb412a4e91c22c8eae52745eda8a47e35a691054d5496e
27
28 diff --git a/dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch b/dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch
29 new file mode 100644
30 index 0000000..f75f651
31 --- /dev/null
32 +++ b/dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch
33 @@ -0,0 +1,445 @@
34 +Fixes Qt6 build on LibreSSL.
35 +
36 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp?rev=1.7
37 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qopenssl_p_h?rev=1.2
38 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslcontext_openssl_cpp?rev=1.2
39 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslsocket_openssl_symbols_p_h?rev=1.2
40 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qtls_openssl_cpp?rev=1.2
41 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qx509_openssl_cpp?rev=1.2
42 +
43 +--- a/src/plugins/tls/openssl/qopenssl_p.h
44 ++++ b/src/plugins/tls/openssl/qopenssl_p.h
45 +@@ -70,6 +70,13 @@
46 +
47 + QT_BEGIN_NAMESPACE
48 +
49 ++#ifndef DTLS_ANY_VERSION
50 ++#define DTLS_ANY_VERSION 0x1FFFF
51 ++#endif
52 ++#ifndef TLS_ANY_VERSION
53 ++#define TLS_ANY_VERSION 0x10000
54 ++#endif
55 ++
56 + struct QSslErrorEntry {
57 + int code = 0;
58 + int depth = 0;
59 +--- a/src/plugins/tls/openssl/qsslcontext_openssl.cpp
60 ++++ b/src/plugins/tls/openssl/qsslcontext_openssl.cpp
61 +@@ -49,9 +49,9 @@ extern "C" int q_verify_cookie_callback(SSL *ssl, cons
62 + }
63 + #endif // dtls
64 +
65 +-#ifdef TLS1_3_VERSION
66 ++#if defined(TLS1_3_VERSION) && !defined(LIBRESSL_VERSION_NUMBER)
67 + extern "C" int q_ssl_sess_set_new_cb(SSL *context, SSL_SESSION *session);
68 +-#endif // TLS1_3_VERSION
69 ++#endif // TLS1_3_VERSION && LIBRESSL_VERSION_NUMBE
70 +
71 + static inline QString msgErrorSettingBackendConfig(const QString &why)
72 + {
73 +@@ -370,9 +370,11 @@ QT_WARNING_POP
74 + return;
75 + }
76 +
77 ++#ifndef LIBRESSL_VERSION_NUMBER
78 + // A nasty hacked OpenSSL using a level that will make our auto-tests fail:
79 + if (q_SSL_CTX_get_security_level(sslContext->ctx) > 1 && *forceSecurityLevel())
80 + q_SSL_CTX_set_security_level(sslContext->ctx, 1);
81 ++#endif // LIBRESSL_VERSION_NUMBER
82 +
83 + const long anyVersion =
84 + #if QT_CONFIG(dtls)
85 +@@ -663,14 +665,14 @@ QT_WARNING_POP
86 + q_SSL_CTX_set_verify(sslContext->ctx, verificationMode, verificationCallback);
87 + }
88 +
89 +-#ifdef TLS1_3_VERSION
90 ++#if defined(TLS1_3_VERSION) && !defined(LIBRESSL_VERSION_NUMBER)
91 + // NewSessionTicket callback:
92 + if (mode == QSslSocket::SslClientMode && !isDtls) {
93 + q_SSL_CTX_sess_set_new_cb(sslContext->ctx, q_ssl_sess_set_new_cb);
94 + q_SSL_CTX_set_session_cache_mode(sslContext->ctx, SSL_SESS_CACHE_CLIENT);
95 + }
96 +
97 +-#endif // TLS1_3_VERSION
98 ++#endif // TLS1_3_VERSION && LIBRESSL_VERSION_NUMBER
99 +
100 + #if QT_CONFIG(dtls)
101 + // DTLS cookies:
102 +@@ -758,6 +760,7 @@ void QSslContext::applyBackendConfig(QSslContext *sslC
103 + }
104 + #endif // ocsp
105 +
106 ++#ifndef LIBRESSL_VERSION_NUMBER
107 + QSharedPointer<SSL_CONF_CTX> cctx(q_SSL_CONF_CTX_new(), &q_SSL_CONF_CTX_free);
108 + if (cctx) {
109 + q_SSL_CONF_CTX_set_ssl_ctx(cctx.data(), sslContext->ctx);
110 +@@ -804,7 +807,9 @@ void QSslContext::applyBackendConfig(QSslContext *sslC
111 + sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_finish() failed"));
112 + sslContext->errorCode = QSslError::UnspecifiedError;
113 + }
114 +- } else {
115 ++ } else
116 ++#endif // LIBRESSL_VERSION_NUMBER
117 ++ {
118 + sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_CTX_new() failed"));
119 + sslContext->errorCode = QSslError::UnspecifiedError;
120 + }
121 +--- a/src/plugins/tls/openssl/qsslsocket_openssl_symbols_p.h
122 ++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols_p.h
123 +@@ -46,6 +46,13 @@ QT_BEGIN_NAMESPACE
124 +
125 + #define DUMMYARG
126 +
127 ++#ifdef LIBRESSL_VERSION_NUMBER
128 ++typedef _STACK STACK;
129 ++typedef STACK OPENSSL_STACK;
130 ++typedef void OPENSSL_INIT_SETTINGS;
131 ++typedef int (*X509_STORE_CTX_verify_cb)(int ok,X509_STORE_CTX *ctx);
132 ++#endif
133 ++
134 + #if !defined QT_LINKED_OPENSSL
135 + // **************** Shared declarations ******************
136 + // ret func(arg)
137 +@@ -203,15 +210,32 @@ const BIO_METHOD *q_BIO_s_mem();
138 + void q_AUTHORITY_INFO_ACCESS_free(AUTHORITY_INFO_ACCESS *a);
139 + int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
140 + int q_EVP_PKEY_up_ref(EVP_PKEY *a);
141 ++#ifdef OPENSSL_NO_DEPRECATED_3_0
142 + EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
143 + void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
144 ++#endif // OPENSSL_NO_DEPRECATED_3_0
145 + int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
146 ++#ifndef LIBRESSL_VERSION_NUMBER
147 + int q_OPENSSL_sk_num(OPENSSL_STACK *a);
148 + void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *));
149 + OPENSSL_STACK *q_OPENSSL_sk_new_null();
150 + void q_OPENSSL_sk_push(OPENSSL_STACK *st, void *data);
151 + void q_OPENSSL_sk_free(OPENSSL_STACK *a);
152 + void * q_OPENSSL_sk_value(OPENSSL_STACK *a, int b);
153 ++#else // LIBRESSL_VERSION_NUMBER
154 ++int q_sk_num(STACK *a);
155 ++#define q_OPENSSL_sk_num(a) q_sk_num(a)
156 ++void q_sk_pop_free(STACK *a, void (*b)(void *));
157 ++#define q_OPENSSL_sk_pop_free(a, b) q_sk_pop_free(a, b)
158 ++STACK *q_sk_new_null();
159 ++#define q_OPENSSL_sk_new_null() q_sk_new_null()
160 ++void q_sk_push(STACK *st, void *data);
161 ++#define q_OPENSSL_sk_push(st, data) q_sk_push(st, data)
162 ++void q_sk_free(STACK *a);
163 ++#define q_OPENSSL_sk_free q_sk_free
164 ++void * q_sk_value(STACK *a, int b);
165 ++#define q_OPENSSL_sk_value(a, b) q_sk_value(a, b)
166 ++#endif // LIBRESSL_VERSION_NUMBER
167 + int q_SSL_session_reused(SSL *a);
168 + qssloptions q_SSL_CTX_set_options(SSL_CTX *ctx, qssloptions op);
169 + int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
170 +@@ -238,9 +262,15 @@ void q_DH_get0_pqg(const DH *dh, const BIGNUM **p, con
171 + # define q_SSL_load_error_strings() q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \
172 + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
173 +
174 ++#ifndef LIBRESSL_VERSION_NUMBER
175 + #define q_SKM_sk_num(st) q_OPENSSL_sk_num((OPENSSL_STACK *)st)
176 + #define q_SKM_sk_value(type, st,i) (type *)q_OPENSSL_sk_value((OPENSSL_STACK *)st, i)
177 ++#else // LIBRESSL_VERSION_NUMBER
178 ++#define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
179 ++#define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i)
180 ++#endif // LIBRESSL_VERSION_NUMBER
181 +
182 ++
183 + #define q_OPENSSL_add_all_algorithms_conf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
184 + | OPENSSL_INIT_ADD_ALL_DIGESTS \
185 + | OPENSSL_INIT_LOAD_CONFIG, NULL)
186 +@@ -425,12 +455,14 @@ int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const c
187 + int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
188 + int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c);
189 + X509_STORE *q_SSL_CTX_get_cert_store(const SSL_CTX *a);
190 ++#ifndef LIBRESSL_VERSION_NUMBER
191 + SSL_CONF_CTX *q_SSL_CONF_CTX_new();
192 + void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a);
193 + void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b);
194 + unsigned int q_SSL_CONF_CTX_set_flags(SSL_CONF_CTX *a, unsigned int b);
195 + int q_SSL_CONF_CTX_finish(SSL_CONF_CTX *a);
196 + int q_SSL_CONF_cmd(SSL_CONF_CTX *a, const char *b, const char *c);
197 ++#endif // LIBRESSL_VERSION_NUMBER
198 + void q_SSL_free(SSL *a);
199 + STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a);
200 + const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a);
201 +@@ -532,14 +564,26 @@ void q_PKCS12_free(PKCS12 *pkcs12);
202 + #define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
203 + #define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
204 + #define q_SSL_CTX_set_mode(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
205 ++#ifndef LIBRESSL_VERSION_NUMBER
206 + #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num((st))
207 ++#else
208 ++#define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st))
209 ++#endif
210 + #define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i))
211 +
212 + void q_GENERAL_NAME_free(GENERAL_NAME *a);
213 +
214 ++#ifndef LIBRESSL_VERSION_NUMBER
215 + #define q_sk_X509_num(st) q_SKM_sk_num((st))
216 ++#else
217 ++#define q_sk_X509_num(st) q_SKM_sk_num(X509, (st))
218 ++#endif
219 + #define q_sk_X509_value(st, i) q_SKM_sk_value(X509, (st), (i))
220 ++#ifndef LIBRESSL_VERSION_NUMBER
221 + #define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num((st))
222 ++#else
223 ++#define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num(SSL_CIPHER, (st))
224 ++#endif
225 + #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
226 + #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \
227 + q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
228 +@@ -641,7 +685,11 @@ int q_OCSP_check_validity(ASN1_GENERALIZEDTIME *thisup
229 + int q_OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, ASN1_OCTET_STRING **pikeyHash,
230 + ASN1_INTEGER **pserial, OCSP_CERTID *cid);
231 +
232 ++#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3050000fL
233 ++#define q_OCSP_resp_get0_certs(bs) ((bs)->certs)
234 ++#else
235 + const STACK_OF(X509) *q_OCSP_resp_get0_certs(const OCSP_BASICRESP *bs);
236 ++#endif
237 + OCSP_CERTID *q_OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer);
238 + void q_OCSP_CERTID_free(OCSP_CERTID *cid);
239 + int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
240 +@@ -660,8 +708,14 @@ int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
241 +
242 + void *q_CRYPTO_malloc(size_t num, const char *file, int line);
243 + #define q_OPENSSL_malloc(num) q_CRYPTO_malloc(num, "", 0)
244 ++
245 ++#ifndef LIBRESSL_VERSION_NUMBER
246 + void q_CRYPTO_free(void *str, const char *file, int line);
247 + # define q_OPENSSL_free(addr) q_CRYPTO_free(addr, "", 0)
248 ++#else
249 ++void q_CRYPTO_free(void *a);
250 ++# define q_OPENSSL_free(addr) q_CRYPTO_free(addr)
251 ++#endif
252 +
253 + void q_SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val));
254 + const char *q_SSL_alert_type_string(int value);
255 +@@ -724,7 +778,11 @@ int q_EVP_PKEY_set1_DH(EVP_PKEY *a, DH *b);
256 +
257 + int q_DH_bits(DH *dh);
258 + int q_RSA_bits(RSA *a);
259 ++#if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER < 0x3050000fL)
260 ++#define q_DSA_bits(dsa) q_BN_num_bits((dsa)->p)
261 ++#else
262 + int q_DSA_bits(DSA *a);
263 ++#endif
264 +
265 + int q_EVP_PKEY_assign(EVP_PKEY *a, int b, void *r);
266 + int q_EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
267 +--- a/src/plugins/tls/openssl/qtls_openssl.cpp
268 ++++ b/src/plugins/tls/openssl/qtls_openssl.cpp
269 +@@ -1438,13 +1438,13 @@ bool TlsCryptographOpenSSL::initSslContext()
270 + else if (mode == QSslSocket::SslServerMode)
271 + q_SSL_set_psk_server_callback(ssl, &q_ssl_psk_server_callback);
272 +
273 +-#if OPENSSL_VERSION_NUMBER >= 0x10101006L
274 ++#if OPENSSL_VERSION_NUMBER >= 0x10101006L && !defined(LIBRESSL_VERSION_NUMBER)
275 + // Set the client callback for TLSv1.3 PSK
276 + if (mode == QSslSocket::SslClientMode
277 + && QSslSocket::sslLibraryBuildVersionNumber() >= 0x10101006L) {
278 + q_SSL_set_psk_use_session_callback(ssl, &q_ssl_psk_use_session_callback);
279 + }
280 +-#endif // openssl version >= 0x10101006L
281 ++#endif // OPENSSL_VERSION_NUMBER >= 0x10101006L && !defined(LIBRESSL_VERSION_NUMBER)
282 +
283 + #endif // OPENSSL_NO_PSK
284 +
285 +--- a/src/plugins/tls/openssl/qx509_openssl.cpp
286 ++++ b/src/plugins/tls/openssl/qx509_openssl.cpp
287 +@@ -63,7 +63,11 @@ QMultiMap<QByteArray, QString> mapFromX509Name(X509_NA
288 + unsigned char *data = nullptr;
289 + int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e));
290 + info.insert(name, QString::fromUtf8((char*)data, size));
291 +- q_CRYPTO_free(data, nullptr, 0);
292 ++#if QT_CONFIG(opensslv11) && !defined(LIBRESSL_VERSION_NUMBER)
293 ++ q_CRYPTO_free(data, nullptr, 0);
294 ++#else
295 ++ q_CRYPTO_free(data);
296 ++#endif
297 + }
298 +
299 + return info;
300 +@@ -73,12 +77,27 @@ QDateTime dateTimeFromASN1(const ASN1_TIME *aTime)
301 + {
302 + QDateTime result;
303 + tm lTime;
304 ++#ifdef LIBRESSL_VERSION_NUMBER
305 ++ const char *data;
306 ++ size_t len;
307 ++ int type;
308 +
309 ++ data = (const char*)ASN1_STRING_get0_data((const ASN1_STRING *)aTime);
310 ++ len = ASN1_STRING_length(aTime);
311 ++ type = ASN1_STRING_type(aTime);
312 ++
313 ++ if (ASN1_time_parse(data, len, &lTime, type) == type) {
314 ++ QDate resDate(lTime.tm_year + 1900, lTime.tm_mon + 1, lTime.tm_mday);
315 ++ QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec);
316 ++ result = QDateTime(resDate, resTime, Qt::UTC);
317 ++ }
318 ++#else
319 + if (q_ASN1_TIME_to_tm(aTime, &lTime)) {
320 + QDate resDate(lTime.tm_year + 1900, lTime.tm_mon + 1, lTime.tm_mday);
321 + QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec);
322 + result = QDateTime(resDate, resTime, Qt::UTC);
323 + }
324 ++#endif
325 +
326 + return result;
327 + }
328 +@@ -189,7 +208,7 @@ QVariant x509UnknownExtensionToValue(X509_EXTENSION *e
329 + QVariantList list;
330 + bool isMap = false;
331 +
332 +- for (int j = 0; j < q_SKM_sk_num(val); j++) {
333 ++ for (int j = 0; j < q_SKM_sk_num(CONF_VALUE, val); j++) {
334 + CONF_VALUE *nval = q_SKM_sk_value(CONF_VALUE, val, j);
335 + if (nval->name && nval->value) {
336 + isMap = true;
337 +@@ -285,7 +304,7 @@ QVariant x509ExtensionToValue(X509_EXTENSION *ext)
338 + if (!info)
339 + return {};
340 + QVariantMap result;
341 +- for (int i=0; i < q_SKM_sk_num(info); i++) {
342 ++ for (int i=0; i < q_SKM_sk_num(ACCESS_DESCRIPTION, info); i++) {
343 + ACCESS_DESCRIPTION *ad = q_SKM_sk_value(ACCESS_DESCRIPTION, info, i);
344 +
345 + GENERAL_NAME *name = ad->location;
346 +--- a/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp
347 ++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp
348 +@@ -113,23 +113,36 @@ DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYA
349 + DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, w, return 0, return)
350 + DEFINEFUNC(int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *c, c, return 0, return)
351 + DEFINEFUNC(int, EVP_PKEY_up_ref, EVP_PKEY *a, a, return 0, return)
352 ++#ifdef OPENSSL_NO_DEPRECATED_3_0
353 + DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e, return nullptr, return)
354 + DEFINEFUNC(int, EVP_PKEY_param_check, EVP_PKEY_CTX *ctx, ctx, return 0, return)
355 + DEFINEFUNC(void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx, return, return)
356 ++#endif // OPENSSL_NO_DEPRECATED_3_0
357 ++#ifndef LIBRESSL_VERSION_NUMBER
358 + DEFINEFUNC(int, OPENSSL_sk_num, OPENSSL_STACK *a, a, return -1, return)
359 + DEFINEFUNC2(void, OPENSSL_sk_pop_free, OPENSSL_STACK *a, a, void (*b)(void*), b, return, DUMMYARG)
360 + DEFINEFUNC(OPENSSL_STACK *, OPENSSL_sk_new_null, DUMMYARG, DUMMYARG, return nullptr, return)
361 + DEFINEFUNC2(void, OPENSSL_sk_push, OPENSSL_STACK *a, a, void *b, b, return, DUMMYARG)
362 + DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG)
363 + DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return nullptr, return)
364 ++#else
365 ++DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return)
366 ++DEFINEFUNC2(void, sk_pop_free, STACK *a, a, void (*b)(void*), b, return, DUMMYARG)
367 ++DEFINEFUNC(_STACK *, sk_new_null, DUMMYARG, DUMMYARG, return nullptr, return)
368 ++DEFINEFUNC2(void, sk_push, _STACK *a, a, void *b, b, return, DUMMYARG)
369 ++DEFINEFUNC(void, sk_free, _STACK *a, a, return, DUMMYARG)
370 ++DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return nullptr, return)
371 ++#endif // LIBRESSL_VERSION_NUMBER
372 + DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return)
373 + DEFINEFUNC2(qssloptions, SSL_CTX_set_options, SSL_CTX *ctx, ctx, qssloptions op, op, return 0, return)
374 + using info_callback = void (*) (const SSL *ssl, int type, int val);
375 + DEFINEFUNC2(void, SSL_set_info_callback, SSL *ssl, ssl, info_callback cb, cb, return, return)
376 + DEFINEFUNC(const char *, SSL_alert_type_string, int value, value, return nullptr, return)
377 + DEFINEFUNC(const char *, SSL_alert_desc_string_long, int value, value, return nullptr, return)
378 ++#ifndef LIBRESSL_VERSION_NUMBER
379 + DEFINEFUNC(int, SSL_CTX_get_security_level, const SSL_CTX *ctx, ctx, return -1, return)
380 + DEFINEFUNC2(void, SSL_CTX_set_security_level, SSL_CTX *ctx, ctx, int level, level, return, return)
381 ++#endif // LIBRESSL_VERSION_NUMBER
382 + #ifdef TLS1_3_VERSION
383 + DEFINEFUNC2(int, SSL_CTX_set_ciphersuites, SSL_CTX *ctx, ctx, const char *str, str, return 0, return)
384 + DEFINEFUNC2(void, SSL_set_psk_use_session_callback, SSL *ssl, ssl, q_SSL_psk_use_session_cb_func_t callback, callback, return, DUMMYARG)
385 +@@ -155,7 +168,11 @@ DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE
386 + DEFINEFUNC3(int, X509_STORE_set_ex_data, X509_STORE *a, a, int idx, idx, void *data, data, return 0, return)
387 + DEFINEFUNC2(void *, X509_STORE_get_ex_data, X509_STORE *r, r, int idx, idx, return nullptr, return)
388 + DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *a, a, return nullptr, return)
389 ++#ifndef LIBRESSL_VERSION_NUMBER
390 + DEFINEFUNC3(void, CRYPTO_free, void *str, str, const char *file, file, int line, line, return, DUMMYARG)
391 ++#else
392 ++DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG)
393 ++#endif
394 + DEFINEFUNC(long, OpenSSL_version_num, void, DUMMYARG, return 0, return)
395 + DEFINEFUNC(const char *, OpenSSL_version, int a, a, return nullptr, return)
396 + DEFINEFUNC(unsigned long, SSL_SESSION_get_ticket_lifetime_hint, const SSL_SESSION *session, session, return 0, return)
397 +@@ -194,7 +211,9 @@ DEFINEFUNC5(int, OCSP_id_get0_info, ASN1_OCTET_STRING
398 + ASN1_OCTET_STRING **piKeyHash, piKeyHash, ASN1_INTEGER **pserial, pserial, OCSP_CERTID *cid, cid,
399 + return 0, return)
400 + DEFINEFUNC2(OCSP_RESPONSE *, OCSP_response_create, int status, status, OCSP_BASICRESP *bs, bs, return nullptr, return)
401 ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
402 + DEFINEFUNC(const STACK_OF(X509) *, OCSP_resp_get0_certs, const OCSP_BASICRESP *bs, bs, return nullptr, return)
403 ++#endif
404 + DEFINEFUNC2(int, OCSP_id_cmp, OCSP_CERTID *a, a, OCSP_CERTID *b, b, return -1, return)
405 + DEFINEFUNC7(OCSP_SINGLERESP *, OCSP_basic_add1_status, OCSP_BASICRESP *r, r, OCSP_CERTID *c, c, int s, s,
406 + int re, re, ASN1_TIME *rt, rt, ASN1_TIME *t, t, ASN1_TIME *n, n, return nullptr, return)
407 +@@ -215,7 +234,9 @@ DEFINEFUNC(long, ASN1_INTEGER_get, ASN1_INTEGER *a, a,
408 + DEFINEFUNC2(int, ASN1_INTEGER_cmp, const ASN1_INTEGER *a, a, const ASN1_INTEGER *b, b, return 1, return)
409 + DEFINEFUNC(int, ASN1_STRING_length, ASN1_STRING *a, a, return 0, return)
410 + DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return)
411 ++#ifndef LIBRESSL_VERSION_NUMBER
412 + DEFINEFUNC2(int, ASN1_TIME_to_tm, const ASN1_TIME *s, s, struct tm *tm, tm, return 0, return)
413 ++#endif
414 + DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return)
415 + DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return)
416 + DEFINEFUNC2(BIO *, BIO_new_mem_buf, void *a, a, int b, b, return nullptr, return)
417 +@@ -291,12 +312,14 @@ DEFINEFUNC3(int, SSL_CTX_use_certificate_file, SSL_CTX
418 + DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return -1, return)
419 + DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b, b, int c, c, return -1, return)
420 + DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return nullptr, return)
421 ++#ifndef LIBRESSL_VERSION_NUMBER
422 + DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return nullptr, return);
423 + DEFINEFUNC(void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a, return ,return);
424 + DEFINEFUNC2(void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, b, return, return);
425 + DEFINEFUNC2(unsigned int, SSL_CONF_CTX_set_flags, SSL_CONF_CTX *a, a, unsigned int b, b, return 0, return);
426 + DEFINEFUNC(int, SSL_CONF_CTX_finish, SSL_CONF_CTX *a, a, return 0, return);
427 + DEFINEFUNC3(int, SSL_CONF_cmd, SSL_CONF_CTX *a, a, const char *b, b, const char *c, c, return 0, return);
428 ++#endif
429 + DEFINEFUNC(void, SSL_free, SSL *a, a, return, DUMMYARG)
430 + DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, const SSL *a, a, return nullptr, return)
431 + DEFINEFUNC(const SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a, return nullptr, return)
432 +@@ -859,9 +882,11 @@ bool q_resolveOpenSslSymbols()
433 + RESOLVEFUNC(EVP_CIPHER_CTX_reset)
434 + RESOLVEFUNC(AUTHORITY_INFO_ACCESS_free)
435 + RESOLVEFUNC(EVP_PKEY_up_ref)
436 ++#ifdef OPENSSL_NO_DEPRECATED_3_0
437 + RESOLVEFUNC(EVP_PKEY_CTX_new)
438 + RESOLVEFUNC(EVP_PKEY_param_check)
439 + RESOLVEFUNC(EVP_PKEY_CTX_free)
440 ++#endif // OPENSSL_NO_DEPRECATED_3_0
441 + RESOLVEFUNC(OPENSSL_sk_new_null)
442 + RESOLVEFUNC(OPENSSL_sk_push)
443 + RESOLVEFUNC(OPENSSL_sk_free)
444 +@@ -955,7 +980,9 @@ bool q_resolveOpenSslSymbols()
445 + RESOLVEFUNC(OCSP_check_validity)
446 + RESOLVEFUNC(OCSP_cert_to_id)
447 + RESOLVEFUNC(OCSP_id_get0_info)
448 ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
449 + RESOLVEFUNC(OCSP_resp_get0_certs)
450 ++#endif
451 + RESOLVEFUNC(OCSP_basic_sign)
452 + RESOLVEFUNC(OCSP_response_create)
453 + RESOLVEFUNC(i2d_OCSP_RESPONSE)
454 +@@ -1051,12 +1078,14 @@ bool q_resolveOpenSslSymbols()
455 + RESOLVEFUNC(SSL_CTX_use_PrivateKey)
456 + RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
457 + RESOLVEFUNC(SSL_CTX_get_cert_store);
458 ++#ifndef LIBRESSL_VERSION_NUMBER
459 + RESOLVEFUNC(SSL_CONF_CTX_new);
460 + RESOLVEFUNC(SSL_CONF_CTX_free);
461 + RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx);
462 + RESOLVEFUNC(SSL_CONF_CTX_set_flags);
463 + RESOLVEFUNC(SSL_CONF_CTX_finish);
464 + RESOLVEFUNC(SSL_CONF_cmd);
465 ++#endif
466 + RESOLVEFUNC(SSL_accept)
467 + RESOLVEFUNC(SSL_clear)
468 + RESOLVEFUNC(SSL_connect)
469 +@@ -1106,7 +1135,9 @@ bool q_resolveOpenSslSymbols()
470 + RESOLVEFUNC(RSA_free)
471 +
472 + RESOLVEFUNC(DH_bits)
473 ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
474 + RESOLVEFUNC(DSA_bits)
475 ++#endif
476 + RESOLVEFUNC(RSA_bits)
477 +
478 + #ifndef OPENSSL_NO_EC
479
480 diff --git a/dev-qt/qtbase/metadata.xml b/dev-qt/qtbase/metadata.xml
481 new file mode 100644
482 index 0000000..d1512cb
483 --- /dev/null
484 +++ b/dev-qt/qtbase/metadata.xml
485 @@ -0,0 +1,38 @@
486 +<?xml version="1.0" encoding="UTF-8"?>
487 +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
488 +<pkgmetadata>
489 + <maintainer type="person">
490 + <email>cyber+gentoo@×××××.in</email>
491 + <name>Anna</name>
492 + </maintainer>
493 + <use>
494 + <flag name="brotli">Enable support for Brotli decompression</flag>
495 + <flag name="concurrent">Build Qt6Concurrent module</flag>
496 + <flag name="dbus">Build Qt6DBus module</flag>
497 + <flag name="egl">Enable EGL integration</flag>
498 + <flag name="eglfs">Build the EGL Full Screen/Single Surface platform plugin</flag>
499 + <flag name="evdev">Enable support for input devices via evdev</flag>
500 + <flag name="gssapi">Enable support for GSSAPI (<pkg>virtual/krb5</pkg>)</flag>
501 + <flag name="gtk">Build the GTK platform theme plugin</flag>
502 + <flag name="gui">Build Qt6Gui module</flag>
503 + <flag name="libinput">Enable support for input devices via <pkg>dev-libs/libinput</pkg></flag>
504 + <flag name="libproxy">Use <pkg>net-libs/libproxy</pkg> for automatic HTTP/SOCKS proxy configuration</flag>
505 + <flag name="network">Build Qt6Network module</flag>
506 + <flag name="sql">Build Qt6Sql module</flag>
507 + <flag name="systemd">Enable native journald logging support</flag>
508 + <flag name="tslib">Enable support for touchscreen devices via <pkg>x11-libs/tslib</pkg></flag>
509 + <flag name="tuio">Build plugin to receive touch events over the TUIO protocol</flag>
510 + <flag name="vulkan">Enable support for Vulkan</flag>
511 + <flag name="widgets">Build Qt6Widgets module</flag>
512 + <flag name="X">Build the XCB platform plugin and enable X11 integration</flag>
513 + </use>
514 + <upstream>
515 + <bugs-to>https://bugreports.qt.io/</bugs-to>
516 + <doc>https://doc.qt.io/</doc>
517 + </upstream>
518 + <slots>
519 + <subslots>
520 + Must only be used by packages that are known to use private parts of the Qt API.
521 + </subslots>
522 + </slots>
523 +</pkgmetadata>
524
525 diff --git a/dev-qt/qtbase/qtbase-6.4.2.ebuild b/dev-qt/qtbase/qtbase-6.4.2.ebuild
526 new file mode 100644
527 index 0000000..50f6845
528 --- /dev/null
529 +++ b/dev-qt/qtbase/qtbase-6.4.2.ebuild
530 @@ -0,0 +1,190 @@
531 +# Copyright 2021-2023 Gentoo Authors
532 +# Distributed under the terms of the GNU General Public License v2
533 +
534 +EAPI=8
535 +
536 +inherit qt6-build
537 +
538 +DESCRIPTION="Cross-platform application development framework"
539 +
540 +if [[ ${QT6_BUILD_TYPE} == release ]]; then
541 + KEYWORDS="~amd64"
542 +fi
543 +
544 +# Qt Modules
545 +IUSE="+concurrent +dbus +gui +network +sql opengl +widgets +xml zstd"
546 +REQUIRED_USE="
547 + opengl? ( gui )
548 + widgets? ( gui )
549 + X? ( || ( evdev libinput ) )
550 +"
551 +
552 +QTGUI_IUSE="accessibility egl eglfs evdev gles2-only +jpeg +libinput tslib tuio vulkan +X"
553 +QTNETWORK_IUSE="brotli gssapi libproxy sctp +ssl vnc"
554 +QTSQL_IUSE="freetds mysql oci8 odbc postgres +sqlite"
555 +IUSE+=" ${QTGUI_IUSE} ${QTNETWORK_IUSE} ${QTSQL_IUSE} cups gtk icu systemd +udev"
556 +# QtPrintSupport = QtGui + QtWidgets enabled.
557 +# ibus = xkbcommon + dbus, and xkbcommon needs either libinput or X
558 +REQUIRED_USE+="
559 + $(printf '%s? ( gui ) ' ${QTGUI_IUSE//+/})
560 + $(printf '%s? ( network ) ' ${QTNETWORK_IUSE//+/})
561 + $(printf '%s? ( sql ) ' ${QTSQL_IUSE//+/})
562 + accessibility? ( dbus X )
563 + cups? ( gui widgets )
564 + eglfs? ( egl )
565 + gtk? ( widgets )
566 + gui? ( || ( eglfs X ) || ( libinput X ) )
567 + libinput? ( udev )
568 + sql? ( || ( freetds mysql oci8 odbc postgres sqlite ) )
569 + vnc? ( gui )
570 + X? ( gles2-only? ( egl ) )
571 +"
572 +
573 +# TODO:
574 +# qtimageformats: mng not done yet, qtimageformats.git upstream commit 9443239c
575 +# qtnetwork: connman, networkmanager
576 +DEPEND="
577 + app-crypt/libb2
578 + dev-libs/double-conversion:=
579 + dev-libs/glib:2
580 + dev-libs/libpcre2:=[pcre16,unicode]
581 + dev-util/gtk-update-icon-cache
582 + media-libs/fontconfig
583 + >=media-libs/freetype-2.6.1:2
584 + >=media-libs/harfbuzz-1.6.0:=
585 + media-libs/tiff:=
586 + >=sys-apps/dbus-1.4.20
587 + sys-libs/zlib:=
588 + brotli? ( app-arch/brotli:= )
589 + evdev? ( sys-libs/mtdev )
590 + freetds? ( dev-db/freetds )
591 + gles2-only? ( media-libs/libglvnd )
592 + !gles2-only? ( media-libs/libglvnd[X] )
593 + gssapi? ( virtual/krb5 )
594 + gtk? (
595 + x11-libs/gtk+:3
596 + x11-libs/libX11
597 + x11-libs/pango
598 + )
599 + gui? ( media-libs/libpng:= )
600 + icu? ( dev-libs/icu:= )
601 + !icu? ( virtual/libiconv )
602 + jpeg? ( media-libs/libjpeg-turbo:= )
603 + libinput? (
604 + dev-libs/libinput:=
605 + >=x11-libs/libxkbcommon-0.5.0
606 + )
607 + libproxy? ( net-libs/libproxy )
608 + mysql? ( dev-db/mysql-connector-c:= )
609 + oci8? ( dev-db/oracle-instantclient:=[sdk] )
610 + odbc? ( dev-db/unixODBC )
611 + postgres? ( dev-db/postgresql:* )
612 + sctp? ( kernel_linux? ( net-misc/lksctp-tools ) )
613 + sqlite? ( dev-db/sqlite:3 )
614 + ssl? ( dev-libs/openssl:= )
615 + systemd? ( sys-apps/systemd:= )
616 + tslib? ( >=x11-libs/tslib-1.21 )
617 + udev? ( virtual/libudev:= )
618 + vulkan? ( dev-util/vulkan-headers )
619 + X? (
620 + x11-libs/libdrm
621 + x11-libs/libICE
622 + x11-libs/libSM
623 + x11-libs/libX11
624 + >=x11-libs/libxcb-1.12:=
625 + >=x11-libs/libxkbcommon-0.5.0[X]
626 + x11-libs/xcb-util-image
627 + x11-libs/xcb-util-keysyms
628 + x11-libs/xcb-util-renderutil
629 + x11-libs/xcb-util-wm
630 + )
631 + zstd? ( app-arch/zstd:= )
632 +"
633 +RDEPEND="${DEPEND}"
634 +
635 +PATCHES=(
636 + "${FILESDIR}"/${PN}-6.4.2-libressl.patch # from OpenBSD ports, not upstreamable
637 +)
638 +
639 +src_configure() {
640 + local mycmakeargs=(
641 + -DINSTALL_ARCHDATADIR=${QT6_ARCHDATADIR}
642 + -DINSTALL_BINDIR=${QT6_BINDIR}
643 + -DINSTALL_DATADIR=${QT6_DATADIR}
644 + -DINSTALL_DOCDIR=${QT6_DOCDIR}
645 + -DINSTALL_EXAMPLESDIR=${QT6_EXAMPLESDIR}
646 + -DINSTALL_INCLUDEDIR=${QT6_HEADERDIR}
647 + -DINSTALL_LIBDIR=${QT6_LIBDIR}
648 + -DINSTALL_LIBEXECDIR=${QT6_LIBEXECDIR}
649 + -DINSTALL_MKSPECSDIR=${QT6_ARCHDATADIR}/mkspecs
650 + -DINSTALL_PLUGINSDIR=${QT6_PLUGINDIR}
651 + -DINSTALL_QMLDIR=${QT6_QMLDIR}
652 + -DINSTALL_SYSCONFDIR=${QT6_SYSCONFDIR}
653 + -DINSTALL_TRANSLATIONSDIR=${QT6_TRANSLATIONDIR}
654 + -DQT_FEATURE_androiddeployqt=OFF
655 + $(qt_feature concurrent)
656 + $(qt_feature dbus)
657 + $(qt_feature gui)
658 + $(qt_feature gui testlib)
659 + $(qt_feature icu)
660 + $(qt_feature network)
661 + $(qt_feature sql)
662 + $(qt_feature systemd journald)
663 + $(qt_feature udev libudev)
664 + $(qt_feature xml)
665 + $(qt_feature zstd)
666 + )
667 + use gui && mycmakeargs+=(
668 + $(qt_feature accessibility accessibility_atspi_bridge)
669 + $(qt_feature egl)
670 + $(qt_feature eglfs eglfs_egldevice)
671 + $(qt_feature eglfs eglfs_gbm)
672 + $(qt_feature evdev)
673 + $(qt_feature evdev mtdev)
674 + -DQT_FEATURE_gif=ON
675 + $(qt_feature jpeg)
676 + $(qt_feature opengl)
677 + $(qt_feature gles2-only opengles2)
678 + $(qt_feature libinput)
679 + $(qt_feature tslib)
680 + $(qt_feature tuio tuiotouch)
681 + $(qt_feature vulkan)
682 + $(qt_feature widgets)
683 + $(qt_feature X xcb)
684 + $(qt_feature X xcb_xlib)
685 + )
686 + use widgets && mycmakeargs+=(
687 + $(qt_feature cups)
688 + $(qt_feature gtk gtk3)
689 + )
690 + if use libinput || use X; then
691 + mycmakeargs+=( -DQT_FEATURE_xkbcommon=ON )
692 + fi
693 + use network && mycmakeargs+=(
694 + $(qt_feature brotli)
695 + -DQT_FEATURE_dtls=OFF
696 + $(qt_feature gssapi)
697 + $(qt_feature libproxy)
698 + $(qt_feature sctp)
699 + $(qt_feature ssl openssl_linked)
700 + $(qt_feature vnc)
701 + )
702 + use sql && mycmakeargs+=(
703 + $(qt_feature freetds sql_tds)
704 + $(qt_feature mysql sql_mysql)
705 + $(qt_feature oci8 sql_oci)
706 + $(qt_feature odbc sql_odbc)
707 + $(qt_feature postgres sql_psql)
708 + $(qt_feature sqlite sql_sqlite)
709 + $(qt_feature sqlite system_sqlite)
710 + )
711 +
712 + qt6-build_src_configure
713 +}
714 +
715 +src_install() {
716 + qt6-build_src_install
717 +
718 + # https://bugs.gentoo.org/863395
719 + dosym ../$(get_libdir)/qt6/bin/qmake /usr/bin/qmake6
720 +}