commit: ddd7427f0a2703ab44da44a15d47b336ea58987e Author: Anna “CyberTailor” <cyber <AT> sysrq <DOT> in> AuthorDate: Fri Jan 27 00:07:54 2023 +0000 Commit: Quentin Retornaz <gentoo <AT> retornaz <DOT> com> CommitDate: Tue Jan 31 23:13:43 2023 +0000 URL: https://gitweb.gentoo.org/repo/proj/libressl.git/commit/?id=ddd7427f
dev-qt/qtbase: new package, add 6.4.2 Signed-off-by: Anna “CyberTailor” <cyber <AT> sysrq.in> Closes: https://github.com/gentoo/libressl/pull/491 Signed-off-by: Quentin Retornaz <gentoo <AT> retornaz.com> dev-qt/qtbase/Manifest | 1 + dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch | 445 ++++++++++++++++++++++++ dev-qt/qtbase/metadata.xml | 38 ++ dev-qt/qtbase/qtbase-6.4.2.ebuild | 190 ++++++++++ 4 files changed, 674 insertions(+) diff --git a/dev-qt/qtbase/Manifest b/dev-qt/qtbase/Manifest new file mode 100644 index 0000000..e77cc5d --- /dev/null +++ b/dev-qt/qtbase/Manifest @@ -0,0 +1 @@ +DIST qtbase-everywhere-src-6.4.2.tar.xz 47987188 BLAKE2B 5d25d8b912ba775faa5855ad4326cbd19580cc7f98b997a9bbdb4a2216550a60b2c8a7a2ef1741a5dfd66ebde0d1cf5d0394215474c39c7779648b03c3892812 SHA512 b00cce7bfc29d3a34c9a2f08db147c4bfd962e178916d60033e1845b25eaeaa4fbd42f5c1d7e39453ddb412a4e91c22c8eae52745eda8a47e35a691054d5496e diff --git a/dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch b/dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch new file mode 100644 index 0000000..f75f651 --- /dev/null +++ b/dev-qt/qtbase/files/qtbase-6.4.2-libressl.patch @@ -0,0 +1,445 @@ +Fixes Qt6 build on LibreSSL. + +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp?rev=1.7 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qopenssl_p_h?rev=1.2 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslcontext_openssl_cpp?rev=1.2 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qsslsocket_openssl_symbols_p_h?rev=1.2 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qtls_openssl_cpp?rev=1.2 +https://cvsweb.openbsd.org/ports/x11/qt6/qtbase/patches/patch-src_plugins_tls_openssl_qx509_openssl_cpp?rev=1.2 + +--- a/src/plugins/tls/openssl/qopenssl_p.h ++++ b/src/plugins/tls/openssl/qopenssl_p.h +@@ -70,6 +70,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 +@@ -49,9 +49,9 @@ extern "C" int q_verify_cookie_callback(SSL *ssl, cons + } + #endif // dtls + +-#ifdef TLS1_3_VERSION ++#if defined(TLS1_3_VERSION) && !defined(LIBRESSL_VERSION_NUMBER) + extern "C" int q_ssl_sess_set_new_cb(SSL *context, SSL_SESSION *session); +-#endif // TLS1_3_VERSION ++#endif // TLS1_3_VERSION && LIBRESSL_VERSION_NUMBE + + static inline QString msgErrorSettingBackendConfig(const QString &why) + { +@@ -370,9 +370,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) +@@ -663,14 +665,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, 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: +@@ -758,6 +760,7 @@ void QSslContext::applyBackendConfig(QSslContext *sslC + } + #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); +@@ -804,7 +807,9 @@ void QSslContext::applyBackendConfig(QSslContext *sslC + 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_p.h ++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols_p.h +@@ -46,6 +46,13 @@ QT_BEGIN_NAMESPACE + + #define DUMMYARG + ++#ifdef LIBRESSL_VERSION_NUMBER ++typedef _STACK STACK; ++typedef STACK OPENSSL_STACK; ++typedef void OPENSSL_INIT_SETTINGS; ++typedef int (*X509_STORE_CTX_verify_cb)(int ok,X509_STORE_CTX *ctx); ++#endif ++ + #if !defined QT_LINKED_OPENSSL + // **************** Shared declarations ****************** + // ret func(arg) +@@ -203,15 +210,32 @@ const BIO_METHOD *q_BIO_s_mem(); + void q_AUTHORITY_INFO_ACCESS_free(AUTHORITY_INFO_ACCESS *a); + int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); + int q_EVP_PKEY_up_ref(EVP_PKEY *a); ++#ifdef OPENSSL_NO_DEPRECATED_3_0 + EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); + void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); ++#endif // OPENSSL_NO_DEPRECATED_3_0 + int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); ++#ifndef LIBRESSL_VERSION_NUMBER + int q_OPENSSL_sk_num(OPENSSL_STACK *a); + void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *)); + 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,9 +262,15 @@ void q_DH_get0_pqg(const DH *dh, const BIGNUM **p, con + # 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 \ + | OPENSSL_INIT_LOAD_CONFIG, NULL) +@@ -425,12 +455,14 @@ int q_SSL_CTX_use_certificate_file(SSL_CTX *a, const 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); +@@ -532,14 +564,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) +@@ -641,7 +685,11 @@ int q_OCSP_check_validity(ASN1_GENERALIZEDTIME *thisup + int q_OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); + ++#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3050000fL ++#define q_OCSP_resp_get0_certs(bs) ((bs)->certs) ++#else + const STACK_OF(X509) *q_OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); ++#endif + OCSP_CERTID *q_OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer); + void q_OCSP_CERTID_free(OCSP_CERTID *cid); + int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); +@@ -660,8 +708,14 @@ 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) ++ ++#ifndef LIBRESSL_VERSION_NUMBER + 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 + + void q_SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)); + const char *q_SSL_alert_type_string(int value); +@@ -724,7 +778,11 @@ int q_EVP_PKEY_set1_DH(EVP_PKEY *a, DH *b); + + int q_DH_bits(DH *dh); + int q_RSA_bits(RSA *a); ++#if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER < 0x3050000fL) ++#define q_DSA_bits(dsa) q_BN_num_bits((dsa)->p) ++#else + int q_DSA_bits(DSA *a); ++#endif + + int q_EVP_PKEY_assign(EVP_PKEY *a, int b, void *r); + int q_EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); +--- a/src/plugins/tls/openssl/qtls_openssl.cpp ++++ b/src/plugins/tls/openssl/qtls_openssl.cpp +@@ -1438,13 +1438,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 +@@ -63,7 +63,11 @@ QMultiMap<QByteArray, QString> mapFromX509Name(X509_NA + 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)); +- q_CRYPTO_free(data, nullptr, 0); ++#if QT_CONFIG(opensslv11) && !defined(LIBRESSL_VERSION_NUMBER) ++ q_CRYPTO_free(data, nullptr, 0); ++#else ++ q_CRYPTO_free(data); ++#endif + } + + return info; +@@ -73,12 +77,27 @@ QDateTime dateTimeFromASN1(const ASN1_TIME *aTime) + { + QDateTime result; + tm lTime; ++#ifdef LIBRESSL_VERSION_NUMBER ++ const char *data; ++ size_t len; ++ int type; + ++ data = (const char*)ASN1_STRING_get0_data((const ASN1_STRING *)aTime); ++ len = ASN1_STRING_length(aTime); ++ type = ASN1_STRING_type(aTime); ++ ++ if (ASN1_time_parse(data, len, &lTime, type) == type) { ++ QDate resDate(lTime.tm_year + 1900, lTime.tm_mon + 1, lTime.tm_mday); ++ QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec); ++ result = QDateTime(resDate, resTime, Qt::UTC); ++ } ++#else + if (q_ASN1_TIME_to_tm(aTime, &lTime)) { + QDate resDate(lTime.tm_year + 1900, lTime.tm_mon + 1, lTime.tm_mday); + QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec); + result = QDateTime(resDate, resTime, Qt::UTC); + } ++#endif + + return result; + } +@@ -189,7 +208,7 @@ QVariant x509UnknownExtensionToValue(X509_EXTENSION *e + QVariantList list; + bool isMap = false; + +- for (int j = 0; j < q_SKM_sk_num(val); j++) { ++ for (int j = 0; j < q_SKM_sk_num(CONF_VALUE, val); j++) { + CONF_VALUE *nval = q_SKM_sk_value(CONF_VALUE, val, j); + if (nval->name && nval->value) { + isMap = true; +@@ -285,7 +304,7 @@ QVariant x509ExtensionToValue(X509_EXTENSION *ext) + if (!info) + return {}; + QVariantMap result; +- for (int i=0; i < q_SKM_sk_num(info); i++) { ++ for (int i=0; i < q_SKM_sk_num(ACCESS_DESCRIPTION, info); i++) { + ACCESS_DESCRIPTION *ad = q_SKM_sk_value(ACCESS_DESCRIPTION, info, i); + + GENERAL_NAME *name = ad->location; +--- a/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp ++++ b/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp +@@ -113,23 +113,36 @@ DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYA + 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) ++#ifdef OPENSSL_NO_DEPRECATED_3_0 + DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e, return nullptr, return) + DEFINEFUNC(int, EVP_PKEY_param_check, EVP_PKEY_CTX *ctx, ctx, return 0, return) + DEFINEFUNC(void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx, return, return) ++#endif // OPENSSL_NO_DEPRECATED_3_0 ++#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); + DEFINEFUNC2(void, SSL_set_info_callback, SSL *ssl, ssl, info_callback cb, cb, return, return) + DEFINEFUNC(const char *, SSL_alert_type_string, int value, value, return nullptr, return) + DEFINEFUNC(const char *, SSL_alert_desc_string_long, int value, value, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, SSL_CTX_get_security_level, const SSL_CTX *ctx, ctx, return -1, return) + DEFINEFUNC2(void, SSL_CTX_set_security_level, SSL_CTX *ctx, ctx, int level, level, return, return) ++#endif // LIBRESSL_VERSION_NUMBER + #ifdef TLS1_3_VERSION + DEFINEFUNC2(int, SSL_CTX_set_ciphersuites, SSL_CTX *ctx, ctx, const char *str, str, return 0, return) + DEFINEFUNC2(void, SSL_set_psk_use_session_callback, SSL *ssl, ssl, q_SSL_psk_use_session_cb_func_t callback, callback, return, DUMMYARG) +@@ -155,7 +168,11 @@ DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE + 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) ++#ifndef LIBRESSL_VERSION_NUMBER + 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 + DEFINEFUNC(long, OpenSSL_version_num, void, DUMMYARG, return 0, return) + DEFINEFUNC(const char *, OpenSSL_version, int a, a, return nullptr, return) + DEFINEFUNC(unsigned long, SSL_SESSION_get_ticket_lifetime_hint, const SSL_SESSION *session, session, return 0, return) +@@ -194,7 +211,9 @@ DEFINEFUNC5(int, OCSP_id_get0_info, ASN1_OCTET_STRING + ASN1_OCTET_STRING **piKeyHash, piKeyHash, ASN1_INTEGER **pserial, pserial, OCSP_CERTID *cid, cid, + return 0, return) + DEFINEFUNC2(OCSP_RESPONSE *, OCSP_response_create, int status, status, OCSP_BASICRESP *bs, bs, return nullptr, return) ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) + DEFINEFUNC(const STACK_OF(X509) *, OCSP_resp_get0_certs, const OCSP_BASICRESP *bs, bs, return nullptr, return) ++#endif + DEFINEFUNC2(int, OCSP_id_cmp, OCSP_CERTID *a, a, OCSP_CERTID *b, b, return -1, return) + DEFINEFUNC7(OCSP_SINGLERESP *, OCSP_basic_add1_status, OCSP_BASICRESP *r, r, OCSP_CERTID *c, c, int s, s, + int re, re, ASN1_TIME *rt, rt, ASN1_TIME *t, t, ASN1_TIME *n, n, return nullptr, return) +@@ -215,7 +234,9 @@ DEFINEFUNC(long, ASN1_INTEGER_get, ASN1_INTEGER *a, a, + DEFINEFUNC2(int, ASN1_INTEGER_cmp, const ASN1_INTEGER *a, a, const ASN1_INTEGER *b, b, return 1, return) + DEFINEFUNC(int, ASN1_STRING_length, ASN1_STRING *a, a, return 0, return) + DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC2(int, ASN1_TIME_to_tm, const ASN1_TIME *s, s, struct tm *tm, tm, return 0, return) ++#endif + DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return) + DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return) + DEFINEFUNC2(BIO *, BIO_new_mem_buf, void *a, a, int b, b, return nullptr, return) +@@ -291,12 +312,14 @@ DEFINEFUNC3(int, SSL_CTX_use_certificate_file, SSL_CTX + 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) +@@ -859,9 +882,11 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(EVP_CIPHER_CTX_reset) + RESOLVEFUNC(AUTHORITY_INFO_ACCESS_free) + RESOLVEFUNC(EVP_PKEY_up_ref) ++#ifdef OPENSSL_NO_DEPRECATED_3_0 + RESOLVEFUNC(EVP_PKEY_CTX_new) + RESOLVEFUNC(EVP_PKEY_param_check) + RESOLVEFUNC(EVP_PKEY_CTX_free) ++#endif // OPENSSL_NO_DEPRECATED_3_0 + RESOLVEFUNC(OPENSSL_sk_new_null) + RESOLVEFUNC(OPENSSL_sk_push) + RESOLVEFUNC(OPENSSL_sk_free) +@@ -955,7 +980,9 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(OCSP_check_validity) + RESOLVEFUNC(OCSP_cert_to_id) + RESOLVEFUNC(OCSP_id_get0_info) ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) + RESOLVEFUNC(OCSP_resp_get0_certs) ++#endif + RESOLVEFUNC(OCSP_basic_sign) + RESOLVEFUNC(OCSP_response_create) + RESOLVEFUNC(i2d_OCSP_RESPONSE) +@@ -1051,12 +1078,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) +@@ -1106,7 +1135,9 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(RSA_free) + + RESOLVEFUNC(DH_bits) ++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL) + RESOLVEFUNC(DSA_bits) ++#endif + RESOLVEFUNC(RSA_bits) + + #ifndef OPENSSL_NO_EC diff --git a/dev-qt/qtbase/metadata.xml b/dev-qt/qtbase/metadata.xml new file mode 100644 index 0000000..d1512cb --- /dev/null +++ b/dev-qt/qtbase/metadata.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>cyber+gen...@sysrq.in</email> + <name>Anna</name> + </maintainer> + <use> + <flag name="brotli">Enable support for Brotli decompression</flag> + <flag name="concurrent">Build Qt6Concurrent module</flag> + <flag name="dbus">Build Qt6DBus module</flag> + <flag name="egl">Enable EGL integration</flag> + <flag name="eglfs">Build the EGL Full Screen/Single Surface platform plugin</flag> + <flag name="evdev">Enable support for input devices via evdev</flag> + <flag name="gssapi">Enable support for GSSAPI (<pkg>virtual/krb5</pkg>)</flag> + <flag name="gtk">Build the GTK platform theme plugin</flag> + <flag name="gui">Build Qt6Gui module</flag> + <flag name="libinput">Enable support for input devices via <pkg>dev-libs/libinput</pkg></flag> + <flag name="libproxy">Use <pkg>net-libs/libproxy</pkg> for automatic HTTP/SOCKS proxy configuration</flag> + <flag name="network">Build Qt6Network module</flag> + <flag name="sql">Build Qt6Sql module</flag> + <flag name="systemd">Enable native journald logging support</flag> + <flag name="tslib">Enable support for touchscreen devices via <pkg>x11-libs/tslib</pkg></flag> + <flag name="tuio">Build plugin to receive touch events over the TUIO protocol</flag> + <flag name="vulkan">Enable support for Vulkan</flag> + <flag name="widgets">Build Qt6Widgets module</flag> + <flag name="X">Build the XCB platform plugin and enable X11 integration</flag> + </use> + <upstream> + <bugs-to>https://bugreports.qt.io/</bugs-to> + <doc>https://doc.qt.io/</doc> + </upstream> + <slots> + <subslots> + Must only be used by packages that are known to use private parts of the Qt API. + </subslots> + </slots> +</pkgmetadata> diff --git a/dev-qt/qtbase/qtbase-6.4.2.ebuild b/dev-qt/qtbase/qtbase-6.4.2.ebuild new file mode 100644 index 0000000..50f6845 --- /dev/null +++ b/dev-qt/qtbase/qtbase-6.4.2.ebuild @@ -0,0 +1,190 @@ +# Copyright 2021-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit qt6-build + +DESCRIPTION="Cross-platform application development framework" + +if [[ ${QT6_BUILD_TYPE} == release ]]; then + KEYWORDS="~amd64" +fi + +# Qt Modules +IUSE="+concurrent +dbus +gui +network +sql opengl +widgets +xml zstd" +REQUIRED_USE=" + opengl? ( gui ) + widgets? ( gui ) + X? ( || ( evdev libinput ) ) +" + +QTGUI_IUSE="accessibility egl eglfs evdev gles2-only +jpeg +libinput tslib tuio vulkan +X" +QTNETWORK_IUSE="brotli gssapi libproxy sctp +ssl vnc" +QTSQL_IUSE="freetds mysql oci8 odbc postgres +sqlite" +IUSE+=" ${QTGUI_IUSE} ${QTNETWORK_IUSE} ${QTSQL_IUSE} cups gtk icu systemd +udev" +# QtPrintSupport = QtGui + QtWidgets enabled. +# ibus = xkbcommon + dbus, and xkbcommon needs either libinput or X +REQUIRED_USE+=" + $(printf '%s? ( gui ) ' ${QTGUI_IUSE//+/}) + $(printf '%s? ( network ) ' ${QTNETWORK_IUSE//+/}) + $(printf '%s? ( sql ) ' ${QTSQL_IUSE//+/}) + accessibility? ( dbus X ) + cups? ( gui widgets ) + eglfs? ( egl ) + gtk? ( widgets ) + gui? ( || ( eglfs X ) || ( libinput X ) ) + libinput? ( udev ) + sql? ( || ( freetds mysql oci8 odbc postgres sqlite ) ) + vnc? ( gui ) + X? ( gles2-only? ( egl ) ) +" + +# TODO: +# qtimageformats: mng not done yet, qtimageformats.git upstream commit 9443239c +# qtnetwork: connman, networkmanager +DEPEND=" + app-crypt/libb2 + dev-libs/double-conversion:= + dev-libs/glib:2 + dev-libs/libpcre2:=[pcre16,unicode] + dev-util/gtk-update-icon-cache + media-libs/fontconfig + >=media-libs/freetype-2.6.1:2 + >=media-libs/harfbuzz-1.6.0:= + media-libs/tiff:= + >=sys-apps/dbus-1.4.20 + sys-libs/zlib:= + brotli? ( app-arch/brotli:= ) + evdev? ( sys-libs/mtdev ) + freetds? ( dev-db/freetds ) + gles2-only? ( media-libs/libglvnd ) + !gles2-only? ( media-libs/libglvnd[X] ) + gssapi? ( virtual/krb5 ) + gtk? ( + x11-libs/gtk+:3 + x11-libs/libX11 + x11-libs/pango + ) + gui? ( media-libs/libpng:= ) + icu? ( dev-libs/icu:= ) + !icu? ( virtual/libiconv ) + jpeg? ( media-libs/libjpeg-turbo:= ) + libinput? ( + dev-libs/libinput:= + >=x11-libs/libxkbcommon-0.5.0 + ) + libproxy? ( net-libs/libproxy ) + mysql? ( dev-db/mysql-connector-c:= ) + oci8? ( dev-db/oracle-instantclient:=[sdk] ) + odbc? ( dev-db/unixODBC ) + postgres? ( dev-db/postgresql:* ) + sctp? ( kernel_linux? ( net-misc/lksctp-tools ) ) + sqlite? ( dev-db/sqlite:3 ) + ssl? ( dev-libs/openssl:= ) + systemd? ( sys-apps/systemd:= ) + tslib? ( >=x11-libs/tslib-1.21 ) + udev? ( virtual/libudev:= ) + vulkan? ( dev-util/vulkan-headers ) + X? ( + x11-libs/libdrm + x11-libs/libICE + x11-libs/libSM + x11-libs/libX11 + >=x11-libs/libxcb-1.12:= + >=x11-libs/libxkbcommon-0.5.0[X] + x11-libs/xcb-util-image + x11-libs/xcb-util-keysyms + x11-libs/xcb-util-renderutil + x11-libs/xcb-util-wm + ) + zstd? ( app-arch/zstd:= ) +" +RDEPEND="${DEPEND}" + +PATCHES=( + "${FILESDIR}"/${PN}-6.4.2-libressl.patch # from OpenBSD ports, not upstreamable +) + +src_configure() { + local mycmakeargs=( + -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_ARCHDATADIR}/mkspecs + -DINSTALL_PLUGINSDIR=${QT6_PLUGINDIR} + -DINSTALL_QMLDIR=${QT6_QMLDIR} + -DINSTALL_SYSCONFDIR=${QT6_SYSCONFDIR} + -DINSTALL_TRANSLATIONSDIR=${QT6_TRANSLATIONDIR} + -DQT_FEATURE_androiddeployqt=OFF + $(qt_feature concurrent) + $(qt_feature dbus) + $(qt_feature gui) + $(qt_feature gui testlib) + $(qt_feature icu) + $(qt_feature network) + $(qt_feature sql) + $(qt_feature systemd journald) + $(qt_feature udev libudev) + $(qt_feature xml) + $(qt_feature zstd) + ) + use gui && mycmakeargs+=( + $(qt_feature accessibility accessibility_atspi_bridge) + $(qt_feature egl) + $(qt_feature eglfs eglfs_egldevice) + $(qt_feature eglfs eglfs_gbm) + $(qt_feature evdev) + $(qt_feature evdev mtdev) + -DQT_FEATURE_gif=ON + $(qt_feature jpeg) + $(qt_feature opengl) + $(qt_feature gles2-only opengles2) + $(qt_feature libinput) + $(qt_feature tslib) + $(qt_feature tuio tuiotouch) + $(qt_feature vulkan) + $(qt_feature widgets) + $(qt_feature X xcb) + $(qt_feature X xcb_xlib) + ) + use widgets && mycmakeargs+=( + $(qt_feature cups) + $(qt_feature gtk gtk3) + ) + if use libinput || use X; then + mycmakeargs+=( -DQT_FEATURE_xkbcommon=ON ) + fi + use network && mycmakeargs+=( + $(qt_feature brotli) + -DQT_FEATURE_dtls=OFF + $(qt_feature gssapi) + $(qt_feature libproxy) + $(qt_feature sctp) + $(qt_feature ssl openssl_linked) + $(qt_feature vnc) + ) + use sql && mycmakeargs+=( + $(qt_feature freetds sql_tds) + $(qt_feature mysql sql_mysql) + $(qt_feature oci8 sql_oci) + $(qt_feature odbc sql_odbc) + $(qt_feature postgres sql_psql) + $(qt_feature sqlite sql_sqlite) + $(qt_feature sqlite system_sqlite) + ) + + qt6-build_src_configure +} + +src_install() { + qt6-build_src_install + + # https://bugs.gentoo.org/863395 + dosym ../$(get_libdir)/qt6/bin/qmake /usr/bin/qmake6 +}