commit: d6a04bbc2910f099ef8869868a95241466ca68b6 Author: orbea <orbea <AT> riseup <DOT> net> AuthorDate: Fri Nov 21 14:24:16 2025 +0000 Commit: orbea <orbea <AT> riseup <DOT> net> CommitDate: Sat Nov 22 04:01:19 2025 +0000 URL: https://gitweb.gentoo.org/repo/proj/libressl.git/commit/?id=d6a04bbc
dev-qt/qtbase: add 6.10.1 Signed-off-by: orbea <orbea <AT> riseup.net> dev-qt/qtbase/Manifest | 1 + .../qtbase/files/qtbase-6.10.0-QTBUG-141099.patch | 31 ++ dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch | 354 +++++++++++++++++ dev-qt/qtbase/qtbase-6.10.1.ebuild | 440 +++++++++++++++++++++ 4 files changed, 826 insertions(+) diff --git a/dev-qt/qtbase/Manifest b/dev-qt/qtbase/Manifest index 5f6e198..bf12568 100644 --- a/dev-qt/qtbase/Manifest +++ b/dev-qt/qtbase/Manifest @@ -1 +1,2 @@ +DIST qtbase-everywhere-src-6.10.1.tar.xz 50234516 BLAKE2B bf4f79725d817b681f302d95827e425aa578302feaa8980b1263fbb3ef12480ce0d573b36b25738b9b673294a9d7227c8869ccef3b22a176c7655fe501767f58 SHA512 fd5dcdc59ec3b39e48563513ae438eb4540a28e72c46961295de2ccb08609289d477ef7e91aac0b8983f2d5b05b901b4f5be10eaca4ac4c6aa8cd598f37a228e DIST qtbase-everywhere-src-6.9.3.tar.xz 49856272 BLAKE2B c25fdd711061ae7521f8f0838e40db2b800062e469bef946ee57959846667450a33d817c84e5ae733d00b86f3daac25ecafa66aaf6fff76c68525718ad20a44c SHA512 d49b6356869830b7421e8bb94354884c132dcb37b9b2d56c88671bff0fe60e51a4ee961a7db3f248da84d0eda64af1636f1bdf59fdc0bbf8e50147c370e901de diff --git a/dev-qt/qtbase/files/qtbase-6.10.0-QTBUG-141099.patch b/dev-qt/qtbase/files/qtbase-6.10.0-QTBUG-141099.patch new file mode 100644 index 0000000..d4edaeb --- /dev/null +++ b/dev-qt/qtbase/files/qtbase-6.10.0-QTBUG-141099.patch @@ -0,0 +1,31 @@ +https://bugreports.qt.io/browse/QTBUG-141099 +https://codereview.qt-project.org/c/qt/qtbase/+/685911 +--- a/src/gui/kernel/qguiapplication.cpp ++++ b/src/gui/kernel/qguiapplication.cpp +@@ -3418,4 +3418,13 @@ + QWindowPrivate *p = qt_window_private(window); + ++ if (e->isExposed) { ++ // If the window has been automatically positioned or resized by the ++ // window manager, we now assume those have taken effect, even for ++ // asynchronous window managers. From this point on we want the window ++ // to keep its geometry, even when recreated. ++ p->positionAutomatic = false; ++ p->resizeAutomatic = false; ++ } ++ + if (!p->receivedExpose) { + if (p->resizeEventPending) { +--- a/src/gui/kernel/qwindow.cpp ++++ b/src/gui/kernel/qwindow.cpp +@@ -587,10 +587,4 @@ + platformWindow->initialize(); + +- // Now that the window is created and initialized the platform has had +- // a chance to position and size it automatically. From this point on +- // we want the window to keep its geometry, even when recreated. +- positionAutomatic = false; +- resizeAutomatic = false; +- + QObjectList childObjects = q->children(); + for (int i = 0; i < childObjects.size(); i ++) { diff --git a/dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch b/dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch new file mode 100644 index 0000000..45057ca --- /dev/null +++ b/dev-qt/qtbase/files/qtbase-6.10.1-libressl.patch @@ -0,0 +1,354 @@ +commit 06f3302b521daae3e51272b3931db6a947b31ee3 +Fixes Qt6 build on LibreSSL. + +http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp?rev=1.8 +http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qopenssl_p_h?rev=1.2 +http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslcontext_openssl_cpp?rev=1.2 +http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslsocket_openssl_symbols_p_h?rev=1.2 +http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qtls_openssl_cpp?rev=1.2 +http://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qx509_openssl_cpp?rev=1.3 + +--- a/src/plugins/tls/openssl/qopenssl_p.h ++++ b/src/plugins/tls/openssl/qopenssl_p.h +@@ -71,6 +71,13 @@ + + QT_BEGIN_NAMESPACE + ++#ifndef DTLS_ANY_VERSION ++#define DTLS_ANY_VERSION 0x1FFFF ++#endif ++#ifndef TLS_ANY_VERSION ++#define TLS_ANY_VERSION 0x10000 ++#endif ++ + struct QSslErrorEntry { + int code = 0; + int depth = 0; +--- a/src/plugins/tls/openssl/qsslcontext_openssl.cpp ++++ b/src/plugins/tls/openssl/qsslcontext_openssl.cpp +@@ -36,9 +36,9 @@ int q_X509CallbackDirect(int ok, X509_STORE_CTX *ctx); + int qt_OCSP_status_server_callback(SSL *ssl, void *); + #endif // ocsp + +-#ifdef TLS1_3_VERSION ++#if defined(TLS1_3_VERSION) && !defined(LIBRESSL_VERSION_NUMBER) + int q_ssl_sess_set_new_cb(SSL *context, SSL_SESSION *session); +-#endif // TLS1_3_VERSION ++#endif // TLS1_3_VERSION && LIBRESSL_VERSION_NUMBER + + } // namespace QTlsPrivate + +@@ -369,9 +369,11 @@ QT_WARNING_POP + return; + } + ++#ifndef LIBRESSL_VERSION_NUMBER + // A nasty hacked OpenSSL using a level that will make our auto-tests fail: + if (q_SSL_CTX_get_security_level(sslContext->ctx) > 1 && *forceSecurityLevel()) + q_SSL_CTX_set_security_level(sslContext->ctx, 1); ++#endif // LIBRESSL_VERSION_NUMBER + + const long anyVersion = + #if QT_CONFIG(dtls) +@@ -662,14 +664,14 @@ QT_WARNING_POP + q_SSL_CTX_set_verify(sslContext->ctx, verificationMode, verificationCallback); + } + +-#ifdef TLS1_3_VERSION ++#if defined(TLS1_3_VERSION) && !defined(LIBRESSL_VERSION_NUMBER) + // NewSessionTicket callback: + if (mode == QSslSocket::SslClientMode && !isDtls) { + q_SSL_CTX_sess_set_new_cb(sslContext->ctx, QTlsPrivate::q_ssl_sess_set_new_cb); + q_SSL_CTX_set_session_cache_mode(sslContext->ctx, SSL_SESS_CACHE_CLIENT); + } + +-#endif // TLS1_3_VERSION ++#endif // TLS1_3_VERSION && LIBRESSL_VERSION_NUMBER + + #if QT_CONFIG(dtls) + // DTLS cookies: +@@ -759,6 +761,7 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext) + } + #endif // ocsp + ++#ifndef LIBRESSL_VERSION_NUMBER + QSharedPointer<SSL_CONF_CTX> cctx(q_SSL_CONF_CTX_new(), &q_SSL_CONF_CTX_free); + if (cctx) { + q_SSL_CONF_CTX_set_ssl_ctx(cctx.data(), sslContext->ctx); +@@ -802,7 +805,9 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext) + sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_finish() failed")); + sslContext->errorCode = QSslError::UnspecifiedError; + } +- } else { ++ } else ++#endif // LIBRESSL_VERSION_NUMBER ++ { + sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_CTX_new() failed")); + sslContext->errorCode = QSslError::UnspecifiedError; + } +--- a/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp ++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp +@@ -115,14 +115,25 @@ DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, w, return 0, return) + DEFINEFUNC(int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *c, c, return 0, return) + DEFINEFUNC(int, EVP_PKEY_up_ref, EVP_PKEY *a, a, return 0, return) + DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, EVP_PKEY_param_check, EVP_PKEY_CTX *ctx, ctx, return 0, return) ++#endif + DEFINEFUNC(void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx, return, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, OPENSSL_sk_num, OPENSSL_STACK *a, a, return -1, return) + DEFINEFUNC2(void, OPENSSL_sk_pop_free, OPENSSL_STACK *a, a, void (*b)(void*), b, return, DUMMYARG) + DEFINEFUNC(OPENSSL_STACK *, OPENSSL_sk_new_null, DUMMYARG, DUMMYARG, return nullptr, return) + DEFINEFUNC2(void, OPENSSL_sk_push, OPENSSL_STACK *a, a, void *b, b, return, DUMMYARG) + DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG) + DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return nullptr, return) ++#else ++DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return) ++DEFINEFUNC2(void, sk_pop_free, STACK *a, a, void (*b)(void*), b, return, DUMMYARG) ++DEFINEFUNC(_STACK *, sk_new_null, DUMMYARG, DUMMYARG, return nullptr, return) ++DEFINEFUNC2(void, sk_push, _STACK *a, a, void *b, b, return, DUMMYARG) ++DEFINEFUNC(void, sk_free, _STACK *a, a, return, DUMMYARG) ++DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return nullptr, return) ++#endif // LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return) + DEFINEFUNC2(qssloptions, SSL_CTX_set_options, SSL_CTX *ctx, ctx, qssloptions op, op, return 0, return) + using info_callback = void (*) (const SSL *ssl, int type, int val); +@@ -156,7 +167,11 @@ DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE *a, a, X509_STORE_CTX_ver + DEFINEFUNC3(int, X509_STORE_set_ex_data, X509_STORE *a, a, int idx, idx, void *data, data, return 0, return) + DEFINEFUNC2(void *, X509_STORE_get_ex_data, X509_STORE *r, r, int idx, idx, return nullptr, return) + DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *a, a, return nullptr, return) ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3090000fL) + DEFINEFUNC3(void, CRYPTO_free, void *str, str, const char *file, file, int line, line, return, DUMMYARG) ++#else ++DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG) ++#endif + DEFINEFUNC3(int, CRYPTO_memcmp, const void * in_a, in_a, const void * in_b, in_b, size_t len, len, return 1, return); + DEFINEFUNC(long, OpenSSL_version_num, void, DUMMYARG, return 0, return) + DEFINEFUNC(const char *, OpenSSL_version, int a, a, return nullptr, return) +@@ -291,12 +306,14 @@ DEFINEFUNC3(int, SSL_CTX_use_certificate_file, SSL_CTX *a, a, const char *b, b, + DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return -1, return) + DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b, b, int c, c, return -1, return) + DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return nullptr, return); + DEFINEFUNC(void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a, return ,return); + DEFINEFUNC2(void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, b, return, return); + DEFINEFUNC2(unsigned int, SSL_CONF_CTX_set_flags, SSL_CONF_CTX *a, a, unsigned int b, b, return 0, return); + DEFINEFUNC(int, SSL_CONF_CTX_finish, SSL_CONF_CTX *a, a, return 0, return); + DEFINEFUNC3(int, SSL_CONF_cmd, SSL_CONF_CTX *a, a, const char *b, b, const char *c, c, return 0, return); ++#endif + DEFINEFUNC(void, SSL_free, SSL *a, a, return, DUMMYARG) + DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, const SSL *a, a, return nullptr, return) + DEFINEFUNC(const SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a, return nullptr, return) +@@ -870,14 +887,25 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(AUTHORITY_INFO_ACCESS_free) + RESOLVEFUNC(EVP_PKEY_up_ref) + RESOLVEFUNC(EVP_PKEY_CTX_new) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(EVP_PKEY_param_check) ++#endif + RESOLVEFUNC(EVP_PKEY_CTX_free) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(OPENSSL_sk_new_null) + RESOLVEFUNC(OPENSSL_sk_push) + RESOLVEFUNC(OPENSSL_sk_free) + RESOLVEFUNC(OPENSSL_sk_num) + RESOLVEFUNC(OPENSSL_sk_pop_free) + RESOLVEFUNC(OPENSSL_sk_value) ++#else ++ RESOLVEFUNC(sk_new_null) ++ RESOLVEFUNC(sk_push) ++ RESOLVEFUNC(sk_free) ++ RESOLVEFUNC(sk_num) ++ RESOLVEFUNC(sk_pop_free) ++ RESOLVEFUNC(sk_value) ++#endif + RESOLVEFUNC(SSL_CTX_set_options) + RESOLVEFUNC(SSL_set_info_callback) + RESOLVEFUNC(SSL_alert_type_string) +@@ -1060,12 +1088,14 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(SSL_CTX_use_PrivateKey) + RESOLVEFUNC(SSL_CTX_use_PrivateKey_file) + RESOLVEFUNC(SSL_CTX_get_cert_store); ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(SSL_CONF_CTX_new); + RESOLVEFUNC(SSL_CONF_CTX_free); + RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx); + RESOLVEFUNC(SSL_CONF_CTX_set_flags); + RESOLVEFUNC(SSL_CONF_CTX_finish); + RESOLVEFUNC(SSL_CONF_cmd); ++#endif + RESOLVEFUNC(SSL_accept) + RESOLVEFUNC(SSL_clear) + RESOLVEFUNC(SSL_connect) +--- a/src/plugins/tls/openssl/qsslsocket_openssl_symbols_p.h ++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols_p.h +@@ -47,6 +47,12 @@ QT_BEGIN_NAMESPACE + + #define DUMMYARG + ++#ifdef LIBRESSL_VERSION_NUMBER ++typedef _STACK STACK; ++typedef STACK OPENSSL_STACK; ++typedef void OPENSSL_INIT_SETTINGS; ++#endif ++ + #if !defined QT_LINKED_OPENSSL + // **************** Shared declarations ****************** + // ret func(arg) +@@ -206,6 +212,7 @@ int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); + int q_EVP_PKEY_up_ref(EVP_PKEY *a); + EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); + void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); ++#ifndef LIBRESSL_VERSION_NUMBER + int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); + int q_OPENSSL_sk_num(OPENSSL_STACK *a); + void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *)); +@@ -213,6 +220,20 @@ OPENSSL_STACK *q_OPENSSL_sk_new_null(); + void q_OPENSSL_sk_push(OPENSSL_STACK *st, void *data); + void q_OPENSSL_sk_free(OPENSSL_STACK *a); + void * q_OPENSSL_sk_value(OPENSSL_STACK *a, int b); ++#else // LIBRESSL_VERSION_NUMBER ++int q_sk_num(STACK *a); ++#define q_OPENSSL_sk_num(a) q_sk_num(a) ++void q_sk_pop_free(STACK *a, void (*b)(void *)); ++#define q_OPENSSL_sk_pop_free(a, b) q_sk_pop_free(a, b) ++STACK *q_sk_new_null(); ++#define q_OPENSSL_sk_new_null() q_sk_new_null() ++void q_sk_push(STACK *st, void *data); ++#define q_OPENSSL_sk_push(st, data) q_sk_push(st, data) ++void q_sk_free(STACK *a); ++#define q_OPENSSL_sk_free q_sk_free ++void * q_sk_value(STACK *a, int b); ++#define q_OPENSSL_sk_value(a, b) q_sk_value(a, b) ++#endif // LIBRESSL_VERSION_NUMBER + int q_SSL_session_reused(SSL *a); + qssloptions q_SSL_CTX_set_options(SSL_CTX *ctx, qssloptions op); + int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +@@ -238,8 +259,13 @@ STACK_OF(X509) *q_X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); + # define q_SSL_load_error_strings() q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) + ++#ifndef LIBRESSL_VERSION_NUMBER + #define q_SKM_sk_num(st) q_OPENSSL_sk_num((OPENSSL_STACK *)st) + #define q_SKM_sk_value(type, st,i) (type *)q_OPENSSL_sk_value((OPENSSL_STACK *)st, i) ++#else // LIBRESSL_VERSION_NUMBER ++#define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st) ++#define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i) ++#endif // LIBRESSL_VERSION_NUMBER + + #define q_OPENSSL_add_all_algorithms_conf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ +@@ -424,12 +450,14 @@ int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const char *b, int c); + int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b); + int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c); + X509_STORE *q_SSL_CTX_get_cert_store(const SSL_CTX *a); ++#ifndef LIBRESSL_VERSION_NUMBER + SSL_CONF_CTX *q_SSL_CONF_CTX_new(); + void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a); + void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b); + unsigned int q_SSL_CONF_CTX_set_flags(SSL_CONF_CTX *a, unsigned int b); + int q_SSL_CONF_CTX_finish(SSL_CONF_CTX *a); + int q_SSL_CONF_cmd(SSL_CONF_CTX *a, const char *b, const char *c); ++#endif // LIBRESSL_VERSION_NUMBER + void q_SSL_free(SSL *a); + STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a); + const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a); +@@ -538,14 +566,26 @@ void q_PKCS12_free(PKCS12 *pkcs12); + #define q_BIO_get_mem_data(b, pp) (int)q_BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) + #define q_BIO_pending(b) (int)q_BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) + #define q_SSL_CTX_set_mode(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) ++#ifndef LIBRESSL_VERSION_NUMBER + #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num((st)) ++#else ++#define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st)) ++#endif + #define q_sk_GENERAL_NAME_value(st, i) q_SKM_sk_value(GENERAL_NAME, (st), (i)) + + void q_GENERAL_NAME_free(GENERAL_NAME *a); + ++#ifndef LIBRESSL_VERSION_NUMBER + #define q_sk_X509_num(st) q_SKM_sk_num((st)) ++#else ++#define q_sk_X509_num(st) q_SKM_sk_num(X509, (st)) ++#endif + #define q_sk_X509_value(st, i) q_SKM_sk_value(X509, (st), (i)) ++#ifndef LIBRESSL_VERSION_NUMBER + #define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num((st)) ++#else ++#define q_sk_SSL_CIPHER_num(st) q_SKM_sk_num(SSL_CIPHER, (st)) ++#endif + #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i)) + #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \ + q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) +@@ -666,8 +706,13 @@ int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); + + void *q_CRYPTO_malloc(size_t num, const char *file, int line); + #define q_OPENSSL_malloc(num) q_CRYPTO_malloc(num, "", 0) ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3090000fL) + void q_CRYPTO_free(void *str, const char *file, int line); + # define q_OPENSSL_free(addr) q_CRYPTO_free(addr, "", 0) ++#else ++void q_CRYPTO_free(void *a); ++# define q_OPENSSL_free(addr) q_CRYPTO_free(addr) ++#endif + int q_CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); + + void q_SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)); +--- a/src/plugins/tls/openssl/qtls_openssl.cpp ++++ b/src/plugins/tls/openssl/qtls_openssl.cpp +@@ -1435,13 +1435,13 @@ bool TlsCryptographOpenSSL::initSslContext() + else if (mode == QSslSocket::SslServerMode) + q_SSL_set_psk_server_callback(ssl, &q_ssl_psk_server_callback); + +-#if OPENSSL_VERSION_NUMBER >= 0x10101006L ++#if OPENSSL_VERSION_NUMBER >= 0x10101006L && !defined(LIBRESSL_VERSION_NUMBER) + // Set the client callback for TLSv1.3 PSK + if (mode == QSslSocket::SslClientMode + && QSslSocket::sslLibraryBuildVersionNumber() >= 0x10101006L) { + q_SSL_set_psk_use_session_callback(ssl, &q_ssl_psk_use_session_callback); + } +-#endif // openssl version >= 0x10101006L ++#endif // OPENSSL_VERSION_NUMBER >= 0x10101006L && !defined(LIBRESSL_VERSION_NUMBER) + + #endif // OPENSSL_NO_PSK + +--- a/src/plugins/tls/openssl/qx509_openssl.cpp ++++ b/src/plugins/tls/openssl/qx509_openssl.cpp +@@ -65,7 +65,11 @@ QMultiMap<QByteArray, QString> mapFromX509Name(X509_NAME *name) + unsigned char *data = nullptr; + int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e)); + info.insert(name, QString::fromUtf8((char*)data, size)); ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3090000fL) + q_CRYPTO_free(data, nullptr, 0); ++#else ++ q_CRYPTO_free(data); ++#endif + } + + return info; +@@ -191,7 +195,11 @@ QVariant x509UnknownExtensionToValue(X509_EXTENSION *ext) + QVariantList list; + bool isMap = false; + ++#if defined(LIBRESSL_VERSION_NUMBER) ++ for (int j = 0; j < q_SKM_sk_num(CONF_VALUE, val); j++) { ++#else + for (int j = 0; j < q_SKM_sk_num(val); j++) { ++#endif + CONF_VALUE *nval = q_SKM_sk_value(CONF_VALUE, val, j); + if (nval->name && nval->value) { + isMap = true; +@@ -287,7 +295,11 @@ QVariant x509ExtensionToValue(X509_EXTENSION *ext) + if (!info) + return {}; + QVariantMap result; ++#if defined(LIBRESSL_VERSION_NUMBER) ++ for (int i=0; i < q_SKM_sk_num(ACCESS_DESCRIPTION, info); i++) { ++#else + for (int i=0; i < q_SKM_sk_num(info); i++) { ++#endif + ACCESS_DESCRIPTION *ad = q_SKM_sk_value(ACCESS_DESCRIPTION, info, i); + + GENERAL_NAME *name = ad->location; diff --git a/dev-qt/qtbase/qtbase-6.10.1.ebuild b/dev-qt/qtbase/qtbase-6.10.1.ebuild new file mode 100644 index 0000000..c5b55a1 --- /dev/null +++ b/dev-qt/qtbase/qtbase-6.10.1.ebuild @@ -0,0 +1,440 @@ +# Copyright 2021-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +QT6_HAS_STATIC_LIBS=1 +inherit flag-o-matic qt6-build toolchain-funcs + +DESCRIPTION="Cross-platform application development framework" + +if [[ ${QT6_BUILD_TYPE} == release ]]; then + KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~x86" +fi + +declare -A QT6_IUSE=( + [global]="+ssl +udev zstd" + [core]="icu journald syslog" + [modules]="+concurrent +dbus +gui +network +sql +xml" + + [gui]=" + +X accessibility eglfs evdev gles2-only +libinput + opengl renderdoc tslib vulkan wayland +widgets + " + [network]="brotli gssapi libproxy sctp" + [sql]="mysql oci8 odbc postgres +sqlite" + [widgets]="cups gtk" + + [optfeature]="nls" #810802 +) +IUSE="${QT6_IUSE[*]}" +REQUIRED_USE=" + ?? ( journald syslog ) + $( + printf '%s? ( gui ) ' ${QT6_IUSE[gui]//+/} + printf '%s? ( network ) ' ${QT6_IUSE[network]//+/} + printf '%s? ( sql ) ' ${QT6_IUSE[sql]//+/} + printf '%s? ( gui widgets ) ' ${QT6_IUSE[widgets]//+/} + ) + accessibility? ( dbus ) + eglfs? ( opengl ) + gles2-only? ( opengl ) + gui? ( || ( X eglfs wayland ) ) + libinput? ( udev ) + sql? ( || ( ${QT6_IUSE[sql]//+/} ) ) + test? ( icu sql? ( sqlite ) ) + wayland? ( opengl ) +" + +# groups: +# - global (configure.cmake) +# - qtcore (src/corelib/configure.cmake) +# - qtgui (src/gui/configure.cmake) +# - qtnetwork (src/network/configure.cmake) +# - qtprintsupport (src/printsupport/configure.cmake) [gui+widgets] +# - qtsql (src/plugins/sqldrivers/configure.cmake) +# nolink: renderdoc, systemd +COMMON_DEPEND=" + virtual/zlib:= + ssl? ( dev-libs/openssl:= ) + udev? ( virtual/libudev:= ) + zstd? ( app-arch/zstd:= ) + + app-crypt/libb2 + dev-libs/double-conversion:= + dev-libs/glib:2 + dev-libs/libpcre2:=[pcre16,unicode(+)] + icu? ( dev-libs/icu:= ) + journald? ( sys-apps/systemd ) + + dbus? ( sys-apps/dbus ) + gui? ( + dev-libs/md4c + media-libs/fontconfig + >=media-libs/freetype-2.13.1:2 + media-libs/harfbuzz:= + media-libs/libjpeg-turbo:= + media-libs/libpng:= + x11-libs/libdrm + x11-libs/libxkbcommon[X?] + X? ( + x11-libs/libICE + x11-libs/libSM + x11-libs/libX11 + x11-libs/libxcb:= + x11-libs/xcb-util-cursor + x11-libs/xcb-util-image + x11-libs/xcb-util-keysyms + x11-libs/xcb-util-renderutil + x11-libs/xcb-util-wm + ) + accessibility? ( app-accessibility/at-spi2-core:2 ) + eglfs? ( media-libs/mesa[gbm(+)] ) + evdev? ( sys-libs/mtdev ) + libinput? ( dev-libs/libinput:= ) + opengl? ( + gles2-only? ( media-libs/libglvnd ) + !gles2-only? ( media-libs/libglvnd[X?] ) + ) + renderdoc? ( media-gfx/renderdoc ) + tslib? ( x11-libs/tslib ) + wayland? ( dev-libs/wayland ) + widgets? ( + cups? ( net-print/cups ) + gtk? ( + x11-libs/gdk-pixbuf:2 + >=x11-libs/gtk+-3.24.41-r1:3[X?,wayland?] + x11-libs/pango + ) + ) + ) + network? ( + brotli? ( app-arch/brotli:= ) + gssapi? ( virtual/krb5 ) + libproxy? ( net-libs/libproxy ) + ) + sql? ( + mysql? ( dev-db/mysql-connector-c:= ) + oci8? ( dev-db/oracle-instantclient:=[sdk] ) + odbc? ( dev-db/unixODBC ) + postgres? ( dev-db/postgresql:* ) + sqlite? ( dev-db/sqlite:3 ) + ) +" +# wrt blockers: users do not always depclean regularly and outdated +# dev-qt packages sometime cause runtime issues (update this when new +# Qt libraries/plugins are added, and keep old for 2y+ if removed) +RDEPEND=" + ${COMMON_DEPEND} + !<dev-qt/qt3d-${PV}:6 + !<dev-qt/qt5compat-${PV}:6 + !<dev-qt/qtcharts-${PV}:6 + !<dev-qt/qtconnectivity-${PV}:6 + !<dev-qt/qtdeclarative-${PV}:6 + !<dev-qt/qtgraphs-${PV}:6 + !<dev-qt/qthttpserver-${PV}:6 + !<dev-qt/qtimageformats-${PV}:6 + !<dev-qt/qtlanguageserver-${PV}:6 + !<dev-qt/qtlocation-${PV}:6 + !<dev-qt/qtmultimedia-${PV}:6 + !<dev-qt/qtnetworkauth-${PV}:6 + !<dev-qt/qtpositioning-${PV}:6 + !<dev-qt/qtquick3d-${PV}:6 + !<dev-qt/qtquicktimeline-${PV}:6 + !<dev-qt/qtremoteobjects-${PV}:6 + !<dev-qt/qtscxml-${PV}:6 + !<dev-qt/qtsensors-${PV}:6 + !<dev-qt/qtserialbus-${PV}:6 + !<dev-qt/qtserialport-${PV}:6 + !<dev-qt/qtshadertools-${PV}:6 + !<dev-qt/qtspeech-${PV}:6 + !<dev-qt/qtsvg-${PV}:6 + !<dev-qt/qttools-${PV}:6 + !<dev-qt/qtvirtualkeyboard-${PV}:6 + !<dev-qt/qtwayland-${PV}:6 + !<dev-qt/qtwebchannel-${PV}:6 + !<dev-qt/qtwebengine-${PV}:6 + !<dev-qt/qtwebsockets-${PV}:6 + !<dev-qt/qtwebview-${PV}:6 + syslog? ( virtual/logger ) +" +DEPEND=" + ${COMMON_DEPEND} + X? ( x11-base/xorg-proto ) + gui? ( + vulkan? ( dev-util/vulkan-headers ) + wayland? ( dev-util/wayland-scanner ) + ) + network? ( + sctp? ( net-misc/lksctp-tools ) + ) + test? ( + elibc_musl? ( sys-libs/timezone-data ) + ) +" +# libarchive[zstd] is indirectly used by cmake (bug #910392) +BDEPEND=" + zstd? ( app-arch/libarchive[zstd] ) +" +PDEPEND=" + nls? ( ~dev-qt/qttranslations-${PV}:6 ) +" + +PATCHES=( + "${FILESDIR}"/${PN}-6.10.1-libressl.patch + "${FILESDIR}"/${PN}-6.5.2-hppa-forkfd-grow-stack.patch + "${FILESDIR}"/${PN}-6.5.2-no-symlink-check.patch + "${FILESDIR}"/${PN}-6.6.1-forkfd-childstack-size.patch + "${FILESDIR}"/${PN}-6.6.3-gcc14-avx512fp16.patch + "${FILESDIR}"/${PN}-6.8.2-cross.patch + "${FILESDIR}"/${PN}-6.9.0-no-direct-extern-access.patch +) + +src_prepare() { + qt6-build_src_prepare + + if use test; then + # test itself has -Werror=strict-aliasing issues, drop for simplicity + sed -e '/add_subdirectory(qsharedpointer)/d' \ + -i tests/auto/corelib/tools/CMakeLists.txt || die + + # workaround for __extendhfxf2 being used for tst_qfloat16.cpp + # which is unavailable with compiler-rt (assume used if clang) + if tc-is-clang; then + sed -e '/add_subdirectory(qfloat16)/d' \ + -i tests/auto/corelib/global/CMakeLists.txt || die + fi + fi +} + +src_configure() { + # temporary warning to spare surprised users for whom "it worked before", + # will drop this in Qt 6.11 (bug #966289) + if use custom-cflags && tc-cpp-is-true __RDRND__ ${CXXFLAGS}; then + ewarn "USE=custom-cflags is enabled, and there is a good chance that the build" + ewarn "will fail with current CXXFLAGS. Please disable it if have issues." + fi + + if use gtk; then + # defang automagic dependencies (bug #624960) + use X || append-cxxflags -DGENTOO_GTK_HIDE_X11 + use wayland || append-cxxflags -DGENTOO_GTK_HIDE_WAYLAND + fi + + local mycmakeargs=( + -DBUILD_WITH_PCH=OFF + + -DINSTALL_ARCHDATADIR="${QT6_ARCHDATADIR}" + -DINSTALL_BINDIR="${QT6_BINDIR}" + -DINSTALL_DATADIR="${QT6_DATADIR}" + -DINSTALL_DOCDIR="${QT6_DOCDIR}" + -DINSTALL_EXAMPLESDIR="${QT6_EXAMPLESDIR}" + -DINSTALL_INCLUDEDIR="${QT6_HEADERDIR}" + -DINSTALL_LIBDIR="${QT6_LIBDIR}" + -DINSTALL_LIBEXECDIR="${QT6_LIBEXECDIR}" + -DINSTALL_MKSPECSDIR="${QT6_MKSPECSDIR}" + -DINSTALL_PLUGINSDIR="${QT6_PLUGINDIR}" + -DINSTALL_QMLDIR="${QT6_QMLDIR}" + -DINSTALL_SYSCONFDIR="${QT6_SYSCONFDIR}" + -DINSTALL_TRANSLATIONSDIR="${QT6_TRANSLATIONDIR}" + + -DQT_UNITY_BUILD=ON # ~30% faster build, affects other dev-qt/* too + + -DQT_FEATURE_force_system_libs=ON + -DQT_FEATURE_relocatable=OFF #927691 + $(qt_feature ssl openssl) + $(qt_feature ssl openssl_linked) + $(qt_feature udev libudev) + $(qt_feature zstd) + + # qtcore + $(qt_feature icu) + $(qt_feature journald) + $(qt_feature syslog) + # currently jemalloc upstream is dead and tests fail with it + -DQT_FEATURE_jemalloc=OFF + + # tools + -DQT_FEATURE_androiddeployqt=OFF + + # modules + $(qt_feature concurrent) + $(qt_feature dbus) + $(qt_feature gui) + $(qt_feature network) + $(qt_feature sql) + # trivial, and is often needed (sometimes even when not building tests) + -DQT_FEATURE_testlib=ON + $(qt_feature xml) + + # let gentoo's defaults and/or users control security *FLAGS + -DQT_FEATURE_glibc_fortify_source=OFF + -DQT_FEATURE_intelcet=OFF + -DQT_FEATURE_libcpp_hardening=OFF + -DQT_FEATURE_libstdcpp_assertions=OFF + -DQT_FEATURE_relro_now_linker=OFF + -DQT_FEATURE_stack_clash_protection=OFF + -DQT_FEATURE_stack_protector=OFF + -DQT_FEATURE_trivial_auto_var_init_pattern=OFF + + -DQT_INTERNAL_AVOID_OVERRIDING_SYNCQT_CONFIG=ON # would force -O3 + ) + + use gui && mycmakeargs+=( + $(qt_feature X xcb) + $(qt_feature X system_xcb_xinput) + $(qt_feature X xkbcommon_x11) + $(cmake_use_find_package X X11) # needed for truly no automagic + $(qt_feature accessibility accessibility_atspi_bridge) + $(qt_feature eglfs) + $(qt_feature evdev) + $(qt_feature evdev mtdev) + $(qt_feature libinput) + $(qt_feature renderdoc graphicsframecapture) + $(qt_feature tslib) + $(qt_feature vulkan) + $(qt_feature wayland) + $(qt_feature widgets) + -DINPUT_opengl=$(usex opengl $(usex gles2-only es2 desktop) no) + ) && use widgets && mycmakeargs+=( + # note: qtprintsupport is enabled w/ gui+widgets regardless of USE=cups + $(qt_feature cups) + $(qt_feature gtk gtk3) + ) + + use network && mycmakeargs+=( + $(qt_feature brotli) + $(qt_feature gssapi) + $(qt_feature libproxy) + $(qt_feature sctp) + $(usev test -DQT_SKIP_DOCKER_COMPOSE=ON) + -DQT_FEATURE_dtls=OFF # Required for LibreSSL + ) + + use sql && mycmakeargs+=( + -DQT_FEATURE_sql_db2=OFF # unpackaged + -DQT_FEATURE_sql_ibase=OFF # unpackaged + -DQT_FEATURE_sql_mimer=OFF # unpackaged + $(qt_feature mysql sql_mysql) + $(qt_feature oci8 sql_oci) + $(usev oci8 -DOracle_ROOT="${ESYSROOT}"/usr/$(get_libdir)/oracle/client) + $(qt_feature odbc sql_odbc) + $(qt_feature postgres sql_psql) + $(qt_feature sqlite sql_sqlite) + $(qt_feature sqlite system_sqlite) + ) + + tc-is-cross-compiler && mycmakeargs+=( + -DQT_HOST_PATH="${BROOT}"/usr + -DQT_FORCE_BUILD_TOOLS=ON + -DQT_NO_GENERATE_QMAKE_WRAPPER_FOR_TARGET=ON + ) + + qt6-build_src_configure +} + +src_test() { + local -x TZ=UTC + local -x LC_TIME=C + + # users' session setting may break tst_clientextension (bug #927030) + unset DESKTOP_SESSION XDG_CURRENT_DESKTOP + unset GNOME_DESKTOP_SESSION_ID KDE_FULL_SESSION + + local CMAKE_SKIP_TESTS=( + # broken with out-of-source + if qtbase is not already installed + tst_moc + tst_qmake + # similarly broken when relocatable=OFF (bug #927691) + tst_qapplication + tst_qt_cmake_create + tst_uic + # needs x11/wayland/opengl rather than just Qt offscreen and would + # rather to keep this simple + tst_qgraphicsview + tst_qopengl{,config,widget,window} + tst_qx11info + tst_surface + tst_wl_reconnect + tst_xdgdecorationv1 + # fails for unknown reasons, but seatv4 is not actually used nowadays + tst_seatv4 + # fails with network sandbox + tst_qdnslookup + # fails with sandbox + tst_qsharedmemory + # typical to lack SCTP support on non-generic kernels + tst_qsctpsocket + # flaky tests, may be better with -j1 but not worth using over this + tst_qfiledialog{,2} #916181 + tst_qprocess #936484 + tst_qtimer + tst_wayland_cursor + # haystacksWithMoreThan4GiBWork can easily OOM (16GB ram not enough) + tst_qlatin1stringmatcher + # these can be flaky depending on the environment/toolchain + tst_qlogging # backtrace log test can easily vary + tst_q{,raw}font # affected by available fonts / settings (bug #914737) + tst_qprinter # checks system's printers (bug #916216) + tst_qhighdpi # may detect users' settings and fail (bug #935364) + tst_qstorageinfo # checks mounted filesystems + # flaky due to using different test framework and fails with USE=-gui + tst_selftests + # known failing when using clang+glibc+stdc++, needs looking into + tst_qthread + # partially failing on x86 chroots and seemingly(?) harmless (dev-qt + # revdeps tests pass), skip globally to avoid keywording flakiness + tst_json + tst_qcolorspace + tst_qdoublevalidator + tst_qglobal + tst_qglyphrun + tst_qvectornd + tst_rcc + # similarly, but on armv7 and potentially others (bug #914028) + tst_qlineedit + tst_qpainter + # likewise, known failing on BE arches (bug #914033,914371,918878) + tst_qimagereader + tst_qimagewriter + tst_qpluginloader + tst_quuid # >=6.6.2 had related fixes, needs retesting + # partially broken on llvm-musl, needs looking into but skip to have + # a baseline for regressions (rest of dev-qt still passes with musl) + $(usev elibc_musl ' + tst_qicoimageformat + tst_qimagereader + tst_qimage + ') + # fails due to hppa's NaN handling, needs looking into (bug #914371) + $(usev hppa ' + tst_qcborvalue + tst_qnumeric + ') + # note: for linux, upstream only really runs+maintains tests for amd64 + # https://doc.qt.io/qt-6/supported-platforms.html + ) + + qt6-build_src_test +} + +src_install() { + qt6-build_src_install + + if use test; then + local delete_bins=( # need a better way to handle this + apphelper clientserver copier crashingServer desktopsettingsaware_helper + echo fileWriterProcess modal_helper nospace 'one space' + paster qcommandlineparser_test_helper qfileopeneventexternal + socketprocess syslocaleapp tst_qhashseed_helper 'two space s' + write-read-write + ) + local delete=( # sigh + "${D}${QT6_BINDIR}"/test* + "${D}${QT6_LIBDIR}/objects-${CMAKE_BUILD_TYPE}"/*test* + "${delete_bins[@]/#/${D}${QT6_BINDIR}/}" + ) + # using -f given not tracking which tests may be skipped or not + rm -rf -- "${delete[@]}" || die + fi +}
