aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md23
-rw-r--r--app-crypt/qca/Manifest3
-rw-r--r--app-crypt/qca/files/qca-2.2.0-libressl.patch116
-rw-r--r--app-crypt/qca/files/qca-2.3.0-libressl.patch68
-rw-r--r--app-crypt/qca/files/qca-2.3.1-libressl.patch104
-rw-r--r--app-crypt/qca/files/qca-2.3.4-libressl.patch103
-rw-r--r--app-crypt/qca/files/qca-2.3.7-use-sha256-not-sha1.patch29
-rw-r--r--app-crypt/qca/metadata.xml46
-rw-r--r--app-crypt/qca/qca-2.3.0.ebuild91
-rw-r--r--app-crypt/qca/qca-2.3.1.ebuild91
-rw-r--r--app-crypt/qca/qca-2.3.8.ebuild119
-rw-r--r--app-crypt/tpm2-tss/Manifest1
-rw-r--r--app-crypt/tpm2-tss/files/tpm2-tss-3.2.0-libressl.patch89
-rw-r--r--app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-Dont-install-files-into-run.patch26
-rw-r--r--app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-libressl-no-cert-tests.patch90
-rw-r--r--app-crypt/tpm2-tss/files/tpm2-tss-4.0.1-Make-sysusers-and-tmpfiles-optional.patch50
-rw-r--r--app-crypt/tpm2-tss/metadata.xml21
-rw-r--r--app-crypt/tpm2-tss/tpm2-tss-4.0.1.ebuild102
-rw-r--r--app-crypt/trousers/Manifest1
-rw-r--r--app-crypt/trousers/files/61-trousers.rules2
-rw-r--r--app-crypt/trousers/files/tcsd.initd19
-rw-r--r--app-crypt/trousers/files/tcsd.service10
-rw-r--r--app-crypt/trousers/files/trousers-0.3.13-nouseradd.patch12
-rw-r--r--app-crypt/trousers/files/trousers-0.3.14-Makefile.am-Mark-tddl.a-nodist.patch25
-rw-r--r--app-crypt/trousers/files/trousers-0.3.15-libressl.patch31
-rw-r--r--app-crypt/trousers/files/trousers-0.3.15-tspi-drop-the-use-of-getpwent_r.patch69
-rw-r--r--app-crypt/trousers/metadata.xml16
-rw-r--r--app-crypt/trousers/trousers-0.3.15-r1.ebuild74
-rw-r--r--app-crypt/trousers/trousers-0.3.15.ebuild73
-rw-r--r--app-emulation/spice/Manifest2
-rw-r--r--app-emulation/spice/files/README.gentoo7
-rw-r--r--app-emulation/spice/files/spice-0.15.0-libressl.patch38
-rw-r--r--app-emulation/spice/metadata.xml14
-rw-r--r--app-emulation/spice/spice-0.15.1-r1.ebuild105
-rw-r--r--app-emulation/spice/spice-0.15.2.ebuild99
-rw-r--r--app-pda/libimobiledevice/Manifest1
-rw-r--r--app-pda/libimobiledevice/files/libimobiledevice-1.3.0-libressl.patch25
-rw-r--r--app-pda/libimobiledevice/files/libimobiledevice-1.3.0-missing_libflags.patch31
-rw-r--r--app-pda/libimobiledevice/files/libimobiledevice-1.3.0-python.patch223
-rw-r--r--app-pda/libimobiledevice/files/libimobiledevice-1.3.0-slibtool.patch105
-rw-r--r--app-pda/libimobiledevice/libimobiledevice-1.3.0-r3.ebuild116
-rw-r--r--app-pda/libimobiledevice/metadata.xml11
-rw-r--r--app-text/mupdf/Manifest3
-rw-r--r--app-text/mupdf/files/mupdf-1.15-CFLAGS.patch13
-rw-r--r--app-text/mupdf/files/mupdf-1.15-openssl-x11.patch18
-rw-r--r--app-text/mupdf/files/mupdf-1.19.0-Makefile.patch37
-rw-r--r--app-text/mupdf/files/mupdf-1.19.0-cross-fixes.patch130
-rw-r--r--app-text/mupdf/files/mupdf-1.19.0-darwin.patch39
-rw-r--r--app-text/mupdf/files/mupdf-1.21.0-add-desktop-pc-files.patch33
-rw-r--r--app-text/mupdf/files/mupdf-1.21.1-fix-aliasing-violation.patch63
-rw-r--r--app-text/mupdf/files/mupdf-1.21.1-no-drm.patch18
-rw-r--r--app-text/mupdf/files/mupdf-1.23.3-cross-fixes.patch120
-rw-r--r--app-text/mupdf/files/mupdf-1.23.3-darwin.patch45
-rw-r--r--app-text/mupdf/files/mupdf-1.23.3-openssl-x11.patch19
-rw-r--r--app-text/mupdf/files/mupdf-1.23.7-libressl.patch15
-rw-r--r--app-text/mupdf/metadata.xml15
-rw-r--r--app-text/mupdf/mupdf-1.22.0-r1.ebuild165
-rw-r--r--app-text/mupdf/mupdf-1.23.3-r1.ebuild165
-rw-r--r--app-text/mupdf/mupdf-1.23.7-r1.ebuild166
-rw-r--r--dev-db/mysql-connector-c++/Manifest3
-rw-r--r--dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.27-mysqlclient_r.patch24
-rw-r--r--dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.32-libressl.patch49
-rw-r--r--dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.33-jdbc.patch11
-rw-r--r--dev-db/mysql-connector-c++/metadata.xml14
-rw-r--r--dev-db/mysql-connector-c++/mysql-connector-c++-8.0.31.ebuild59
-rw-r--r--dev-db/mysql-connector-c++/mysql-connector-c++-8.0.32.ebuild59
-rw-r--r--dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33-r1.ebuild58
-rw-r--r--dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33.ebuild46
-rw-r--r--dev-lang/python/Manifest29
-rw-r--r--dev-lang/python/files/pydoc.conf6
-rw-r--r--dev-lang/python/files/pydoc.init24
-rw-r--r--dev-lang/python/files/python-2.7.18-libressl.patch26
-rw-r--r--dev-lang/python/files/python-3.10.14-libressl.patch11
-rw-r--r--dev-lang/python/files/python-3.10.3-libressl.patch69
-rw-r--r--dev-lang/python/files/python-3.9.9-r1-libressl.patch34
-rw-r--r--dev-lang/python/metadata.xml43
-rw-r--r--dev-lang/python/python-2.7.18_p16-r2.ebuild323
-rw-r--r--dev-lang/python/python-3.10.13_p3.ebuild509
-rw-r--r--dev-lang/python/python-3.10.14.ebuild510
-rw-r--r--dev-lang/python/python-3.10.14_p1.ebuild510
-rw-r--r--dev-lang/python/python-3.11.8_p1.ebuild543
-rw-r--r--dev-lang/python/python-3.11.9.ebuild544
-rw-r--r--dev-lang/python/python-3.12.2_p1.ebuild541
-rw-r--r--dev-lang/python/python-3.12.3.ebuild542
-rw-r--r--dev-lang/python/python-3.9.18_p2.ebuild494
-rw-r--r--dev-lang/python/python-3.9.19.ebuild494
-rw-r--r--dev-lang/python/python-3.9.19_p2.ebuild495
-rw-r--r--dev-lang/ruby/Manifest1
-rw-r--r--dev-lang/ruby/files/3.0/001-socksocket-fix.patch15
-rw-r--r--dev-lang/ruby/files/3.0/010-default-gem-location.patch20
-rw-r--r--dev-lang/ruby/files/3.0/900-musl-coroutine.patch28
-rw-r--r--dev-lang/ruby/files/3.0/901-musl-stacksize.patch26
-rw-r--r--dev-lang/ruby/files/3.0/902-hppa-pthread-stack-size.patch54
-rw-r--r--dev-lang/ruby/files/3.1/001-socksocket-fix.patch15
-rw-r--r--dev-lang/ruby/files/3.1/010-default-gem-location.patch20
-rw-r--r--dev-lang/ruby/files/3.1/011-default-gem-location.patch20
-rw-r--r--dev-lang/ruby/files/3.1/901-musl-stacksize.patch26
-rw-r--r--dev-lang/ruby/files/3.1/902-hppa-pthread-stack-size.patch54
-rw-r--r--dev-lang/ruby/files/ruby-3.1-libressl.patch19
-rw-r--r--dev-lang/ruby/metadata.xml15
-rw-r--r--dev-lang/ruby/ruby-3.1.4-r3.ebuild273
-rw-r--r--dev-lang/ruby/ruby-3.1.4-r5.ebuild277
-rw-r--r--dev-lang/rust/Manifest188
-rw-r--r--dev-lang/rust/files/1.62.1-musl-dynamic-linking.patch25
-rw-r--r--dev-lang/rust/files/1.67.0-doc-wasm.patch34
-rw-r--r--dev-lang/rust/files/1.70.0-ignore-broken-and-non-applicable-tests.patch30
-rw-r--r--dev-lang/rust/files/1.71.0-fix-bashcomp-installation.patch23
-rw-r--r--dev-lang/rust/files/1.71.0-libressl-openssl-sys.patch10
-rw-r--r--dev-lang/rust/files/1.71.0-lint-docs-libpath.patch39
-rw-r--r--dev-lang/rust/files/1.71.1-fix-bootstrap-version-comparison.patch26
-rw-r--r--dev-lang/rust/files/1.72.0-bump-libc-deps-to-0.2.146.patch156
-rw-r--r--dev-lang/rust/files/1.72.0-libressl-openssl-sys.patch10
-rw-r--r--dev-lang/rust/files/1.74.1-cross-compile-libz.patch19
-rw-r--r--dev-lang/rust/files/1.75.0-handle-vendored-sources.patch45
-rw-r--r--dev-lang/rust/files/1.75.0-musl-dynamic-linking.patch19
-rw-r--r--dev-lang/rust/files/1.76.0-loong-code-model.patch73
-rw-r--r--dev-lang/rust/files/1.77.1-libressl-openssl-sys.patch10
-rw-r--r--dev-lang/rust/files/rehash-crate.sh18
-rw-r--r--dev-lang/rust/metadata.xml33
-rw-r--r--dev-lang/rust/rust-1.71.0.ebuild759
-rw-r--r--dev-lang/rust/rust-1.71.1.ebuild759
-rw-r--r--dev-lang/rust/rust-1.73.0.ebuild769
-rw-r--r--dev-lang/rust/rust-1.74.1.ebuild794
-rw-r--r--dev-lang/rust/rust-1.75.0-r1.ebuild797
-rw-r--r--dev-lang/rust/rust-1.76.0-r1.ebuild797
-rw-r--r--dev-lang/rust/rust-1.77.1.ebuild797
-rw-r--r--dev-libs/libressl/Manifest8
-rw-r--r--dev-libs/libressl/files/libressl-2.8.3-solaris10.patch69
-rw-r--r--dev-libs/libressl/files/libressl-3.7.2-genrsa-rand.patch26
-rw-r--r--dev-libs/libressl/libressl-3.8.3.ebuild69
-rw-r--r--dev-libs/libressl/libressl-3.8.4.ebuild69
-rw-r--r--dev-libs/libressl/libressl-3.9.0.ebuild69
-rw-r--r--dev-libs/libressl/libressl-3.9.1.ebuild69
-rw-r--r--dev-libs/libressl/metadata.xml31
-rw-r--r--dev-libs/libretls/libretls-3.3.2.ebuild17
-rw-r--r--dev-libs/libretls/metadata.xml13
-rw-r--r--dev-libs/libtpms/Manifest1
-rw-r--r--dev-libs/libtpms/files/407.patch27
-rw-r--r--dev-libs/libtpms/files/libtpms-0.9.0-Remove-WError.patch13
-rw-r--r--dev-libs/libtpms/files/libtpms-0.9.5-slibtool.patch52
-rw-r--r--dev-libs/libtpms/files/libtpms-0.9.6-libressl.patch29
-rw-r--r--dev-libs/libtpms/libtpms-0.9.6.ebuild49
-rw-r--r--dev-libs/libtpms/metadata.xml19
-rw-r--r--dev-libs/openssl/metadata.xml17
-rw-r--r--dev-libs/openssl/openssl-3.8.1.ebuild20
-rw-r--r--dev-libs/openssl/openssl-3.9.0.ebuild20
-rw-r--r--dev-libs/softhsm/Manifest1
-rw-r--r--dev-libs/softhsm/metadata.xml9
-rw-r--r--dev-libs/softhsm/softhsm-2.6.1-r2.ebuild49
-rw-r--r--dev-libs/xmlsec/Manifest1
-rw-r--r--dev-libs/xmlsec/files/xmlsec-1.2.37-libressl.patch40
-rw-r--r--dev-libs/xmlsec/files/xmlsec-1.3.0-optimisation.patch11
-rw-r--r--dev-libs/xmlsec/metadata.xml15
-rw-r--r--dev-libs/xmlsec/xmlsec-1.2.37.ebuild64
-rw-r--r--dev-perl/Net-SSLeay/Manifest2
-rw-r--r--dev-perl/Net-SSLeay/Net-SSLeay-1.920.0-r1.ebuild67
-rw-r--r--dev-perl/Net-SSLeay/Net-SSLeay-1.940.0.ebuild67
-rw-r--r--dev-perl/Net-SSLeay/files/Net-SSLeay-1.88-fix-network-tests.patch17
-rw-r--r--dev-perl/Net-SSLeay/files/Net-SSLeay-1.90-libressl.patch150
-rw-r--r--dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.8.0.patch34
-rw-r--r--dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.9.0.patch44
-rw-r--r--dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl.patch158
-rw-r--r--dev-perl/Net-SSLeay/files/Net-SSLeay-1.94-libressl.patch42
-rw-r--r--dev-perl/Net-SSLeay/metadata.xml13
-rw-r--r--dev-python/cryptography/Manifest113
-rw-r--r--dev-python/cryptography/cryptography-41.0.7.ebuild157
-rw-r--r--dev-python/cryptography/cryptography-42.0.0.ebuild150
-rw-r--r--dev-python/cryptography/cryptography-42.0.1.ebuild150
-rw-r--r--dev-python/cryptography/cryptography-42.0.2.ebuild150
-rw-r--r--dev-python/cryptography/cryptography-42.0.3.ebuild150
-rw-r--r--dev-python/cryptography/cryptography-42.0.4.ebuild150
-rw-r--r--dev-python/cryptography/cryptography-42.0.5.ebuild151
-rw-r--r--dev-python/cryptography/files/cryptography-42.0.5-libressl-openssl-sys.patch10
-rw-r--r--dev-python/cryptography/metadata.xml13
-rw-r--r--dev-python/m2crypto/Manifest1
-rw-r--r--dev-python/m2crypto/files/m2crypto-libressl-0.38.0.patch185
-rw-r--r--dev-python/m2crypto/m2crypto-0.41.0.ebuild75
-rw-r--r--dev-python/m2crypto/metadata.xml12
-rw-r--r--dev-qt/qtbase/Manifest1
-rw-r--r--dev-qt/qtbase/files/qtbase-6.5.2-hppa-forkfd-grow-stack.patch28
-rw-r--r--dev-qt/qtbase/files/qtbase-6.5.2-no-symlink-check.patch5
-rw-r--r--dev-qt/qtbase/files/qtbase-6.6.0-libressl.patch353
-rw-r--r--dev-qt/qtbase/files/qtbase-6.6.1-forkfd-childstack-size.patch27
-rw-r--r--dev-qt/qtbase/files/qtbase-6.6.3-gcc14-avx512fp16.patch15
-rw-r--r--dev-qt/qtbase/files/qtbase-6.6.3-pkgconf-deps.patch35
-rw-r--r--dev-qt/qtbase/files/qtbase-6.7.0-qspan-ifdef.patch29
-rw-r--r--dev-qt/qtbase/metadata.xml35
-rw-r--r--dev-qt/qtbase/qtbase-6.7.0-r1.ebuild383
-rw-r--r--dev-qt/qtnetwork/Manifest5
-rw-r--r--dev-qt/qtnetwork/files/qtnetwork-5.12.1-libressl.patch93
-rw-r--r--dev-qt/qtnetwork/files/qtnetwork-5.12.4-libressl.patch14
-rw-r--r--dev-qt/qtnetwork/files/qtnetwork-5.15.10-ssl-upgr-default-DH-params.patch101
-rw-r--r--dev-qt/qtnetwork/files/qtnetwork-5.15.7-libressl.patch (renamed from dev-qt/qtnetwork/files/qtnetwork-5.15.0-libressl.patch)259
-rw-r--r--dev-qt/qtnetwork/metadata.xml6
-rw-r--r--dev-qt/qtnetwork/qtnetwork-5.14.2.ebuild70
-rw-r--r--dev-qt/qtnetwork/qtnetwork-5.15.0.ebuild67
-rw-r--r--dev-qt/qtnetwork/qtnetwork-5.15.13.ebuild67
-rw-r--r--dev-util/cargo-audit/Manifest270
-rw-r--r--dev-util/cargo-audit/cargo-audit-0.17.6.ebuild335
-rw-r--r--dev-util/cargo-audit/files/0.17.0-libressl.patch28
-rw-r--r--dev-util/cargo-audit/files/0.17.6-libressl.patch23
-rw-r--r--dev-util/cargo-audit/metadata.xml14
-rw-r--r--dev-util/cargo-c/Manifest371
-rw-r--r--dev-util/cargo-c/cargo-c-0.9.14.ebuild214
-rw-r--r--dev-util/cargo-c/cargo-c-0.9.20.ebuild357
-rw-r--r--dev-util/cargo-c/files/cargo-c-0.9.14-libressl-openssl-sys.patch10
-rw-r--r--dev-util/cargo-c/files/cargo-c-0.9.20-libressl-openssl-sys.patch10
-rw-r--r--dev-util/cargo-c/files/cargo-c-0.9.27-libressl-openssl-sys.patch10
-rw-r--r--dev-util/cargo-c/metadata.xml11
-rw-r--r--dev-util/cargo-ebuild/Manifest127
-rw-r--r--dev-util/cargo-ebuild/cargo-ebuild-0.5.4-r1.ebuild183
-rw-r--r--dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-libressl.patch10
-rw-r--r--dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-updated-eclass-style.patch60
-rw-r--r--dev-util/cargo-ebuild/metadata.xml11
-rw-r--r--dev-util/maturin/Manifest556
-rw-r--r--dev-util/maturin/files/maturin-1.4.0-libressl-openssl-sys.patch10
-rw-r--r--dev-util/maturin/maturin-1.4.0.ebuild554
-rw-r--r--dev-util/maturin/maturin-1.5.1-r1.ebuild556
-rw-r--r--dev-util/maturin/metadata.xml13
-rw-r--r--mail-mta/postfix/Manifest1
-rw-r--r--mail-mta/postfix/files/postfix-3.5.8-libressl.patch55
-rw-r--r--mail-mta/postfix/files/postfix.rc6.2.785
-rw-r--r--mail-mta/postfix/files/postfix.service26
-rw-r--r--mail-mta/postfix/files/smtp.pass2
-rw-r--r--mail-mta/postfix/files/smtp.sasl2
-rw-r--r--mail-mta/postfix/metadata.xml23
-rw-r--r--mail-mta/postfix/postfix-3.5.22.ebuild310
-rw-r--r--net-analyzer/nmap/Manifest3
-rw-r--r--net-analyzer/nmap/files/nls.m432
-rw-r--r--net-analyzer/nmap/files/nmap-7.92-libressl.patch67
-rw-r--r--net-analyzer/nmap/files/nmap-7.94-autoconf-2.72.patch33
-rw-r--r--net-analyzer/nmap/metadata.xml24
-rw-r--r--net-analyzer/nmap/nmap-7.94.ebuild189
-rw-r--r--net-dialup/freeradius/Manifest2
-rw-r--r--net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch57
-rw-r--r--net-dialup/freeradius/files/freeradius-3.2.1-libressl.patch127
-rw-r--r--net-dialup/freeradius/files/freeradius-3.2.3-configure-c99.patch38
-rw-r--r--net-dialup/freeradius/files/radius.conf-r622
-rw-r--r--net-dialup/freeradius/files/radius.init-r431
-rw-r--r--net-dialup/freeradius/freeradius-3.2.2.ebuild315
-rw-r--r--net-dialup/freeradius/freeradius-3.2.3.ebuild322
-rw-r--r--net-dialup/freeradius/metadata.xml19
-rw-r--r--net-libs/ldns/Manifest1
-rw-r--r--net-libs/ldns/files/ldns-1.7.1-libressl.patch84
-rw-r--r--net-libs/ldns/files/ldns-1.8.1-pkgconfig.patch10
-rw-r--r--net-libs/ldns/files/ldns-1.8.3-configure-strict.patch139
-rw-r--r--net-libs/ldns/files/ldns-1.8.3-docs.patch95
-rw-r--r--net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch101
-rw-r--r--net-libs/ldns/ldns-1.8.3-r1.ebuild95
-rw-r--r--net-libs/ldns/ldns-1.8.3-r2.ebuild96
-rw-r--r--net-libs/ldns/metadata.xml17
-rw-r--r--net-misc/aria2/Manifest1
-rw-r--r--net-misc/aria2/aria2-1.34.0-r1.ebuild158
-rw-r--r--net-misc/aria2/files/aria2-1.34.0-make_unique.patch44
-rw-r--r--net-misc/aria2/files/aria2-1.34.0-mask-headers.patch46
-rw-r--r--net-misc/aria2/files/aria2-libressl.patch13
-rw-r--r--net-misc/aria2/metadata.xml25
-rw-r--r--net-misc/seafile-client/Manifest2
-rw-r--r--net-misc/seafile-client/files/seafile-client-7.0.9-libressl.patch31
-rw-r--r--net-misc/seafile-client/files/seafile-client-7.0.9-qt-5.15.patch37
-rw-r--r--net-misc/seafile-client/files/seafile-client-8.0.6-select-qt5.patch23
-rw-r--r--net-misc/seafile-client/metadata.xml11
-rw-r--r--net-misc/seafile-client/seafile-client-8.0.9.ebuild56
-rw-r--r--net-misc/seafile-client/seafile-client-9.0.3.ebuild56
-rw-r--r--net-misc/socat/Manifest1
-rw-r--r--net-misc/socat/metadata.xml15
-rw-r--r--net-misc/socat/socat-1.7.4.4-r1.ebuild52
-rw-r--r--net-misc/stunnel/Manifest4
-rw-r--r--net-misc/stunnel/files/stunnel-5.59-libressl.patch237
-rw-r--r--net-misc/stunnel/files/stunnel-5.65-libressl.patch246
-rw-r--r--net-misc/stunnel/files/stunnel-5.68-libressl.patch321
-rw-r--r--net-misc/stunnel/files/stunnel-5.71-dont-clobber-fortify-source.patch15
-rw-r--r--net-misc/stunnel/files/stunnel-5.71-libressl.patch302
-rw-r--r--net-misc/stunnel/files/stunnel-5.71-respect-EPYTHON-for-tests.patch12
-rw-r--r--net-misc/stunnel/files/stunnel-r255
-rw-r--r--net-misc/stunnel/files/stunnel.conf61
-rw-r--r--net-misc/stunnel/files/stunnel.tmpfiles.conf1
-rw-r--r--net-misc/stunnel/metadata.xml18
-rw-r--r--net-misc/stunnel/stunnel-5.64-r2.ebuild104
-rw-r--r--net-misc/stunnel/stunnel-5.65-r2.ebuild103
-rw-r--r--net-misc/stunnel/stunnel-5.68.ebuild103
-rw-r--r--net-misc/stunnel/stunnel-5.71-r1.ebuild133
-rw-r--r--net-misc/stunnel/stunnel-5.71.ebuild126
-rw-r--r--net-nds/openldap/Manifest2
-rw-r--r--net-nds/openldap/files/DB_CONFIG.fast.example25
-rw-r--r--net-nds/openldap/files/openldap-2.2.14-perlthreadsfix.patch11
-rw-r--r--net-nds/openldap/files/openldap-2.4.11-libldap_r.patch10
-rw-r--r--net-nds/openldap/files/openldap-2.4.15-ppolicy.patch12
-rw-r--r--net-nds/openldap/files/openldap-2.4.17-gcc44.patch10
-rw-r--r--net-nds/openldap/files/openldap-2.4.28-fix-dash.patch24
-rw-r--r--net-nds/openldap/files/openldap-2.4.28-gnutls-gcrypt.patch11
-rw-r--r--net-nds/openldap/files/openldap-2.4.31-gcc47.patch16
-rw-r--r--net-nds/openldap/files/openldap-2.4.35-contrib-samba4.patch37
-rw-r--r--net-nds/openldap/files/openldap-2.4.35-contrib-smbk5pwd.patch47
-rw-r--r--net-nds/openldap/files/openldap-2.4.40-slapd-conf64
-rw-r--r--net-nds/openldap/files/openldap-2.4.42-mdb-unbundle.patch136
-rw-r--r--net-nds/openldap/files/openldap-2.4.45-fix-lmpasswd-gnutls-symbols.patch109
-rw-r--r--net-nds/openldap/files/openldap-2.4.47-warnings.patch35
-rw-r--r--net-nds/openldap/files/openldap-2.4.6-evolution-ntlm.patch189
-rw-r--r--net-nds/openldap/files/openldap-2.6.1-cloak.patch21
-rw-r--r--net-nds/openldap/files/openldap-2.6.1-fix-bashism-configure.patch11
-rw-r--r--net-nds/openldap/files/openldap-2.6.1-fix-missing-mapping.patch15
-rw-r--r--net-nds/openldap/files/openldap-2.6.1-flags.patch352
-rw-r--r--net-nds/openldap/files/openldap-2.6.1-system-mdb.patch140
-rw-r--r--net-nds/openldap/files/openldap-2.6.3-clang16.patch185
-rw-r--r--net-nds/openldap/files/openldap-2.6.3-slapd-conf64
-rw-r--r--net-nds/openldap/files/openldap-2.6.4-clang16.patch234
-rw-r--r--net-nds/openldap/files/openldap-2.6.4-libressl.patch38
-rw-r--r--net-nds/openldap/files/slapd-2.6.1.service13
-rw-r--r--net-nds/openldap/files/slapd-confd-2.4.28-r126
-rw-r--r--net-nds/openldap/files/slapd-confd-2.6.126
-rw-r--r--net-nds/openldap/files/slapd-initd-2.4.40-r264
-rw-r--r--net-nds/openldap/files/slapd.service12
-rw-r--r--net-nds/openldap/files/slapd.service.conf12
-rw-r--r--net-nds/openldap/files/slapd.tmpfilesd2
-rw-r--r--net-nds/openldap/metadata.xml26
-rw-r--r--net-nds/openldap/openldap-2.6.3-r7.ebuild828
-rw-r--r--net-vpn/openvpn/Manifest4
-rw-r--r--net-vpn/openvpn/files/down.sh33
-rw-r--r--net-vpn/openvpn/files/openvpn-2.1.conf18
-rw-r--r--net-vpn/openvpn/files/openvpn-2.1.init134
-rw-r--r--net-vpn/openvpn/files/openvpn-2.5.0-auth-pam-missing-header.patch12
-rw-r--r--net-vpn/openvpn/files/openvpn-2.5.2-detect-python-rst2man.patch14
-rw-r--r--net-vpn/openvpn/files/openvpn-2.5.2-libressl.patch147
-rw-r--r--net-vpn/openvpn/files/openvpn-2.5.7-libressl.patch37
-rw-r--r--net-vpn/openvpn/files/up.sh100
-rw-r--r--net-vpn/openvpn/metadata.xml28
-rw-r--r--net-vpn/openvpn/openvpn-2.5.2-r3.ebuild199
-rw-r--r--net-vpn/openvpn/openvpn-2.5.6-r1.ebuild198
-rw-r--r--net-vpn/openvpn/openvpn-2.5.7-r1.ebuild195
-rw-r--r--net-vpn/openvpn/openvpn-2.6.4.ebuild197
-rw-r--r--net-vpn/tor/Manifest12
-rw-r--r--net-vpn/tor/files/README.gentoo8
-rw-r--r--net-vpn/tor/files/tor-0.2.7.4-torrc.sample.patch31
-rw-r--r--net-vpn/tor/files/tor-0.4.7.13-libressl.patch202
-rw-r--r--net-vpn/tor/files/tor-0.4.7.13-opensslconf.patch55
-rw-r--r--net-vpn/tor/files/tor-0.4.7.16-arm64-sandbox.patch337
-rw-r--r--net-vpn/tor/files/tor.confd3
-rw-r--r--net-vpn/tor/files/tor.initd-r937
-rw-r--r--net-vpn/tor/files/tor.service38
-rw-r--r--net-vpn/tor/files/torrc-r27
-rw-r--r--net-vpn/tor/metadata.xml17
-rw-r--r--net-vpn/tor/tor-0.4.7.13-r1.ebuild150
-rw-r--r--net-vpn/tor/tor-0.4.7.16-r1.ebuild182
-rw-r--r--net-vpn/tor/tor-0.4.7.16.ebuild169
-rw-r--r--net-vpn/tor/tor-0.4.8.10.ebuild190
-rw-r--r--net-vpn/tor/tor-0.4.8.11.ebuild190
-rw-r--r--net-wireless/aircrack-ng/Manifest2
-rw-r--r--net-wireless/aircrack-ng/aircrack-ng-1.2_rc1-r1.ebuild138
-rw-r--r--net-wireless/aircrack-ng/aircrack-ng-1.2_rc4-r1.ebuild118
-rw-r--r--net-wireless/aircrack-ng/aircrack-ng-9999.ebuild123
-rw-r--r--net-wireless/aircrack-ng/files/aircrack-ng-1.2_rc4-openssl.patch49
-rw-r--r--net-wireless/aircrack-ng/metadata.xml29
-rw-r--r--net-wireless/hostapd/Manifest2
-rw-r--r--net-wireless/hostapd/files/hostapd-2.10-libressl.patch23
-rw-r--r--net-wireless/hostapd/files/hostapd-2.6-libressl.patch21
-rw-r--r--net-wireless/hostapd/files/hostapd-init.d1
-rw-r--r--net-wireless/hostapd/hostapd-2.10-r3.ebuild266
-rw-r--r--net-wireless/hostapd/hostapd-2.6.ebuild222
-rw-r--r--net-wireless/hostapd/metadata.xml23
-rw-r--r--net-wireless/wpa_supplicant/Manifest1
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_cli.sh46
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-Drop-security-level-to-0-with-OpenSSL-3.0-wh.patch57
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch30
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch13
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.9-libressl.patch12
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d10
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-init.d70
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant.conf7
-rw-r--r--net-wireless/wpa_supplicant/metadata.xml33
-rw-r--r--net-wireless/wpa_supplicant/wpa_supplicant-2.10-r4.ebuild480
-rw-r--r--sec-keys/openpgp-keys-libressl/Manifest1
-rw-r--r--sec-keys/openpgp-keys-libressl/metadata.xml8
-rw-r--r--sec-keys/openpgp-keys-libressl/openpgp-keys-libressl-20240309.ebuild19
-rw-r--r--sys-cluster/keepalived/Manifest1
-rw-r--r--sys-cluster/keepalived/files/keepalived-1.4.0-fix-no-sorry-segfault.patch28
-rw-r--r--sys-cluster/keepalived/files/keepalived.confd6
-rw-r--r--sys-cluster/keepalived/files/keepalived.init33
-rw-r--r--sys-cluster/keepalived/keepalived-1.4.0-r1.ebuild74
-rw-r--r--sys-cluster/keepalived/metadata.xml14
-rw-r--r--www-client/netsurf/Manifest1
-rw-r--r--www-client/netsurf/files/netsurf-3.10-disable-failing-tests.patch42
-rw-r--r--www-client/netsurf/files/netsurf-3.10-julia-libutf8proc-header-location.patch34
-rw-r--r--www-client/netsurf/files/netsurf-3.11-libressl-3.5.patch27
-rw-r--r--www-client/netsurf/metadata.xml51
-rw-r--r--www-client/netsurf/netsurf-3.11.ebuild145
-rw-r--r--www-servers/apache/Manifest2
-rw-r--r--www-servers/apache/apache-2.4.58-r2.ebuild257
-rw-r--r--www-servers/apache/apache-2.4.58.ebuild264
-rw-r--r--www-servers/apache/files/41_mod_http2.conf9
-rw-r--r--www-servers/apache/files/apache-2.4.57-libressl.patch40
-rw-r--r--www-servers/apache/files/apache.conf3
-rw-r--r--www-servers/apache/files/apache2.4-hardened.service25
-rw-r--r--www-servers/apache/files/libxmlv212.patch24
-rw-r--r--www-servers/apache/metadata.xml23
-rw-r--r--x11-apps/igt-gpu-tools/Manifest1
-rw-r--r--x11-apps/igt-gpu-tools/igt-gpu-tools-1.23-r1.ebuild105
-rw-r--r--x11-apps/igt-gpu-tools/metadata.xml16
398 files changed, 36188 insertions, 2199 deletions
diff --git a/README.md b/README.md
index 924f0e3..d125e4f 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,15 @@
# LibreSSL ebuilds testing repo
-LibreSSL is already in Gentoo, but still requires [a lot of ebuilds](https://github.com/gentoo/libressl/wiki/Transition-plan#packages-not-converted-yet)
+LibreSSL requires [a lot of ebuilds](https://github.com/gentoo/libressl/wiki/Transition-plan#packages-not-converted-yet)
to be fixed. This overlay serves as a testing ground and makes testing easier
by providing an openssl dummy ebuild, so you can compile packages against
-LibreSSL which don't have the 'libressl' USE flag yet.
+LibreSSL.
+
+The `libressl` USE flag is no longer used on main portage tree.
+The dummy `dev-libs/openssl` package on this overlay only depends
+on `dev-libs/libressl` to fix dependency.
+This overlay goal is to provide ebuilds that require patches for build
+to succeed where dummy package dependency isn’t enough.
## How to install the overlay
@@ -14,6 +20,17 @@ Use [`eselect-repository`](https://wiki.gentoo.org/wiki/Eselect/Repository):
Now you can use `emerge --sync` or `emaint sync -r libressl` to sync this
repository.
+The `dev-libs/libressl` package in this overlay causes file collisions with the
+`dev-libs/openssl::gentoo` package. When switching to this overlay first fetch
+the LibreSSL package and then remove the OpenSSL package before installing
+`dev-libs/libressl` and the `dev-libs/openssl::libressl` fake package:
+```
+# emerge -f dev-libs/libressl
+# emerge -C dev-libs/openssl
+# emerge -av1 dev-libs/libressl
+# emerge @preserved-rebuild
+```
+
## links
[Gentoo bug report](https://bugs.gentoo.org/show_bug.cgi?id=508750)
@@ -31,3 +48,5 @@ repository.
## Contact
[![Gitter chat](https://badges.gitter.im/gentoo/libressl.png)](https://gitter.im/gentoo/libressl)
+
+[IRC on Libera.Chat #gentoo-libressl](irc://irc.libera.chat/gentoo-libressl)
diff --git a/app-crypt/qca/Manifest b/app-crypt/qca/Manifest
index df985ae..6b18c45 100644
--- a/app-crypt/qca/Manifest
+++ b/app-crypt/qca/Manifest
@@ -1,2 +1 @@
-DIST qca-2.3.0.tar.xz 729504 BLAKE2B 71cf9dfae00066c14e1055da1fa1a8e1210f538b1addfde1b99a9b26b1e8f7dd61e289d0f505b5ec04d5f4745216d4fd0f8be8f8de9e9cbf74123907ba703d0e SHA512 ca9251868e073834562fa62ffc64b3e7817c9ddadc6bc3fb99cf8b5c8d859969562170a98874be9590c617b2dd8e5590d2c83792554f54bb880c677902db22fe
-DIST qca-2.3.1.tar.xz 725984 BLAKE2B a99121dd95822ef5e1057dc9ad9250bb14486f42b0571936453644bc7c5649f16cbc918fa04d4a5af2c62bc35cc672159a84e27a86e685cfe320518a42076052 SHA512 092704a8d7c5973f05c82584ea55b4f8f874965aea943277e50fde873913a9bdad6a51ea74fc0036bbb632a13141cb4c030504229c06779890286205929f6021
+DIST qca-2.3.8.tar.xz 761340 BLAKE2B 04ec8d2fb9c2c00b04407828c549a4bb7d8bf6cda2f1071078dd446b8fc90c89872b2a4dc838bcb4eb34132545365be210c0043bde95c084901661a874600b34 SHA512 ddb410214e8264955c2bb8c68d018e3826cb8ec48f8cc7207c2aec1c36051dc0501455b5049eff927dcf354603c0646f86ca10f2cebebe87789b3fd07a993b68
diff --git a/app-crypt/qca/files/qca-2.2.0-libressl.patch b/app-crypt/qca/files/qca-2.2.0-libressl.patch
deleted file mode 100644
index 537dd11..0000000
--- a/app-crypt/qca/files/qca-2.2.0-libressl.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 3cfe5c3a7cfbf0b7351dedb64785b837667fc0b1 Mon Sep 17 00:00:00 2001
-From: Stefan Strogin <steils@gentoo.org>
-Date: Wed, 2 Oct 2019 17:28:44 +0300
-Subject: [PATCH] Fix build with LibreSSL
-
-Provide RSA_meth_set_{sign,verify} for LibreSSL.
-Do not redefine M_ASN1_IA5STRING_new and RSA_F_RSA_EAY_PRIVATE_DECRYPT.
-Disable HKDF.
-
-Upstream-Status: Submitted [https://phabricator.kde.org/D20259]
-Signed-off-by: Stefan Strogin <steils@gentoo.org>
----
- plugins/qca-ossl/ossl110-compat.h | 35 +++++++++++++++++--------------
- plugins/qca-ossl/qca-ossl.cpp | 10 ++++-----
- 2 files changed, 24 insertions(+), 21 deletions(-)
-
-diff --git a/plugins/qca-ossl/ossl110-compat.h b/plugins/qca-ossl/ossl110-compat.h
-index b320707..0a8b49b 100644
---- a/plugins/qca-ossl/ossl110-compat.h
-+++ b/plugins/qca-ossl/ossl110-compat.h
-@@ -205,22 +205,6 @@ static int RSA_meth_set_priv_dec(RSA_METHOD *rsa, int (*priv_dec) (int flen, con
- return 1;
- }
-
--static int RSA_meth_set_sign(RSA_METHOD *meth, int (*sign) (int type, const unsigned char *m,
-- unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa))
--{
-- if (!meth) return 0;
-- meth->rsa_sign = sign;
-- return 1;
--}
--
--static int RSA_meth_set_verify(RSA_METHOD *meth, int (*verify) (int dtype, const unsigned char *m,
-- unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, const RSA *rsa))
--{
-- if (!meth) return 0;
-- meth->rsa_verify = verify;
-- return 1;
--}
--
- static int RSA_meth_set_finish(RSA_METHOD *meth, int (*finish) (RSA *rsa))
- {
- if (!meth) return 0;
-@@ -272,4 +256,23 @@ static void HMAC_CTX_free(HMAC_CTX *ctx)
-
- #endif // OPENSSL_VERSION_NUMBER < 0x10100000L
-
-+#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || \
-+ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3000000fL)
-+static int RSA_meth_set_sign(RSA_METHOD *meth, int (*sign) (int type, const unsigned char *m,
-+ unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa))
-+{
-+ if (!meth) return 0;
-+ meth->rsa_sign = sign;
-+ return 1;
-+}
-+
-+static int RSA_meth_set_verify(RSA_METHOD *meth, int (*verify) (int dtype, const unsigned char *m,
-+ unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, const RSA *rsa))
-+{
-+ if (!meth) return 0;
-+ meth->rsa_verify = verify;
-+ return 1;
-+}
-+#endif // (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)
-+
- #endif // OSSL110COMPAT_H
-diff --git a/plugins/qca-ossl/qca-ossl.cpp b/plugins/qca-ossl/qca-ossl.cpp
-index 11ecdc9..75c48fc 100644
---- a/plugins/qca-ossl/qca-ossl.cpp
-+++ b/plugins/qca-ossl/qca-ossl.cpp
-@@ -62,12 +62,12 @@
- #endif
-
- // OpenSSL 1.1.0 compatibility macros
--#ifdef OSSL_110
-+#if defined(OSSL_110) && !defined(LIBRESSL_VERSION_NUMBER)
- #define M_ASN1_IA5STRING_new() ASN1_IA5STRING_new()
- #define RSA_F_RSA_EAY_PRIVATE_DECRYPT RSA_F_RSA_OSSL_PRIVATE_DECRYPT
- #endif
-
--#ifdef OSSL_110
-+#if defined(OSSL_110) && !defined(LIBRESSL_VERSION_NUMBER)
- #include <openssl/kdf.h>
- #endif
-
-@@ -1280,7 +1280,7 @@ public:
- protected:
- };
-
--#ifdef OSSL_110
-+#if defined(OSSL_110) && !defined(LIBRESSL_VERSION_NUMBER)
- class opensslHkdfContext : public HKDFContext
- {
- public:
-@@ -7416,7 +7416,7 @@ public:
- #endif
- list += "pbkdf1(sha1)";
- list += "pbkdf2(sha1)";
--#ifdef OSSL_110
-+#if defined(OSSL_110) && !defined(LIBRESSL_VERSION_NUMBER)
- list += "hkdf(sha256)";
- #endif
- list += "pkey";
-@@ -7489,7 +7489,7 @@ public:
- #endif
- else if ( type == "pbkdf2(sha1)" )
- return new opensslPbkdf2Context( this, type );
--#ifdef OSSL_110
-+#if defined(OSSL_110) && !defined(LIBRESSL_VERSION_NUMBER)
- else if ( type == "hkdf(sha256)" )
- return new opensslHkdfContext( this, type );
- #endif
---
-2.23.0
-
diff --git a/app-crypt/qca/files/qca-2.3.0-libressl.patch b/app-crypt/qca/files/qca-2.3.0-libressl.patch
deleted file mode 100644
index c06ba60..0000000
--- a/app-crypt/qca/files/qca-2.3.0-libressl.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From c3001c187f91a6eccfcb75828876f03f5310d283 Mon Sep 17 00:00:00 2001
-From: Stefan Strogin <steils@gentoo.org>
-Date: Wed, 26 Feb 2020 04:41:28 +0200
-Subject: [PATCH] Fix build with LibreSSL
-
-Signed-off-by: Stefan Strogin <steils@gentoo.org>
----
- plugins/qca-ossl/qca-ossl.cpp | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/plugins/qca-ossl/qca-ossl.cpp b/plugins/qca-ossl/qca-ossl.cpp
-index 559dc3f6..5ba9f1e7 100644
---- a/plugins/qca-ossl/qca-ossl.cpp
-+++ b/plugins/qca-ossl/qca-ossl.cpp
-@@ -41,7 +41,13 @@
- #include <openssl/pkcs12.h>
- #include <openssl/ssl.h>
-
-+#ifndef RSA_F_RSA_OSSL_PRIVATE_DECRYPT
-+#define RSA_F_RSA_OSSL_PRIVATE_DECRYPT RSA_F_RSA_EAY_PRIVATE_DECRYPT
-+#endif
-+
-+#ifndef LIBRESSL_VERSION_NUMBER
- #include <openssl/kdf.h>
-+#endif
-
- using namespace QCA;
-
-@@ -1255,6 +1261,7 @@ public:
- protected:
- };
-
-+#ifndef LIBRESSL_VERSION_NUMBER
- class opensslHkdfContext : public HKDFContext
- {
- Q_OBJECT
-@@ -1284,6 +1291,7 @@ public:
- return out;
- }
- };
-+#endif // LIBRESSL_VERSION_NUMBER
-
- class opensslHMACContext : public MACContext
- {
-@@ -7268,7 +7276,9 @@ public:
- #endif
- list += QStringLiteral("pbkdf1(sha1)");
- list += QStringLiteral("pbkdf2(sha1)");
-+#ifndef LIBRESSL_VERSION_NUMBER
- list += QStringLiteral("hkdf(sha256)");
-+#endif
- list += QStringLiteral("pkey");
- list += QStringLiteral("dlgroup");
- list += QStringLiteral("rsa");
-@@ -7337,8 +7347,10 @@ public:
- #endif
- else if ( type == QLatin1String("pbkdf2(sha1)") )
- return new opensslPbkdf2Context( this, type );
-+#ifndef LIBRESSL_VERSION_NUMBER
- else if ( type == QLatin1String("hkdf(sha256)") )
- return new opensslHkdfContext( this, type );
-+#endif
- else if ( type == QLatin1String("hmac(md5)") )
- return new opensslHMACContext( EVP_md5(), this, type );
- else if ( type == QLatin1String("hmac(sha1)") )
---
-2.25.1
-
diff --git a/app-crypt/qca/files/qca-2.3.1-libressl.patch b/app-crypt/qca/files/qca-2.3.1-libressl.patch
deleted file mode 100644
index 0424378..0000000
--- a/app-crypt/qca/files/qca-2.3.1-libressl.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From 56f60bc221d88e0753494c3e7ee320dc0f9de030 Mon Sep 17 00:00:00 2001
-From: Stefan Strogin <steils@gentoo.org>
-Date: Wed, 26 Feb 2020 04:41:28 +0200
-Subject: [PATCH] Fix build with LibreSSL
-
-Signed-off-by: Stefan Strogin <steils@gentoo.org>
----
- plugins/qca-ossl/qca-ossl.cpp | 24 ++++++++++++++++++++++++
- 1 file changed, 24 insertions(+)
-
-diff --git a/plugins/qca-ossl/qca-ossl.cpp b/plugins/qca-ossl/qca-ossl.cpp
-index ee872d72..4ee5d7c8 100644
---- a/plugins/qca-ossl/qca-ossl.cpp
-+++ b/plugins/qca-ossl/qca-ossl.cpp
-@@ -41,7 +41,13 @@
- #include <openssl/pkcs12.h>
- #include <openssl/ssl.h>
-
-+#ifndef RSA_F_RSA_OSSL_PRIVATE_DECRYPT
-+#define RSA_F_RSA_OSSL_PRIVATE_DECRYPT RSA_F_RSA_EAY_PRIVATE_DECRYPT
-+#endif
-+
-+#ifndef LIBRESSL_VERSION_NUMBER
- #include <openssl/kdf.h>
-+#endif
-
- using namespace QCA;
-
-@@ -1262,6 +1268,7 @@ public:
- protected:
- };
-
-+#ifndef LIBRESSL_VERSION_NUMBER
- class opensslHkdfContext : public HKDFContext
- {
- Q_OBJECT
-@@ -1291,6 +1298,7 @@ public:
- return out;
- }
- };
-+#endif // LIBRESSL_VERSION_NUMBER
-
- class opensslHMACContext : public MACContext
- {
-@@ -4990,7 +4998,11 @@ public:
- case TLS::TLS_v1:
- ctx = SSL_CTX_new(TLS_client_method());
- SSL_CTX_set_min_proto_version(ctx, TLS1_VERSION);
-+#ifdef TLS1_3_VERSION
- SSL_CTX_set_max_proto_version(ctx, TLS1_3_VERSION);
-+#else
-+ SSL_CTX_set_max_proto_version(ctx, TLS1_2_VERSION);
-+#endif
- break;
- case TLS::DTLS_v1:
- default:
-@@ -5011,7 +5023,11 @@ public:
- QStringList cipherList;
- for(int i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
- const SSL_CIPHER *thisCipher = sk_SSL_CIPHER_value(sk, i);
-+#ifndef LIBRESSL_VERSION_NUMBER
- cipherList += QString::fromLatin1(SSL_CIPHER_standard_name(thisCipher));
-+#else
-+ cipherList += QString::fromLatin1(SSL_CIPHER_get_name(thisCipher));
-+#endif
- }
- sk_SSL_CIPHER_free(sk);
-
-@@ -5404,7 +5420,11 @@ public:
- sessInfo.version = TLS::TLS_v1;
- }
-
-+#ifndef LIBRESSL_VERSION_NUMBER
- sessInfo.cipherSuite = QString::fromLatin1(SSL_CIPHER_standard_name(SSL_get_current_cipher(ssl)));
-+#else
-+ sessInfo.cipherSuite = QString::fromLatin1(SSL_CIPHER_get_name(SSL_get_current_cipher(ssl)));
-+#endif
-
- sessInfo.cipherMaxBits = SSL_get_cipher_bits(ssl, &(sessInfo.cipherBits));
-
-@@ -6751,7 +6771,9 @@ public:
- #endif
- list += QStringLiteral("pbkdf1(sha1)");
- list += QStringLiteral("pbkdf2(sha1)");
-+#ifndef LIBRESSL_VERSION_NUMBER
- list += QStringLiteral("hkdf(sha256)");
-+#endif
- list += QStringLiteral("pkey");
- list += QStringLiteral("dlgroup");
- list += QStringLiteral("rsa");
-@@ -6820,8 +6842,10 @@ public:
- #endif
- else if ( type == QLatin1String("pbkdf2(sha1)") )
- return new opensslPbkdf2Context( this, type );
-+#ifndef LIBRESSL_VERSION_NUMBER
- else if ( type == QLatin1String("hkdf(sha256)") )
- return new opensslHkdfContext( this, type );
-+#endif
- else if ( type == QLatin1String("hmac(md5)") )
- return new opensslHMACContext( EVP_md5(), this, type );
- else if ( type == QLatin1String("hmac(sha1)") )
---
-2.27.0
-
diff --git a/app-crypt/qca/files/qca-2.3.4-libressl.patch b/app-crypt/qca/files/qca-2.3.4-libressl.patch
new file mode 100644
index 0000000..8bee8ad
--- /dev/null
+++ b/app-crypt/qca/files/qca-2.3.4-libressl.patch
@@ -0,0 +1,103 @@
+From aa07e1eacdbfeefa5ff21c5d7e45ce9e02e91dbb Mon Sep 17 00:00:00 2001
+From: Stefan Strogin <steils@gentoo.org>
+Date: Fri, 3 Jun 2022 21:11:45 -0700
+Subject: [PATCH] LibreSSL 3.0.x support
+
+---
+ plugins/qca-ossl/qca-ossl.cpp | 25 ++++++++++++++++++++++++-
+ 1 file changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/plugins/qca-ossl/qca-ossl.cpp b/plugins/qca-ossl/qca-ossl.cpp
+index b2c5d3d..79775cd 100644
+--- a/plugins/qca-ossl/qca-ossl.cpp
++++ b/plugins/qca-ossl/qca-ossl.cpp
+@@ -44,7 +44,13 @@
+ #include <openssl/provider.h>
+ #endif
+
++#ifndef RSA_F_RSA_OSSL_PRIVATE_DECRYPT
++#define RSA_F_RSA_OSSL_PRIVATE_DECRYPT RSA_F_RSA_EAY_PRIVATE_DECRYPT
++#endif
++
++#ifndef LIBRESSL_VERSION_NUMBER
+ #include <openssl/kdf.h>
++#endif
+
+ using namespace QCA;
+
+@@ -1254,6 +1260,7 @@ public:
+ protected:
+ };
+
++#ifndef LIBRESSL_VERSION_NUMBER
+ class opensslHkdfContext : public HKDFContext
+ {
+ Q_OBJECT
+@@ -1286,6 +1293,7 @@ public:
+ return out;
+ }
+ };
++#endif // LIBRESSL_VERSION_NUMBER
+
+ class opensslHMACContext : public MACContext
+ {
+@@ -4993,7 +5001,11 @@ public:
+ case TLS::TLS_v1:
+ ctx = SSL_CTX_new(TLS_client_method());
+ SSL_CTX_set_min_proto_version(ctx, TLS1_VERSION);
++#ifdef TLS1_3_VERSION
+ SSL_CTX_set_max_proto_version(ctx, TLS1_3_VERSION);
++#else
++ SSL_CTX_set_max_proto_version(ctx, TLS1_2_VERSION);
++#endif
+ break;
+ case TLS::DTLS_v1:
+ default:
+@@ -5014,7 +5026,11 @@ public:
+ QStringList cipherList;
+ for (int i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
+ const SSL_CIPHER *thisCipher = sk_SSL_CIPHER_value(sk, i);
++#ifndef LIBRESSL_VERSION_NUMBER
+ cipherList += QString::fromLatin1(SSL_CIPHER_standard_name(thisCipher));
++#else
++ cipherList += QString::fromLatin1(SSL_CIPHER_get_name(thisCipher));
++#endif
+ }
+ sk_SSL_CIPHER_free(sk);
+
+@@ -5386,8 +5402,11 @@ public:
+ qDebug("unexpected version response");
+ sessInfo.version = TLS::TLS_v1;
+ }
+-
++#ifndef LIBRESSL_VERSION_NUMBER
+ sessInfo.cipherSuite = QString::fromLatin1(SSL_CIPHER_standard_name(SSL_get_current_cipher(ssl)));
++#else
++ sessInfo.cipherSuite = QString::fromLatin1(SSL_CIPHER_get_name(SSL_get_current_cipher(ssl)));
++#endif
+
+ sessInfo.cipherMaxBits = SSL_get_cipher_bits(ssl, &(sessInfo.cipherBits));
+
+@@ -6687,7 +6706,9 @@ public:
+ #endif
+ list += QStringLiteral("pbkdf1(sha1)");
+ list += QStringLiteral("pbkdf2(sha1)");
++#ifndef LIBRESSL_VERSION_NUMBER
+ list += QStringLiteral("hkdf(sha256)");
++#endif // LIBRESSL_VERSION_NUMBER
+ list += QStringLiteral("pkey");
+ list += QStringLiteral("dlgroup");
+ list += QStringLiteral("rsa");
+@@ -6756,8 +6777,10 @@ public:
+ #endif
+ else if (type == QLatin1String("pbkdf2(sha1)"))
+ return new opensslPbkdf2Context(this, type);
++#ifndef LIBRESSL_VERSION_NUMBER
+ else if (type == QLatin1String("hkdf(sha256)"))
+ return new opensslHkdfContext(this, type);
++#endif // LIBRESSL_VERSION_NUMBER
+ else if (type == QLatin1String("hmac(md5)"))
+ return new opensslHMACContext(EVP_md5(), this, type);
+ else if (type == QLatin1String("hmac(sha1)"))
+--
+2.35.1
diff --git a/app-crypt/qca/files/qca-2.3.7-use-sha256-not-sha1.patch b/app-crypt/qca/files/qca-2.3.7-use-sha256-not-sha1.patch
new file mode 100644
index 0000000..e16fa76
--- /dev/null
+++ b/app-crypt/qca/files/qca-2.3.7-use-sha256-not-sha1.patch
@@ -0,0 +1,29 @@
+From 123123453bd4f3ac87ca6dd641a9028e6e7a29f0 Mon Sep 17 00:00:00 2001
+From: Albert Vaca Cintora <albertvaka@gmail.com>
+Date: Mon, 24 Jul 2023 13:32:30 +0000
+Subject: [PATCH] Sign self-signed certs with SHA256
+
+---
+ plugins/qca-ossl/qca-ossl.cpp | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/plugins/qca-ossl/qca-ossl.cpp b/plugins/qca-ossl/qca-ossl.cpp
+index 893631c9..f340ee2f 100644
+--- a/plugins/qca-ossl/qca-ossl.cpp
++++ b/plugins/qca-ossl/qca-ossl.cpp
+@@ -3470,10 +3470,8 @@ public:
+ X509_EXTENSION *ex;
+
+ const EVP_MD *md;
+- if (priv.key()->type() == PKey::RSA)
+- md = EVP_sha1();
+- else if (priv.key()->type() == PKey::DSA)
+- md = EVP_sha1();
++ if (priv.key()->type() == PKey::RSA || priv.key()->type() == PKey::DSA)
++ md = EVP_sha256();
+ else
+ return false;
+
+--
+GitLab
+
diff --git a/app-crypt/qca/metadata.xml b/app-crypt/qca/metadata.xml
index dff1320..10256dd 100644
--- a/app-crypt/qca/metadata.xml
+++ b/app-crypt/qca/metadata.xml
@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
-<maintainer type="project">
- <email>crypto@gentoo.org</email>
- <name>Crypto</name>
-</maintainer>
-<maintainer type="project">
- <email>qt@gentoo.org</email>
- <name>Gentoo Qt Project</name>
-</maintainer>
-<maintainer type="project">
- <email>kde@gentoo.org</email>
- <name>Gentoo KDE Project</name>
-</maintainer>
-<use>
- <flag name="botan">Enable botan plugin</flag>
- <flag name="gcrypt">Enable gcrypt plugin</flag>
- <flag name="gpg">Enable GnuPG plugin</flag>
- <flag name="logger">Enable logger plugin</flag>
- <flag name="nss">Enable NSS plugin</flag>
- <flag name="pkcs11">Enable PKCS#11 plugin</flag>
- <flag name="sasl">Enable SASL plugin</flag>
- <flag name="softstore">Enable softstore plugin</flag>
-</use>
+ <maintainer type="project">
+ <email>qt@gentoo.org</email>
+ <name>Gentoo Qt Project</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>kde@gentoo.org</email>
+ <name>Gentoo KDE Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://bugs.kde.org/</bugs-to>
+ <remote-id type="kde-invent">libraries/qca</remote-id>
+ </upstream>
+ <use>
+ <flag name="botan">Enable botan plugin</flag>
+ <flag name="gcrypt">Enable gcrypt plugin</flag>
+ <flag name="gpg">Enable GnuPG plugin</flag>
+ <flag name="logger">Enable logger plugin</flag>
+ <flag name="nss">Enable NSS plugin</flag>
+ <flag name="pkcs11">Enable PKCS#11 plugin</flag>
+ <flag name="sasl">Enable SASL plugin</flag>
+ <flag name="softstore">Enable softstore plugin</flag>
+ </use>
</pkgmetadata>
diff --git a/app-crypt/qca/qca-2.3.0.ebuild b/app-crypt/qca/qca-2.3.0.ebuild
deleted file mode 100644
index ebe13eb..0000000
--- a/app-crypt/qca/qca-2.3.0.ebuild
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-inherit kde.org cmake qmake-utils
-
-DESCRIPTION="Qt Cryptographic Architecture (QCA)"
-HOMEPAGE="https://userbase.kde.org/QCA"
-SRC_URI="mirror://kde/stable/${PN}/${PV}/${P}.tar.xz"
-
-LICENSE="LGPL-2.1"
-SLOT="2"
-KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~sparc-solaris"
-IUSE="botan debug doc examples gcrypt gpg libressl logger nss pkcs11 sasl softstore +ssl test"
-
-RESTRICT="!test? ( test )"
-
-BDEPEND="
- doc? ( app-doc/doxygen )
-"
-RDEPEND="
- dev-qt/qtcore:5
- botan? ( dev-libs/botan:= )
- gcrypt? ( dev-libs/libgcrypt:= )
- gpg? ( app-crypt/gnupg )
- nss? ( dev-libs/nss )
- pkcs11? (
- !libressl? ( >=dev-libs/openssl-1.1 )
- libressl? ( dev-libs/libressl:0= )
- dev-libs/pkcs11-helper
- )
- sasl? ( dev-libs/cyrus-sasl:2 )
- ssl? (
- !libressl? ( >=dev-libs/openssl-1.1:0= )
- libressl? ( dev-libs/libressl:= )
- )
-"
-DEPEND="${RDEPEND}
- test? (
- dev-qt/qtnetwork:5
- dev-qt/qttest:5
- )
-"
-
-PATCHES=(
- "${FILESDIR}/${PN}-disable-pgp-test.patch"
- "${FILESDIR}/${P}-libressl.patch"
-)
-
-qca_plugin_use() {
- echo -DWITH_${2:-$1}_PLUGIN=$(usex "$1")
-}
-
-src_configure() {
- local mycmakeargs=(
- -DQCA_FEATURE_INSTALL_DIR="${EPREFIX}$(qt5_get_mkspecsdir)/features"
- -DQCA_PLUGINS_INSTALL_DIR="${EPREFIX}$(qt5_get_plugindir)"
- $(qca_plugin_use botan)
- $(qca_plugin_use gcrypt)
- $(qca_plugin_use gpg gnupg)
- $(qca_plugin_use logger)
- $(qca_plugin_use nss)
- $(qca_plugin_use pkcs11)
- $(qca_plugin_use sasl cyrus-sasl)
- $(qca_plugin_use softstore)
- $(qca_plugin_use ssl ossl)
- -DBUILD_TESTS=$(usex test)
- )
- cmake_src_configure
-}
-
-src_test() {
- local -x QCA_PLUGIN_PATH="${BUILD_DIR}/lib/qca"
- cmake_src_test
-}
-
-src_install() {
- cmake_src_install
-
- if use doc; then
- pushd "${BUILD_DIR}" >/dev/null || die
- doxygen Doxyfile || die
- dodoc -r apidocs/html
- popd >/dev/null || die
- fi
-
- if use examples; then
- dodoc -r "${S}"/examples
- fi
-}
diff --git a/app-crypt/qca/qca-2.3.1.ebuild b/app-crypt/qca/qca-2.3.1.ebuild
deleted file mode 100644
index ebe13eb..0000000
--- a/app-crypt/qca/qca-2.3.1.ebuild
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-inherit kde.org cmake qmake-utils
-
-DESCRIPTION="Qt Cryptographic Architecture (QCA)"
-HOMEPAGE="https://userbase.kde.org/QCA"
-SRC_URI="mirror://kde/stable/${PN}/${PV}/${P}.tar.xz"
-
-LICENSE="LGPL-2.1"
-SLOT="2"
-KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~sparc-solaris"
-IUSE="botan debug doc examples gcrypt gpg libressl logger nss pkcs11 sasl softstore +ssl test"
-
-RESTRICT="!test? ( test )"
-
-BDEPEND="
- doc? ( app-doc/doxygen )
-"
-RDEPEND="
- dev-qt/qtcore:5
- botan? ( dev-libs/botan:= )
- gcrypt? ( dev-libs/libgcrypt:= )
- gpg? ( app-crypt/gnupg )
- nss? ( dev-libs/nss )
- pkcs11? (
- !libressl? ( >=dev-libs/openssl-1.1 )
- libressl? ( dev-libs/libressl:0= )
- dev-libs/pkcs11-helper
- )
- sasl? ( dev-libs/cyrus-sasl:2 )
- ssl? (
- !libressl? ( >=dev-libs/openssl-1.1:0= )
- libressl? ( dev-libs/libressl:= )
- )
-"
-DEPEND="${RDEPEND}
- test? (
- dev-qt/qtnetwork:5
- dev-qt/qttest:5
- )
-"
-
-PATCHES=(
- "${FILESDIR}/${PN}-disable-pgp-test.patch"
- "${FILESDIR}/${P}-libressl.patch"
-)
-
-qca_plugin_use() {
- echo -DWITH_${2:-$1}_PLUGIN=$(usex "$1")
-}
-
-src_configure() {
- local mycmakeargs=(
- -DQCA_FEATURE_INSTALL_DIR="${EPREFIX}$(qt5_get_mkspecsdir)/features"
- -DQCA_PLUGINS_INSTALL_DIR="${EPREFIX}$(qt5_get_plugindir)"
- $(qca_plugin_use botan)
- $(qca_plugin_use gcrypt)
- $(qca_plugin_use gpg gnupg)
- $(qca_plugin_use logger)
- $(qca_plugin_use nss)
- $(qca_plugin_use pkcs11)
- $(qca_plugin_use sasl cyrus-sasl)
- $(qca_plugin_use softstore)
- $(qca_plugin_use ssl ossl)
- -DBUILD_TESTS=$(usex test)
- )
- cmake_src_configure
-}
-
-src_test() {
- local -x QCA_PLUGIN_PATH="${BUILD_DIR}/lib/qca"
- cmake_src_test
-}
-
-src_install() {
- cmake_src_install
-
- if use doc; then
- pushd "${BUILD_DIR}" >/dev/null || die
- doxygen Doxyfile || die
- dodoc -r apidocs/html
- popd >/dev/null || die
- fi
-
- if use examples; then
- dodoc -r "${S}"/examples
- fi
-}
diff --git a/app-crypt/qca/qca-2.3.8.ebuild b/app-crypt/qca/qca-2.3.8.ebuild
new file mode 100644
index 0000000..cda39d7
--- /dev/null
+++ b/app-crypt/qca/qca-2.3.8.ebuild
@@ -0,0 +1,119 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake kde.org multibuild out-of-source-utils qmake-utils
+
+DESCRIPTION="Qt Cryptographic Architecture (QCA)"
+HOMEPAGE="https://userbase.kde.org/QCA"
+SRC_URI="mirror://kde/stable/${PN}/${PV}/${P}.tar.xz"
+
+LICENSE="LGPL-2.1"
+SLOT="2"
+KEYWORDS="amd64 ~arm arm64 ~hppa ~loong ~ppc ppc64 ~riscv ~sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
+IUSE="botan debug doc examples gcrypt gpg logger nss pkcs11 +qt5 qt6 sasl softstore +ssl test"
+REQUIRED_USE="|| ( qt5 qt6 )"
+
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ botan? ( dev-libs/botan:3= )
+ gcrypt? ( dev-libs/libgcrypt:= )
+ gpg? ( app-crypt/gnupg )
+ nss? ( dev-libs/nss )
+ pkcs11? (
+ >=dev-libs/openssl-1.1
+ dev-libs/pkcs11-helper
+ )
+ qt5? ( >=dev-qt/qtcore-5.14:5 )
+ qt6? (
+ dev-qt/qtbase:6
+ dev-qt/qt5compat:6
+ )
+ sasl? ( dev-libs/cyrus-sasl:2 )
+ ssl? ( >=dev-libs/openssl-1.1:= )
+"
+DEPEND="${RDEPEND}
+ test? (
+ qt5? (
+ dev-qt/qtnetwork:5
+ dev-qt/qttest:5
+ )
+ qt6? ( dev-qt/qtbase:6[network] )
+ )
+"
+BDEPEND="
+ doc? (
+ app-text/doxygen[dot]
+ virtual/latex-base
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-2.3.4-libressl.patch"
+ "${FILESDIR}/${PN}-disable-pgp-test.patch"
+ "${FILESDIR}/${PN}-2.3.7-use-sha256-not-sha1.patch" # git master
+)
+
+qca_plugin_use() {
+ echo -DWITH_${2:-$1}_PLUGIN=$(usex "$1")
+}
+
+pkg_setup() {
+ MULTIBUILD_VARIANTS=( $(usev qt5) $(usev qt6) )
+}
+
+src_configure() {
+ myconfigure() {
+ local mycmakeargs=(
+ -DQCA_FEATURE_INSTALL_DIR="${EPREFIX}$(${MULTIBUILD_VARIANT}_get_mkspecsdir)/features"
+ -DQCA_PLUGINS_INSTALL_DIR="${EPREFIX}$(${MULTIBUILD_VARIANT}_get_plugindir)"
+ $(qca_plugin_use botan)
+ $(qca_plugin_use gcrypt)
+ $(qca_plugin_use gpg gnupg)
+ $(qca_plugin_use logger)
+ $(qca_plugin_use nss)
+ $(qca_plugin_use pkcs11)
+ $(qca_plugin_use sasl cyrus-sasl)
+ $(qca_plugin_use softstore)
+ $(qca_plugin_use ssl ossl)
+ -DBUILD_TESTS=$(usex test)
+ )
+ if [[ ${MULTIBUILD_VARIANT} == qt6 ]]; then
+ mycmakeargs+=( -DBUILD_WITH_QT6=ON )
+ else
+ mycmakeargs+=( -DBUILD_WITH_QT6=OFF )
+ fi
+ cmake_src_configure
+ }
+
+ multibuild_foreach_variant myconfigure
+}
+
+src_compile() {
+ multibuild_foreach_variant cmake_src_compile
+ if use doc; then
+ multibuild_for_best_variant cmake_build doc
+ fi
+}
+
+src_test() {
+ mytest() {
+ local -x QCA_PLUGIN_PATH="${BUILD_DIR}/lib/qca"
+ cmake_src_test
+ }
+ multibuild_foreach_variant mytest
+}
+
+src_install() {
+ multibuild_foreach_variant cmake_src_install
+
+ if use doc; then
+ multibuild_for_best_variant run_in_build_dir dodoc -r apidocs/html
+ fi
+
+ if use examples; then
+ dodoc -r "${S}"/examples
+ fi
+}
diff --git a/app-crypt/tpm2-tss/Manifest b/app-crypt/tpm2-tss/Manifest
new file mode 100644
index 0000000..e5a285d
--- /dev/null
+++ b/app-crypt/tpm2-tss/Manifest
@@ -0,0 +1 @@
+DIST tpm2-tss-4.0.1.tar.gz 1787139 BLAKE2B 627cdefeff6c64148f9da1425922a0a7a72debcee4930ffab208a3b9b66127c2d4f923e3e105bfd45410cdb13c19cb40cc15a720e9a05dd32ff622dabf5fcc32 SHA512 ed6ddc52cb0e8c1082a4bb001e1225eb9905fd2380da88db5fd69ff5b5d9d43a93eb67b634e49d53eb5d586832da3aef2c4c7e5f18d51bb730481f8913319d7d
diff --git a/app-crypt/tpm2-tss/files/tpm2-tss-3.2.0-libressl.patch b/app-crypt/tpm2-tss/files/tpm2-tss-3.2.0-libressl.patch
new file mode 100644
index 0000000..7a8f267
--- /dev/null
+++ b/app-crypt/tpm2-tss/files/tpm2-tss-3.2.0-libressl.patch
@@ -0,0 +1,89 @@
+Upstream-PR: https://github.com/tpm2-software/tpm2-tss/pull/2380
+
+From: orbea <orbea@riseup.net>
+Date: Thu, 13 Apr 2023 17:11:07 -0700
+Subject: [PATCH] Support LibreSSL
+
+This works with LibreSSL 3.5.x.
+
+Still missing in LibreSSL:
+
+* RAND_OpenSSL
+* NID_sm2
+
+Signed-off-by: orbea <orbea@riseup.net>
+---
+ src/tss2-esys/esys_crypto_ossl.c | 14 +++++++++++---
+ src/tss2-fapi/fapi_crypto.c | 4 ++--
+ 2 files changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/src/tss2-esys/esys_crypto_ossl.c b/src/tss2-esys/esys_crypto_ossl.c
+index a92ecc46..2baae814 100644
+--- a/src/tss2-esys/esys_crypto_ossl.c
++++ b/src/tss2-esys/esys_crypto_ossl.c
+@@ -392,7 +392,8 @@ iesys_cryptossl_hmac_start(ESYS_CRYPTO_CONTEXT_BLOB ** context,
+ "Error EVP_MD_CTX_create", cleanup);
+ }
+
+-#if OPENSSL_VERSION_NUMBER < 0x10101000L
++#if OPENSSL_VERSION_NUMBER < 0x10101000L || \
++ ( defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3070000fL )
+ if (!(hkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, key, size))) {
+ #else
+ /* this is preferred, but available since OpenSSL 1.1.1 only */
+@@ -558,7 +559,11 @@ iesys_cryptossl_random2b(
+ int rc;
+ #if OPENSSL_VERSION_NUMBER < 0x30000000L
+ const RAND_METHOD *rand_save = RAND_get_rand_method();
++#ifdef LIBRESSL_VERSION_NUMBER
++ RAND_set_rand_method(RAND_SSLeay());
++#else
+ RAND_set_rand_method(RAND_OpenSSL());
++#endif
+ #else
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ if (!libctx)
+@@ -615,8 +620,11 @@ iesys_cryptossl_pk_encrypt(TPM2B_PUBLIC * pub_tpm_key,
+ RSA *rsa_key = NULL;
+ const EVP_MD * hashAlg = NULL;
+ const RAND_METHOD *rand_save = RAND_get_rand_method();
+-
++#ifdef LIBRESSL_VERSION_NUMBER
++ RAND_set_rand_method(RAND_SSLeay());
++#else
+ RAND_set_rand_method(RAND_OpenSSL());
++#endif
+ #else
+ OSSL_LIB_CTX *libctx = NULL;
+ EVP_MD * hashAlg = NULL;
+@@ -919,7 +927,7 @@ iesys_cryptossl_get_ecdh_point(TPM2B_PUBLIC *key,
+ curveId = NID_secp521r1;
+ key_size = 66;
+ break;
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ case TPM2_ECC_SM2_P256:
+ curveId = NID_sm2;
+ key_size = 32;
+diff --git a/src/tss2-fapi/fapi_crypto.c b/src/tss2-fapi/fapi_crypto.c
+index 3f11b3d6..0d03c5b1 100644
+--- a/src/tss2-fapi/fapi_crypto.c
++++ b/src/tss2-fapi/fapi_crypto.c
+@@ -544,7 +544,7 @@ ossl_ecc_pub_from_tpm(const TPM2B_PUBLIC *tpmPublicKey, EVP_PKEY **evpPublicKey)
+ case TPM2_ECC_NIST_P521:
+ curveId = NID_secp521r1;
+ break;
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ case TPM2_ECC_SM2_P256:
+ curveId = NID_sm2;
+ break;
+@@ -1195,7 +1195,7 @@ get_ecc_tpm2b_public_from_evp(
+ case NID_secp521r1:
+ tpmCurveId = TPM2_ECC_NIST_P521;
+ break;
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ case NID_sm2:
+ tpmCurveId = TPM2_ECC_SM2_P256;
+ break;
diff --git a/app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-Dont-install-files-into-run.patch b/app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-Dont-install-files-into-run.patch
new file mode 100644
index 0000000..ca51ab7
--- /dev/null
+++ b/app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-Dont-install-files-into-run.patch
@@ -0,0 +1,26 @@
+diff --git a/Makefile.am b/Makefile.am
+index 2c81cfa9..2673995c 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -767,13 +767,11 @@ define set_tss_permissions
+ endef
+
+ define make_fapi_dirs
+- ($(call make_tss_dir,$(DESTDIR)$(runstatedir)/tpm2-tss/eventlog/) || true) && \
+ ($(call make_tss_dir,$(DESTDIR)$(localstatedir)/lib/tpm2-tss/system/keystore/))
+ endef
+
+ define set_fapi_permissions
+ if test -z "${DESTDIR}"; then \ e
+- ($(call set_tss_permissions,$(DESTDIR)$(runstatedir)/tpm2-tss)) && \
+ ($(call set_tss_permissions,$(DESTDIR)$(localstatedir)/lib/tpm2-tss)) \
+ fi
+ endef
+@@ -784,7 +782,6 @@ endef
+
+ define check_fapi_dirs
+ if test -z "${DESTDIR}"; then \
+- ($(call check_dir,$(DESTDIR)$(runstatedir)/tpm2-tss/eventlog/)) && \
+ ($(call check_dir,$(DESTDIR)$(localstatedir)/lib/tpm2-tss/system/keystore/)) \
+ fi;
+ endef
diff --git a/app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-libressl-no-cert-tests.patch b/app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-libressl-no-cert-tests.patch
new file mode 100644
index 0000000..d402822
--- /dev/null
+++ b/app-crypt/tpm2-tss/files/tpm2-tss-4.0.0-libressl-no-cert-tests.patch
@@ -0,0 +1,90 @@
+Upstream-PR: https://github.com/tpm2-software/tpm2-tss/pull/2585
+
+From 59d5382e94a2ace2292cb0add68c5e94cf1c071c Mon Sep 17 00:00:00 2001
+From: Juergen Repp <juergen_repp@web.de>
+Date: Wed, 22 Mar 2023 10:54:59 +0100
+Subject: [PATCH] FAPI: Skip test fapi-fix-provisioning-with template if no
+ certificate is available.
+
+If the configure option --enable-self-generated-certificate is not used this
+test can't be executed because no certificate will be stored in NV ram. The
+test will be skipped if no certificate is available.
+Fixes: #2558
+
+Signed-off-by: Juergen Repp <juergen_repp@web.de>
+---
+ .../fapi-provisioning-with-template.int.c | 40 ++++++++++++++++++-
+ 1 file changed, 39 insertions(+), 1 deletion(-)
+
+diff --git a/test/integration/fapi-provisioning-with-template.int.c b/test/integration/fapi-provisioning-with-template.int.c
+index 27f8e579d..ddef2a8e1 100644
+--- a/test/integration/fapi-provisioning-with-template.int.c
++++ b/test/integration/fapi-provisioning-with-template.int.c
+@@ -4,6 +4,8 @@
+ #endif
+
+ #include <stdlib.h>
++#include <stdio.h>
++#include <unistd.h>
+
+ #include "tss2_esys.h"
+ #include "tss2_fapi.h"
+@@ -31,6 +33,39 @@
+ * @retval EXIT_SKIP
+ *
+ */
++static bool
++fapi_ek_certless()
++{
++ FILE *stream = NULL;
++ long config_size;
++ char *config = NULL;
++ char *fapi_config_file = getenv("TSS2_FAPICONF");
++
++ stream = fopen(fapi_config_file, "r");
++ if (!stream) {
++ LOG_ERROR("File %s does not exist", fapi_config_file);
++ return NULL;
++ }
++ fseek(stream, 0L, SEEK_END);
++ config_size = ftell(stream);
++ fclose(stream);
++ config = malloc(config_size + 1);
++ stream = fopen(fapi_config_file, "r");
++ ssize_t ret = read(fileno(stream), config, config_size);
++ if (ret != config_size) {
++ LOG_ERROR("IO error %s.", fapi_config_file);
++ return NULL;
++ }
++ config[config_size] = '\0';
++ if (strstr(config, "\"ek_cert_less\": \"yes\"") == NULL) {
++ SAFE_FREE(config);
++ return false;
++ } else {
++ SAFE_FREE(config);
++ return true;
++ }
++}
++
+ int
+ test_fapi_provision_template(FAPI_CONTEXT *context)
+ {
+@@ -148,6 +183,9 @@ test_fapi_provision_template(FAPI_CONTEXT *context)
+ TPM2B_AUTH auth = { .size = 0, .buffer = {} };
+ TPM2B_MAX_NV_BUFFER nv_data;
+
++ if (fapi_ek_certless())
++ return EXIT_SKIP;
++
+ if (strcmp(FAPI_PROFILE, "P_ECC") == 0) {
+ nv_template_idx = ecc_nv_template_idx;
+ nv_nonce_idx = ecc_nv_nonce_idx;
+@@ -166,7 +204,7 @@ test_fapi_provision_template(FAPI_CONTEXT *context)
+ r = Esys_Initialize(&esys_ctx, tcti, NULL);
+ goto_if_error(r, "Error Esys_Initialize", error);
+
+- /*
++ /*
+ * Store template (marshaled TPMT_PUBLIC) in NV ram.
+ */
+ r = Tss2_MU_TPMT_PUBLIC_Marshal(&in_public, &nv_data.buffer[0],
diff --git a/app-crypt/tpm2-tss/files/tpm2-tss-4.0.1-Make-sysusers-and-tmpfiles-optional.patch b/app-crypt/tpm2-tss/files/tpm2-tss-4.0.1-Make-sysusers-and-tmpfiles-optional.patch
new file mode 100644
index 0000000..d93fcf9
--- /dev/null
+++ b/app-crypt/tpm2-tss/files/tpm2-tss-4.0.1-Make-sysusers-and-tmpfiles-optional.patch
@@ -0,0 +1,50 @@
+From 75f53cf7eab591870ce735203995d01d2f577187 Mon Sep 17 00:00:00 2001
+From: Christopher Byrne <salah.coronya@gmail.com>
+Date: Tue, 13 Jun 2023 21:40:56 -0500
+Subject: [PATCH] configure.ac: Make sysusers and tmpfiles optional
+
+Signed-off-by: Christopher Byrne <salah.coronya@gmail.com>
+---
+ Makefile.am | 6 +++++-
+ configure.ac | 4 ++--
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 2c81cfa9..98965fa7 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -563,10 +563,14 @@ fapi-config.json: dist/fapi-config.json.in
+ -e 's|[@]sysmeasurements@|$(sysmeasurements)|g' \
+ < "$<" > "$@"
+
++if SYSD_SYSUSERS
+ sysusers_DATA = dist/sysusers.d/tpm2-tss.conf
+-tmpfiles_DATA = tpm2-tss-fapi.conf
++endif
+
++if SYSD_TMPFILES
++tmpfiles_DATA = tpm2-tss-fapi.conf
+ CLEANFILES += tpm2-tss-fapi.conf
++endif
+
+ # We have to do this ourselves, in order to get absolute paths
+ tpm2-tss-fapi.conf: dist/tmpfiles.d/tpm2-tss-fapi.conf.in
+diff --git a/configure.ac b/configure.ac
+index b6550278..2d478147 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -550,9 +550,9 @@ AS_IF([test "x$enable_integration" = "xyes" && test "x$enable_self_generated_cer
+
+ # Check for systemd helper tools used by make install
+ AC_CHECK_PROG(systemd_sysusers, systemd-sysusers, yes)
+-AM_CONDITIONAL(SYSD_SYSUSERS, test "x$systemd_sysusers" = "xyes")
++AM_CONDITIONAL([SYSD_SYSUSERS], [test "x$systemd_sysusers" = "xyes" && test "x$sysusersdir" != "xno"])
+ AC_CHECK_PROG(systemd_tmpfiles, systemd-tmpfiles, yes)
+-AM_CONDITIONAL(SYSD_TMPFILES, test "x$systemd_tmpfiles" = "xyes")
++AM_CONDITIONAL([SYSD_TMPFILES], [test "x$systemd_tmpfiles" = "xyes" && test "x$tmpfilesdir" != "xno"])
+
+ # Check all tools used by make install
+ AS_IF([test "$HOSTOS" = "Linux" && test "x$systemd_sysusers" != "xyes"],
+--
+2.39.3
+
diff --git a/app-crypt/tpm2-tss/metadata.xml b/app-crypt/tpm2-tss/metadata.xml
new file mode 100644
index 0000000..ada5791
--- /dev/null
+++ b/app-crypt/tpm2-tss/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>salah.coronya@gmail.com</email>
+ <name>Christopher Byrne</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <use>
+ <flag name="fapi">Enable feature API (requires openssl as crypto backend)</flag>
+ <flag name="mbedtls">Use <pkg>net-libs/mbedtls</pkg> as crypto engine</flag>
+ <flag name="openssl">Use <pkg>dev-libs/openssl</pkg> as crypto engine</flag>
+ <flag name="policy">Enable policy library (requires openssl as crypto backend)</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">tpm2-software/tpm2-tss</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/app-crypt/tpm2-tss/tpm2-tss-4.0.1.ebuild b/app-crypt/tpm2-tss/tpm2-tss-4.0.1.ebuild
new file mode 100644
index 0000000..a0f8412
--- /dev/null
+++ b/app-crypt/tpm2-tss/tpm2-tss-4.0.1.ebuild
@@ -0,0 +1,102 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic linux-info multilib-minimal tmpfiles udev
+
+DESCRIPTION="TCG Trusted Platform Module 2.0 Software Stack"
+HOMEPAGE="https://github.com/tpm2-software/tpm2-tss"
+SRC_URI="https://github.com/tpm2-software/${PN}/releases/download/${PV}/${P}.tar.gz"
+
+LICENSE="BSD-2"
+SLOT="0/4"
+KEYWORDS="amd64 arm arm64 ~loong ppc64 ~riscv x86"
+IUSE="doc +fapi +openssl mbedtls +policy static-libs test"
+
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="^^ ( mbedtls openssl )
+ fapi? ( openssl !mbedtls )
+ policy? ( openssl !mbedtls )"
+
+RDEPEND="acct-group/tss
+ acct-user/tss
+ sys-apps/util-linux:=[${MULTILIB_USEDEP}]
+ fapi? ( dev-libs/json-c:=[${MULTILIB_USEDEP}]
+ >=net-misc/curl-7.80.0[${MULTILIB_USEDEP}] )
+ mbedtls? ( net-libs/mbedtls:=[${MULTILIB_USEDEP}] )
+ openssl? ( dev-libs/openssl:=[${MULTILIB_USEDEP}] )"
+
+DEPEND="${RDEPEND}
+ test? ( app-crypt/swtpm
+ dev-libs/uthash
+ dev-util/cmocka
+ fapi? ( >=net-misc/curl-7.80.0 ) )"
+BDEPEND="sys-apps/acl
+ virtual/pkgconfig
+ doc? ( app-text/doxygen )"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.2.0-libressl.patch"
+ "${FILESDIR}/${PN}-4.0.0-libressl-no-cert-tests.patch"
+ "${FILESDIR}/${PN}-4.0.0-Dont-install-files-into-run.patch"
+ "${FILESDIR}/${PN}-4.0.1-Make-sysusers-and-tmpfiles-optional.patch"
+ )
+
+pkg_setup() {
+ local CONFIG_CHECK=" \
+ ~TCG_TPM
+ "
+ linux-info_pkg_setup
+ kernel_is ge 4 12 0 || ewarn "At least kernel 4.12.0 is required"
+}
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+multilib_src_configure() {
+ # Fails with inlining
+ filter-flags -fno-semantic-interposition
+ # tests fail with LTO enabbled. See bug 865275 and 865279
+ filter-lto
+
+ # Disable for libressl for now
+ # https://github.com/tpm2-software/tpm2-tss/pull/2380
+ # $(multilib_native_use_enable test self-generated-certificate) \
+
+ ECONF_SOURCE=${S} econf \
+ --localstatedir=/var \
+ $(multilib_native_use_enable doc doxygen-doc) \
+ $(use_enable fapi) \
+ $(use_enable policy) \
+ $(use_enable static-libs static) \
+ $(multilib_native_use_enable test unit) \
+ $(multilib_native_use_enable test integration) \
+ --disable-tcti-libtpms \
+ --disable-defaultflags \
+ --disable-weakcrypto \
+ --with-crypto="$(usex mbedtls mbed ossl)" \
+ --with-runstatedir=/run \
+ --with-udevrulesdir="$(get_udevdir)/rules.d" \
+ --with-udevrulesprefix=60- \
+ --without-sysusersdir \
+ --with-tmpfilesdir="/usr/lib/tmpfiles.d"
+}
+
+multilib_src_install() {
+ default
+ keepdir /var/lib/tpm2-tss/system/keystore
+ find "${ED}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ tmpfiles_process tpm2-tss-fapi.conf
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-crypt/trousers/Manifest b/app-crypt/trousers/Manifest
new file mode 100644
index 0000000..4556d86
--- /dev/null
+++ b/app-crypt/trousers/Manifest
@@ -0,0 +1 @@
+DIST trousers-0.3.15.tar.gz 4699936 BLAKE2B 53c60498ed6a9d3d87295b00676e5d0d82452918c35af6b98c7979ffa2dc04dd817e7cd3f4a33ca17c30b90eab53d80b2bb25306fe9db7bda2125019edfed280 SHA512 769c7d891c6306c1b3252448f86e3043ee837e566c9431f5b4353512113e2907f6ce29c91e8044c420025b79c5f3ff2396ddce93f73b1eb2a15ea1de89ac0fdb
diff --git a/app-crypt/trousers/files/61-trousers.rules b/app-crypt/trousers/files/61-trousers.rules
new file mode 100644
index 0000000..20e89cb
--- /dev/null
+++ b/app-crypt/trousers/files/61-trousers.rules
@@ -0,0 +1,2 @@
+KERNEL=="tpm[0-9]*", MODE="0660", OWNER="tss", GROUP="tss", SYMLINK+="tpm"
+# vim: ft=udevrules:
diff --git a/app-crypt/trousers/files/tcsd.initd b/app-crypt/trousers/files/tcsd.initd
new file mode 100644
index 0000000..9b18c48
--- /dev/null
+++ b/app-crypt/trousers/files/tcsd.initd
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command=/usr/sbin/tcsd
+description="TrouSerS' TCS daemon (tcsd)"
+command_user="tss:tss"
+
+depend() {
+ use logger
+ need net
+}
+
+start_pre() {
+ if [ ! -c /dev/tpm ] && [ ! -c /dev/tpm0 ] ; then
+ eerror "No TPM device found!"
+ return 1
+ fi
+}
diff --git a/app-crypt/trousers/files/tcsd.service b/app-crypt/trousers/files/tcsd.service
new file mode 100644
index 0000000..4a46e61
--- /dev/null
+++ b/app-crypt/trousers/files/tcsd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=TCG Core Services Daemon
+
+[Service]
+User=tss
+ExecStart=/usr/sbin/tcsd -f
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/app-crypt/trousers/files/trousers-0.3.13-nouseradd.patch b/app-crypt/trousers/files/trousers-0.3.13-nouseradd.patch
new file mode 100644
index 0000000..5426e99
--- /dev/null
+++ b/app-crypt/trousers/files/trousers-0.3.13-nouseradd.patch
@@ -0,0 +1,12 @@
+diff -urNp trousers-0.3.13.org/dist/Makefile.am trousers-0.3.13/dist/Makefile.am
+--- trousers-0.3.13.org/dist/Makefile.am 2014-04-24 21:05:43.000000000 +0300
++++ trousers-0.3.13/dist/Makefile.am 2015-04-08 10:05:51.018955728 +0300
+@@ -11,8 +11,6 @@ endif
+ install-exec-hook:
+ /bin/sh -c 'if [ ! -e ${DESTDIR}/@localstatedir@/lib/tpm ];then mkdir -p ${DESTDIR}/@localstatedir@/lib/tpm; fi'
+ if !NOUSERCHECK
+- /usr/sbin/groupadd tss || true
+- /usr/sbin/useradd -r tss -g tss || true
+ /bin/chown tss:tss ${DESTDIR}/@localstatedir@/lib/tpm || true
+ /bin/chmod 0700 ${DESTDIR}/@localstatedir@/lib/tpm
+ endif
diff --git a/app-crypt/trousers/files/trousers-0.3.14-Makefile.am-Mark-tddl.a-nodist.patch b/app-crypt/trousers/files/trousers-0.3.14-Makefile.am-Mark-tddl.a-nodist.patch
new file mode 100644
index 0000000..f777b62
--- /dev/null
+++ b/app-crypt/trousers/files/trousers-0.3.14-Makefile.am-Mark-tddl.a-nodist.patch
@@ -0,0 +1,25 @@
+From 5b1dbb5f8eada9002ec10f4ebc0bc418272e58b2 Mon Sep 17 00:00:00 2001
+From: Salah Coronya <salah.coronya@gmail.com>
+Date: Sun, 7 Jun 2020 12:34:03 -0500
+Subject: [PATCH] src/tddl/Makefile.am: Mark tddl.a nodist
+
+This makes tddl.a nodist like the others, so it is not installed
+
+Signed-off-by: Salah Coronya <salah.coronya@gmail.com>
+---
+ src/tddl/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tddl/Makefile.am b/src/tddl/Makefile.am
+index 607eb8e..2cd599b 100644
+--- a/src/tddl/Makefile.am
++++ b/src/tddl/Makefile.am
+@@ -1,4 +1,4 @@
+-lib_LIBRARIES=libtddl.a
++noinst_LIBRARIES=libtddl.a
+
+ libtddl_a_SOURCES=tddl.c
+ libtddl_a_CFLAGS=-DAPPID=\"TCSD\ TDDL\" -I${top_srcdir}/src/include -fPIE -DPIE
+--
+2.26.2
+
diff --git a/app-crypt/trousers/files/trousers-0.3.15-libressl.patch b/app-crypt/trousers/files/trousers-0.3.15-libressl.patch
new file mode 100644
index 0000000..e4aee00
--- /dev/null
+++ b/app-crypt/trousers/files/trousers-0.3.15-libressl.patch
@@ -0,0 +1,31 @@
+From 88e90ee4c36f0decdf7c15e271bccb8b0809a21a Mon Sep 17 00:00:00 2001
+From: Stefan Strogin <stefan@steils.org>
+Date: Tue, 24 Nov 2020 11:08:13 +0200
+Subject: [PATCH] trousers: do not re-declare RSA_set0_key with LibreSSL
+
+The method RSA_set0_key is provided by LibreSSL since 2.7.0, that means
+in all currently supported versions.
+
+Upstream-Status: Submitted
+[https://sourceforge.net/p/trousers/trousers/merge-requests/2/]
+Signed-off-by: Stefan Strogin <stefan@steils.org>
+---
+ src/trspi/crypto/openssl/rsa.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/trspi/crypto/openssl/rsa.c b/src/trspi/crypto/openssl/rsa.c
+index 24f13e7..cf46c08 100644
+--- a/src/trspi/crypto/openssl/rsa.c
++++ b/src/trspi/crypto/openssl/rsa.c
+@@ -38,7 +38,7 @@
+ #define DEBUG_print_openssl_errors()
+ #endif
+
+-#if (OPENSSL_VERSION_NUMBER < 0x10100001L) || defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER < 0x10100001L)
+ static int
+ RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
+ {
+--
+2.29.2
+
diff --git a/app-crypt/trousers/files/trousers-0.3.15-tspi-drop-the-use-of-getpwent_r.patch b/app-crypt/trousers/files/trousers-0.3.15-tspi-drop-the-use-of-getpwent_r.patch
new file mode 100644
index 0000000..ab6ef76
--- /dev/null
+++ b/app-crypt/trousers/files/trousers-0.3.15-tspi-drop-the-use-of-getpwent_r.patch
@@ -0,0 +1,69 @@
+https://bugs.gentoo.org/713444
+
+From 2299eadf77ae7a7ec52148b6a8f4ea37e217eafa Mon Sep 17 00:00:00 2001
+From: Stijn Tintel <stijn@linux-ipv6.be>
+Date: Thu, 2 Feb 2023 01:06:15 +0200
+Subject: [PATCH] tspi: drop the use of getpwent_r
+
+On systems with musl libc, libtspi.so is unusable due to the lack of
+getpwent_r. As there are multiple historical functions named getpwent_r
+that all behave differently, let's just play it safe and stop using it
+altogether.
+
+Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
+---
+ src/tspi/ps/tspps.c | 16 ----------------
+ 1 file changed, 16 deletions(-)
+
+diff --git a/src/tspi/ps/tspps.c b/src/tspi/ps/tspps.c
+index b5e83d0..ae7b3df 100644
+--- a/src/tspi/ps/tspps.c
++++ b/src/tspi/ps/tspps.c
+@@ -51,9 +51,7 @@
+
+ static int user_ps_fd = -1;
+ static MUTEX_DECLARE_INIT(user_ps_lock);
+-#if (defined (__FreeBSD__) || defined (__OpenBSD__))
+ static MUTEX_DECLARE_INIT(user_ps_path);
+-#endif
+ static struct flock fl;
+
+
+@@ -66,9 +64,6 @@ get_user_ps_path(char **file)
+ TSS_RESULT result;
+ char *file_name = NULL, *home_dir = NULL;
+ struct passwd *pwp;
+-#if (defined (__linux) || defined (linux) || defined(__GLIBC__))
+- struct passwd pw;
+-#endif
+ struct stat stat_buf;
+ char buf[PASSWD_BUFSIZE];
+ uid_t euid;
+@@ -96,16 +91,6 @@ get_user_ps_path(char **file)
+ #else
+ setpwent();
+ while (1) {
+-#if (defined (__linux) || defined (linux) || defined(__GLIBC__))
+- rc = getpwent_r(&pw, buf, PASSWD_BUFSIZE, &pwp);
+- if (rc) {
+- LogDebugFn("USER PS: Error getting path to home directory: getpwent_r: %s",
+- strerror(rc));
+- endpwent();
+- return TSPERR(TSS_E_INTERNAL_ERROR);
+- }
+-
+-#elif (defined (__FreeBSD__) || defined (__OpenBSD__))
+ if ((pwp = getpwent()) == NULL) {
+ LogDebugFn("USER PS: Error getting path to home directory: getpwent: %s",
+ strerror(rc));
+@@ -113,7 +98,6 @@ get_user_ps_path(char **file)
+ MUTEX_UNLOCK(user_ps_path);
+ return TSPERR(TSS_E_INTERNAL_ERROR);
+ }
+-#endif
+ if (euid == pwp->pw_uid) {
+ home_dir = strdup(pwp->pw_dir);
+ break;
+--
+2.39.1
+
diff --git a/app-crypt/trousers/metadata.xml b/app-crypt/trousers/metadata.xml
new file mode 100644
index 0000000..2eceffb
--- /dev/null
+++ b/app-crypt/trousers/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>salah.coronya@gmail.com</email>
+ <name>Christopher Byrne</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:debian:trousers</remote-id>
+ <remote-id type="sourceforge">trousers</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/app-crypt/trousers/trousers-0.3.15-r1.ebuild b/app-crypt/trousers/trousers-0.3.15-r1.ebuild
new file mode 100644
index 0000000..5176e27
--- /dev/null
+++ b/app-crypt/trousers/trousers-0.3.15-r1.ebuild
@@ -0,0 +1,74 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools linux-info readme.gentoo-r1 systemd udev
+
+DESCRIPTION="An open-source TCG Software Stack (TSS) v1.1 implementation"
+HOMEPAGE="http://trousers.sf.net"
+SRC_URI="mirror://sourceforge/trousers/${PN}/${P}.tar.gz"
+
+LICENSE="CPL-1.0 GPL-2"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ~m68k ~mips ~ppc ppc64 ~riscv ~s390 x86"
+IUSE="doc selinux" # gtk
+
+# gtk support presently does NOT compile.
+# gtk? ( >=x11-libs/gtk+-2 )
+
+DEPEND="acct-group/tss
+ acct-user/tss
+ >=dev-libs/glib-2
+ >=dev-libs/openssl-0.9.7:0=
+ "
+RDEPEND="${DEPEND}
+ selinux? ( sec-policy/selinux-tcsd )"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.3.13-nouseradd.patch"
+ "${FILESDIR}/${PN}-0.3.14-Makefile.am-Mark-tddl.a-nodist.patch"
+ "${FILESDIR}/${P}-tspi-drop-the-use-of-getpwent_r.patch"
+ "${FILESDIR}/${P}-libressl.patch"
+)
+
+DOCS="AUTHORS ChangeLog NICETOHAVES README TODO"
+
+DOC_CONTENTS="
+ If you have problems starting tcsd, please check permissions and
+ ownership on /dev/tpm* and ~tss/system.data
+"
+
+CONFIG_CHECK="~TCG_TPM"
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ # econf --with-gui=$(usex gtk gtk openssl)
+ econf --with-gui=openssl
+}
+
+src_install() {
+ default
+ find "${D}" -name '*.la' -delete || die
+
+ keepdir /var/lib/tpm
+ use doc && dodoc doc/*
+ newinitd "${FILESDIR}"/tcsd.initd tcsd
+ systemd_dounit "${FILESDIR}"/tcsd.service
+ udev_dorules "${FILESDIR}"/61-trousers.rules
+ fowners tss:tss /var/lib/tpm
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-crypt/trousers/trousers-0.3.15.ebuild b/app-crypt/trousers/trousers-0.3.15.ebuild
new file mode 100644
index 0000000..cbf4494
--- /dev/null
+++ b/app-crypt/trousers/trousers-0.3.15.ebuild
@@ -0,0 +1,73 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools linux-info readme.gentoo-r1 systemd udev
+
+DESCRIPTION="An open-source TCG Software Stack (TSS) v1.1 implementation"
+HOMEPAGE="http://trousers.sf.net"
+SRC_URI="mirror://sourceforge/trousers/${PN}/${P}.tar.gz"
+
+LICENSE="CPL-1.0 GPL-2"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ~m68k ~ppc ppc64 ~riscv ~s390 x86"
+IUSE="doc selinux" # gtk
+
+# gtk support presently does NOT compile.
+# gtk? ( >=x11-libs/gtk+-2 )
+
+DEPEND="acct-group/tss
+ acct-user/tss
+ >=dev-libs/glib-2
+ >=dev-libs/openssl-0.9.7:0=
+ "
+RDEPEND="${DEPEND}
+ selinux? ( sec-policy/selinux-tcsd )"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.3.13-nouseradd.patch"
+ "${FILESDIR}/${PN}-0.3.14-Makefile.am-Mark-tddl.a-nodist.patch"
+ "${FILESDIR}/${P}-libressl.patch"
+)
+
+DOCS="AUTHORS ChangeLog NICETOHAVES README TODO"
+
+DOC_CONTENTS="
+ If you have problems starting tcsd, please check permissions and
+ ownership on /dev/tpm* and ~tss/system.data
+"
+
+CONFIG_CHECK="~TCG_TPM"
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ # econf --with-gui=$(usex gtk gtk openssl)
+ econf --with-gui=openssl
+}
+
+src_install() {
+ default
+ find "${D}" -name '*.la' -delete || die
+
+ keepdir /var/lib/tpm
+ use doc && dodoc doc/*
+ newinitd "${FILESDIR}"/tcsd.initd tcsd
+ systemd_dounit "${FILESDIR}"/tcsd.service
+ udev_dorules "${FILESDIR}"/61-trousers.rules
+ fowners tss:tss /var/lib/tpm
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/spice/Manifest b/app-emulation/spice/Manifest
new file mode 100644
index 0000000..c75ff31
--- /dev/null
+++ b/app-emulation/spice/Manifest
@@ -0,0 +1,2 @@
+DIST spice-0.15.1.tar.bz2 1623290 BLAKE2B 19ddb3cac91be07a4a358ed89a5e4d1a5c406a9831b8c8a518764055354ecf6e09d129ae03ba65d876669da72f2cbf0c307261564097f60951711e9852eebb69 SHA512 362ab2f0b483911830693834515e1d331a6b929c5c63fd4522e843c42bbb7d8a52510d60f5f17d175dd2617c9621630f6a81f3ff7dce11dc28e6fb135e60fa86
+DIST spice-0.15.2.tar.bz2 1663326 BLAKE2B 00f5393ac409590b8fe0203251b811a4fe6dca16e644a30dd8165d57ff28cbef3b2f9c2a92ff7d2f6c8092bbef4f89a4e85ef9228cc8c03b0a163ffa3afaf9f6 SHA512 c8f273b9e97ef38a03b331f7d32c5f0a09d540523fe626568c845152cbd22273a92b3a08bc13fa2e061b913ad16ceb7cbddf142655cd9cdcd8eb5f646fa6aa26
diff --git a/app-emulation/spice/files/README.gentoo b/app-emulation/spice/files/README.gentoo
new file mode 100644
index 0000000..1920ea6
--- /dev/null
+++ b/app-emulation/spice/files/README.gentoo
@@ -0,0 +1,7 @@
+
+If you choose to enable the video streaming support of gstreamer,
+please try to install addtional gst-plugins which matching the video codecs
+
+ mjpeg media-plugins/gst-plugins-libav:1.0
+ vpx media-plugins/gst-plugins-vpx:1.0
+ x264 media-plugins/gst-plugins-x264:1.0
diff --git a/app-emulation/spice/files/spice-0.15.0-libressl.patch b/app-emulation/spice/files/spice-0.15.0-libressl.patch
new file mode 100644
index 0000000..84f2088
--- /dev/null
+++ b/app-emulation/spice/files/spice-0.15.0-libressl.patch
@@ -0,0 +1,38 @@
+https://gitlab.freedesktop.org/spice/spice/-/merge_requests/217
+
+From 60ee531e7a3572f93143f810089f7f4f591c63b0 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Fri, 26 May 2023 13:38:34 -0700
+Subject: [PATCH] server: add SSL_OP_NO_RENEGOTIATION fallback path
+
+With LibreSSL SSL_OP_NO_CLIENT_RENEGOTIATION is opaque which is not
+compatible with the OpenSSL 1.0.2 and earlier code path in
+red-stream.cpp while SSL_OP_NO_RENEGOTIATION is not yet defined for the
+newer OpenSSL code path in reds.cpp.
+
+So with OpenSSL 1.1.0 and later if SSL_OP_NO_RENEGOTIATION is undefined
+and SSL_OP_NO_CLIENT_RENEGOTIATION is defined then define the former as
+the latter. This will allow the build to succeed with LibreSSL 3.7.2 and
+in the future when newer LibreSSL versions add SSL_OP_NO_RENEGOTIATION
+that code path will then be used automatically.
+
+Signed-off-by: orbea <orbea@riseup.net>
+---
+ server/red-stream.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/server/red-stream.h b/server/red-stream.h
+index 716e93317..8e57c5e5e 100644
+--- a/server/red-stream.h
++++ b/server/red-stream.h
+@@ -25,6 +25,10 @@
+
+ SPICE_BEGIN_DECLS
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(SSL_OP_NO_RENEGOTIATION) && defined(SSL_OP_NO_CLIENT_RENEGOTIATION)
++#define SSL_OP_NO_RENEGOTIATION SSL_OP_NO_CLIENT_RENEGOTIATION
++#endif
++
+ typedef void (*AsyncReadDone)(void *opaque);
+ typedef void (*AsyncReadError)(void *opaque, int err);
+
diff --git a/app-emulation/spice/metadata.xml b/app-emulation/spice/metadata.xml
new file mode 100644
index 0000000..ce2f1ef
--- /dev/null
+++ b/app-emulation/spice/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <use>
+ <flag name="smartcard">Enable smartcard remoting using <pkg>app-emulation/libcacard</pkg></flag>
+ </use>
+ <upstream>
+ <remote-id type="freedesktop-gitlab">spice/spice</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/app-emulation/spice/spice-0.15.1-r1.ebuild b/app-emulation/spice/spice-0.15.1-r1.ebuild
new file mode 100644
index 0000000..6a8caef
--- /dev/null
+++ b/app-emulation/spice/spice-0.15.1-r1.ebuild
@@ -0,0 +1,105 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10,11} )
+# Port to meson once https://gitlab.freedesktop.org/spice/spice/-/issues/75 is fixed
+inherit autotools python-any-r1 readme.gentoo-r1 xdg-utils
+
+DESCRIPTION="SPICE server"
+HOMEPAGE="https://www.spice-space.org/"
+SRC_URI="https://www.spice-space.org/download/releases/spice-server/${P}.tar.bz2"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="amd64 arm64 ~loong ppc64 ~riscv x86"
+IUSE="gstreamer lz4 sasl smartcard static-libs test"
+
+RESTRICT="!test? ( test )"
+
+# the libspice-server only uses the headers of libcacard
+RDEPEND="dev-lang/orc[static-libs(+)?]
+ >=dev-libs/glib-2.38:2[static-libs(+)?]
+ dev-libs/openssl:0=[static-libs(+)?]
+ media-libs/opus[static-libs(+)?]
+ media-libs/libjpeg-turbo:0=[static-libs(+)?]
+ sys-libs/zlib[static-libs(+)?]
+ >=x11-libs/pixman-0.17.7[static-libs(+)?]
+ lz4? ( app-arch/lz4:0=[static-libs(+)?] )
+ smartcard? ( >=app-emulation/libcacard-2.5.1 )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)?] )
+ gstreamer? (
+ media-libs/gstreamer:1.0
+ media-libs/gst-plugins-base:1.0
+ )"
+DEPEND="${RDEPEND}
+ >=app-emulation/spice-protocol-0.14.3
+ smartcard? ( app-emulation/qemu[smartcard] )
+ test? ( net-libs/glib-networking )"
+BDEPEND="${PYTHON_DEPS}
+ dev-build/autoconf-archive
+ virtual/pkgconfig
+ $(python_gen_any_dep '
+ >=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]
+ dev-python/six[${PYTHON_USEDEP}]
+ ')"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.15.0-libressl.patch
+)
+
+python_check_deps() {
+ python_has_version -b ">=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]"
+ python_has_version -b "dev-python/six[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+src_configure() {
+ # Prevent sandbox violations, bug #586560
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744134
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744135
+ addpredict /dev
+
+ xdg_environment_reset
+
+ local myconf=(
+ $(use_enable static-libs static)
+ $(use_enable lz4)
+ $(use_with sasl)
+ $(use_enable smartcard)
+ $(use_enable test tests)
+ --enable-gstreamer=$(usex gstreamer "1.0" "no")
+ --disable-celt051
+ )
+
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ # Prevent sandbox violations, bug #586560
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744134
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744135
+ addpredict /dev
+
+ default
+}
+
+src_install() {
+ default
+ use static-libs || find "${D}" -name '*.la' -type f -delete || die
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/spice/spice-0.15.2.ebuild b/app-emulation/spice/spice-0.15.2.ebuild
new file mode 100644
index 0000000..1d4d70e
--- /dev/null
+++ b/app-emulation/spice/spice-0.15.2.ebuild
@@ -0,0 +1,99 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..11} )
+inherit meson python-any-r1 readme.gentoo-r1 xdg-utils
+
+DESCRIPTION="SPICE server"
+HOMEPAGE="https://www.spice-space.org/"
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://anongit.freedesktop.org/git/spice/spice.git"
+ inherit git-r3
+
+ DEPEND="~app-emulation/spice-protocol-9999"
+else
+ SRC_URI="https://www.spice-space.org/download/releases/spice-server/${P}.tar.bz2"
+ KEYWORDS="amd64 arm64 ~loong ppc64 ~riscv x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+IUSE="gstreamer lz4 sasl smartcard static-libs test"
+RESTRICT="!test? ( test )"
+
+# The libspice-server only uses the headers of libcacard
+RDEPEND="
+ dev-lang/orc[static-libs(+)?]
+ >=dev-libs/glib-2.38:2[static-libs(+)?]
+ dev-libs/openssl:0=[static-libs(+)?]
+ media-libs/opus[static-libs(+)?]
+ media-libs/libjpeg-turbo:0=[static-libs(+)?]
+ sys-libs/zlib[static-libs(+)?]
+ >=x11-libs/pixman-0.17.7[static-libs(+)?]
+ lz4? ( app-arch/lz4:0=[static-libs(+)?] )
+ smartcard? ( >=app-emulation/libcacard-2.5.1 )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)?] )
+ gstreamer? (
+ media-libs/gstreamer:1.0
+ media-libs/gst-plugins-base:1.0
+ )
+"
+DEPEND+="
+ ${RDEPEND}
+ >=app-emulation/spice-protocol-0.14.3
+ smartcard? ( app-emulation/qemu[smartcard] )
+ test? ( net-libs/glib-networking )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glib-utils
+ virtual/pkgconfig
+ $(python_gen_any_dep '
+ >=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]
+ dev-python/six[${PYTHON_USEDEP}]
+ ')
+"
+
+PATCHES=( "${FILESDIR}"/${PN}-0.15.0-libressl.patch )
+
+python_check_deps() {
+ python_has_version -b ">=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]"
+ python_has_version -b "dev-python/six[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && python-any-r1_pkg_setup
+}
+
+src_configure() {
+ # Prevent sandbox violations, bug #586560
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744134
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744135
+ use gstreamer && addpredict /dev
+
+ xdg_environment_reset
+
+ local emesonargs=(
+ -Ddefault_library=$(usex static-libs both shared)
+ -Dgstreamer=$(usex gstreamer 1.0 no)
+ -Dopus=enabled
+ -Dmanual=false
+ $(meson_use lz4)
+ $(meson_use sasl)
+ $(meson_feature smartcard)
+ $(meson_use test tests)
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-pda/libimobiledevice/Manifest b/app-pda/libimobiledevice/Manifest
new file mode 100644
index 0000000..1a1995a
--- /dev/null
+++ b/app-pda/libimobiledevice/Manifest
@@ -0,0 +1 @@
+DIST libimobiledevice-1.3.0.tar.bz2 733949 BLAKE2B 40717280bb3424c7431aa93d06d10de817e6761acf2b19948d80b691cfb4dd4ef0e31b81c8458eed29a43c8c8aa256da7baa3648fb785cfbdb7316daaba119a3 SHA512 7b22040552a6561729c79c0846f571b0e608abb7c297567d2ecfdd1718ce86df08a5e34ba51f209bdee96a1917da15e7ba3aaef1d289a951d1d3470b1f89e6a8
diff --git a/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-libressl.patch b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-libressl.patch
new file mode 100644
index 0000000..0957c91
--- /dev/null
+++ b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-libressl.patch
@@ -0,0 +1,25 @@
+From 170e1c445e8c930f4ee9dddfb9f1bcf24c089962 Mon Sep 17 00:00:00 2001
+From: Nikias Bassen <nikias@gmx.li>
+Date: Thu, 6 Aug 2020 20:43:08 +0200
+Subject: [PATCH] idevice: Fix build with LibreSSL
+
+Upstream-Status: Accepted
+[https://github.com/libimobiledevice/libimobiledevice/commit/170e1c445e8c930f4ee9dddfb9f1bcf24c089962]
+Signed-off-by: Stefan Strogin <steils@gentoo.org>
+---
+ src/idevice.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/idevice.c b/src/idevice.c
+index fea1e03f..47c9ab4d 100644
+--- a/src/idevice.c
++++ b/src/idevice.c
+@@ -1015,7 +1015,7 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_enable_ssl(idevice_conne
+ return ret;
+ }
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CTX_set_security_level(ssl_ctx, 0);
+ #endif
+
diff --git a/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-missing_libflags.patch b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-missing_libflags.patch
new file mode 100644
index 0000000..b52bf89
--- /dev/null
+++ b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-missing_libflags.patch
@@ -0,0 +1,31 @@
+From 4b2f17e8cce8fa078aa55f5da5f726c20eac3e2e Mon Sep 17 00:00:00 2001
+From: Nikias Bassen <nikias@gmx.li>
+Date: Tue, 13 Apr 2021 05:36:03 +0200
+Subject: [PATCH] common: Add missing *_LIBS and *_CFLAGS to fix build
+
+---
+ common/Makefile.am | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/common/Makefile.am b/common/Makefile.am
+index 4e3facba..ab01b834 100644
+--- a/common/Makefile.am
++++ b/common/Makefile.am
+@@ -8,12 +8,17 @@ AM_CFLAGS = \
+ $(libplist_CFLAGS) \
+ $(libgnutls_CFLAGS) \
+ $(libtasn1_CFLAGS) \
++ $(libgcrypt_CFLAGS) \
+ $(openssl_CFLAGS) \
+ $(LFS_CFLAGS)
+
+ AM_LDFLAGS = \
+ $(libusbmuxd_LIBS) \
+ $(libplist_LIBS) \
++ $(libgnutls_LIBS) \
++ $(libtasn1_LIBS) \
++ $(libgcrypt_LIBS) \
++ $(openssl_LIBS) \
+ ${libpthread_LIBS}
+
+ noinst_LTLIBRARIES = libinternalcommon.la
diff --git a/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-python.patch b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-python.patch
new file mode 100644
index 0000000..28ca6da
--- /dev/null
+++ b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-python.patch
@@ -0,0 +1,223 @@
+https://github.com/libimobiledevice/libimobiledevice/pull/685
+
+From fb337f26c8e58ed0ce0750f7899ccbd5da203dee Mon Sep 17 00:00:00 2001
+From: wendyisgr33n <wendyisgr33n@gmail.com>
+Date: Mon, 30 Jul 2018 10:43:57 -0700
+Subject: [PATCH 1/5] Fixed AFC afc.pxi definitions for Python2/3
+ compatibility. Added missing public method 'remove_path_and_contents'
+
+--- a/cython/afc.pxi
++++ b/cython/afc.pxi
+@@ -52,6 +52,7 @@ cdef extern from "libimobiledevice/afc.h":
+ afc_error_t afc_read_directory(afc_client_t client, char *dir, char ***list)
+ afc_error_t afc_get_file_info(afc_client_t client, char *filename, char ***infolist)
+ afc_error_t afc_remove_path(afc_client_t client, char *path)
++ afc_error_t afc_remove_path_and_contents(afc_client_t client, char *path)
+ afc_error_t afc_rename_path(afc_client_t client, char *f, char *to)
+ afc_error_t afc_make_directory(afc_client_t client, char *dir)
+ afc_error_t afc_truncate(afc_client_t client, char *path, uint64_t newsize)
+@@ -235,17 +236,17 @@ cdef class AfcClient(BaseService):
+ afc_file_mode_t c_mode
+ uint64_t handle
+ AfcFile f
+- if mode == <bytes>'r':
++ if mode == b'r':
+ c_mode = AFC_FOPEN_RDONLY
+- elif mode == <bytes>'r+':
++ elif mode == b'r+':
+ c_mode = AFC_FOPEN_RW
+- elif mode == <bytes>'w':
++ elif mode == b'w':
+ c_mode = AFC_FOPEN_WRONLY
+- elif mode == <bytes>'w+':
++ elif mode == b'w+':
+ c_mode = AFC_FOPEN_WR
+- elif mode == <bytes>'a':
++ elif mode == b'a':
+ c_mode = AFC_FOPEN_APPEND
+- elif mode == <bytes>'a+':
++ elif mode == b'a+':
+ c_mode = AFC_FOPEN_RDAPPEND
+ else:
+ raise ValueError("mode string must be 'r', 'r+', 'w', 'w+', 'a', or 'a+'")
+@@ -282,6 +283,9 @@ cdef class AfcClient(BaseService):
+ cpdef remove_path(self, bytes path):
+ self.handle_error(afc_remove_path(self._c_client, path))
+
++ cpdef remove_path_and_contents(self, bytes path):
++ self.handle_error(afc_remove_path_and_contents(self._c_client, path))
++
+ cpdef rename_path(self, bytes f, bytes t):
+ self.handle_error(afc_rename_path(self._c_client, f, t))
+
+@@ -308,17 +312,17 @@ cdef class Afc2Client(AfcClient):
+ afc_file_mode_t c_mode
+ uint64_t handle
+ AfcFile f
+- if mode == <bytes>'r':
++ if mode == b'r':
+ c_mode = AFC_FOPEN_RDONLY
+- elif mode == <bytes>'r+':
++ elif mode == b'r+':
+ c_mode = AFC_FOPEN_RW
+- elif mode == <bytes>'w':
++ elif mode == b'w':
+ c_mode = AFC_FOPEN_WRONLY
+- elif mode == <bytes>'w+':
++ elif mode == b'w+':
+ c_mode = AFC_FOPEN_WR
+- elif mode == <bytes>'a':
++ elif mode == b'a':
+ c_mode = AFC_FOPEN_APPEND
+- elif mode == <bytes>'a+':
++ elif mode == b'a+':
+ c_mode = AFC_FOPEN_RDAPPEND
+ else:
+ raise ValueError("mode string must be 'r', 'r+', 'w', 'w+', 'a', or 'a+'")
+
+From b71e8935949a1d6f419a3f783d804809fb4c309b Mon Sep 17 00:00:00 2001
+From: wendyisgr33n <wendyisgr33n@gmail.com>
+Date: Mon, 30 Jul 2018 10:44:40 -0700
+Subject: [PATCH 2/5] Fixed debugserver.pxi PyString_AsString compatibility
+ with Python3
+
+--- a/cython/debugserver.pxi
++++ b/cython/debugserver.pxi
+@@ -44,7 +44,12 @@ cdef class DebugServerError(BaseError):
+
+
+ # from http://stackoverflow.com/a/17511714
+-from cpython.string cimport PyString_AsString
++# https://github.com/libimobiledevice/libimobiledevice/pull/198
++from cpython cimport PY_MAJOR_VERSION
++if PY_MAJOR_VERSION <= 2:
++ from cpython.string cimport PyString_AsString
++else:
++ from cpython.bytes cimport PyBytes_AsString as PyString_AsString
+ cdef char ** to_cstring_array(list_str):
+ if not list_str:
+ return NULL
+
+From 44f54cdc0ebb052e4a642023bbf96504e6139ec9 Mon Sep 17 00:00:00 2001
+From: wendyisgr33n <wendyisgr33n@gmail.com>
+Date: Mon, 30 Jul 2018 10:45:22 -0700
+Subject: [PATCH 3/5] Fixed bytes/strings check in imobiledevice.pyx for
+ compatibility with Python2/3
+
+--- a/cython/imobiledevice.pyx
++++ b/cython/imobiledevice.pyx
+@@ -171,7 +171,7 @@ from libc.stdlib cimport *
+ cdef class iDevice(Base):
+ def __cinit__(self, object udid=None, *args, **kwargs):
+ cdef char* c_udid = NULL
+- if isinstance(udid, basestring):
++ if isinstance(udid, (str, bytes)):
+ c_udid = <bytes>udid
+ elif udid is not None:
+ raise TypeError("iDevice's constructor takes a string or None as the udid argument")
+
+From 8908619973e751b778d3fb73dc309cd5cb7f4122 Mon Sep 17 00:00:00 2001
+From: wendyisgr33n <wendyisgr33n@gmail.com>
+Date: Mon, 30 Jul 2018 10:45:55 -0700
+Subject: [PATCH 4/5] Fixed bytes/strings checks in lockdown.pxi for
+ compatibility with Python2/3
+
+--- a/cython/lockdown.pxi
++++ b/cython/lockdown.pxi
+@@ -230,9 +230,9 @@ cdef class LockdownClient(PropertyListService):
+
+ if issubclass(service, BaseService) and \
+ service.__service_name__ is not None \
+- and isinstance(service.__service_name__, basestring):
++ and isinstance(service.__service_name__, (str, bytes)):
+ c_service_name = <bytes>service.__service_name__
+- elif isinstance(service, basestring):
++ elif isinstance(service, (str, bytes)):
+ c_service_name = <bytes>service
+ else:
+ raise TypeError("LockdownClient.start_service() takes a BaseService or string as its first argument")
+@@ -253,7 +253,7 @@ cdef class LockdownClient(PropertyListService):
+
+ if not hasattr(service_class, '__service_name__') and \
+ not service_class.__service_name__ is not None \
+- and not isinstance(service_class.__service_name__, basestring):
++ and not isinstance(service_class.__service_name__, (str, bytes)):
+ raise TypeError("LockdownClient.get_service_client() takes a BaseService as its first argument")
+
+ descriptor = self.start_service(service_class)
+
+From e59cbdbf4e7dba98ef57a54e314a89edfea0a3dc Mon Sep 17 00:00:00 2001
+From: wendyisgr33n <wendyisgr33n@gmail.com>
+Date: Mon, 30 Jul 2018 10:47:48 -0700
+Subject: [PATCH 5/5] Fixed method visibility in mobilebackup2.pxi API
+
+--- a/cython/mobilebackup2.pxi
++++ b/cython/mobilebackup2.pxi
+@@ -54,10 +54,10 @@ cdef class MobileBackup2Client(PropertyListService):
+ cdef inline BaseError _error(self, int16_t ret):
+ return MobileBackup2Error(ret)
+
+- cdef send_message(self, bytes message, plist.Node options):
++ cpdef send_message(self, bytes message, plist.Node options):
+ self.handle_error(mobilebackup2_send_message(self._c_client, message, options._c_node))
+
+- cdef tuple receive_message(self):
++ cpdef tuple receive_message(self):
+ cdef:
+ char* dlmessage = NULL
+ plist.plist_t c_node = NULL
+@@ -73,29 +73,34 @@ cdef class MobileBackup2Client(PropertyListService):
+ free(dlmessage)
+ raise
+
+- cdef int send_raw(self, bytes data, int length):
++ cpdef int send_raw(self, bytes data, int length):
+ cdef:
+- uint32_t bytes = 0
++ uint32_t bytes_recvd = 0
+ mobilebackup2_error_t err
+- err = mobilebackup2_send_raw(self._c_client, data, length, &bytes)
++ err = mobilebackup2_send_raw(self._c_client, data, length, &bytes_recvd)
+ try:
+ self.handle_error(err)
+- return <bint>bytes
++ return <bint>bytes_recvd
+ except BaseError, e:
+ raise
+
+- cdef int receive_raw(self, bytes data, int length):
++ cpdef int receive_raw(self, bytearray data, int length):
+ cdef:
+- uint32_t bytes = 0
++ uint32_t bytes_recvd = 0
+ mobilebackup2_error_t err
+- err = mobilebackup2_receive_raw(self._c_client, data, length, &bytes)
++ err = mobilebackup2_receive_raw(self._c_client, data, length, &bytes_recvd)
++
++ # Throwing an exception when we test if theres more data to read is excessive
++ if err == -1 and bytes_recvd == 0:
++ return 0
++
+ try:
+ self.handle_error(err)
+- return <bint>bytes
++ return <bint>bytes_recvd
+ except BaseError, e:
+ raise
+
+- cdef float version_exchange(self, double[::1] local_versions):
++ cpdef float version_exchange(self, double[::1] local_versions):
+ cdef:
+ double[::1] temp = None
+ double remote_version = 0.0
+@@ -107,8 +112,8 @@ cdef class MobileBackup2Client(PropertyListService):
+ except BaseError, e:
+ raise
+
+- cdef send_request(self, bytes request, bytes target_identifier, bytes source_identifier, plist.Node options):
++ cpdef send_request(self, bytes request, bytes target_identifier, bytes source_identifier, plist.Node options):
+ self.handle_error(mobilebackup2_send_request(self._c_client, request, target_identifier, source_identifier, options._c_node))
+
+- cdef send_status_response(self, int status_code, bytes status1, plist.Node status2):
++ cpdef send_status_response(self, int status_code, bytes status1, plist.Node status2):
+ self.handle_error(mobilebackup2_send_status_response(self._c_client, status_code, status1, status2._c_node))
diff --git a/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-slibtool.patch b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-slibtool.patch
new file mode 100644
index 0000000..1e9fa6c
--- /dev/null
+++ b/app-pda/libimobiledevice/files/libimobiledevice-1.3.0-slibtool.patch
@@ -0,0 +1,105 @@
+From 735ac51e0eeaa3419e85dbad9579401ae828f631 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Tue, 6 Apr 2021 13:06:35 -0700
+Subject: [PATCH] tools: Fix usage of LDFLAGS and LDADD.
+
+Signed-off-by: orbea <orbea@riseup.net>
+---
+ tools/Makefile.am | 40 ++++++++++++++++++++--------------------
+ 1 file changed, 20 insertions(+), 20 deletions(-)
+
+diff --git a/tools/Makefile.am b/tools/Makefile.am
+index 8ed8ad91..04a5faa7 100644
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -40,8 +40,8 @@ bin_PROGRAMS = \
+
+ ideviceinfo_SOURCES = ideviceinfo.c
+ ideviceinfo_CFLAGS = $(AM_CFLAGS)
+-ideviceinfo_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-ideviceinfo_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++ideviceinfo_LDFLAGS = $(AM_LDFLAGS)
++ideviceinfo_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicename_SOURCES = idevicename.c
+ idevicename_CFLAGS = $(AM_CFLAGS)
+@@ -50,8 +50,8 @@ idevicename_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
+
+ idevicepair_SOURCES = idevicepair.c
+ idevicepair_CFLAGS = -I$(top_srcdir) $(AM_CFLAGS)
+-idevicepair_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS) $(libusbmuxd_LIBS)
+-idevicepair_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++idevicepair_LDFLAGS = $(AM_LDFLAGS) $(libusbmuxd_LIBS)
++idevicepair_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicesyslog_SOURCES = idevicesyslog.c
+ idevicesyslog_CFLAGS = $(AM_CFLAGS)
+@@ -65,18 +65,18 @@ idevice_id_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
+
+ idevicebackup_SOURCES = idevicebackup.c
+ idevicebackup_CFLAGS = $(AM_CFLAGS)
+-idevicebackup_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-idevicebackup_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++idevicebackup_LDFLAGS = $(AM_LDFLAGS)
++idevicebackup_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicebackup2_SOURCES = idevicebackup2.c
+ idevicebackup2_CFLAGS = $(AM_CFLAGS)
+-idevicebackup2_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-idevicebackup2_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++idevicebackup2_LDFLAGS = $(AM_LDFLAGS)
++idevicebackup2_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ ideviceimagemounter_SOURCES = ideviceimagemounter.c
+ ideviceimagemounter_CFLAGS = $(AM_CFLAGS)
+-ideviceimagemounter_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-ideviceimagemounter_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++ideviceimagemounter_LDFLAGS = $(AM_LDFLAGS)
++ideviceimagemounter_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicescreenshot_SOURCES = idevicescreenshot.c
+ idevicescreenshot_CFLAGS = $(AM_CFLAGS)
+@@ -95,13 +95,13 @@ idevicedate_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
+
+ ideviceprovision_SOURCES = ideviceprovision.c
+ ideviceprovision_CFLAGS = $(AM_CFLAGS)
+-ideviceprovision_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-ideviceprovision_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++ideviceprovision_LDFLAGS = $(AM_LDFLAGS)
++ideviceprovision_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicedebugserverproxy_SOURCES = idevicedebugserverproxy.c
+ idevicedebugserverproxy_CFLAGS = -I$(top_srcdir) $(AM_CFLAGS)
+-idevicedebugserverproxy_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-idevicedebugserverproxy_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++idevicedebugserverproxy_LDFLAGS = $(AM_LDFLAGS)
++idevicedebugserverproxy_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicediagnostics_SOURCES = idevicediagnostics.c
+ idevicediagnostics_CFLAGS = $(AM_CFLAGS)
+@@ -110,8 +110,8 @@ idevicediagnostics_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
+
+ idevicedebug_SOURCES = idevicedebug.c
+ idevicedebug_CFLAGS = $(AM_CFLAGS)
+-idevicedebug_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-idevicedebug_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++idevicedebug_LDFLAGS = $(AM_LDFLAGS)
++idevicedebug_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicenotificationproxy_SOURCES = idevicenotificationproxy.c
+ idevicenotificationproxy_CFLAGS = $(AM_CFLAGS)
+@@ -120,10 +120,10 @@ idevicenotificationproxy_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
+
+ idevicecrashreport_SOURCES = idevicecrashreport.c
+ idevicecrashreport_CFLAGS = -I$(top_srcdir) $(AM_CFLAGS)
+-idevicecrashreport_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-idevicecrashreport_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++idevicecrashreport_LDFLAGS = $(AM_LDFLAGS)
++idevicecrashreport_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
+
+ idevicesetlocation_SOURCES = idevicesetlocation.c
+ idevicesetlocation_CFLAGS = $(AM_CFLAGS)
+-idevicesetlocation_LDFLAGS = $(top_builddir)/common/libinternalcommon.la $(AM_LDFLAGS)
+-idevicesetlocation_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la
++idevicesetlocation_LDFLAGS = $(AM_LDFLAGS)
++idevicesetlocation_LDADD = $(top_builddir)/src/libimobiledevice-1.0.la $(top_builddir)/common/libinternalcommon.la
diff --git a/app-pda/libimobiledevice/libimobiledevice-1.3.0-r3.ebuild b/app-pda/libimobiledevice/libimobiledevice-1.3.0-r3.ebuild
new file mode 100644
index 0000000..f994417
--- /dev/null
+++ b/app-pda/libimobiledevice/libimobiledevice-1.3.0-r3.ebuild
@@ -0,0 +1,116 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{9..11} )
+
+inherit autotools python-r1
+
+DESCRIPTION="Support library to communicate with Apple iPhone/iPod Touch devices"
+HOMEPAGE="https://www.libimobiledevice.org/"
+SRC_URI="https://github.com/libimobiledevice/libimobiledevice/releases/download/${PV}/${P}.tar.bz2"
+
+# While COPYING* doesn't mention 'or any later version', all the headers do, hence use +
+LICENSE="GPL-2+ LGPL-2.1+"
+SLOT="0/1.0-6" # based on SONAME of libimobiledevice-1.0.so
+KEYWORDS="amd64 ~arm ~arm64 ~loong ppc ~ppc64 ~riscv x86"
+IUSE="doc gnutls python static-libs"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+RDEPEND="
+ >=app-pda/libplist-2.2.0:= <app-pda/libplist-2.3
+ >=app-pda/libusbmuxd-2.0.2:=
+ gnutls? (
+ dev-libs/libgcrypt:0
+ >=dev-libs/libtasn1-1.1
+ >=net-libs/gnutls-2.2.0
+ )
+ !gnutls? (
+ dev-libs/openssl:0=
+ )
+ python? (
+ ${PYTHON_DEPS}
+ app-pda/libplist[python(-),${PYTHON_USEDEP}]
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+# <cython-3 for bug #898666
+BDEPEND="
+ virtual/pkgconfig
+ doc? ( app-text/doxygen )
+ python? ( <dev-python/cython-3[${PYTHON_USEDEP}] )
+"
+
+BUILD_DIR="${S}_build"
+
+PATCHES=(
+ "${FILESDIR}/${P}-slibtool.patch"
+ "${FILESDIR}/${P}-missing_libflags.patch" #787962
+ "${FILESDIR}/${P}-libressl.patch"
+ "${FILESDIR}/${P}-python.patch"
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local ECONF_SOURCE=${S}
+
+ local myeconfargs=( $(use_enable static-libs static) )
+ use gnutls && myeconfargs+=( --disable-openssl )
+
+ do_configure() {
+ mkdir -p "${BUILD_DIR}" || die
+ pushd "${BUILD_DIR}" >/dev/null || die
+ econf "${myeconfargs[@]}" "${@}"
+ popd >/dev/null || die
+ }
+
+ do_configure_python() {
+ # Bug 567916
+ local -x PYTHON_LDFLAGS="$(python_get_LIBS)"
+ do_configure "$@"
+ }
+
+ do_configure --without-cython
+ use python && python_foreach_impl do_configure_python
+}
+
+src_compile() {
+ python_compile() {
+ emake -C "${BUILD_DIR}"/cython \
+ VPATH="${S}/cython:$1/cython" \
+ imobiledevice_la_LIBADD="$1/src/libimobiledevice-1.0.la"
+ }
+
+ emake -C "${BUILD_DIR}"
+ use python && python_foreach_impl python_compile "${BUILD_DIR}"
+
+ if use doc; then
+ doxygen "${BUILD_DIR}"/doxygen.cfg || die
+ fi
+}
+
+src_install() {
+ python_install() {
+ emake -C "${BUILD_DIR}/cython" install \
+ DESTDIR="${D}" \
+ VPATH="${S}/cython:$1/cython"
+ }
+
+ emake -C "${BUILD_DIR}" install DESTDIR="${D}"
+ use python && python_foreach_impl python_install "${BUILD_DIR}"
+ use doc && dodoc docs/html/*
+
+ if use python; then
+ insinto /usr/include/${PN}/cython
+ doins cython/imobiledevice.pxd
+ fi
+
+ find "${D}" -name '*.la' -delete || die
+}
diff --git a/app-pda/libimobiledevice/metadata.xml b/app-pda/libimobiledevice/metadata.xml
new file mode 100644
index 0000000..3553c5b
--- /dev/null
+++ b/app-pda/libimobiledevice/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>matthew@gentoo.org</email>
+ <name>Matthew Smith</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">libimobiledevice/libimobiledevice</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/app-text/mupdf/Manifest b/app-text/mupdf/Manifest
new file mode 100644
index 0000000..a835f7c
--- /dev/null
+++ b/app-text/mupdf/Manifest
@@ -0,0 +1,3 @@
+DIST mupdf-1.22.0-source.tar.gz 55043552 BLAKE2B 745a2fd1d0406acf4fa696585bcd21a4ff36e7539c1d45f886dfe5c9bbf966169e5183e89940d81e88db3014f1ebb0446ae1732b6c2fa25a135251853b71f1f7 SHA512 ba073b977306420343c969e6fec37cca4559031ad06cfdee2356edfdfa013ebe7654175aff931684fa48a935bf87f68537754b5e83f767517bc428ac07709a59
+DIST mupdf-1.23.3-source.tar.gz 55144800 BLAKE2B 816e2bf46c2431df9726976efeaa0d7ebd8809cbdd9331a747cca32088aaf21b70e9522614d1dc20c856cc597003be6285f866eae8bbde3098e702acfdea8465 SHA512 37fbebd07680d79a38d289264a4028396ee58fad52c541efa37463e63a45ed8bab71188d6c05eb15e602964d89ee6633575dceb972f7bd8b0b5efdde5af9b737
+DIST mupdf-1.23.7-source.tar.gz 55312697 BLAKE2B 7ceb7c1871d33b77d4a3d52ed2d1af514c09349df019a189fa7df8ad09648fae313d63de4c1ce6b0666d17f9a897d5ac788d0be2d8896d9b7e4e6ecf679bad7c SHA512 581a4a5a16041bb405fbd7c1b9fba47da5745f00cbdf30e0e0468bfe67ac542884193b5957b293a4cdfc52f043b4f19612086f294b93dbd242d34735a1088777
diff --git a/app-text/mupdf/files/mupdf-1.15-CFLAGS.patch b/app-text/mupdf/files/mupdf-1.15-CFLAGS.patch
new file mode 100644
index 0000000..a7de530
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.15-CFLAGS.patch
@@ -0,0 +1,13 @@
+diff --git a/Makerules b/Makerules
+index 298b5737..71c307e6 100644
+--- a/Makerules
++++ b/Makerules
+@@ -21,8 +21,6 @@ SANITIZE_FLAGS += -fsanitize=address
+ SANITIZE_FLAGS += -fsanitize=leak
+
+ ifeq ($(build),debug)
+- CFLAGS += -pipe -g
+- LDFLAGS += -g
+ else ifeq ($(build),release)
+ CFLAGS += -pipe -O2 -DNDEBUG -fomit-frame-pointer
+ LDFLAGS += $(LDREMOVEUNREACH) -Wl,-s
diff --git a/app-text/mupdf/files/mupdf-1.15-openssl-x11.patch b/app-text/mupdf/files/mupdf-1.15-openssl-x11.patch
new file mode 100644
index 0000000..3f3aac4
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.15-openssl-x11.patch
@@ -0,0 +1,18 @@
+--- a/Makerules
++++ b/Makerules
+@@ -119,13 +119,13 @@ else ifeq ($(OS),Linux)
+ SYS_GLUT_LIBS := -lglut -lGL
+ endif
+
+- HAVE_X11 := $(shell pkg-config --exists x11 xext && echo yes)
++ HAVE_X11 := not-unless-portage-tells-me
+ ifeq ($(HAVE_X11),yes)
+ X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
+ X11_LIBS := $(shell pkg-config --libs x11 xext)
+ endif
+
+- HAVE_LIBCRYPTO := $(shell pkg-config --exists 'libcrypto >= 1.1.0' && echo yes)
++ HAVE_LIBCRYPTO := not-unless-portage-tells-me
+ ifeq ($(HAVE_LIBCRYPTO),yes)
+ LIBCRYPTO_CFLAGS := $(shell pkg-config --cflags libcrypto) -DHAVE_LIBCRYPTO
+ LIBCRYPTO_LIBS := $(shell pkg-config --libs libcrypto)
diff --git a/app-text/mupdf/files/mupdf-1.19.0-Makefile.patch b/app-text/mupdf/files/mupdf-1.19.0-Makefile.patch
new file mode 100644
index 0000000..b266655
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.19.0-Makefile.patch
@@ -0,0 +1,37 @@
+diff --git a/Makefile b/Makefile
+index 7fa74b3..e842374 100644
+--- a/Makefile
++++ b/Makefile
+@@ -3,7 +3,7 @@
+ -include user.make
+
+ ifndef build
+- build := release
++ build := debug
+ endif
+
+ default: all
+@@ -252,17 +252,19 @@ $(THIRD_GLUT_LIB) : $(THIRD_GLUT_OBJ)
+ $(THREAD_LIB) : $(THREAD_OBJ)
+ $(PKCS7_LIB) : $(PKCS7_OBJ)
+ else
+-MUPDF_LIB = $(OUT)/libmupdf.a
++MUPDF_LIB = libmupdf.so.$(GENTOO_PV)
+ LIBS_TO_INSTALL_IN_LIB = $(MUPDF_LIB) $(THIRD_LIB)
+-THIRD_LIB = $(OUT)/libmupdf-third.a
++THIRD_LIB =
++MUPDF_STATIC = $(OUT)/libmupdf.a
+ ifneq ($(USE_SYSTEM_GLUT),yes)
+ THIRD_GLUT_LIB = $(OUT)/libmupdf-glut.a
+ endif
+ THREAD_LIB = $(OUT)/libmupdf-threads.a
+ PKCS7_LIB = $(OUT)/libmupdf-pkcs7.a
+
+-$(MUPDF_LIB) : $(MUPDF_OBJ)
+-$(THIRD_LIB) : $(THIRD_OBJ)
++$(MUPDF_LIB) : $(MUPDF_OBJ) $(THIRD_OBJ)
++ $(QUIET_LINK) $(CC) $(LDFLAGS) --shared -Wl,-soname -Wl,$(MUPDF_LIB) -o $@ $^ $(THIRD_LIBS) $(LIBS)
++$(MUPDF_STATIC): $(MUPDF_OBJ) $(THIRD_OBJ)
+ $(THIRD_GLUT_LIB) : $(THIRD_GLUT_OBJ)
+ $(THREAD_LIB) : $(THREAD_OBJ)
+ $(PKCS7_LIB) : $(PKCS7_OBJ)
diff --git a/app-text/mupdf/files/mupdf-1.19.0-cross-fixes.patch b/app-text/mupdf/files/mupdf-1.19.0-cross-fixes.patch
new file mode 100644
index 0000000..643b6d2
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.19.0-cross-fixes.patch
@@ -0,0 +1,130 @@
+Refreshed patches based on:
+https://sources.debian.org/patches/mupdf/1.17.0+ds1-1/0004-MuPDF-crossbuild-use-target-arch-pkg-config.patch/
+https://sources.debian.org/patches/mupdf/1.17.0+ds1-1/0005-MuPDF-crossbuild-use-host-cc-for-utils.patch/
+--- a/Makefile
++++ b/Makefile
+@@ -147,6 +147,9 @@ PKCS7_OBJ := $(PKCS7_SRC:%.c=$(OUT)/%.o)
+
+ HEXDUMP_EXE := $(OUT)/scripts/hexdump.exe
+
++$(HEXDUMP_EXE): scripts/hexdump.c
++ $(QUIET_CC) $(MKTGTDIR) ; $(CC_FOR_BUILD) $(CFLAGS) -o $@ $<
++
+ FONT_BIN := $(sort $(wildcard resources/fonts/urw/*.cff))
+ FONT_BIN += $(sort $(wildcard resources/fonts/han/*.ttc))
+ FONT_BIN += $(sort $(wildcard resources/fonts/droid/*.ttf))
+--- a/Makerules
++++ b/Makerules
+@@ -6,6 +6,9 @@ OS := $(OS:MSYS%=MINGW)
+ OS := $(OS:Windows_NT=MINGW)
+ OS := $(OS:Darwin=MACOS)
+
++PKG_CONFIG ?= pkg-config
++CC_FOR_BUILD ?= $(CC)
++
+ WARNING_CFLAGS := -Wall -Wsign-compare
+
+ # Feature configuration options
+@@ -156,51 +159,51 @@ else ifeq ($(OS),MACOS)
+ endif
+ endif
+
+- ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
+- SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
+- SYS_FREETYPE_LIBS := $(shell pkg-config --libs freetype2)
++ ifeq ($(shell $(PKG_CONFIG) --exists freetype2 && echo yes),yes)
++ SYS_FREETYPE_CFLAGS := $(shell $(PKG_CONFIG) --cflags freetype2)
++ SYS_FREETYPE_LIBS := $(shell $(PKG_CONFIG) --libs freetype2)
+ endif
+- ifeq ($(shell pkg-config --exists gumbo && echo yes),yes)
+- SYS_GUMBO_CFLAGS := $(shell pkg-config --cflags gumbo)
+- SYS_GUMBO_LIBS := $(shell pkg-config --libs gumbo)
++ ifeq ($(shell $(PKG_CONFIG) --exists gumbo && echo yes),yes)
++ SYS_GUMBO_CFLAGS := $(shell $(PKG_CONFIG) --cflags gumbo)
++ SYS_GUMBO_LIBS := $(shell $(PKG_CONFIG) --libs gumbo)
+ endif
+- ifeq ($(shell pkg-config --exists harfbuzz && echo yes),yes)
+- SYS_HARFBUZZ_CFLAGS := $(shell pkg-config --cflags harfbuzz)
+- SYS_HARFBUZZ_LIBS := $(shell pkg-config --libs harfbuzz)
++ ifeq ($(shell $(PKG_CONFIG) --exists harfbuzz && echo yes),yes)
++ SYS_HARFBUZZ_CFLAGS := $(shell $(PKG_CONFIG) --cflags harfbuzz)
++ SYS_HARFBUZZ_LIBS := $(shell $(PKG_CONFIG) --libs harfbuzz)
+ endif
+- ifeq ($(shell pkg-config --exists lcms2 && echo yes),yes)
+- SYS_LCMS2_CFLAGS := $(shell pkg-config --cflags lcms2)
+- SYS_LCMS2_LIBS := $(shell pkg-config --libs lcms2)
++ ifeq ($(shell $(PKG_CONFIG) --exists lcms2 && echo yes),yes)
++ SYS_LCMS2_CFLAGS := $(shell $(PKG_CONFIG) --cflags lcms2)
++ SYS_LCMS2_LIBS := $(shell $(PKG_CONFIG) --libs lcms2)
+ endif
+- ifeq ($(shell pkg-config --exists libjpeg && echo yes),yes)
+- SYS_LIBJPEG_CFLAGS := $(shell pkg-config --cflags libjpeg)
+- SYS_LIBJPEG_LIBS := $(shell pkg-config --libs libjpeg)
++ ifeq ($(shell $(PKG_CONFIG) --exists libjpeg && echo yes),yes)
++ SYS_LIBJPEG_CFLAGS := $(shell $(PKG_CONFIG) --cflags libjpeg)
++ SYS_LIBJPEG_LIBS := $(shell $(PKG_CONFIG) --libs libjpeg)
+ endif
+- ifeq ($(shell pkg-config --exists libopenjp2 && echo yes),yes)
+- SYS_OPENJPEG_CFLAGS := $(shell pkg-config --cflags libopenjp2)
+- SYS_OPENJPEG_LIBS := $(shell pkg-config --libs libopenjp2)
++ ifeq ($(shell $(PKG_CONFIG) --exists libopenjp2 && echo yes),yes)
++ SYS_OPENJPEG_CFLAGS := $(shell $(PKG_CONFIG) --cflags libopenjp2)
++ SYS_OPENJPEG_LIBS := $(shell $(PKG_CONFIG) --libs libopenjp2)
+ endif
+- ifeq ($(shell pkg-config --exists zlib && echo yes),yes)
+- SYS_ZLIB_CFLAGS := $(shell pkg-config --cflags zlib)
+- SYS_ZLIB_LIBS := $(shell pkg-config --libs zlib)
++ ifeq ($(shell $(PKG_CONFIG) --exists zlib && echo yes),yes)
++ SYS_ZLIB_CFLAGS := $(shell $(PKG_CONFIG) --cflags zlib)
++ SYS_ZLIB_LIBS := $(shell $(PKG_CONFIG) --libs zlib)
+ endif
+
+- HAVE_SYS_LEPTONICA := $(shell pkg-config --exists 'lept >= 1.7.4' && echo yes)
++ HAVE_SYS_LEPTONICA := $(shell $(PKG_CONFIG) --exists 'lept >= 1.7.4' && echo yes)
+ ifeq ($(HAVE_SYS_LEPTONICA),yes)
+- SYS_LEPTONICA_CFLAGS := $(shell pkg-config --cflags lept)
+- SYS_LEPTONICA_LIBS := $(shell pkg-config --libs lept)
++ SYS_LEPTONICA_CFLAGS := $(shell $(PKG_CONFIG) --cflags lept)
++ SYS_LEPTONICA_LIBS := $(shell $(PKG_CONFIG) --libs lept)
+ endif
+
+- HAVE_SYS_TESSERACT := $(shell pkg-config --exists 'tesseract >= 4.0.0' && echo yes)
++ HAVE_SYS_TESSERACT := $(shell $(PKG_CONFIG) --exists 'tesseract >= 4.0.0' && echo yes)
+ ifeq ($(HAVE_SYS_TESSERACT),yes)
+- SYS_TESSERACT_CFLAGS := $(shell pkg-config --cflags tesseract)
+- SYS_TESSERACT_LIBS := $(shell pkg-config --libs tesseract)
++ SYS_TESSERACT_CFLAGS := $(shell $(PKG_CONFIG) --cflags tesseract)
++ SYS_TESSERACT_LIBS := $(shell $(PKG_CONFIG) --libs tesseract)
+ endif
+
+- HAVE_SYS_CURL := $(shell pkg-config --exists libcurl && echo yes)
++ HAVE_SYS_CURL := $(shell $(PKG_CONFIG) --exists libcurl && echo yes)
+ ifeq ($(HAVE_SYS_CURL),yes)
+- SYS_CURL_CFLAGS := $(shell pkg-config --cflags libcurl)
+- SYS_CURL_LIBS := $(shell pkg-config --libs libcurl)
++ SYS_CURL_CFLAGS := $(shell $(PKG_CONFIG) --cflags libcurl)
++ SYS_CURL_LIBS := $(shell $(PKG_CONFIG) --libs libcurl)
+ endif
+
+ HAVE_GLUT := yes
+@@ -209,16 +212,16 @@ endif
+ SYS_GLUT_LIBS := -lglut -lGL
+ endif
+
+ HAVE_X11 := not-unless-portage-tells-me
+ ifeq ($(HAVE_X11),yes)
+- X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
+- X11_LIBS := $(shell pkg-config --libs x11 xext)
++ X11_CFLAGS := $(shell $(PKG_CONFIG) --cflags x11 xext)
++ X11_LIBS := $(shell $(PKG_CONFIG) --libs x11 xext)
+ endif
+
+ HAVE_LIBCRYPTO := not-unless-portage-tells-me
+ ifeq ($(HAVE_LIBCRYPTO),yes)
+- LIBCRYPTO_CFLAGS := $(shell pkg-config --cflags libcrypto) -DHAVE_LIBCRYPTO
+- LIBCRYPTO_LIBS := $(shell pkg-config --libs libcrypto)
++ LIBCRYPTO_CFLAGS := $(shell $(PKG_CONFIG) --cflags libcrypto) -DHAVE_LIBCRYPTO
++ LIBCRYPTO_LIBS := $(shell $(PKG_CONFIG) --libs libcrypto)
+ endif
+
+ HAVE_PTHREAD := yes
diff --git a/app-text/mupdf/files/mupdf-1.19.0-darwin.patch b/app-text/mupdf/files/mupdf-1.19.0-darwin.patch
new file mode 100644
index 0000000..a81c7a0
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.19.0-darwin.patch
@@ -0,0 +1,39 @@
+--- a/Makerules
++++ b/Makerules
+@@ -139,11 +139,11 @@ ifeq ($(OS),MINGW)
+ else ifeq ($(OS),MACOS)
+ HAVE_GLUT := yes
+ SYS_GLUT_CFLAGS := -Wno-deprecated-declarations
+- SYS_GLUT_LIBS := -framework GLUT -framework OpenGL
+- CC = xcrun cc
+- AR = xcrun ar
+- LD = xcrun ld
+- RANLIB = xcrun ranlib
++ SYS_GLUT_LIBS ?= -framework GLUT -framework OpenGL
++ CC ?= xcrun cc
++ AR ?= xcrun ar
++ LD ?= xcrun ld
++ RANLIB ?= xcrun ranlib
+
+ ifeq (, $(shell which pkg-config))
+ $(warning "No pkg-config found, install it for proper integration of libcrypto")
+@@ -154,9 +154,7 @@ else ifeq ($(OS),MACOS)
+ LIBCRYPTO_LIBS := $(shell pkg-config --libs libcrypto)
+ endif
+ endif
+-
+-else ifeq ($(OS),Linux)
+- HAVE_OBJCOPY := yes
++endif
+
+ ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
+ SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
+@@ -229,8 +227,6 @@ else ifeq ($(OS),Linux)
+ PTHREAD_LIBS := -lpthread
+ endif
+
+-endif
+-
+ # The following section has various cross compilation configurations.
+ #
+ # Invoke these as:
diff --git a/app-text/mupdf/files/mupdf-1.21.0-add-desktop-pc-files.patch b/app-text/mupdf/files/mupdf-1.21.0-add-desktop-pc-files.patch
new file mode 100644
index 0000000..4d449a2
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.21.0-add-desktop-pc-files.patch
@@ -0,0 +1,33 @@
+--- /dev/null
++++ ./platform/debian/mupdf.desktop
+@@ -0,0 +1,15 @@
++[Desktop Entry]
++Name=MuPDF
++GenericName=PDF file viewer
++Exec=mupdf %f
++TryExec=mupdf
++Icon=new-mupdf-icon
++Terminal=false
++Type=Application
++MimeType=application/pdf;application/x-pdf;application/x-cbz;application/oxps;application/vnd.ms-xpsdocument;image/jpeg;image/pjpeg;image/png;image/tiff;image/x-tiff;
++Categories=Viewer;Graphics;
++Actions=View;
++
++[Desktop Action View]
++Name=View with mupdf
++Exec=mupdf %f
+--- /dev/null
++++ ./platform/debian/mupdf.pc
+@@ -0,0 +1,12 @@
++prefix=/usr
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include
++
++Name: mupdf
++Description: Library for rendering PDF documents
++Requires: freetype2 libopenjp2 libcrypto
++Version: 0.5.0
++Libs: -L${libdir} -lmupdf
++Libs.private: -lmupdf-js-none
++Cflags: -I${includedir}
diff --git a/app-text/mupdf/files/mupdf-1.21.1-fix-aliasing-violation.patch b/app-text/mupdf/files/mupdf-1.21.1-fix-aliasing-violation.patch
new file mode 100644
index 0000000..4f51f72
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.21.1-fix-aliasing-violation.patch
@@ -0,0 +1,63 @@
+https://bugs.gentoo.org/859847
+
+From 8c6f6bf3ad2fd33d15de6ee96175cd29bf804d9f Mon Sep 17 00:00:00 2001
+From: Matt Turner <mattst88@gmail.com>
+Date: Tue, 26 Jul 2022 15:47:02 -0400
+Subject: [PATCH] Fix aliasing violation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Noticed when compiling with link-time optimizations.
+
+include/GL/freeglut_std.h:240:18: error: type of `glutBitmapHelvetica18` does not match original declaration [-Werror=lto-type-mismatch]
+ 240 | extern void* glutBitmapHelvetica18;
+ | ^
+src/x11/fg_glutfont_definitions_x11.c:103:27: note: `glutBitmapHelvetica18` was previously declared here
+ 103 | struct freeglutBitmapFont glutBitmapHelvetica18 ;
+ | ^
+src/x11/fg_glutfont_definitions_x11.c:103:27: note: code may be misoptimized unless `-fno-strict-aliasing` is used
+---
+ src/x11/fg_glutfont_definitions_x11.c | 29 ++++++++++++++++++---------
+ 1 file changed, 20 insertions(+), 9 deletions(-)
+
+--- a/thirdparty/freeglut/src/x11/fg_glutfont_definitions_x11.c
++++ b/thirdparty/freeglut/src/x11/fg_glutfont_definitions_x11.c
+@@ -91,14 +91,25 @@ struct freeglutBitmapFont
+ };
+
+
+-struct freeglutStrokeFont glutStrokeRoman ;
+-struct freeglutStrokeFont glutStrokeMonoRoman ;
++static struct freeglutStrokeFont glutStrokeRoman_ ;
++static struct freeglutStrokeFont glutStrokeMonoRoman_ ;
+
+-struct freeglutBitmapFont glutBitmap9By15 ;
+-struct freeglutBitmapFont glutBitmap8By13 ;
+-struct freeglutBitmapFont glutBitmapTimesRoman10 ;
+-struct freeglutBitmapFont glutBitmapTimesRoman24 ;
+-struct freeglutBitmapFont glutBitmapHelvetica10 ;
+-struct freeglutBitmapFont glutBitmapHelvetica12 ;
+-struct freeglutBitmapFont glutBitmapHelvetica18 ;
++static struct freeglutBitmapFont glutBitmap9By15_ ;
++static struct freeglutBitmapFont glutBitmap8By13_ ;
++static struct freeglutBitmapFont glutBitmapTimesRoman10_ ;
++static struct freeglutBitmapFont glutBitmapTimesRoman24_ ;
++static struct freeglutBitmapFont glutBitmapHelvetica10_ ;
++static struct freeglutBitmapFont glutBitmapHelvetica12_ ;
++static struct freeglutBitmapFont glutBitmapHelvetica18_ ;
+
++
++void *glutStrokeRoman = &glutStrokeRoman_ ;
++void *glutStrokeMonoRoman = &glutStrokeMonoRoman_ ;
++
++void *glutBitmap9By15 = &glutBitmap9By15_ ;
++void *glutBitmap8By13 = &glutBitmap8By13_ ;
++void *glutBitmapTimesRoman10 = &glutBitmapTimesRoman10_ ;
++void *glutBitmapTimesRoman24 = &glutBitmapTimesRoman24_ ;
++void *glutBitmapHelvetica10 = &glutBitmapHelvetica10_ ;
++void *glutBitmapHelvetica12 = &glutBitmapHelvetica12_ ;
++void *glutBitmapHelvetica18 = &glutBitmapHelvetica18_ ;
+--
+2.35.1
+
diff --git a/app-text/mupdf/files/mupdf-1.21.1-no-drm.patch b/app-text/mupdf/files/mupdf-1.21.1-no-drm.patch
new file mode 100644
index 0000000..9f2b9d6
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.21.1-no-drm.patch
@@ -0,0 +1,18 @@
+diff --git a/source/html/epub-doc.c b/source/html/epub-doc.c
+index f764242..83888dc 100644
+--- a/source/html/epub-doc.c
++++ b/source/html/epub-doc.c
+@@ -692,10 +692,12 @@ epub_parse_header(fz_context *ctx, epub_document *doc)
+ epub_chapter **tailp;
+ int i;
+
++ #ifdef GENTOO_MUPDF_DRM
+ if (fz_has_archive_entry(ctx, zip, "META-INF/rights.xml"))
+ fz_throw(ctx, FZ_ERROR_GENERIC, "EPUB is locked by DRM");
+ if (fz_has_archive_entry(ctx, zip, "META-INF/encryption.xml"))
+ fz_throw(ctx, FZ_ERROR_GENERIC, "EPUB is locked by DRM");
++ #endif
+
+ fz_var(buf);
+ fz_var(container_xml);
+
diff --git a/app-text/mupdf/files/mupdf-1.23.3-cross-fixes.patch b/app-text/mupdf/files/mupdf-1.23.3-cross-fixes.patch
new file mode 100644
index 0000000..02fa3bf
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.23.3-cross-fixes.patch
@@ -0,0 +1,120 @@
+Refreshed patches based on:
+https://sources.debian.org/patches/mupdf/1.17.0+ds1-1/0004-MuPDF-crossbuild-use-target-arch-pkg-config.patch/
+https://sources.debian.org/patches/mupdf/1.17.0+ds1-1/0005-MuPDF-crossbuild-use-host-cc-for-utils.patch/
+--- a/Makerules
++++ b/Makerules
+@@ -9,6 +9,9 @@ ifeq ($(OS),)
+ OS := $(OS:Darwin=MACOS)
+ endif
+
++PKG_CONFIG ?= pkg-config
++CC_FOR_BUILD ?= $(CC)
++
+ WARNING_CFLAGS := -Wall -Wsign-compare
+
+ # Feature configuration options
+@@ -190,51 +193,51 @@ else ifeq ($(OS),Linux)
+ LDFLAGS += -sTOTAL_MEMORY=48MB
+ endif
+
+- ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
+- SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
+- SYS_FREETYPE_LIBS := $(shell pkg-config --libs freetype2)
++ ifeq ($(shell $(PKG_CONFIG) --exists freetype2 && echo yes),yes)
++ SYS_FREETYPE_CFLAGS := $(shell $(PKG_CONFIG) --cflags freetype2)
++ SYS_FREETYPE_LIBS := $(shell $(PKG_CONFIG) --libs freetype2)
+ endif
+- ifeq ($(shell pkg-config --exists gumbo && echo yes),yes)
+- SYS_GUMBO_CFLAGS := $(shell pkg-config --cflags gumbo)
+- SYS_GUMBO_LIBS := $(shell pkg-config --libs gumbo)
++ ifeq ($(shell $(PKG_CONFIG) --exists gumbo && echo yes),yes)
++ SYS_GUMBO_CFLAGS := $(shell $(PKG_CONFIG) --cflags gumbo)
++ SYS_GUMBO_LIBS := $(shell $(PKG_CONFIG) --libs gumbo)
+ endif
+- ifeq ($(shell pkg-config --exists harfbuzz && echo yes),yes)
+- SYS_HARFBUZZ_CFLAGS := $(shell pkg-config --cflags harfbuzz)
+- SYS_HARFBUZZ_LIBS := $(shell pkg-config --libs harfbuzz)
++ ifeq ($(shell $(PKG_CONFIG) --exists harfbuzz && echo yes),yes)
++ SYS_HARFBUZZ_CFLAGS := $(shell $(PKG_CONFIG) --cflags harfbuzz)
++ SYS_HARFBUZZ_LIBS := $(shell $(PKG_CONFIG) --libs harfbuzz)
+ endif
+- ifeq ($(shell pkg-config --exists lcms2 && echo yes),yes)
+- SYS_LCMS2_CFLAGS := $(shell pkg-config --cflags lcms2)
+- SYS_LCMS2_LIBS := $(shell pkg-config --libs lcms2)
++ ifeq ($(shell $(PKG_CONFIG) --exists lcms2 && echo yes),yes)
++ SYS_LCMS2_CFLAGS := $(shell $(PKG_CONFIG) --cflags lcms2)
++ SYS_LCMS2_LIBS := $(shell $(PKG_CONFIG) --libs lcms2)
+ endif
+- ifeq ($(shell pkg-config --exists libjpeg && echo yes),yes)
+- SYS_LIBJPEG_CFLAGS := $(shell pkg-config --cflags libjpeg)
+- SYS_LIBJPEG_LIBS := $(shell pkg-config --libs libjpeg)
++ ifeq ($(shell $(PKG_CONFIG) --exists libjpeg && echo yes),yes)
++ SYS_LIBJPEG_CFLAGS := $(shell $(PKG_CONFIG) --cflags libjpeg)
++ SYS_LIBJPEG_LIBS := $(shell $(PKG_CONFIG) --libs libjpeg)
+ endif
+- ifeq ($(shell pkg-config --exists libopenjp2 && echo yes),yes)
+- SYS_OPENJPEG_CFLAGS := $(shell pkg-config --cflags libopenjp2)
+- SYS_OPENJPEG_LIBS := $(shell pkg-config --libs libopenjp2)
++ ifeq ($(shell $(PKG_CONFIG) --exists libopenjp2 && echo yes),yes)
++ SYS_OPENJPEG_CFLAGS := $(shell $(PKG_CONFIG) --cflags libopenjp2)
++ SYS_OPENJPEG_LIBS := $(shell $(PKG_CONFIG) --libs libopenjp2)
+ endif
+- ifeq ($(shell pkg-config --exists zlib && echo yes),yes)
+- SYS_ZLIB_CFLAGS := $(shell pkg-config --cflags zlib)
+- SYS_ZLIB_LIBS := $(shell pkg-config --libs zlib)
++ ifeq ($(shell $(PKG_CONFIG) --exists zlib && echo yes),yes)
++ SYS_ZLIB_CFLAGS := $(shell $(PKG_CONFIG) --cflags zlib)
++ SYS_ZLIB_LIBS := $(shell $(PKG_CONFIG) --libs zlib)
+ endif
+
+- HAVE_SYS_LEPTONICA := $(shell pkg-config --exists 'lept >= 1.7.4' && echo yes)
++ HAVE_SYS_LEPTONICA := $(shell $(PKG_CONFIG) --exists 'lept >= 1.7.4' && echo yes)
+ ifeq ($(HAVE_SYS_LEPTONICA),yes)
+- SYS_LEPTONICA_CFLAGS := $(shell pkg-config --cflags lept)
+- SYS_LEPTONICA_LIBS := $(shell pkg-config --libs lept)
++ SYS_LEPTONICA_CFLAGS := $(shell $(PKG_CONFIG) --cflags lept)
++ SYS_LEPTONICA_LIBS := $(shell $(PKG_CONFIG) --libs lept)
+ endif
+
+- HAVE_SYS_TESSERACT := $(shell pkg-config --exists 'tesseract >= 4.0.0' && echo yes)
++ HAVE_SYS_TESSERACT := $(shell $(PKG_CONFIG) --exists 'tesseract >= 4.0.0' && echo yes)
+ ifeq ($(HAVE_SYS_TESSERACT),yes)
+- SYS_TESSERACT_CFLAGS := $(shell pkg-config --cflags tesseract)
+- SYS_TESSERACT_LIBS := $(shell pkg-config --libs tesseract)
++ SYS_TESSERACT_CFLAGS := $(shell $(PKG_CONFIG) --cflags tesseract)
++ SYS_TESSERACT_LIBS := $(shell $(PKG_CONFIG) --libs tesseract)
+ endif
+
+- HAVE_SYS_CURL := $(shell pkg-config --exists libcurl && echo yes)
++ HAVE_SYS_CURL := $(shell $(PKG_CONFIG) --exists libcurl && echo yes)
+ ifeq ($(HAVE_SYS_CURL),yes)
+- SYS_CURL_CFLAGS := $(shell pkg-config --cflags libcurl)
+- SYS_CURL_LIBS := $(shell pkg-config --libs libcurl)
++ SYS_CURL_CFLAGS := $(shell $(PKG_CONFIG) --cflags libcurl)
++ SYS_CURL_LIBS := $(shell $(PKG_CONFIG) --libs libcurl)
+ endif
+
+ HAVE_GLUT := yes
+@@ -243,18 +246,18 @@ else ifeq ($(OS),Linux)
+ SYS_GLUT_LIBS := -lglut -lGL
+ endif
+
+ HAVE_X11 := not-unless-portage-tells-me
+ ifeq ($(HAVE_X11),yes)
+- X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
+- X11_LIBS := $(shell pkg-config --libs x11 xext)
++ X11_CFLAGS := $(shell $(PKG_CONFIG) --cflags x11 xext)
++ X11_LIBS := $(shell $(PKG_CONFIG) --libs x11 xext)
+ endif
+
+ ifeq ($(HAVE_LIBCRYPTO),)
+ HAVE_LIBCRYPTO := not-unless-portage-tells-me
+ endif
+ ifeq ($(HAVE_LIBCRYPTO),yes)
+- LIBCRYPTO_CFLAGS := $(shell pkg-config --cflags libcrypto) -DHAVE_LIBCRYPTO
+- LIBCRYPTO_LIBS := $(shell pkg-config --libs libcrypto)
++ LIBCRYPTO_CFLAGS := $(shell $(PKG_CONFIG) --cflags libcrypto) -DHAVE_LIBCRYPTO
++ LIBCRYPTO_LIBS := $(shell $(PKG_CONFIG) --libs libcrypto)
+ endif
+
+ HAVE_PTHREAD := yes
diff --git a/app-text/mupdf/files/mupdf-1.23.3-darwin.patch b/app-text/mupdf/files/mupdf-1.23.3-darwin.patch
new file mode 100644
index 0000000..c151d81
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.23.3-darwin.patch
@@ -0,0 +1,45 @@
+--- a/Makerules
++++ b/Makerules
+@@ -161,11 +161,11 @@ ifeq ($(OS),MINGW)
+ else ifeq ($(OS),MACOS)
+ HAVE_GLUT := yes
+ SYS_GLUT_CFLAGS := -Wno-deprecated-declarations
+- SYS_GLUT_LIBS := -framework GLUT -framework OpenGL
+- CC = xcrun cc
+- AR = xcrun ar
+- LD = xcrun ld
+- RANLIB = xcrun ranlib
++ SYS_GLUT_LIBS ?= -framework GLUT -framework OpenGL
++ CC ?= xcrun cc
++ AR ?= xcrun ar
++ LD ?= xcrun ld
++ RANLIB ?= xcrun ranlib
+
+ ifneq ($(ARCHFLAGS),)
+ $(warning "MacOS with ARCHFLAGS set. Assuming we are building for arm64, and setting HAVE_LIBCRYPTO to no.")
+@@ -180,15 +180,7 @@ else ifeq ($(OS),MACOS)
+ endif
+ endif
+
+-else ifeq ($(OS),Linux)
+- ifeq ($(PYODIDE_ROOT),)
+- HAVE_OBJCOPY := yes
+- else
+- # Pyodide's ld does not support -b so we cannot use it to create object
+- # files containing font data, so leave HAVE_OBJCOPY unset. And we need
+- # extra memory when linking.
+- LDFLAGS += -sTOTAL_MEMORY=48MB
+- endif
++endif
+
+ ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
+ SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
+@@ -263,8 +255,6 @@ else ifeq ($(OS),Linux)
+ PTHREAD_LIBS := -lpthread
+ endif
+
+-endif
+-
+ # The following section has various cross compilation configurations.
+ #
+ # Invoke these as:
diff --git a/app-text/mupdf/files/mupdf-1.23.3-openssl-x11.patch b/app-text/mupdf/files/mupdf-1.23.3-openssl-x11.patch
new file mode 100644
index 0000000..b91bd9a
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.23.3-openssl-x11.patch
@@ -0,0 +1,19 @@
+--- a/Makerules
++++ b/Makerules
+@@ -243,14 +243,14 @@ else ifeq ($(OS),Linux)
+ SYS_GLUT_LIBS := -lglut -lGL
+ endif
+
+- HAVE_X11 := $(shell pkg-config --exists x11 xext && echo yes)
++ HAVE_X11 := not-unless-portage-tells-me
+ ifeq ($(HAVE_X11),yes)
+ X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
+ X11_LIBS := $(shell pkg-config --libs x11 xext)
+ endif
+
+ ifeq ($(HAVE_LIBCRYPTO),)
+- HAVE_LIBCRYPTO := $(shell pkg-config --exists 'libcrypto >= 1.1.0' && echo yes)
++ HAVE_LIBCRYPTO := not-unless-portage-tells-me
+ endif
+ ifeq ($(HAVE_LIBCRYPTO),yes)
+ LIBCRYPTO_CFLAGS := $(shell pkg-config --cflags libcrypto) -DHAVE_LIBCRYPTO
diff --git a/app-text/mupdf/files/mupdf-1.23.7-libressl.patch b/app-text/mupdf/files/mupdf-1.23.7-libressl.patch
new file mode 100644
index 0000000..02c91e3
--- /dev/null
+++ b/app-text/mupdf/files/mupdf-1.23.7-libressl.patch
@@ -0,0 +1,15 @@
+EVP_add_digest is no longer needed with LibreSSL >= 3.9.0
+
+--- a/source/helpers/pkcs7/pkcs7-openssl.c
++++ b/source/helpers/pkcs7/pkcs7-openssl.c
+@@ -793,8 +793,10 @@ pdf_pkcs7_signer *pkcs7_openssl_read_pfx(fz_context *ctx, const char *pfile, con
+
+ OpenSSL_add_all_algorithms();
+
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER < 0x3090000fL)
+ EVP_add_digest(EVP_md5());
+ EVP_add_digest(EVP_sha1());
++#endif
+
+ ERR_load_crypto_strings();
+
diff --git a/app-text/mupdf/metadata.xml b/app-text/mupdf/metadata.xml
new file mode 100644
index 0000000..c0d6177
--- /dev/null
+++ b/app-text/mupdf/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>rndxelement@protonmail.com</email>
+ <name>Philipp Rösner</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <use>
+ <flag name="drm">Enable support for Digital rights management (DRM)</flag>
+ </use>
+</pkgmetadata>
diff --git a/app-text/mupdf/mupdf-1.22.0-r1.ebuild b/app-text/mupdf/mupdf-1.22.0-r1.ebuild
new file mode 100644
index 0000000..2d59cac
--- /dev/null
+++ b/app-text/mupdf/mupdf-1.22.0-r1.ebuild
@@ -0,0 +1,165 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Please check upstream git regularly for relevant security-related commits
+# to backport.
+
+inherit desktop flag-o-matic toolchain-funcs xdg
+
+DESCRIPTION="A lightweight PDF viewer and toolkit written in portable C"
+HOMEPAGE="https://mupdf.com/ https://git.ghostscript.com/?p=mupdf.git"
+SRC_URI="https://mupdf.com/downloads/archive/${P}-source.tar.gz"
+S="${WORKDIR}"/${P}-source
+
+LICENSE="AGPL-3"
+SLOT="0/${PV}"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="+drm +javascript opengl ssl X"
+REQUIRED_USE="opengl? ( javascript )"
+
+# Although we use the bundled, patched version of freeglut in mupdf (because of
+# bug #653298), the best way to ensure that its dependencies are present is to
+# install system's freeglut.
+RDEPEND="
+ dev-libs/gumbo:=
+ media-libs/freetype:2
+ media-libs/harfbuzz:=[truetype]
+ media-libs/jbig2dec:=
+ media-libs/libpng:0=
+ >=media-libs/openjpeg-2.1:2=
+ >=media-libs/libjpeg-turbo-1.5.3-r2:0=
+ javascript? ( >=dev-lang/mujs-1.2.0:= )
+ opengl? ( >=media-libs/freeglut-3.0.0 )
+ ssl? ( >=dev-libs/openssl-1.1:0= )
+ sys-libs/zlib
+ X? (
+ x11-libs/libX11
+ x11-libs/libXext
+ )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="X? ( x11-base/xorg-proto )
+ virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.15-CFLAGS.patch
+ "${FILESDIR}"/${PN}-1.19.0-Makefile.patch
+ "${FILESDIR}"/${PN}-1.21.0-add-desktop-pc-files.patch
+ "${FILESDIR}"/${PN}-1.19.0-darwin.patch
+ # See bugs #662352
+ "${FILESDIR}"/${PN}-1.15-openssl-x11.patch
+ # General cross fixes from Debian (refreshed)
+ "${FILESDIR}"/${PN}-1.19.0-cross-fixes.patch
+ "${FILESDIR}"/${PN}-1.21.1-no-drm.patch
+ "${FILESDIR}"/${PN}-1.21.1-fix-aliasing-violation.patch
+ "${FILESDIR}"/${PN}-1.23.7-libressl.patch
+)
+
+src_prepare() {
+ default
+
+ use hppa && append-cflags -ffunction-sections
+
+ use drm && append-cflags -DGENTOO_MUPDF_DRM
+
+ append-cflags "-DFZ_ENABLE_JS=$(usex javascript 1 0)"
+
+ sed -e "1iOS = Linux" \
+ -e "1iCC = $(tc-getCC)" \
+ -e "1iCXX = $(tc-getCXX)" \
+ -e "1iLD = $(tc-getLD)" \
+ -e "1iAR = $(tc-getAR)" \
+ -e "1iverbose = yes" \
+ -e "1ibuild = debug" \
+ -i Makerules || die "Failed adding build variables to Makerules in src_prepare()"
+
+ # Adjust MuPDF version in .pc file created by the
+ # mupdf-1.10a-add-desktop-pc-xpm-files.patch file
+ sed -e "s/Version: \(.*\)/Version: ${PV}/" \
+ -i platform/debian/${PN}.pc || die "Failed substituting version in ${PN}.pc"
+}
+
+_emake() {
+ # When HAVE_OBJCOPY is yes, we end up with a lot of QA warnings.
+ #
+ # Bundled libs
+ # * General
+ # Note that USE_SYSTEM_LIBS=yes is a metaoption which will set to upstream's
+ # recommendations. It does not mean "always use system libs".
+ # See [0] below for what it means in a specific version.
+ #
+ # * freeglut
+ # We don't use system's freeglut because upstream has a special modified
+ # version of it that gives mupdf clipboard support. See bug #653298
+ #
+ # * mujs
+ # As of v1.15.0, mupdf started using symbols in mujs that were not part
+ # of any release. We then went back to using the bundled version of it.
+ # But v1.17.0 looks ok, so we'll go unbundled again. Be aware of this risk
+ # when bumping and check!
+ # See bug #685244
+ #
+ # * lmms2
+ # mupdf uses a bundled version of lcms2 [0] because Artifex have forked it [1].
+ # It is therefore not appropriate for us to unbundle it at this time.
+ #
+ # [0] https://git.ghostscript.com/?p=mupdf.git;a=blob;f=Makethird;h=c4c540fa4a075df0db85e6fdaab809099881f35a;hb=HEAD#l9
+ # [1] https://www.ghostscript.com/doc/lcms2mt/doc/WhyThisFork.txt
+ local myemakeargs=(
+ GENTOO_PV=${PV}
+ HAVE_GLUT=$(usex opengl)
+ HAVE_LIBCRYPTO=$(usex ssl)
+ HAVE_X11=$(usex X)
+ USE_SYSTEM_LIBS=yes
+ USE_SYSTEM_MUJS=$(usex javascript)
+ USE_SYSTEM_GLUT=no
+ HAVE_OBJCOPY=no
+ "$@"
+ )
+
+ emake "${myemakeargs[@]}"
+}
+
+src_compile() {
+ tc-export PKG_CONFIG
+
+ _emake XCFLAGS="-fPIC"
+}
+
+src_install() {
+ if use opengl || use X ; then
+ domenu platform/debian/${PN}.desktop
+ doicon -s scalable docs/logo/new-${PN}-icon.svg
+ else
+ rm docs/man/${PN}.1 || die "Failed to remove man page in src_install()"
+ fi
+
+ sed -i \
+ -e "1iprefix = ${ED}/usr" \
+ -e "1ilibdir = ${ED}/usr/$(get_libdir)" \
+ -e "1idocdir = ${ED}/usr/share/doc/${PF}" \
+ -i Makerules || die "Failed adding liprefix, lilibdir and lidocdir to Makerules in src_install()"
+
+ _emake install
+
+ dosym libmupdf.so.${PV} /usr/$(get_libdir)/lib${PN}.so
+
+ if use opengl ; then
+ einfo "mupdf symlink points to mupdf-gl (bug 616654)"
+ dosym ${PN}-gl /usr/bin/${PN}
+ elif use X ; then
+ einfo "mupdf symlink points to mupdf-x11 (bug 616654)"
+ dosym ${PN}-x11 /usr/bin/${PN}
+ fi
+
+ # Respect libdir (bug #734898)
+ sed -i -e "s:/lib:/$(get_libdir):" platform/debian/${PN}.pc \
+ || die "Failed to sed pkgconfig file to respect libdir in src_install()"
+
+ insinto /usr/$(get_libdir)/pkgconfig
+ doins platform/debian/${PN}.pc
+
+ dodoc README CHANGES CONTRIBUTORS
+}
diff --git a/app-text/mupdf/mupdf-1.23.3-r1.ebuild b/app-text/mupdf/mupdf-1.23.3-r1.ebuild
new file mode 100644
index 0000000..ff5f1e0
--- /dev/null
+++ b/app-text/mupdf/mupdf-1.23.3-r1.ebuild
@@ -0,0 +1,165 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Please check upstream git regularly for relevant security-related commits
+# to backport.
+
+inherit desktop flag-o-matic toolchain-funcs xdg
+
+DESCRIPTION="A lightweight PDF viewer and toolkit written in portable C"
+HOMEPAGE="https://mupdf.com/ https://git.ghostscript.com/?p=mupdf.git"
+SRC_URI="https://mupdf.com/downloads/archive/${P}-source.tar.gz"
+S="${WORKDIR}"/${P}-source
+
+LICENSE="AGPL-3"
+SLOT="0/${PV}"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="+javascript opengl ssl X"
+REQUIRED_USE="opengl? ( javascript )"
+
+# Although we use the bundled, patched version of freeglut in mupdf (because of
+# bug #653298), the best way to ensure that its dependencies are present is to
+# install system's freeglut.
+RDEPEND="
+ dev-libs/gumbo:=
+ media-libs/freetype:2
+ media-libs/harfbuzz:=[truetype]
+ media-libs/jbig2dec:=
+ media-libs/libpng:0=
+ >=media-libs/openjpeg-2.1:2=
+ >=media-libs/libjpeg-turbo-1.5.3-r2:0=
+ net-misc/curl
+ javascript? ( >=dev-lang/mujs-1.2.0:= )
+ opengl? ( >=media-libs/freeglut-3.0.0 )
+ ssl? ( >=dev-libs/openssl-1.1:0= )
+ sys-libs/zlib
+ X? (
+ media-libs/libglvnd[X]
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXrandr
+ )
+"
+DEPEND="${RDEPEND}
+ X? ( x11-base/xorg-proto )"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.15-CFLAGS.patch
+ "${FILESDIR}"/${PN}-1.19.0-Makefile.patch
+ "${FILESDIR}"/${PN}-1.21.0-add-desktop-pc-files.patch
+ "${FILESDIR}"/${P}-darwin.patch
+ # See bugs #662352
+ "${FILESDIR}"/${P}-openssl-x11.patch
+ # General cross fixes from Debian (refreshed)
+ "${FILESDIR}"/${P}-cross-fixes.patch
+ "${FILESDIR}"/${PN}-1.21.1-fix-aliasing-violation.patch
+ "${FILESDIR}"/${PN}-1.23.7-libressl.patch
+)
+
+src_prepare() {
+ default
+
+ use hppa && append-cflags -ffunction-sections
+
+ append-cflags "-DFZ_ENABLE_JS=$(usex javascript 1 0)"
+
+ sed -e "1iOS = Linux" \
+ -e "1iCC = $(tc-getCC)" \
+ -e "1iCXX = $(tc-getCXX)" \
+ -e "1iLD = $(tc-getLD)" \
+ -e "1iAR = $(tc-getAR)" \
+ -e "1iverbose = yes" \
+ -e "1ibuild = debug" \
+ -i Makerules || die "Failed adding build variables to Makerules in src_prepare()"
+
+ # Adjust MuPDF version in .pc file created by the
+ # mupdf-1.10a-add-desktop-pc-xpm-files.patch file
+ sed -e "s/Version: \(.*\)/Version: ${PV}/" \
+ -i platform/debian/${PN}.pc || die "Failed substituting version in ${PN}.pc"
+}
+
+_emake() {
+ # When HAVE_OBJCOPY is yes, we end up with a lot of QA warnings.
+ #
+ # Bundled libs
+ # * General
+ # Note that USE_SYSTEM_LIBS=yes is a metaoption which will set to upstream's
+ # recommendations. It does not mean "always use system libs".
+ # See [0] below for what it means in a specific version.
+ #
+ # * freeglut
+ # We don't use system's freeglut because upstream has a special modified
+ # version of it that gives mupdf clipboard support. See bug #653298
+ #
+ # * mujs
+ # As of v1.15.0, mupdf started using symbols in mujs that were not part
+ # of any release. We then went back to using the bundled version of it.
+ # But v1.17.0 looks ok, so we'll go unbundled again. Be aware of this risk
+ # when bumping and check!
+ # See bug #685244
+ #
+ # * lmms2
+ # mupdf uses a bundled version of lcms2 [0] because Artifex have forked it [1].
+ # It is therefore not appropriate for us to unbundle it at this time.
+ #
+ # [0] https://git.ghostscript.com/?p=mupdf.git;a=blob;f=Makethird;h=c4c540fa4a075df0db85e6fdaab809099881f35a;hb=HEAD#l9
+ # [1] https://www.ghostscript.com/doc/lcms2mt/doc/WhyThisFork.txt
+ local myemakeargs=(
+ GENTOO_PV=${PV}
+ HAVE_GLUT=$(usex opengl)
+ HAVE_LIBCRYPTO=$(usex ssl)
+ HAVE_X11=$(usex X)
+ USE_SYSTEM_LIBS=yes
+ USE_SYSTEM_MUJS=$(usex javascript)
+ USE_SYSTEM_GLUT=no
+ HAVE_OBJCOPY=no
+ "$@"
+ )
+
+ emake "${myemakeargs[@]}"
+}
+
+src_compile() {
+ tc-export PKG_CONFIG
+
+ _emake XCFLAGS="-fPIC"
+}
+
+src_install() {
+ if use opengl || use X ; then
+ domenu platform/debian/${PN}.desktop
+ doicon -s scalable docs/logo/new-${PN}-icon.svg
+ else
+ rm docs/man/${PN}.1 || die "Failed to remove man page in src_install()"
+ fi
+
+ sed -i \
+ -e "1iprefix = ${ED}/usr" \
+ -e "1ilibdir = ${ED}/usr/$(get_libdir)" \
+ -e "1idocdir = ${ED}/usr/share/doc/${PF}" \
+ -i Makerules || die "Failed adding liprefix, lilibdir and lidocdir to Makerules in src_install()"
+
+ _emake install
+
+ dosym libmupdf.so.${PV} /usr/$(get_libdir)/lib${PN}.so
+
+ if use opengl ; then
+ einfo "mupdf symlink points to mupdf-gl (bug 616654)"
+ dosym ${PN}-gl /usr/bin/${PN}
+ elif use X ; then
+ einfo "mupdf symlink points to mupdf-x11 (bug 616654)"
+ dosym ${PN}-x11 /usr/bin/${PN}
+ fi
+
+ # Respect libdir (bug #734898)
+ sed -i -e "s:/lib:/$(get_libdir):" platform/debian/${PN}.pc \
+ || die "Failed to sed pkgconfig file to respect libdir in src_install()"
+
+ insinto /usr/$(get_libdir)/pkgconfig
+ doins platform/debian/${PN}.pc
+
+ dodoc README CHANGES CONTRIBUTORS
+}
diff --git a/app-text/mupdf/mupdf-1.23.7-r1.ebuild b/app-text/mupdf/mupdf-1.23.7-r1.ebuild
new file mode 100644
index 0000000..931128e
--- /dev/null
+++ b/app-text/mupdf/mupdf-1.23.7-r1.ebuild
@@ -0,0 +1,166 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Please check upstream git regularly for relevant security-related commits
+# to backport.
+
+inherit desktop flag-o-matic toolchain-funcs xdg
+
+DESCRIPTION="A lightweight PDF viewer and toolkit written in portable C"
+HOMEPAGE="https://mupdf.com/ https://git.ghostscript.com/?p=mupdf.git"
+SRC_URI="https://mupdf.com/downloads/archive/${P}-source.tar.gz"
+S="${WORKDIR}"/${P}-source
+
+LICENSE="AGPL-3"
+SLOT="0/${PV}"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="+javascript opengl ssl X"
+REQUIRED_USE="opengl? ( javascript )"
+
+# Although we use the bundled, patched version of freeglut in mupdf (because of
+# bug #653298), the best way to ensure that its dependencies are present is to
+# install system's freeglut.
+RDEPEND="
+ dev-libs/gumbo:=
+ media-libs/freetype:2
+ media-libs/harfbuzz:=[truetype]
+ media-libs/jbig2dec:=
+ media-libs/libpng:0=
+ >=media-libs/openjpeg-2.1:2=
+ >=media-libs/libjpeg-turbo-1.5.3-r2:0=
+ net-misc/curl
+ javascript? ( >=dev-lang/mujs-1.2.0:= )
+ opengl? ( >=media-libs/freeglut-3.0.0 )
+ ssl? ( >=dev-libs/openssl-1.1:0= )
+ sys-libs/zlib
+ X? (
+ media-libs/libglvnd[X]
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXrandr
+ )
+"
+DEPEND="${RDEPEND}
+ X? ( x11-base/xorg-proto )"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.15-CFLAGS.patch
+ "${FILESDIR}"/${PN}-1.19.0-Makefile.patch
+ "${FILESDIR}"/${PN}-1.21.0-add-desktop-pc-files.patch
+ "${FILESDIR}"/${PN}-1.23.3-darwin.patch
+ # See bugs #662352
+ "${FILESDIR}"/${PN}-1.23.3-openssl-x11.patch
+ # General cross fixes from Debian (refreshed)
+ "${FILESDIR}"/${PN}-1.23.3-cross-fixes.patch
+ "${FILESDIR}"/${PN}-1.21.1-fix-aliasing-violation.patch
+ "${FILESDIR}"/${PN}-1.23.7-libressl.patch
+)
+
+src_prepare() {
+ default
+
+ use hppa && append-cflags -ffunction-sections
+
+ append-cflags "-DFZ_ENABLE_JS=$(usex javascript 1 0)"
+
+ sed -e "1iOS = Linux" \
+ -e "1iCC = $(tc-getCC)" \
+ -e "1iCXX = $(tc-getCXX)" \
+ -e "1iLD = $(tc-getLD)" \
+ -e "1iAR = $(tc-getAR)" \
+ -e "1iverbose = yes" \
+ -e "1ibuild = debug" \
+ -i Makerules || die "Failed adding build variables to Makerules in src_prepare()"
+
+ # Adjust MuPDF version in .pc file created by the
+ # mupdf-1.21.0-add-desktop-pc-files.patch file
+ sed -e "s/Version: \(.*\)/Version: ${PV}/" \
+ -i platform/debian/${PN}.pc || die "Failed substituting version in ${PN}.pc"
+}
+
+_emake() {
+ # When HAVE_OBJCOPY is yes, we end up with a lot of QA warnings.
+ #
+ # Bundled libs
+ # * General
+ # Note that USE_SYSTEM_LIBS=yes is a metaoption which will set to upstream's
+ # recommendations. It does not mean "always use system libs".
+ # See [0] below for what it means in a specific version.
+ #
+ # * freeglut
+ # We don't use system's freeglut because upstream has a special modified
+ # version of it that gives mupdf clipboard support. See bug #653298
+ #
+ # * mujs
+ # As of v1.15.0, mupdf started using symbols in mujs that were not part
+ # of any release. We then went back to using the bundled version of it.
+ # But v1.17.0 looks ok, so we'll go unbundled again. Be aware of this risk
+ # when bumping and check!
+ # See bug #685244
+ #
+ # * lmms2
+ # mupdf uses a bundled version of lcms2 [0] because Artifex have forked it [1].
+ # It is therefore not appropriate for us to unbundle it at this time.
+ #
+ # [0] https://git.ghostscript.com/?p=mupdf.git;a=blob;f=Makethird;h=c4c540fa4a075df0db85e6fdaab809099881f35a;hb=HEAD#l9
+ # [1] https://www.ghostscript.com/doc/lcms2mt/doc/WhyThisFork.txt
+ local myemakeargs=(
+ GENTOO_PV=${PV}
+ HAVE_GLUT=$(usex opengl)
+ HAVE_LIBCRYPTO=$(usex ssl)
+ HAVE_X11=$(usex X)
+ USE_SYSTEM_LIBS=yes
+ USE_SYSTEM_MUJS=$(usex javascript)
+ USE_SYSTEM_GLUT=no
+ HAVE_OBJCOPY=no
+ "$@"
+ )
+
+ emake "${myemakeargs[@]}"
+}
+
+src_compile() {
+ tc-export PKG_CONFIG
+
+ _emake XCFLAGS="-fPIC"
+}
+
+src_install() {
+ if use opengl || use X ; then
+ domenu platform/debian/${PN}.desktop
+ doicon -s scalable docs/logo/new-${PN}-icon.svg
+ else
+ rm docs/man/${PN}.1 || die "Failed to remove man page in src_install()"
+ fi
+
+ sed -i \
+ -e "1iprefix = ${ED}/usr" \
+ -e "1ilibdir = ${ED}/usr/$(get_libdir)" \
+ -e "1idocdir = ${ED}/usr/share/doc/${PF}" \
+ -i Makerules || die "Failed adding liprefix, lilibdir and lidocdir to Makerules in src_install()"
+
+ _emake install
+
+ dosym libmupdf.so.${PV} /usr/$(get_libdir)/lib${PN}.so
+
+ if use opengl ; then
+ einfo "mupdf symlink points to mupdf-gl (bug 616654)"
+ dosym ${PN}-gl /usr/bin/${PN}
+ elif use X ; then
+ einfo "mupdf symlink points to mupdf-x11 (bug 616654)"
+ dosym ${PN}-x11 /usr/bin/${PN}
+ fi
+
+ # Respect libdir and EPREFIX (bugs #734898, #911965)
+ sed -i -e "s:/lib:/$(get_libdir):" \
+ -e "s:/usr:${EPREFIX}/usr:" platform/debian/${PN}.pc \
+ || die "Failed to sed pkgconfig file to respect libdir and EPREFIX in src_install()"
+
+ insinto /usr/$(get_libdir)/pkgconfig
+ doins platform/debian/${PN}.pc
+
+ dodoc README CHANGES CONTRIBUTORS
+}
diff --git a/dev-db/mysql-connector-c++/Manifest b/dev-db/mysql-connector-c++/Manifest
new file mode 100644
index 0000000..bf88587
--- /dev/null
+++ b/dev-db/mysql-connector-c++/Manifest
@@ -0,0 +1,3 @@
+DIST mysql-connector-c++-8.0.31-src.tar.gz 4201904 BLAKE2B 48385db732572ccf2ba91edca0fbdecf94b3ac5ca6c095e1e2e525e5f9b17749b9cb1ed9732253f9239296d364a69a91d56f60958eb4cf399f16db38f6bd76a8 SHA512 a088936e207926031b6bafe45925bf0c9d2acede9477b605adb09dc875c87965e58e3ecd0332168021122c9def831f0dfdb837ad2c4ea2f140b07b43c9f8bb3c
+DIST mysql-connector-c++-8.0.32-src.tar.gz 4202413 BLAKE2B fe15be7b6ec0c4699ded6e392f3f2e1c12fa9fe033172f6219916fb6ce4ae78d3e8cc882eaf66da606dc1445a59a5cf573f92ee6f1d18178d6c11762dcffb0c0 SHA512 cdfddaf84efe0d49d07c5ef07b5c50bde2f64cbf58d48016573a20ca372b0ba5dab640305d16d8b34032a63f2ceb2954eac108f838fb2f3849a7f3838329df48
+DIST mysql-connector-c++-8.0.33-src.tar.gz 4531693 BLAKE2B b8f426742fa343ebc1f1da5ba1fbf7dfc0db39493bafd0f5d16e355d43277d78ff27b183edad31792a7591ac59bbfb4033f3498dc646883988cba189535a8ddf SHA512 a625a28f63161c97d727d90e7b1211273fe931ae1325c2fbeca16e770761e3159abdcaba1fb6eb1a557674fd817bf266875a089c8c2ea4d2dd1553e6fa887ef1
diff --git a/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.27-mysqlclient_r.patch b/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.27-mysqlclient_r.patch
new file mode 100644
index 0000000..d929601
--- /dev/null
+++ b/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.27-mysqlclient_r.patch
@@ -0,0 +1,24 @@
+--- a/jdbc/FindMySQL.cmake 2021-09-10 18:31:29.000000000 +0200
++++ b/jdbc/FindMySQL.cmake 2022-01-21 07:40:03.224705056 +0100
+@@ -282,8 +282,8 @@
+ # there, pick "libmysqlclient" that in 5.5 and up is multithreaded
+ # anyway (soft link "libmysqlclient_r" is not installed MySQL Server
+ # 5.6 and Debian/Ubuntu and might go in 5.7 for all installs)
+- set(_dynamic_libs "mysqlclient_r" "mysqlclient")
+- set(_static_libs "libmysqlclient_r.a" "libmysqlclient.a")
++ set(_dynamic_libs "mysqlclient")
++ set(_static_libs "libmysqlclient.a")
+ set(_static_lib_ext ".a")
+ endif()
+
+--- a/jdbc/driver/nativeapi/libmysql_dynamic_proxy.cpp 2022-01-21 07:52:41.224586087 +0100
++++ b/jdbc/driver/nativeapi/libmysql_dynamic_proxy.cpp 2022-01-21 07:52:50.168631719 +0100
+@@ -49,7 +49,7 @@
+ #elif defined(__hpux) && defined(__hppa)
+ static const char * const baseName = "libmysqlclient_r.sl";
+ #else
+-static const char * const baseName = "libmysqlclient_r.so";
++static const char * const baseName = "libmysqlclient.so";
+ #endif
+
+ template<typename FunctionType>
diff --git a/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.32-libressl.patch b/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.32-libressl.patch
new file mode 100644
index 0000000..525fa3a
--- /dev/null
+++ b/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.32-libressl.patch
@@ -0,0 +1,49 @@
+https://github.com/mysql/mysql-connector-cpp/pull/33
+
+From d4db68edf0c475d26758a2eaf68b1858444c8e2d Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Sun, 9 Apr 2023 04:07:59 +0100
+Subject: [PATCH] cdk: Use cmake's FindOpenSSL, not custom FindSSL module
+
+This avoids issues with detecting the version number with LibreSSL and also
+futureproofs mysql for future versions of OpenSSL.
+
+diff --git a/cdk/CMakeLists.txt b/cdk/CMakeLists.txt
+index 4fa43201d..59c96a3cd 100644
+--- a/cdk/CMakeLists.txt
++++ b/cdk/CMakeLists.txt
+@@ -93,7 +93,7 @@ add_config(CDK_BIG_ENDIAN ${BIG_ENDIAN})
+ # Dependencies
+ #
+
+-find_dependency(SSL)
++find_package(OpenSSL)
+ #find_dependency(Protobuf)
+ find_dependency(RapidJSON)
+ find_dependency(Coverage)
+diff --git a/cdk/foundation/CMakeLists.txt b/cdk/foundation/CMakeLists.txt
+index 0982d1c82..e0e3ed5f2 100644
+--- a/cdk/foundation/CMakeLists.txt
++++ b/cdk/foundation/CMakeLists.txt
+@@ -90,7 +90,7 @@ target_include_directories(cdk_foundation PUBLIC
+
+ target_link_libraries(cdk_foundation
+ PUBLIC RapidJSON::rapidjson
+- PRIVATE SSL::ssl
++ PRIVATE OpenSSL::SSL
+ )
+
+ IF(WIN32)
+diff --git a/cdk/mysqlx/CMakeLists.txt b/cdk/mysqlx/CMakeLists.txt
+index 246874ffb..89fb26844 100644
+--- a/cdk/mysqlx/CMakeLists.txt
++++ b/cdk/mysqlx/CMakeLists.txt
+@@ -51,7 +51,7 @@ ADD_LIBRARY(cdk_mysqlx STATIC
+ target_link_libraries(cdk_mysqlx PUBLIC cdk_proto_mysqlx cdk_foundation)
+
+ # this is used by auth_hash.cc
+-target_link_libraries(cdk_mysqlx PRIVATE SSL::ssl)
++target_link_libraries(cdk_mysqlx PRIVATE OpenSSL::SSL)
+
+ ADD_COVERAGE(cdk_mysqlx)
+
diff --git a/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.33-jdbc.patch b/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.33-jdbc.patch
new file mode 100644
index 0000000..9fe986b
--- /dev/null
+++ b/dev-db/mysql-connector-c++/files/mysql-connector-c++-8.0.33-jdbc.patch
@@ -0,0 +1,11 @@
+--- a/jdbc/driver/nativeapi/library_loader.h 2023-03-23 17:32:48.000000000 +0100
++++ b/jdbc/driver/nativeapi/library_loader.h 2023-10-17 16:54:37.270710451 +0200
+@@ -45,6 +45,8 @@
+
+ #include <map>
+
++#include "../mysql_util.h"
++
+ namespace sql
+ {
+ namespace mysql
diff --git a/dev-db/mysql-connector-c++/metadata.xml b/dev-db/mysql-connector-c++/metadata.xml
new file mode 100644
index 0000000..bf1ec7c
--- /dev/null
+++ b/dev-db/mysql-connector-c++/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>mysql-bugs@gentoo.org</email>
+ <name>MySQL</name>
+ </maintainer>
+ <use>
+ <flag name="legacy">Build the legacy 1.x API as well as the DevX API</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">mysql/mysql-connector-cpp</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.31.ebuild b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.31.ebuild
new file mode 100644
index 0000000..79a9a10
--- /dev/null
+++ b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.31.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CMAKE_MAKEFILE_GENERATOR=emake
+inherit cmake
+
+URI_DIR="Connector-C++"
+DESCRIPTION="MySQL database connector for C++ (mimics JDBC 4.0 API)"
+HOMEPAGE="https://dev.mysql.com/downloads/connector/cpp/"
+SRC_URI="https://dev.mysql.com/get/Downloads/${URI_DIR}/${P}-src.tar.gz"
+S="${WORKDIR}/${P}-src"
+
+LICENSE="Artistic GPL-2"
+SLOT="0"
+# -ppc, -sparc for bug #711940
+KEYWORDS="amd64 arm ~arm64 -ppc ppc64 -sparc x86"
+IUSE="+legacy"
+
+RDEPEND="
+ app-arch/lz4:=
+ app-arch/zstd:=
+ dev-libs/openssl:=
+ dev-libs/protobuf:=
+ sys-libs/zlib
+ legacy? (
+ dev-libs/boost:=
+ >=dev-db/mysql-connector-c-8.0.27:=
+ )
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-8.0.27-mysqlclient_r.patch
+ "${FILESDIR}"/${PN}-8.0.32-libressl.patch
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUNDLE_DEPENDENCIES=OFF
+ -DWITH_PROTOBUF=system
+ -DWITH_LZ4=system
+ -DWITH_SSL=system
+ -DWITH_ZLIB=system
+ -DWITH_ZSTD=system
+ -DWITH_JDBC=$(usex legacy)
+ )
+
+ if use legacy ; then
+ mycmakeargs+=(
+ -DWITH_BOOST="${ESYSROOT}"/usr
+ -DMYSQLCLIENT_STATIC_BINDING=0
+ -DMYSQLCLIENT_STATIC_LINKING=0
+ )
+ fi
+
+ cmake_src_configure
+}
diff --git a/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.32.ebuild b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.32.ebuild
new file mode 100644
index 0000000..a7c9a39
--- /dev/null
+++ b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.32.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CMAKE_MAKEFILE_GENERATOR=emake
+inherit cmake
+
+URI_DIR="Connector-C++"
+DESCRIPTION="MySQL database connector for C++ (mimics JDBC 4.0 API)"
+HOMEPAGE="https://dev.mysql.com/downloads/connector/cpp/"
+SRC_URI="https://dev.mysql.com/get/Downloads/${URI_DIR}/${P}-src.tar.gz"
+S="${WORKDIR}/${P}-src"
+
+LICENSE="Artistic GPL-2"
+SLOT="0"
+# -ppc, -sparc for bug #711940
+KEYWORDS="amd64 arm ~arm64 -ppc ppc64 -sparc x86"
+IUSE="+legacy"
+
+RDEPEND="
+ app-arch/lz4:=
+ app-arch/zstd:=
+ dev-libs/openssl:=
+ >=dev-libs/protobuf-3.19.6:=
+ sys-libs/zlib
+ legacy? (
+ dev-libs/boost:=
+ >=dev-db/mysql-connector-c-8.0.27:=
+ )
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-8.0.27-mysqlclient_r.patch
+ "${FILESDIR}"/${PN}-8.0.32-libressl.patch
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUNDLE_DEPENDENCIES=OFF
+ -DWITH_PROTOBUF=system
+ -DWITH_LZ4=system
+ -DWITH_SSL=system
+ -DWITH_ZLIB=system
+ -DWITH_ZSTD=system
+ -DWITH_JDBC=$(usex legacy)
+ )
+
+ if use legacy ; then
+ mycmakeargs+=(
+ -DWITH_BOOST="${ESYSROOT}"/usr
+ -DMYSQLCLIENT_STATIC_BINDING=0
+ -DMYSQLCLIENT_STATIC_LINKING=0
+ )
+ fi
+
+ cmake_src_configure
+}
diff --git a/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33-r1.ebuild b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33-r1.ebuild
new file mode 100644
index 0000000..952fee8
--- /dev/null
+++ b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33-r1.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CMAKE_MAKEFILE_GENERATOR=emake
+inherit cmake
+
+URI_DIR="Connector-C++"
+DESCRIPTION="MySQL database connector for C++ (mimics JDBC 4.0 API)"
+HOMEPAGE="https://dev.mysql.com/downloads/connector/cpp/"
+SRC_URI="https://dev.mysql.com/get/Downloads/${URI_DIR}/${P}-src.tar.gz"
+S="${WORKDIR}/${P}-src"
+
+LICENSE="Artistic GPL-2"
+SLOT="0"
+# -ppc, -sparc for bug #711940
+KEYWORDS="amd64 arm ~arm64 -ppc ppc64 -sparc x86"
+IUSE="+legacy"
+
+RDEPEND="
+ app-arch/lz4:=
+ app-arch/zstd:=
+ dev-libs/openssl:=
+ sys-libs/zlib
+ legacy? (
+ >=dev-db/mysql-connector-c-8.0.27:=
+ )
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-8.0.27-mysqlclient_r.patch
+ "${FILESDIR}"/${PN}-8.0.32-libressl.patch
+ "${FILESDIR}"/${P}-jdbc.patch
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUNDLE_DEPENDENCIES=OFF
+ # Cannot handle protobuf >23, bug #912797
+ #-DWITH_PROTOBUF=system
+ -DWITH_LZ4=system
+ -DWITH_SSL=system
+ -DWITH_ZLIB=system
+ -DWITH_ZSTD=system
+ -DWITH_JDBC=$(usex legacy)
+ )
+
+ if use legacy ; then
+ mycmakeargs+=(
+ -DMYSQLCLIENT_STATIC_BINDING=0
+ -DMYSQLCLIENT_STATIC_LINKING=0
+ )
+ fi
+
+ cmake_src_configure
+}
diff --git a/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33.ebuild b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33.ebuild
new file mode 100644
index 0000000..386efc7
--- /dev/null
+++ b/dev-db/mysql-connector-c++/mysql-connector-c++-8.0.33.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CMAKE_MAKEFILE_GENERATOR=emake
+inherit cmake
+
+URI_DIR="Connector-C++"
+DESCRIPTION="MySQL database connector for C++ (mimics JDBC 4.0 API)"
+HOMEPAGE="https://dev.mysql.com/downloads/connector/cpp/"
+SRC_URI="https://dev.mysql.com/get/Downloads/${URI_DIR}/${P}-src.tar.gz"
+S="${WORKDIR}/${P}-src"
+
+LICENSE="Artistic GPL-2"
+SLOT="0"
+# -ppc, -sparc for bug #711940
+KEYWORDS="~amd64 ~arm ~arm64 -ppc ~ppc64 -sparc ~x86"
+
+RDEPEND="
+ app-arch/lz4:=
+ app-arch/zstd:=
+ dev-libs/openssl:=
+ sys-libs/zlib
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-8.0.27-mysqlclient_r.patch
+ "${FILESDIR}"/${PN}-8.0.32-libressl.patch
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUNDLE_DEPENDENCIES=OFF
+ # Cannot handle protobuf >23, bug #912797
+ #-DWITH_PROTOBUF=system
+ -DWITH_LZ4=system
+ -DWITH_SSL=system
+ -DWITH_ZLIB=system
+ -DWITH_ZSTD=system
+ -DWITH_JDBC=OFF
+ )
+
+ cmake_src_configure
+}
diff --git a/dev-lang/python/Manifest b/dev-lang/python/Manifest
new file mode 100644
index 0000000..e761edd
--- /dev/null
+++ b/dev-lang/python/Manifest
@@ -0,0 +1,29 @@
+DIST Python-2.7.18.tar.xz 12854736 BLAKE2B 060a621c91dd8e3d321aec99d44c17aa67381998256a1a002d316b38288349884d5960de35c49352d03129ed0bae599e641ec2225898158ebce50a7a2fd74d2c SHA512 a7bb62b51f48ff0b6df0b18f5b0312a523e3110f49c3237936bfe56ed0e26838c0274ff5401bda6fc21bf24337477ccac49e8026c5d651e4b4cafb5eb5086f6c
+DIST Python-2.7.18.tar.xz.asc 833 BLAKE2B 1d98770e46171971fb99994508d238c01d2755281d2f94353314014d9e83e0ec5f0b3e3950ea1fdf5fce9ba6b8f55312355845c2a3fc4291c27ee56fe6215448 SHA512 c2a5f5a52f47dec52460ad3275758d4e5de6e7075c3def4353c988d74d563a39b42cae2d5eb24e2a23a6247cef69100f91620b11a49c2359fbf99b203c9cbda8
+DIST Python-3.10.13.tar.xz 19663088 BLAKE2B d9a8edf89d0ccd665fd5ed444a144af240e078fcab1876fea8b44586c23651a08cf5833fc54c39e8471fd9e66ea0ded11fcaa5d215bc025acaf4504a15c5846d SHA512 7579772e501486b2b07f78142082dee1e99c7643640098860ac0cf2ca87daf7588b0c00b1db1960146b37f56a6ed98fd08297c25c9a19b612cf6e6a258984da8
+DIST Python-3.10.13.tar.xz.asc 833 BLAKE2B b00222b30a6701e77c11c6019e2240be7cf42f2b4e558c03f7a058664d242a00665fbc52fdf03106e84c75f49b51b705d8acd1f381d1f41ada67c4647652ef4c SHA512 3083e66f8d26128302dc77a0c6ba3bfefc4229928a1bbd06460f2fec2421188bd30d493e3bce138cde1fed1df206e1dda04912b9f43a0b81229f1e69135e3a7f
+DIST Python-3.10.14.tar.xz 19600188 BLAKE2B a9e65fff590d56848f55f2d93d8a1c631bb8135617112997fbaea9fc45db1d5e2ce39f00cb29c9428542e523fdf48064bdb9aea144acb7aa7cfe71990b8e949e SHA512 adee638aeca898743da4b8245c0fa1e9b94b516f22e716e60c99038f0bb3dcbf726317aa86656404be1719b5a7c58eb09533720ebc0badbb04bd9a534dd48fef
+DIST Python-3.10.14.tar.xz.asc 833 BLAKE2B 945ada655532d578beba9fdd882cc9cc247e24f7efd68ce172766a8adcb3c8d76bc1f229402405e607004ae0f9bb8e55e4b01867ca712700106d8ec42212cb2c SHA512 450f910a91dd0fb66f99245828983a9234c4a67ea7e653404efa06ce5da1c6667a46329a2d1e276c5a956d2c32d8ae6d8c497a1892102f4a360dae33b135c372
+DIST Python-3.11.8.tar.xz 20041256 BLAKE2B 361253743c58facd01063922523c39fafe647a4204e04db79f36f0c3c180c2f1e95e8ea6662e85a8da06bdbd84d32bb7df9ac0febf361122df5b207ade562740 SHA512 434e727fa370def348838fd84acb69b4d309cfb03f61bf5069150164e9ca005637ac01dfbf997f445607d4e28d02c8bed0858b36589240ccadaa4c14c19f2320
+DIST Python-3.11.8.tar.xz.asc 833 BLAKE2B c82907808de345b263cd1869589004a29e94f225c338a6da3035130728bda137727898743f30d64cc4b819a28cd035fa70123cc45cbf8719b66f9d3ef14452e2 SHA512 aebec01f84e96a76f6c5949004df2bb51c817bac3fc8d925ee26ded1ff2d80bec1b579dd0fc129004bc9cd81cbdcdcdf7c1f0471c3d26b70bd6dac11b97187e0
+DIST Python-3.11.9.tar.xz 20175816 BLAKE2B 4e7cd2c42ee39b5ef9624ebd1798320957e948cb4f23f17fd1530814c60126dbf988846928d4d7d4b9d2174029ab8d4dbaf19e6203da237da4c3212ddebd5803 SHA512 2b0a1d936b4ef8376f9655797aece8ffdff75031ad7bfa840f330cac2aed189aecc80c163edc12ea772851d7a011f3fc1960470a73d9d4290cf3ab8ad6ed7e6a
+DIST Python-3.11.9.tar.xz.asc 833 BLAKE2B fa29f632bae0bee7db946038ee3529bc3bfbe1b2e755b21394f67a3c80911ce8079aaab43a16d88e614a8bfc01fb5105ce3f61c59a5ca44470b0f59787c707b3 SHA512 b18b50e7168b2ca5376a1fa75e50e8baae2026d4f11d4cf613d758f3f17df4610fe4653fb2ac0c5c4ec0f6e630dc6490ad1ff32a2fd0ebd60f9f3bd136207ffc
+DIST Python-3.12.2.tar.xz 20591308 BLAKE2B 419186d220d4ae5ca31466771158c8b56f5298b93e81a29993f36711e08b0384e002d891280ca29099ae826919ba99c2d056d468d9d3049a984d58e01d4972c0 SHA512 2ccfae7b9f95d8e15ea85d3f66eea5f6a8fdcaffc0b405095fecb33efc0df50b831c1215542910ced948b54e6de1f7242b0b8b9afc5f89079451c552430d7d9f
+DIST Python-3.12.2.tar.xz.asc 963 BLAKE2B 45bfa01009f4df19d348a1fda722901cb4f0b76eb63fcf1061c2796949b5b2ef301fd0fdf818cd145e41d45e5785e0cfbfab8d98751765741715ee7d1b27f2f8 SHA512 fb477acb49864a662b1586db79e80fd8ebab85d4e5e14acd3bfb5afc3dbe8d6b9bf97eb518dfb77662e27040d400f451ed7575fe1264a6cc0d9feb06e4f2dc84
+DIST Python-3.12.3.tar.xz 20625068 BLAKE2B fc4f57ae50183db4c8cb37d94c37a7e58da5d031e03866841a678b986f01bbb8afdefb38124ba82b0a4988445b647214be43338dea13b0f063d3c2bf81c48c0b SHA512 4a2213b108e7f1f1525baa8348e68b2a2336d925e60d0a59f0225fc470768a2c8031edafc0b8243f94dbae18afda335ee5adf2785328c2218fd64cbb439f13a4
+DIST Python-3.12.3.tar.xz.asc 963 BLAKE2B f9668dde210793f8da0e0bb026b8ec3e0b4bc3abc58e72732f8faf356b19ca88a59b9d89b4b10f77b3602d9a967f0f2f44a0f091d698bc28ba9bad8049e5e006 SHA512 c291ec5b5e4f8deba867cc517624dd9a174745f04061ef737e58f3d52b9b30318264aec350e339fe88ccb493809ca1a90a378e86d86b8ec4a4f578b1a5843624
+DIST Python-3.9.18.tar.xz 19673928 BLAKE2B 97da9bedaf29101e5df82199ac3ee12f1da74d5cc89de21ff1510c3f6d34d7f9194489e79855f1ab3c6f26768738e784cb7231c1a692fa746edd21d35558bc4e SHA512 aab155aca757d298394eddb91ff9a8f239665bd46feb495c6b6f735bbcb7489c05c858cc4cd08f1575c24f293b33492d763e9a140d92f0b2b0cc81a165a677c7
+DIST Python-3.9.18.tar.xz.asc 833 BLAKE2B b2160eedf7a7529c379ede5cd626f2d1e36db65bad8c8968adbc2940e597bf0e66f4872078c6543c69aed9b7f38b41d922fdc1cb8046738c1d8566a3f48da7d3 SHA512 dff9a86df2b0774b68e7c762bacf05e2482dbb218301acfdc9128fc600bbc51c97a3a44f6b7cee87bd4e153bcb4a0af3c98109560d0c7861b7508edc9ae05ea1
+DIST Python-3.9.19.tar.xz 19682840 BLAKE2B a12256663f0ff3b799c2193c5877aa89a434340dfa01e655f790abea70af0709b54577e1c2590add241308a8581fd6f45a22aed450bd5db2bf9fa35c4a9d619b SHA512 5577830c734e63a70bbc62cd33d263b9aa87c4381b49cb694c3559067c4c682a55506b65ec5514a8e0a5abf6294dc728e909385d449ae1c388e62f83cea9bb89
+DIST Python-3.9.19.tar.xz.asc 833 BLAKE2B b48b58b8ccf4d6ba8d0d7120f04bebf59f843ffecf5fde4c3989fd9c26e3d3d1ccf4e5688f7024ae94775c8731e9ffa56799fca8596289edf93e4aac5480aaad SHA512 f7f4946243dfc56de2c84f50276b088d347f17054f50e3331d1e312e2a8e2c6ed1b4b4a807202b51137fd2af3fc9218cafa42ed348a954ace896d9a432e2defd
+DIST python-gentoo-patches-2.7.18_p16.tar.xz 35448 BLAKE2B 0139c0944f62f9cdd236f6a8557e0ed19704c7d72869af1cb7d8bd3e646a746cd4a0201e1b44232a5e78ef49f254db20b0d0271bf744fbfd4fe0f1e99b8f3e6c SHA512 810be590d0e06fab4b2165e6852ca49662f09dcd7e20b47a29f613ad7653252c8dfac3f0eb228d77c8a914efa7c08788b2fbd552a4b47504f5fd0ec17450c48f
+DIST python-gentoo-patches-3.10.13_p3.tar.xz 16192 BLAKE2B f13efbaf3b41572cc9d1f3878cf2339448f513c96fd85b35d0f4a9a472cd4867d898ec46230391fc916debf5dc23ac0030b228f8ab78b2ac9e38159c75aecabb SHA512 a5eab5f3ea59b12fa6613a18b4f318981b750899d69cf382abea7705efb873be5b94024ed64fb47f19aa6f6e4f2a9ebe05c05361e7a45bd41dea5161f955448c
+DIST python-gentoo-patches-3.10.14.tar.xz 15240 BLAKE2B 0bfae6d93ceb1292891450d6af3bd7f286546141f1eb4a6a39ec1a43450f62fab6f31aa7e7be25982e6354ccfa1f233a4c949f6c9dffcf2d71ef136a64d91597 SHA512 c7084bf49642192d69979fff205d7e29d9491f483219240e3a1cd5fc00985e471a1f884af789058fa490f0994829b50accf2e445d21906a96aefdec8a394da24
+DIST python-gentoo-patches-3.10.14_p1.tar.xz 15836 BLAKE2B a850e4ad4f025fa9d38ccba937f1b3ee8443ed186c22ede58b4c7324a8541cf724590686671a9aa9194662303ce75bc80aac8ee6f9da34b793876817b6f593ff SHA512 5d969f5e5126ee675a062924a5f403de142fc5bfe4a931fd3576bcc6298a855419d305d4b1ffedacb429783a05324b36eef4c45c861c47bada0bdd840de2bca3
+DIST python-gentoo-patches-3.11.8_p1.tar.xz 9604 BLAKE2B 9017104f160f24e0a1818a8b12225c596faee79d646cc73b6edc4ed1e3faca86cfa2fcea09a128224b85330a67dea65f658507e60dcd09b10af0d590a2b05082 SHA512 0f0afa57abfb4282953a1a78e5ad1cc5e17c0a205e96d9c152f9de6537da95671c1d429ac03fd6aa70a457b27a19b0892a1f9b81164468c4085172a58f5e8d9e
+DIST python-gentoo-patches-3.11.9.tar.xz 8456 BLAKE2B 4e62837f17c1d056460df417b056a79ad78dbcdd3454761c7cda68ffe6faf8f4d4f04d5539e0ba94332fe19a751f7d5ff2c35ff969a6aa09a2c72d2ce5efbff1 SHA512 a288aa8d1d15e906e0f1762602a2122f9dc91bbd6b72123ac5d00ce55b3af324a4e8280b600fc0fb630e489e57ee1547d7595a4ede7a70e4b26d6686a8414997
+DIST python-gentoo-patches-3.12.2_p1.tar.xz 7208 BLAKE2B 8266f2b6c64ffd509278c0d8756680e6700dcd3ed3ab6d3f0e1be2cc87cb20bc694f9e386b474fa5d115ffecdd5d4807a956a48450e109ef7f449ed6f4a8afce SHA512 5fdb93ffae471b5a9e617c12ca1646b9521867cd260efe6da6350fcf5ba24114cad1dc715f033079ab69ecab7cc62c870e14fe2d2035c2d7f29c05cc0f1297db
+DIST python-gentoo-patches-3.12.3.tar.xz 6028 BLAKE2B 7953a48a1d95a6a33bd88060fbcac463a5469371aa0c882c3945f1fea64a63c4d45fca8451f51f4eaeea00a04267ad2e54e4cc720c95e8bb5a3477e00263b80a SHA512 4779bab2b24e59e4a77987ce3e9611d99e87c9c4d016309758c26a65fe2e11ef04d48d5af628c02b1552dc1f31b768f87448f8e19e716b4fe372941e6dacac3f
+DIST python-gentoo-patches-3.9.18_p2.tar.xz 26756 BLAKE2B d9625e8972e2b7536ca1f54a284f0b414361e234b869f98593d132d7bc63b7a1a311c3e6769deba1f07358053982845a96b62b14871388e3b6d211f51f7358b5 SHA512 83584170cb29fb71937dd224af381cd5602b736d893c8ae89891805d6882d74208244040e3278baef82c31a6769c827c21746265260e9be7bc55ffdb8b625b2d
+DIST python-gentoo-patches-3.9.19.tar.xz 25828 BLAKE2B 1213880c55a34d4c39546fd5b5bfed17f969d8ebf0230861c04730c193b568adc9236e72cf3d65b0169769f47c488954abbcbbefaa28058409010704f3a5ccd0 SHA512 634809c9c80df37336d435e3d946c156f3623454b2cf5aa9a3a6d5b6754a5cfe2fa370310d9ba846abb3b2cdfe81dfec2071efe45b5e23396b38e392cd3314b8
+DIST python-gentoo-patches-3.9.19_p2.tar.xz 27684 BLAKE2B a69f00548c153da7b13dfeccb332d3d67ecf649fb5ae054590492f3e2fc2c84b78ebaf90bcf9738157c9022778e5bf2a6b4fb6a99e996dcb63859dcf6f84af23 SHA512 552a5f2d89307d4193d76df5a2cf1deb4bd5c8ad9ec81e6768987f1649f6571a318e68b92d8f8ecdba12bfe9c5f1a427a4cc577e6aaebf7748027cc50e412804
diff --git a/dev-lang/python/files/pydoc.conf b/dev-lang/python/files/pydoc.conf
new file mode 100644
index 0000000..3c6920c
--- /dev/null
+++ b/dev-lang/python/files/pydoc.conf
@@ -0,0 +1,6 @@
+# /etc/init.d/pydoc.conf
+
+# This file contains the configuration for pydoc's internal webserver.
+
+# Default port for Python's pydoc server.
+@PYDOC_PORT_VARIABLE@="7464"
diff --git a/dev-lang/python/files/pydoc.init b/dev-lang/python/files/pydoc.init
new file mode 100644
index 0000000..f8e0563
--- /dev/null
+++ b/dev-lang/python/files/pydoc.init
@@ -0,0 +1,24 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public Licence v2
+
+start() {
+ local pydoc_port="${@PYDOC_PORT_VARIABLE@-${PYDOC_PORT}}"
+
+ if [ -z "${pydoc_port}" ]; then
+ eerror "Port not set"
+ return 1
+ fi
+
+ ebegin "Starting pydoc server on port ${pydoc_port}"
+ start-stop-daemon --start --background --make-pidfile \
+ --pidfile /var/run/@PYDOC@.pid \
+ --exec /usr/bin/@PYDOC@ -- -p "${pydoc_port}"
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping pydoc server"
+ start-stop-daemon --stop --quiet --pidfile /var/run/@PYDOC@.pid
+ eend $?
+}
diff --git a/dev-lang/python/files/python-2.7.18-libressl.patch b/dev-lang/python/files/python-2.7.18-libressl.patch
new file mode 100644
index 0000000..159d329
--- /dev/null
+++ b/dev-lang/python/files/python-2.7.18-libressl.patch
@@ -0,0 +1,26 @@
+https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/lang/python/2.7/patches/patch-Modules__hashopenssl_c
+
+--- a/Modules/_hashopenssl.c
++++ b/Modules/_hashopenssl.c
+@@ -56,7 +56,8 @@
+ #define _OPENSSL_SUPPORTS_SHA2
+ #endif
+
+-#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || \
++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
+ /* OpenSSL < 1.1.0 */
+ #define EVP_MD_CTX_new EVP_MD_CTX_create
+ #define EVP_MD_CTX_free EVP_MD_CTX_destroy
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -596,7 +596,9 @@
+ Py_INCREF(sslctx);
+
+ /* Make sure the SSL error state is initialized */
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER < 0x3090000fL)
+ (void) ERR_get_state();
++#endif
+ ERR_clear_error();
+
+ PySSL_BEGIN_ALLOW_THREADS
diff --git a/dev-lang/python/files/python-3.10.14-libressl.patch b/dev-lang/python/files/python-3.10.14-libressl.patch
new file mode 100644
index 0000000..7bde606
--- /dev/null
+++ b/dev-lang/python/files/python-3.10.14-libressl.patch
@@ -0,0 +1,11 @@
+--- a/Modules/_ssl.c.orig
++++ b/Modules/_ssl.c
+@@ -4523,7 +4523,7 @@
+ return 0;
+ }
+
+-#if OPENSSL_VERSION_NUMBER < 0x30300000L
++#if OPENSSL_VERSION_NUMBER < 0x30300000L && !defined(LIBRESSL_VERSION_NUMBER)
+ static X509_OBJECT *x509_object_dup(const X509_OBJECT *obj)
+ {
+ int ok;
diff --git a/dev-lang/python/files/python-3.10.3-libressl.patch b/dev-lang/python/files/python-3.10.3-libressl.patch
new file mode 100644
index 0000000..ebff9d4
--- /dev/null
+++ b/dev-lang/python/files/python-3.10.3-libressl.patch
@@ -0,0 +1,69 @@
+LibreSSL has NID_sha3_256 and NID_sha512_256 now, but it's simpler to
+handle -stable updates if we keep the patch until 7.4 is out.
+
+Index: Modules/_hashopenssl.c
+--- a/Modules/_hashopenssl.c.orig
++++ b/Modules/_hashopenssl.c
+@@ -45,10 +45,18 @@
+
+ #define MUNCH_SIZE INT_MAX
+
++#ifdef NID_id_scrypt
+ #define PY_OPENSSL_HAS_SCRYPT 1
++#endif
++#ifdef NID_sha3_256
+ #define PY_OPENSSL_HAS_SHA3 1
++#endif
++#ifdef NID_shake256
+ #define PY_OPENSSL_HAS_SHAKE 1
++#endif
++#ifdef NID_blake2s256
+ #define PY_OPENSSL_HAS_BLAKE2 1
++#endif
+
+ #if OPENSSL_VERSION_NUMBER >= 0x30000000L
+ #define PY_EVP_MD EVP_MD
+@@ -120,19 +128,27 @@ static const py_hashentry_t py_hashes[] = {
+ PY_HASH_ENTRY(Py_hash_sha384, "SHA384", SN_sha384, NID_sha384),
+ PY_HASH_ENTRY(Py_hash_sha512, "SHA512", SN_sha512, NID_sha512),
+ /* truncated sha2 */
++#ifdef NID_sha512_256
+ PY_HASH_ENTRY(Py_hash_sha512_224, "SHA512_224", SN_sha512_224, NID_sha512_224),
+ PY_HASH_ENTRY(Py_hash_sha512_256, "SHA512_256", SN_sha512_256, NID_sha512_256),
++#endif
+ /* sha3 */
++#ifdef PY_OPENSSL_HAS_SHA3
+ PY_HASH_ENTRY(Py_hash_sha3_224, NULL, SN_sha3_224, NID_sha3_224),
+ PY_HASH_ENTRY(Py_hash_sha3_256, NULL, SN_sha3_256, NID_sha3_256),
+ PY_HASH_ENTRY(Py_hash_sha3_384, NULL, SN_sha3_384, NID_sha3_384),
+ PY_HASH_ENTRY(Py_hash_sha3_512, NULL, SN_sha3_512, NID_sha3_512),
++#endif
+ /* sha3 shake */
++#ifdef PY_OPENSSL_HAS_SHAKE
+ PY_HASH_ENTRY(Py_hash_shake_128, NULL, SN_shake128, NID_shake128),
+ PY_HASH_ENTRY(Py_hash_shake_256, NULL, SN_shake256, NID_shake256),
++#endif
+ /* blake2 digest */
++#ifdef PY_OPENSSL_HAS_BLAKE2
+ PY_HASH_ENTRY(Py_hash_blake2s, "blake2s256", SN_blake2s256, NID_blake2s256),
+ PY_HASH_ENTRY(Py_hash_blake2b, "blake2b512", SN_blake2b512, NID_blake2b512),
++#endif
+ PY_HASH_ENTRY(NULL, NULL, NULL, 0),
+ };
+
+@@ -873,11 +889,15 @@ py_evp_fromname(PyObject *module, const char *digestna
+ goto exit;
+ }
+
++#ifndef EVP_MD_FLAG_XOF
++ type = get_hashlib_state(module)->EVPtype;
++#else
+ if ((EVP_MD_flags(digest) & EVP_MD_FLAG_XOF) == EVP_MD_FLAG_XOF) {
+ type = get_hashlib_state(module)->EVPXOFtype;
+ } else {
+ type = get_hashlib_state(module)->EVPtype;
+ }
++#endif
+
+ self = newEVPobject(type);
+ if (self == NULL) {
diff --git a/dev-lang/python/files/python-3.9.9-r1-libressl.patch b/dev-lang/python/files/python-3.9.9-r1-libressl.patch
new file mode 100644
index 0000000..997bc0e
--- /dev/null
+++ b/dev-lang/python/files/python-3.9.9-r1-libressl.patch
@@ -0,0 +1,34 @@
+$OpenBSD: patch-Modules__hashopenssl_c,v 1.3 2022/01/21 04:25:12 kmos Exp $
+
+Index: Modules/_hashopenssl.c
+--- a/Modules/_hashopenssl.c
++++ b/Modules/_hashopenssl.c
+@@ -43,7 +43,8 @@
+ # error "OPENSSL_THREADS is not defined, Python requires thread-safe OpenSSL"
+ #endif
+
+-#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || \
++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
+ /* OpenSSL < 1.1.0 */
+ #define EVP_MD_CTX_new EVP_MD_CTX_create
+ #define EVP_MD_CTX_free EVP_MD_CTX_destroy
+
+$OpenBSD: patch-Modules__ssl_c,v 1.3 2021/11/18 15:45:28 tb Exp $
+
+XXX maybe this can go away now we have auto-init, I'm not sure exactly
+what python's lock protects
+
+Index: Modules/_ssl.c
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -213,6 +213,9 @@ extern const SSL_METHOD *TLSv1_2_method(void);
+ #if defined(OPENSSL_VERSION_1_1) && !defined(OPENSSL_NO_SSL2)
+ #define OPENSSL_NO_SSL2
+ #endif
++#if defined(LIBRESSL_VERSION_NUMBER) && defined(WITH_THREAD)
++#define HAVE_OPENSSL_CRYPTO_LOCK
++#endif
+
+ #ifndef PY_OPENSSL_1_1_API
+ /* OpenSSL 1.1 API shims for OpenSSL < 1.1.0 and LibreSSL < 2.7.0 */
diff --git a/dev-lang/python/metadata.xml b/dev-lang/python/metadata.xml
new file mode 100644
index 0000000..22ce986
--- /dev/null
+++ b/dev-lang/python/metadata.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>python@gentoo.org</email>
+ <name>Python</name>
+ </maintainer>
+ <use>
+ <flag name="bluetooth">
+ Build Bluetooth protocol support in socket module
+ </flag>
+ <flag name="ensurepip">
+ Install the ensurepip module that uses bundled wheels
+ to bootstrap pip and setuptools (if disabled, it will
+ be only possible to use venv `--without-pip`)
+ </flag>
+ <flag name="jit">
+ Enable experimental Just-In-Time compilation support.
+ </flag>
+ <flag name="libedit">
+ Link readline extension against <pkg>dev-libs/libedit</pkg>
+ instead of <pkg>sys-libs/readline</pkg>
+ </flag>
+ <flag name="pgo">
+ Optimize the build using Profile Guided Optimization (PGO)
+ by running Python's test suite and collecting statistics
+ based on its performance. This will take longer to build.
+ </flag>
+ <flag name="valgrind">
+ Disable pymalloc when running under
+ <pkg>dev-debug/valgrind</pkg> is detected (may incur minor
+ performance penalty even when valgrind is not used)
+ </flag>
+ <flag name="wininst">
+ Install Windows executables required to create an executable
+ installer for MS Windows
+ </flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:python:python</remote-id>
+ <remote-id type="github">python/cpython</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-lang/python/python-2.7.18_p16-r2.ebuild b/dev-lang/python/python-2.7.18_p16-r2.ebuild
new file mode 100644
index 0000000..6d0e22d
--- /dev/null
+++ b/dev-lang/python/python-2.7.18_p16-r2.ebuild
@@ -0,0 +1,323 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+WANT_LIBTOOL="none"
+
+inherit autotools flag-o-matic pax-utils toolchain-funcs verify-sig
+
+MY_P="Python-${PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+ https://gitweb.gentoo.org/fork/cpython.git/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ berkdb bluetooth build examples gdbm +ncurses +readline
+ +sqlite +ssl tk valgrind wininst +xml
+"
+RESTRICT="test"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ dev-libs/libffi:=
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ berkdb? ( || (
+ sys-libs/db:5.3
+ sys-libs/db:4.8
+ ) )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? ( >=sys-libs/readline-4.1:= )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( dev-libs/openssl:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+ xml? ( >=dev-libs/expat-2.1:= )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ valgrind? ( dev-debug/valgrind )
+"
+BDEPEND="
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_setup() {
+ if use berkdb; then
+ ewarn "'bsddb' module is out-of-date and no longer maintained inside"
+ ewarn "dev-lang/python. 'bsddb' and 'dbhash' modules have been additionally"
+ ewarn "removed in Python 3. A maintained alternative of 'bsddb3' module"
+ ewarn "is provided by dev-python/bsddb3."
+ fi
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat, libffi and zlib are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+ rm -r Modules/zlib || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-2.7.18-libressl.patch
+ )
+
+ default
+
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" \
+ Lib/distutils/command/install.py \
+ Lib/distutils/sysconfig.py \
+ Lib/site.py \
+ Lib/sysconfig.py \
+ Lib/test/test_site.py \
+ Makefile.pre.in \
+ Modules/Setup.dist \
+ Modules/getpath.c \
+ setup.py || die "sed failed to replace @@GENTOO_LIBDIR@@"
+
+ if ! use wininst; then
+ rm Lib/distutils/command/wininst*.exe || die
+ fi
+
+ eautoreconf
+}
+
+src_configure() {
+ # dbm module can be linked against berkdb or gdbm.
+ # Defaults to gdbm when both are enabled, #204343.
+ local disable
+ use berkdb || use gdbm || disable+=" dbm"
+ use berkdb || disable+=" _bsddb"
+ # disable automagic bluetooth headers detection
+ use bluetooth || export ac_cv_header_bluetooth_bluetooth_h=no
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ use xml || disable+=" _elementtree pyexpat" # _elementtree uses pyexpat.
+ export PYTHON_DISABLE_MODULES="${disable}"
+
+ if ! use xml; then
+ ewarn "You have configured Python without XML support."
+ ewarn "This is NOT a recommended configuration as you"
+ ewarn "may face problems parsing any XML documents."
+ fi
+
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
+ fi
+
+ append-flags -fwrapv
+
+ filter-flags -malign-double
+
+ if tc-is-cross-compiler; then
+ # Force some tests that try to poke fs paths.
+ export ac_cv_file__dev_ptc=no
+ export ac_cv_file__dev_ptmx=yes
+ fi
+
+ # Export CXX so it ends up in /usr/lib/python2.X/config/Makefile.
+ tc-export CXX
+ # The configure script fails to use pkg-config correctly.
+ # http://bugs.python.org/issue15506
+ export ac_cv_path_PKG_CONFIG=$(tc-getPKG_CONFIG)
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+ if use berkdb; then
+ dbmliborder+="${dbmliborder:+:}bdb"
+ fi
+
+ local myeconfargs=(
+ # The check is broken on clang, and gives false positive:
+ # https://bugs.gentoo.org/596798
+ # (upstream dropped this flag in 3.2a4 anyway)
+ ac_cv_opt_olimit_ok=no
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+ # Test program has missing includes. This doesn't change
+ # the result but it's cleaner to force it.
+ ac_cv_broken_poll=no
+
+ --with-fpectl
+ --enable-shared
+ --enable-ipv6
+ --with-threads
+ --enable-unicode=ucs4
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --with-system-expat
+ --with-system-ffi
+
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+
+ # Avoid invoking pgen for cross-compiles.
+ touch Include/graminit.h Python/graminit.c || die
+
+ emake
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ # Skip failing tests.
+ local skipped_tests=( distutils gdb )
+
+ for test in "${skipped_tests[@]}"; do
+ mv Lib/test/test_${test}.py "${T}"/ || die
+ done
+
+ # bug 660358
+ local -x COLUMNS=80
+
+ # Daylight saving time problem
+ # https://bugs.python.org/issue22067
+ # https://bugs.gentoo.org/610628
+ local -x TZ=UTC
+
+ # Rerun failed tests in verbose mode (regrtest -w).
+ emake -Onone test EXTRATESTOPTS="-w" < /dev/tty
+
+ for test in "${skipped_tests[@]}"; do
+ mv "${T}/test_${test}.py" Lib/test/ || die
+ done
+}
+
+src_install() {
+ local libdir=${ED}/usr/$(get_libdir)/python${PYVER}
+
+ emake DESTDIR="${D}" altinstall
+
+ sed -e "s/\(LDFLAGS=\).*/\1/" -i "${libdir}/config/Makefile" || die
+
+ # Remove static library
+ rm "${ED}"/usr/$(get_libdir)/libpython*.a || die
+
+ # Fix collisions between different slots of Python.
+ mv "${ED}/usr/bin/2to3" "${ED}/usr/bin/2to3-${PYVER}" || die
+ mv "${ED}/usr/bin/pydoc" "${ED}/usr/bin/pydoc${PYVER}" || die
+ mv "${ED}/usr/bin/idle" "${ED}/usr/bin/idle${PYVER}" || die
+ rm "${ED}/usr/bin/smtpd.py" || die
+
+ if ! use berkdb; then
+ rm -r "${libdir}/"{bsddb,dbhash.py*,test/test_bsddb*} || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,lib-tk} || die
+ fi
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ dodoc -r Tools
+ fi
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python2* is no longer wrapped, so just symlink it
+ local pymajor=${PYVER%.*}
+ dosym "python${PYVER}" "/usr/bin/python${pymajor}"
+ dosym "python${PYVER}-config" "/usr/bin/python${pymajor}-config"
+}
diff --git a/dev-lang/python/python-3.10.13_p3.ebuild b/dev-lang/python/python-3.10.13_p3.ebuild
new file mode 100644
index 0000000..ef4e8a6
--- /dev/null
+++ b/dev-lang/python/python-3.10.13_p3.ebuild
@@ -0,0 +1,509 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm libedit
+ +ncurses pgo +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? (
+ !libedit? ( >=sys-libs/readline-4.1:= )
+ libedit? ( dev-libs/libedit:= )
+ )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ valgrind? ( dev-debug/valgrind )
+ test? ( app-arch/xz-utils )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+if [[ ${PV} != *_alpha* ]]; then
+ RDEPEND+="
+ dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+ "
+fi
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.10.3-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+build_cbuild_python() {
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910 and bug #864911.
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --prefix="${BROOT}"/usr
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross.
+ --without-lto
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS=disabled
+ MODULE__DBM=disabled
+ MODULE__GDBM=disabled
+ MODULE__DBM=disabled
+ MODULE__SQLITE3=disabled
+ MODULE__HASHLIB=disabled
+ MODULE__SSL=disabled
+ MODULE__CURSES=disabled
+ MODULE__CURSES_PANEL=disabled
+ MODULE_READLINE=disabled
+ MODULE__TKINTER=disabled
+ MODULE_PYEXPAT=disabled
+ MODULE_ZLIB=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the Python it was pointed to
+ # immediately.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" emake
+ popd &> /dev/null || die
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+ local disable
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ export PYTHON_DISABLE_MODULES="${disable}"
+
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -u-network
+
+ # We use a timeout because of how often we've had hang issues
+ # here. It also matches the default upstream PROFILE_TASK.
+ --timeout 1200
+
+ -x test_gdb
+ -x test_dtrace
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ --enable-shared
+ --without-static-libpython
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with readline readline "$(usex libedit editline readline)")
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ export PATH="${WORKDIR}/${P}-${CBUILD}:${PATH}"
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+ # workaround https://bugs.gentoo.org/775416
+ addwrite "/usr/lib/python${PYVER}/site-packages"
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ emake DESTDIR="${D}" altinstall
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
diff --git a/dev-lang/python/python-3.10.14.ebuild b/dev-lang/python/python-3.10.14.ebuild
new file mode 100644
index 0000000..ff136c1
--- /dev/null
+++ b/dev-lang/python/python-3.10.14.ebuild
@@ -0,0 +1,510 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm libedit
+ +ncurses pgo +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? (
+ !libedit? ( >=sys-libs/readline-4.1:= )
+ libedit? ( dev-libs/libedit:= )
+ )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ valgrind? ( dev-debug/valgrind )
+ test? ( app-arch/xz-utils )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+if [[ ${PV} != *_alpha* ]]; then
+ RDEPEND+="
+ dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+ "
+fi
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.10.3-libressl.patch
+ "${FILESDIR}"/${PN}-3.10.14-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+build_cbuild_python() {
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910 and bug #864911.
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --prefix="${BROOT}"/usr
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross.
+ --without-lto
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS=disabled
+ MODULE__DBM=disabled
+ MODULE__GDBM=disabled
+ MODULE__DBM=disabled
+ MODULE__SQLITE3=disabled
+ MODULE__HASHLIB=disabled
+ MODULE__SSL=disabled
+ MODULE__CURSES=disabled
+ MODULE__CURSES_PANEL=disabled
+ MODULE_READLINE=disabled
+ MODULE__TKINTER=disabled
+ MODULE_PYEXPAT=disabled
+ MODULE_ZLIB=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the Python it was pointed to
+ # immediately.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" emake
+ popd &> /dev/null || die
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+ local disable
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ export PYTHON_DISABLE_MODULES="${disable}"
+
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -u-network
+
+ # We use a timeout because of how often we've had hang issues
+ # here. It also matches the default upstream PROFILE_TASK.
+ --timeout 1200
+
+ -x test_gdb
+ -x test_dtrace
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ --enable-shared
+ --without-static-libpython
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with readline readline "$(usex libedit editline readline)")
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ export PATH="${WORKDIR}/${P}-${CBUILD}:${PATH}"
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+ # workaround https://bugs.gentoo.org/775416
+ addwrite "/usr/lib/python${PYVER}/site-packages"
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ emake DESTDIR="${D}" altinstall
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
diff --git a/dev-lang/python/python-3.10.14_p1.ebuild b/dev-lang/python/python-3.10.14_p1.ebuild
new file mode 100644
index 0000000..655cd66
--- /dev/null
+++ b/dev-lang/python/python-3.10.14_p1.ebuild
@@ -0,0 +1,510 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm libedit
+ +ncurses pgo +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? (
+ !libedit? ( >=sys-libs/readline-4.1:= )
+ libedit? ( dev-libs/libedit:= )
+ )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ valgrind? ( dev-debug/valgrind )
+ test? ( app-arch/xz-utils )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+if [[ ${PV} != *_alpha* ]]; then
+ RDEPEND+="
+ dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+ "
+fi
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.10.3-libressl.patch
+ "${FILESDIR}"/${PN}-3.10.14-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+build_cbuild_python() {
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910 and bug #864911.
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --prefix="${BROOT}"/usr
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross.
+ --without-lto
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS=disabled
+ MODULE__DBM=disabled
+ MODULE__GDBM=disabled
+ MODULE__DBM=disabled
+ MODULE__SQLITE3=disabled
+ MODULE__HASHLIB=disabled
+ MODULE__SSL=disabled
+ MODULE__CURSES=disabled
+ MODULE__CURSES_PANEL=disabled
+ MODULE_READLINE=disabled
+ MODULE__TKINTER=disabled
+ MODULE_PYEXPAT=disabled
+ MODULE_ZLIB=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the Python it was pointed to
+ # immediately.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" emake
+ popd &> /dev/null || die
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+ local disable
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ export PYTHON_DISABLE_MODULES="${disable}"
+
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -u-network
+
+ # We use a timeout because of how often we've had hang issues
+ # here. It also matches the default upstream PROFILE_TASK.
+ --timeout 1200
+
+ -x test_gdb
+ -x test_dtrace
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ --enable-shared
+ --without-static-libpython
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with readline readline "$(usex libedit editline readline)")
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ export PATH="${WORKDIR}/${P}-${CBUILD}:${PATH}"
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+ # workaround https://bugs.gentoo.org/775416
+ addwrite "/usr/lib/python${PYVER}/site-packages"
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ emake DESTDIR="${D}" altinstall
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
diff --git a/dev-lang/python/python-3.11.8_p1.ebuild b/dev-lang/python/python-3.11.8_p1.ebuild
new file mode 100644
index 0000000..45389b7
--- /dev/null
+++ b/dev-lang/python/python-3.11.8_p1.ebuild
@@ -0,0 +1,543 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm libedit
+ +ncurses pgo +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ app-crypt/libb2
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? (
+ !libedit? ( >=sys-libs/readline-4.1:= )
+ libedit? ( dev-libs/libedit:= )
+ )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ test? ( app-arch/xz-utils )
+ valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+if [[ ${PV} != *_alpha* ]]; then
+ RDEPEND+="
+ dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+ "
+fi
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.10.3-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+build_cbuild_python() {
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --prefix="${BROOT}"/usr
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross to satisfy --with-build-python.
+ --without-lto
+ --without-readline
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS_STATE=disabled
+ MODULE__DBM_STATE=disabled
+ MODULE__GDBM_STATE=disabled
+ MODULE__DBM_STATE=disabled
+ MODULE__SQLITE3_STATE=disabled
+ MODULE__HASHLIB_STATE=disabled
+ MODULE__SSL_STATE=disabled
+ MODULE__CURSES_STATE=disabled
+ MODULE__CURSES_PANEL_STATE=disabled
+ MODULE_READLINE_STATE=disabled
+ MODULE__TKINTER_STATE=disabled
+ MODULE_PYEXPAT_STATE=disabled
+ MODULE_ZLIB_STATE=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the --with-build-python value
+ # immediately.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" emake
+ popd &> /dev/null || die
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -u-network
+
+ # We use a timeout because of how often we've had hang issues
+ # here. It also matches the default upstream PROFILE_TASK.
+ --timeout 1200
+
+ -x test_gdb
+ -x test_dtrace
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ # libressl doesn't find hashlib (From OpenBSD)
+ ac_cv_working_openssl_hashlib=yes
+
+ --enable-shared
+ --without-static-libpython
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-platlibdir=lib
+ --with-pkg-config=yes
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with readline readline "$(usex libedit editline readline)")
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ myeconfargs+=(
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ --with-build-python="${WORKDIR}"/${P}-${CBUILD}/python
+ )
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # force-disable modules we don't want built
+ local disable_modules=( NIS )
+ use gdbm || disable_modules+=( _GDBM _DBM )
+ use sqlite || disable_modules+=( _SQLITE3 )
+ use ssl || disable_modules+=( _HASHLIB _SSL )
+ use ncurses || disable_modules+=( _CURSES _CURSES_PANEL )
+ use readline || disable_modules+=( READLINE )
+ use tk || disable_modules+=( _TKINTER )
+
+ local mod
+ for mod in "${disable_modules[@]}"; do
+ echo "MODULE_${mod}_STATE=disabled"
+ done >> Makefile || die
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+ export PYTHONSTRICTEXTENSIONBUILD=1
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ # this just happens to skip test_support.test_freeze that is broken
+ # without bundled expat
+ # TODO: get a proper skip for it upstream
+ local -x LOGNAME=buildbot
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+ # workaround https://bugs.gentoo.org/775416
+ addwrite "/usr/lib/python${PYVER}/site-packages"
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ # -j1 hack for now for bug #843458
+ emake -j1 DESTDIR="${D}" altinstall
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"sqlite3 || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
+
+pkg_postinst() {
+ local v
+ for v in ${REPLACING_VERSIONS}; do
+ if ver_test "${v}" -lt 3.11.0_beta4-r2; then
+ ewarn "Python 3.11.0b4 has changed its module ABI. The .pyc files"
+ ewarn "installed previously are no longer valid and will be regenerated"
+ ewarn "(or ignored) on the next import. This may cause sandbox failures"
+ ewarn "when installing some packages and checksum mismatches when removing"
+ ewarn "old versions. To actively prevent this, rebuild all packages"
+ ewarn "installing Python 3.11 modules, e.g. using:"
+ ewarn
+ ewarn " emerge -1v /usr/lib/python3.11/site-packages"
+ fi
+ done
+}
diff --git a/dev-lang/python/python-3.11.9.ebuild b/dev-lang/python/python-3.11.9.ebuild
new file mode 100644
index 0000000..2c6b569
--- /dev/null
+++ b/dev-lang/python/python-3.11.9.ebuild
@@ -0,0 +1,544 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha ~amd64 ~arm arm64 ~hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm libedit
+ +ncurses pgo +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ app-crypt/libb2
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? (
+ !libedit? ( >=sys-libs/readline-4.1:= )
+ libedit? ( dev-libs/libedit:= )
+ )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ test? ( app-arch/xz-utils )
+ valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+if [[ ${PV} != *_alpha* ]]; then
+ RDEPEND+="
+ dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+ "
+fi
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.10.3-libressl.patch
+ "${FILESDIR}"/${PN}-3.10.14-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+build_cbuild_python() {
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --prefix="${BROOT}"/usr
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross to satisfy --with-build-python.
+ --without-lto
+ --without-readline
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS_STATE=disabled
+ MODULE__DBM_STATE=disabled
+ MODULE__GDBM_STATE=disabled
+ MODULE__DBM_STATE=disabled
+ MODULE__SQLITE3_STATE=disabled
+ MODULE__HASHLIB_STATE=disabled
+ MODULE__SSL_STATE=disabled
+ MODULE__CURSES_STATE=disabled
+ MODULE__CURSES_PANEL_STATE=disabled
+ MODULE_READLINE_STATE=disabled
+ MODULE__TKINTER_STATE=disabled
+ MODULE_PYEXPAT_STATE=disabled
+ MODULE_ZLIB_STATE=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the --with-build-python value
+ # immediately.
+ PYTHON_DISABLE_MODULES+=" _ctypes _crypt" emake
+ popd &> /dev/null || die
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -u-network
+
+ # We use a timeout because of how often we've had hang issues
+ # here. It also matches the default upstream PROFILE_TASK.
+ --timeout 1200
+
+ -x test_gdb
+ -x test_dtrace
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ # libressl doesn't find hashlib (From OpenBSD)
+ ac_cv_working_openssl_hashlib=yes
+
+ --enable-shared
+ --without-static-libpython
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-platlibdir=lib
+ --with-pkg-config=yes
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with readline readline "$(usex libedit editline readline)")
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ myeconfargs+=(
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ --with-build-python="${WORKDIR}"/${P}-${CBUILD}/python
+ )
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # force-disable modules we don't want built
+ local disable_modules=( NIS )
+ use gdbm || disable_modules+=( _GDBM _DBM )
+ use sqlite || disable_modules+=( _SQLITE3 )
+ use ssl || disable_modules+=( _HASHLIB _SSL )
+ use ncurses || disable_modules+=( _CURSES _CURSES_PANEL )
+ use readline || disable_modules+=( READLINE )
+ use tk || disable_modules+=( _TKINTER )
+
+ local mod
+ for mod in "${disable_modules[@]}"; do
+ echo "MODULE_${mod}_STATE=disabled"
+ done >> Makefile || die
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+ export PYTHONSTRICTEXTENSIONBUILD=1
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ # this just happens to skip test_support.test_freeze that is broken
+ # without bundled expat
+ # TODO: get a proper skip for it upstream
+ local -x LOGNAME=buildbot
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+ # workaround https://bugs.gentoo.org/775416
+ addwrite "/usr/lib/python${PYVER}/site-packages"
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ # -j1 hack for now for bug #843458
+ emake -j1 DESTDIR="${D}" altinstall
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"sqlite3 || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
+
+pkg_postinst() {
+ local v
+ for v in ${REPLACING_VERSIONS}; do
+ if ver_test "${v}" -lt 3.11.0_beta4-r2; then
+ ewarn "Python 3.11.0b4 has changed its module ABI. The .pyc files"
+ ewarn "installed previously are no longer valid and will be regenerated"
+ ewarn "(or ignored) on the next import. This may cause sandbox failures"
+ ewarn "when installing some packages and checksum mismatches when removing"
+ ewarn "old versions. To actively prevent this, rebuild all packages"
+ ewarn "installing Python 3.11 modules, e.g. using:"
+ ewarn
+ ewarn " emerge -1v /usr/lib/python3.11/site-packages"
+ fi
+ done
+}
diff --git a/dev-lang/python/python-3.12.2_p1.ebuild b/dev-lang/python/python-3.12.2_p1.ebuild
new file mode 100644
index 0000000..9da529c
--- /dev/null
+++ b/dev-lang/python/python-3.12.2_p1.ebuild
@@ -0,0 +1,541 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm libedit
+ +ncurses pgo +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ app-crypt/libb2
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-pip )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? (
+ !libedit? ( >=sys-libs/readline-4.1:= )
+ libedit? ( dev-libs/libedit:= )
+ )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ test? (
+ app-arch/xz-utils
+ dev-python/ensurepip-pip
+ dev-python/ensurepip-setuptools
+ dev-python/ensurepip-wheel
+ )
+ valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( >=sec-keys/openpgp-keys-python-20221025 )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+if [[ ${PV} != *_alpha* ]]; then
+ RDEPEND+="
+ dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+ "
+fi
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ # TODO: Makefile has annoying deps on expat headers
+ #rm -r Modules/expat || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.10.3-libressl.patch
+ )
+
+ default
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ sed -i -e "s:-j0:-j$(makeopts_jobs):" Makefile.pre.in || die
+
+ eautoreconf
+}
+
+build_cbuild_python() {
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --prefix="${BROOT}"/usr
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross to satisfy --with-build-python.
+ --without-lto
+ --without-readline
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+
+ # Avoid as many dependencies as possible for the cross build.
+ mkdir Modules || die
+ cat > Modules/Setup.local <<-EOF || die
+ *disabled*
+ nis
+ _dbm _gdbm
+ _sqlite3
+ _hashlib _ssl
+ _curses _curses_panel
+ readline
+ _tkinter
+ pyexpat
+ zlib
+ # We disabled these for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross. This should be rechecked for the pure Makefile approach,
+ # and uncommented if needed.
+ #_ctypes _crypt
+ EOF
+
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the --with-build-python value
+ # immediately.
+ emake
+ popd &> /dev/null || die
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -u-network
+
+ # We use a timeout because of how often we've had hang issues
+ # here. It also matches the default upstream PROFILE_TASK.
+ --timeout 1200
+
+ -x test_gdb
+ -x test_dtrace
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ # libressl doesn't find hashlib (From OpenBSD)
+ ac_cv_working_openssl_hashlib=yes
+
+ --enable-shared
+ --without-static-libpython
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-platlibdir=lib
+ --with-pkg-config=yes
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with readline readline "$(usex libedit editline readline)")
+ $(use_with valgrind)
+ )
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ # Force-disable modules we don't want built.
+ # See Modules/Setup for docs on how this works. Setup.local contains our local deviations.
+ cat > Modules/Setup.local <<-EOF || die
+ *disabled*
+ nis
+ $(usev !gdbm '_gdbm _dbm')
+ $(usev !sqlite '_sqlite3')
+ $(usev !ssl '_hashlib _ssl')
+ $(usev !ncurses '_curses _curses_panel')
+ $(usev !readline 'readline')
+ $(usev !tk '_tkinter')
+ EOF
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ myeconfargs+=(
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ --with-build-python="${WORKDIR}"/${P}-${CBUILD}/python
+ )
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ export PYTHONSTRICTEXTENSIONBUILD=1
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ # this just happens to skip test_support.test_freeze that is broken
+ # without bundled expat
+ # TODO: get a proper skip for it upstream
+ local -x LOGNAME=buildbot
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+ # workaround https://bugs.gentoo.org/775416
+ addwrite "/usr/lib/python${PYVER}/site-packages"
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ # the Makefile rules are broken
+ # https://github.com/python/cpython/issues/100221
+ mkdir -p "${libdir}"/lib-dynload || die
+
+ # -j1 hack for now for bug #843458
+ emake -j1 DESTDIR="${D}" altinstall
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"sqlite3 || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
+
+pkg_postinst() {
+ local v
+ for v in ${REPLACING_VERSIONS}; do
+ if ver_test "${v}" -lt 3.11.0_beta4-r2; then
+ ewarn "Python 3.11.0b4 has changed its module ABI. The .pyc files"
+ ewarn "installed previously are no longer valid and will be regenerated"
+ ewarn "(or ignored) on the next import. This may cause sandbox failures"
+ ewarn "when installing some packages and checksum mismatches when removing"
+ ewarn "old versions. To actively prevent this, rebuild all packages"
+ ewarn "installing Python 3.11 modules, e.g. using:"
+ ewarn
+ ewarn " emerge -1v /usr/lib/python3.11/site-packages"
+ fi
+ done
+}
diff --git a/dev-lang/python/python-3.12.3.ebuild b/dev-lang/python/python-3.12.3.ebuild
new file mode 100644
index 0000000..c5224a9
--- /dev/null
+++ b/dev-lang/python/python-3.12.3.ebuild
@@ -0,0 +1,542 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm libedit
+ +ncurses pgo +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ app-crypt/libb2
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-pip )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? (
+ !libedit? ( >=sys-libs/readline-4.1:= )
+ libedit? ( dev-libs/libedit:= )
+ )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ test? (
+ app-arch/xz-utils
+ dev-python/ensurepip-pip
+ dev-python/ensurepip-setuptools
+ dev-python/ensurepip-wheel
+ )
+ valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( >=sec-keys/openpgp-keys-python-20221025 )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+if [[ ${PV} != *_alpha* ]]; then
+ RDEPEND+="
+ dev-lang/python-exec[python_targets_python${PYVER/./_}(-)]
+ "
+fi
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ # TODO: Makefile has annoying deps on expat headers
+ #rm -r Modules/expat || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.10.3-libressl.patch
+ "${FILESDIR}"/${PN}-3.10.14-libressl.patch
+ )
+
+ default
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ sed -i -e "s:-j0:-j$(makeopts_jobs):" Makefile.pre.in || die
+
+ eautoreconf
+}
+
+build_cbuild_python() {
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --prefix="${BROOT}"/usr
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross to satisfy --with-build-python.
+ --without-lto
+ --without-readline
+ --disable-optimizations
+ )
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+
+ # Avoid as many dependencies as possible for the cross build.
+ mkdir Modules || die
+ cat > Modules/Setup.local <<-EOF || die
+ *disabled*
+ nis
+ _dbm _gdbm
+ _sqlite3
+ _hashlib _ssl
+ _curses _curses_panel
+ readline
+ _tkinter
+ pyexpat
+ zlib
+ # We disabled these for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross. This should be rechecked for the pure Makefile approach,
+ # and uncommented if needed.
+ #_ctypes _crypt
+ EOF
+
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the --with-build-python value
+ # immediately.
+ emake
+ popd &> /dev/null || die
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -u-network
+
+ # We use a timeout because of how often we've had hang issues
+ # here. It also matches the default upstream PROFILE_TASK.
+ --timeout 1200
+
+ -x test_gdb
+ -x test_dtrace
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ # libressl doesn't find hashlib (From OpenBSD)
+ ac_cv_working_openssl_hashlib=yes
+
+ --enable-shared
+ --without-static-libpython
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-platlibdir=lib
+ --with-pkg-config=yes
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with readline readline "$(usex libedit editline readline)")
+ $(use_with valgrind)
+ )
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ # Force-disable modules we don't want built.
+ # See Modules/Setup for docs on how this works. Setup.local contains our local deviations.
+ cat > Modules/Setup.local <<-EOF || die
+ *disabled*
+ nis
+ $(usev !gdbm '_gdbm _dbm')
+ $(usev !sqlite '_sqlite3')
+ $(usev !ssl '_hashlib _ssl')
+ $(usev !ncurses '_curses _curses_panel')
+ $(usev !readline 'readline')
+ $(usev !tk '_tkinter')
+ EOF
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ if tc-is-cross-compiler ; then
+ build_cbuild_python
+ myeconfargs+=(
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ --with-build-python="${WORKDIR}"/${P}-${CBUILD}/python
+ )
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ export PYTHONSTRICTEXTENSIONBUILD=1
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ # this just happens to skip test_support.test_freeze that is broken
+ # without bundled expat
+ # TODO: get a proper skip for it upstream
+ local -x LOGNAME=buildbot
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+ # workaround https://bugs.gentoo.org/775416
+ addwrite "/usr/lib/python${PYVER}/site-packages"
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ # the Makefile rules are broken
+ # https://github.com/python/cpython/issues/100221
+ mkdir -p "${libdir}"/lib-dynload || die
+
+ # -j1 hack for now for bug #843458
+ emake -j1 DESTDIR="${D}" altinstall
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"sqlite3 || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
+
+pkg_postinst() {
+ local v
+ for v in ${REPLACING_VERSIONS}; do
+ if ver_test "${v}" -lt 3.11.0_beta4-r2; then
+ ewarn "Python 3.11.0b4 has changed its module ABI. The .pyc files"
+ ewarn "installed previously are no longer valid and will be regenerated"
+ ewarn "(or ignored) on the next import. This may cause sandbox failures"
+ ewarn "when installing some packages and checksum mismatches when removing"
+ ewarn "old versions. To actively prevent this, rebuild all packages"
+ ewarn "installing Python 3.11 modules, e.g. using:"
+ ewarn
+ ewarn " emerge -1v /usr/lib/python3.11/site-packages"
+ fi
+ done
+}
diff --git a/dev-lang/python/python-3.9.18_p2.ebuild b/dev-lang/python/python-3.9.18_p2.ebuild
new file mode 100644
index 0000000..ea5bea1
--- /dev/null
+++ b/dev-lang/python/python-3.9.18_p2.ebuild
@@ -0,0 +1,494 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm +ncurses pgo
+ +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? ( >=sys-libs/readline-4.1:= )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ test? ( app-arch/xz-utils )
+ valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ # Causes runtime issues with libressl
+ rm "${WORKDIR}/${PATCHSET}"/0013-bpo-43998-Default-to-TLS-1.2-and-increase-cipher-sui.patch || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.9.9-r1-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+ local disable
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ export PYTHON_DISABLE_MODULES="${disable}"
+
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -x test_gdb
+ -x test_dtrace
+ -u-network
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ --enable-shared
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910 and bug #864911.
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross.
+ --without-lto
+ --disable-optimizations
+ )
+
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ export PATH="${WORKDIR}/${P}-${CBUILD}:${PATH}"
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS=disabled
+ MODULE__DBM=disabled
+ MODULE__GDBM=disabled
+ MODULE__DBM=disabled
+ MODULE__SQLITE3=disabled
+ MODULE__HASHLIB=disabled
+ MODULE__SSL=disabled
+ MODULE__CURSES=disabled
+ MODULE__CURSES_PANEL=disabled
+ MODULE_READLINE=disabled
+ MODULE__TKINTER=disabled
+ MODULE_PYEXPAT=disabled
+ MODULE_ZLIB=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the Python it was pointed to
+ # immediately.
+ PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" emake
+ popd &> /dev/null || die
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ emake DESTDIR="${D}" altinstall
+
+ # Remove static library
+ rm "${ED}"/usr/$(get_libdir)/libpython*.a || die
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
diff --git a/dev-lang/python/python-3.9.19.ebuild b/dev-lang/python/python-3.9.19.ebuild
new file mode 100644
index 0000000..d1ca123
--- /dev/null
+++ b/dev-lang/python/python-3.9.19.ebuild
@@ -0,0 +1,494 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm +ncurses pgo
+ +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? ( >=sys-libs/readline-4.1:= )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ test? ( app-arch/xz-utils )
+ valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ # Causes runtime issues with libressl
+ rm "${WORKDIR}/${PATCHSET}"/0013-bpo-43998-Default-to-TLS-1.2-and-increase-cipher-sui.patch || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.9.9-r1-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+ local disable
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ export PYTHON_DISABLE_MODULES="${disable}"
+
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -x test_gdb
+ -x test_dtrace
+ -u-network
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ --enable-shared
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910 and bug #864911.
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross.
+ --without-lto
+ --disable-optimizations
+ )
+
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ export PATH="${WORKDIR}/${P}-${CBUILD}:${PATH}"
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS=disabled
+ MODULE__DBM=disabled
+ MODULE__GDBM=disabled
+ MODULE__DBM=disabled
+ MODULE__SQLITE3=disabled
+ MODULE__HASHLIB=disabled
+ MODULE__SSL=disabled
+ MODULE__CURSES=disabled
+ MODULE__CURSES_PANEL=disabled
+ MODULE_READLINE=disabled
+ MODULE__TKINTER=disabled
+ MODULE_PYEXPAT=disabled
+ MODULE_ZLIB=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the Python it was pointed to
+ # immediately.
+ PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" emake
+ popd &> /dev/null || die
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ emake DESTDIR="${D}" altinstall
+
+ # Remove static library
+ rm "${ED}"/usr/$(get_libdir)/libpython*.a || die
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
diff --git a/dev-lang/python/python-3.9.19_p2.ebuild b/dev-lang/python/python-3.9.19_p2.ebuild
new file mode 100644
index 0000000..b257d02
--- /dev/null
+++ b/dev-lang/python/python-3.9.19_p2.ebuild
@@ -0,0 +1,495 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+WANT_LIBTOOL="none"
+
+inherit autotools check-reqs flag-o-matic multiprocessing pax-utils
+inherit prefix python-utils-r1 toolchain-funcs verify-sig
+
+MY_PV=${PV/_rc/rc}
+MY_P="Python-${MY_PV%_p*}"
+PYVER=$(ver_cut 1-2)
+PATCHSET="python-gentoo-patches-${MY_PV}"
+
+DESCRIPTION="An interpreted, interactive, object-oriented programming language"
+HOMEPAGE="
+ https://www.python.org/
+ https://github.com/python/cpython/
+"
+SRC_URI="
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz
+ https://dev.gentoo.org/~mgorny/dist/python/${PATCHSET}.tar.xz
+ verify-sig? (
+ https://www.python.org/ftp/python/${PV%%_*}/${MY_P}.tar.xz.asc
+ )
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="PSF-2"
+SLOT="${PYVER}"
+KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="
+ bluetooth build debug +ensurepip examples gdbm +ncurses pgo
+ +readline +sqlite +ssl test tk valgrind
+"
+RESTRICT="!test? ( test )"
+
+# Do not add a dependency on dev-lang/python to this ebuild.
+# If you need to apply a patch which requires python for bootstrapping, please
+# run the bootstrap code on your dev box and include the results in the
+# patchset. See bug 447752.
+
+RDEPEND="
+ app-arch/bzip2:=
+ app-arch/xz-utils:=
+ >=dev-libs/expat-2.1:=
+ dev-libs/libffi:=
+ dev-python/gentoo-common
+ >=sys-libs/zlib-1.1.3:=
+ virtual/libcrypt:=
+ virtual/libintl
+ ensurepip? ( dev-python/ensurepip-wheels )
+ gdbm? ( sys-libs/gdbm:=[berkdb] )
+ kernel_linux? ( sys-apps/util-linux:= )
+ ncurses? ( >=sys-libs/ncurses-5.2:= )
+ readline? ( >=sys-libs/readline-4.1:= )
+ sqlite? ( >=dev-db/sqlite-3.3.8:3= )
+ ssl? ( >=dev-libs/openssl-1.1.1:= )
+ tk? (
+ >=dev-lang/tcl-8.0:=
+ >=dev-lang/tk-8.0:=
+ dev-tcltk/blt:=
+ dev-tcltk/tix
+ )
+"
+# bluetooth requires headers from bluez
+DEPEND="
+ ${RDEPEND}
+ bluetooth? ( net-wireless/bluez )
+ test? ( app-arch/xz-utils )
+ valgrind? ( dev-debug/valgrind )
+"
+# autoconf-archive needed to eautoreconf
+BDEPEND="
+ dev-build/autoconf-archive
+ app-alternatives/awk
+ virtual/pkgconfig
+ verify-sig? ( sec-keys/openpgp-keys-python )
+"
+RDEPEND+="
+ !build? ( app-misc/mime-types )
+"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/python.org.asc
+
+# large file tests involve a 2.5G file being copied (duplicated)
+CHECKREQS_DISK_BUILD=5500M
+
+QA_PKGCONFIG_VERSION=${PYVER}
+# false positives -- functions specific to *BSD
+QA_CONFIG_IMPL_DECL_SKIP=( chflags lchflags )
+
+pkg_pretend() {
+ use test && check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+ use test && check-reqs_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.xz{,.asc}
+ fi
+ default
+}
+
+src_prepare() {
+ # Ensure that internal copies of expat and libffi are not used.
+ rm -r Modules/expat || die
+ rm -r Modules/_ctypes/libffi* || die
+
+ # Causes runtime issues with libressl
+ rm "${WORKDIR}/${PATCHSET}"/0013-bpo-43998-Default-to-TLS-1.2-and-increase-cipher-sui.patch || die
+
+ local PATCHES=(
+ "${WORKDIR}/${PATCHSET}"
+ "${FILESDIR}"/${PN}-3.9.9-r1-libressl.patch
+ "${FILESDIR}"/${PN}-3.10.14-libressl.patch
+ )
+
+ default
+
+ # https://bugs.gentoo.org/850151
+ sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" setup.py || die
+
+ # force the correct number of jobs
+ # https://bugs.gentoo.org/737660
+ local jobs=$(makeopts_jobs)
+ sed -i -e "s:-j0:-j${jobs}:" Makefile.pre.in || die
+ sed -i -e "/self\.parallel/s:True:${jobs}:" setup.py || die
+
+ eautoreconf
+}
+
+src_configure() {
+ # disable automagic bluetooth headers detection
+ if ! use bluetooth; then
+ local -x ac_cv_header_bluetooth_bluetooth_h=no
+ fi
+ local disable
+ use gdbm || disable+=" gdbm"
+ use ncurses || disable+=" _curses _curses_panel"
+ use readline || disable+=" readline"
+ use sqlite || disable+=" _sqlite3"
+ use ssl || export PYTHON_DISABLE_SSL="1"
+ use tk || disable+=" _tkinter"
+ export PYTHON_DISABLE_MODULES="${disable}"
+
+ if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then
+ einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}"
+ fi
+
+ append-flags -fwrapv
+ filter-flags -malign-double
+
+ # Export CXX so it ends up in /usr/lib/python3.X/config/Makefile.
+ # PKG_CONFIG needed for cross.
+ tc-export CXX PKG_CONFIG
+
+ local dbmliborder=
+ if use gdbm; then
+ dbmliborder+="${dbmliborder:+:}gdbm"
+ fi
+
+ if use pgo; then
+ local profile_task_flags=(
+ -m test
+ "-j$(makeopts_jobs)"
+ --pgo-extended
+ -x test_gdb
+ -x test_dtrace
+ -u-network
+
+ # All of these seem to occasionally hang for PGO inconsistently
+ # They'll even hang here but be fine in src_test sometimes.
+ # bug #828535 (and related: bug #788022)
+ -x test_asyncio
+ -x test_concurrent_futures
+ -x test_httpservers
+ -x test_logging
+ -x test_multiprocessing_fork
+ -x test_socket
+ -x test_xmlrpc
+
+ # Hangs (actually runs indefinitely executing itself w/ many cpython builds)
+ # bug #900429
+ -x test_tools
+ )
+
+ if has_version "app-arch/rpm" ; then
+ # Avoid sandbox failure (attempts to write to /var/lib/rpm)
+ profile_task_flags+=(
+ -x test_distutils
+ )
+ fi
+ local -x PROFILE_TASK="${profile_task_flags[*]}"
+ fi
+
+ local myeconfargs=(
+ # glibc-2.30 removes it; since we can't cleanly force-rebuild
+ # Python on glibc upgrade, remove it proactively to give
+ # a chance for users rebuilding python before glibc
+ ac_cv_header_stropts_h=no
+
+ --enable-shared
+ --enable-ipv6
+ --infodir='${prefix}/share/info'
+ --mandir='${prefix}/share/man'
+ --with-computed-gotos
+ --with-dbmliborder="${dbmliborder}"
+ --with-libc=
+ --enable-loadable-sqlite-extensions
+ --without-ensurepip
+ --without-lto
+ --with-system-expat
+ --with-system-ffi
+ --with-wheel-pkg-dir="${EPREFIX}"/usr/lib/python/ensurepip
+
+ $(use_with debug assertions)
+ $(use_enable pgo optimizations)
+ $(use_with valgrind)
+ )
+
+ # disable implicit optimization/debugging flags
+ local -x OPT=
+
+ # https://bugs.gentoo.org/700012
+ if tc-is-lto; then
+ append-cflags $(test-flags-CC -ffat-lto-objects)
+ myeconfargs+=(
+ --with-lto
+ )
+ fi
+
+ if tc-is-cross-compiler ; then
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$(unset PKG_CONFIG_PATH ; $(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libffi)
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ #
+ # -fno-lto to avoid bug #700012 (not like it matters for mini-CBUILD Python anyway)
+ local -x CFLAGS_NODIST="${BUILD_CFLAGS} -fno-lto"
+ local -x LDFLAGS_NODIST=${BUILD_LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+ local -x BUILD_CFLAGS="${CFLAGS_NODIST}"
+ local -x BUILD_LDFLAGS=${LDFLAGS_NODIST}
+
+ # We need to build our own Python on CBUILD first, and feed it in.
+ # bug #847910 and bug #864911.
+ local myeconfargs_cbuild=(
+ "${myeconfargs[@]}"
+
+ --libdir="${cbuild_libdir:2}"
+
+ # Avoid needing to load the right libpython.so.
+ --disable-shared
+
+ # As minimal as possible for the mini CBUILD Python
+ # we build just for cross.
+ --without-lto
+ --disable-optimizations
+ )
+
+ # Point the imminent CHOST build to the Python we just
+ # built for CBUILD.
+ export PATH="${WORKDIR}/${P}-${CBUILD}:${PATH}"
+
+ mkdir "${WORKDIR}"/${P}-${CBUILD} || die
+ pushd "${WORKDIR}"/${P}-${CBUILD} &> /dev/null || die
+ # We disable _ctypes and _crypt for CBUILD because Python's setup.py can't handle locating
+ # libdir correctly for cross.
+ PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" \
+ ECONF_SOURCE="${S}" econf_build "${myeconfargs_cbuild[@]}"
+
+ # Avoid as many dependencies as possible for the cross build.
+ cat >> Makefile <<-EOF || die
+ MODULE_NIS=disabled
+ MODULE__DBM=disabled
+ MODULE__GDBM=disabled
+ MODULE__DBM=disabled
+ MODULE__SQLITE3=disabled
+ MODULE__HASHLIB=disabled
+ MODULE__SSL=disabled
+ MODULE__CURSES=disabled
+ MODULE__CURSES_PANEL=disabled
+ MODULE_READLINE=disabled
+ MODULE__TKINTER=disabled
+ MODULE_PYEXPAT=disabled
+ MODULE_ZLIB=disabled
+ EOF
+
+ # Unfortunately, we do have to build this immediately, and
+ # not in src_compile, because CHOST configure for Python
+ # will check the existence of the Python it was pointed to
+ # immediately.
+ PYTHON_DISABLE_MODULES="${PYTHON_DISABLE_MODULES} _ctypes _crypt" emake
+ popd &> /dev/null || die
+ fi
+
+ # pass system CFLAGS & LDFLAGS as _NODIST, otherwise they'll get
+ # propagated to sysconfig for built extensions
+ local -x CFLAGS_NODIST=${CFLAGS}
+ local -x LDFLAGS_NODIST=${LDFLAGS}
+ local -x CFLAGS= LDFLAGS=
+
+ # Fix implicit declarations on cross and prefix builds. Bug #674070.
+ if use ncurses; then
+ append-cppflags -I"${ESYSROOT}"/usr/include/ncursesw
+ fi
+
+ hprefixify setup.py
+ econf "${myeconfargs[@]}"
+
+ if grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then
+ eerror "configure has detected that the sem_open function is broken."
+ eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777."
+ die "Broken sem_open function (bug 496328)"
+ fi
+
+ # install epython.py as part of stdlib
+ echo "EPYTHON='python${PYVER}'" > Lib/epython.py || die
+}
+
+src_compile() {
+ # Ensure sed works as expected
+ # https://bugs.gentoo.org/594768
+ local -x LC_ALL=C
+ # Prevent using distutils bundled by setuptools.
+ # https://bugs.gentoo.org/823728
+ export SETUPTOOLS_USE_DISTUTILS=stdlib
+
+ # Save PYTHONDONTWRITEBYTECODE so that 'has_version' doesn't
+ # end up writing bytecode & violating sandbox.
+ # bug #831897
+ local -x _PYTHONDONTWRITEBYTECODE=${PYTHONDONTWRITEBYTECODE}
+
+ if use pgo ; then
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ addpredict "/usr/lib/python${PYVER}/site-packages"
+ fi
+
+ # also need to clear the flags explicitly here or they end up
+ # in _sysconfigdata*
+ emake CPPFLAGS= CFLAGS= LDFLAGS=
+
+ # Restore saved value from above.
+ local -x PYTHONDONTWRITEBYTECODE=${_PYTHONDONTWRITEBYTECODE}
+
+ # Work around bug 329499. See also bug 413751 and 457194.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E python
+ else
+ pax-mark m python
+ fi
+}
+
+src_test() {
+ # Tests will not work when cross compiling.
+ if tc-is-cross-compiler; then
+ elog "Disabling tests due to crosscompiling."
+ return
+ fi
+
+ local test_opts=(
+ -u-network
+ -j "$(makeopts_jobs)"
+
+ # fails
+ -x test_concurrent_futures
+ -x test_gdb
+ )
+
+ if use sparc ; then
+ # bug #788022
+ test_opts+=(
+ -x test_multiprocessing_fork
+ -x test_multiprocessing_forkserver
+ )
+ fi
+
+ # workaround docutils breaking tests
+ cat > Lib/docutils.py <<-EOF || die
+ raise ImportError("Thou shalt not import!")
+ EOF
+
+ # bug 660358
+ local -x COLUMNS=80
+ local -x PYTHONDONTWRITEBYTECODE=
+
+ nonfatal emake -Onone test EXTRATESTOPTS="${test_opts[*]}" \
+ CPPFLAGS= CFLAGS= LDFLAGS= < /dev/tty
+ local ret=${?}
+
+ rm Lib/docutils.py || die
+
+ [[ ${ret} -eq 0 ]] || die "emake test failed"
+}
+
+src_install() {
+ local libdir=${ED}/usr/lib/python${PYVER}
+
+ emake DESTDIR="${D}" altinstall
+
+ # Remove static library
+ rm "${ED}"/usr/$(get_libdir)/libpython*.a || die
+
+ # Fix collisions between different slots of Python.
+ rm "${ED}/usr/$(get_libdir)/libpython3.so" || die
+
+ # Cheap hack to get version with ABIFLAGS
+ local abiver=$(cd "${ED}/usr/include"; echo python*)
+ if [[ ${abiver} != python${PYVER} ]]; then
+ # Replace python3.X with a symlink to python3.Xm
+ rm "${ED}/usr/bin/python${PYVER}" || die
+ dosym "${abiver}" "/usr/bin/python${PYVER}"
+ # Create python3.X-config symlink
+ dosym "${abiver}-config" "/usr/bin/python${PYVER}-config"
+ # Create python-3.5m.pc symlink
+ dosym "python-${PYVER}.pc" "/usr/$(get_libdir)/pkgconfig/${abiver/${PYVER}/-${PYVER}}.pc"
+ fi
+
+ # python seems to get rebuilt in src_install (bug 569908)
+ # Work around it for now.
+ if has_version dev-libs/libffi[pax-kernel]; then
+ pax-mark E "${ED}/usr/bin/${abiver}"
+ else
+ pax-mark m "${ED}/usr/bin/${abiver}"
+ fi
+
+ rm -r "${libdir}"/ensurepip/_bundled || die
+ if ! use ensurepip; then
+ rm -r "${libdir}"/ensurepip || die
+ fi
+ if ! use sqlite; then
+ rm -r "${libdir}/"{sqlite3,test/test_sqlite*} || die
+ fi
+ if ! use tk; then
+ rm -r "${ED}/usr/bin/idle${PYVER}" || die
+ rm -r "${libdir}/"{idlelib,tkinter,test/test_tk*} || die
+ fi
+
+ ln -s ../python/EXTERNALLY-MANAGED "${libdir}/EXTERNALLY-MANAGED" || die
+
+ dodoc Misc/{ACKS,HISTORY,NEWS}
+
+ if use examples; then
+ docinto examples
+ find Tools -name __pycache__ -exec rm -fr {} + || die
+ dodoc -r Tools
+ fi
+ insinto /usr/share/gdb/auto-load/usr/$(get_libdir) #443510
+ local libname=$(
+ printf 'e:\n\t@echo $(INSTSONAME)\ninclude Makefile\n' |
+ emake --no-print-directory -s -f - 2>/dev/null
+ )
+ newins Tools/gdb/libpython.py "${libname}"-gdb.py
+
+ newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER}
+ newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER}
+ sed \
+ -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \
+ -e "s:@PYDOC@:pydoc${PYVER}:" \
+ -i "${ED}/etc/conf.d/pydoc-${PYVER}" \
+ "${ED}/etc/init.d/pydoc-${PYVER}" || die "sed failed"
+
+ # python-exec wrapping support
+ local pymajor=${PYVER%.*}
+ local EPYTHON=python${PYVER}
+ local scriptdir=${D}$(python_get_scriptdir)
+ mkdir -p "${scriptdir}" || die
+ # python and pythonX
+ ln -s "../../../bin/${abiver}" "${scriptdir}/python${pymajor}" || die
+ ln -s "python${pymajor}" "${scriptdir}/python" || die
+ # python-config and pythonX-config
+ # note: we need to create a wrapper rather than symlinking it due
+ # to some random dirname(argv[0]) magic performed by python-config
+ cat > "${scriptdir}/python${pymajor}-config" <<-EOF || die
+ #!/bin/sh
+ exec "${abiver}-config" "\${@}"
+ EOF
+ chmod +x "${scriptdir}/python${pymajor}-config" || die
+ ln -s "python${pymajor}-config" "${scriptdir}/python-config" || die
+ # 2to3, pydoc
+ ln -s "../../../bin/2to3-${PYVER}" "${scriptdir}/2to3" || die
+ ln -s "../../../bin/pydoc${PYVER}" "${scriptdir}/pydoc" || die
+ # idle
+ if use tk; then
+ ln -s "../../../bin/idle${PYVER}" "${scriptdir}/idle" || die
+ fi
+}
diff --git a/dev-lang/ruby/Manifest b/dev-lang/ruby/Manifest
new file mode 100644
index 0000000..a55e651
--- /dev/null
+++ b/dev-lang/ruby/Manifest
@@ -0,0 +1 @@
+DIST ruby-3.1.4.tar.xz 15316604 BLAKE2B 5d771c267451c05ae192991976957d43d1131e652ac5a90a8dfff9deba97cf6b139d0113f5d2ed44225a545aa79a1c732555de1efc83d1010d097ec35f7e92dd SHA512 a627bb629a10750b8b2081ad451a41faea0fc85d95aa1e267e3d2a0f56a35bb58195d4a8d13bbdbd82f4197a96dae22b1cee1dfc83861ec33a67ece07aef5633
diff --git a/dev-lang/ruby/files/3.0/001-socksocket-fix.patch b/dev-lang/ruby/files/3.0/001-socksocket-fix.patch
new file mode 100644
index 0000000..1a79e25
--- /dev/null
+++ b/dev-lang/ruby/files/3.0/001-socksocket-fix.patch
@@ -0,0 +1,15 @@
+Fix compilation with socks5 USE flag.
+
+Patch by Phobos Kappa in https://bugs.gentoo.org/762253
+
+--- a/ext/socket/sockssocket.c 2020-12-25 05:33:01.000000000 +0200
++++ b/ext/socket/sockssocket.c 2020-12-28 15:42:50.310029778 +0200
+@@ -34,7 +34,7 @@
+ init = 1;
+ }
+
+- return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS, Qnil);
++ return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS, Qnil, Qnil);
+ }
+
+ #ifdef SOCKS5
diff --git a/dev-lang/ruby/files/3.0/010-default-gem-location.patch b/dev-lang/ruby/files/3.0/010-default-gem-location.patch
new file mode 100644
index 0000000..060579b
--- /dev/null
+++ b/dev-lang/ruby/files/3.0/010-default-gem-location.patch
@@ -0,0 +1,20 @@
+--- a/tool/rbinstall.rb.~1~ 2020-12-25 04:33:01.000000000 +0100
++++ b/tool/rbinstall.rb 2020-12-25 10:05:34.629096405 +0100
+@@ -897,7 +897,7 @@
+ end
+
+ def install_default_gem(dir, srcdir)
+- gem_dir = Gem.default_dir
++ gem_dir = ENV['GEM_DESTDIR']
+ install_dir = with_destdir(gem_dir)
+ prepare "default gems from #{dir}", gem_dir
+ makedirs(Gem.ensure_default_gem_subdirectories(install_dir, $dir_mode).map {|d| File.join(gem_dir, d)})
+@@ -943,7 +943,7 @@
+ end
+
+ install?(:ext, :comm, :gem, :'bundled-gems') do
+- gem_dir = Gem.default_dir
++ gem_dir = ENV['GEM_DESTDIR']
+ install_dir = with_destdir(gem_dir)
+ prepare "bundled gems", gem_dir
+ makedirs(Gem.ensure_gem_subdirectories(install_dir, $dir_mode).map {|d| File.join(gem_dir, d)})
diff --git a/dev-lang/ruby/files/3.0/900-musl-coroutine.patch b/dev-lang/ruby/files/3.0/900-musl-coroutine.patch
new file mode 100644
index 0000000..a323cdd
--- /dev/null
+++ b/dev-lang/ruby/files/3.0/900-musl-coroutine.patch
@@ -0,0 +1,28 @@
+Adapted for Gentoo version 3.0.2
+
+From b570e7de87aaad8c903176d835e8124127f627b3 Mon Sep 17 00:00:00 2001
+From: Andrew Aladjev <aladjev.andrew@gmail.com>
+Date: Sat, 26 Sep 2020 12:58:06 +0300
+Subject: [PATCH] fixed default coroutine selection for musl
+
+---
+ configure.ac | 5 ++++-
+ coroutine/copy/Context.c | 2 ++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index ab5d532c103b..084f0936c006 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2364,7 +2364,10 @@
+ rb_cv_coroutine=copy
+ ],
+ [
+- rb_cv_coroutine=ucontext
++ AC_CHECK_FUNCS([getcontext swapcontext makecontext],
++ [rb_cv_coroutine=ucontext],
++ [rb_cv_coroutine=copy; break]
++ )
+ ]
+ )
+ AC_MSG_RESULT(${rb_cv_coroutine})
diff --git a/dev-lang/ruby/files/3.0/901-musl-stacksize.patch b/dev-lang/ruby/files/3.0/901-musl-stacksize.patch
new file mode 100644
index 0000000..e5fcfce
--- /dev/null
+++ b/dev-lang/ruby/files/3.0/901-musl-stacksize.patch
@@ -0,0 +1,26 @@
+musl has a conservative stacksize, as compared to glibc, so treat it
+like other systems with such stacksize
+
+diff --git a/thread_pthread.c b/thread_pthread.c
+index 951885ffa0..e2d662143b 100644
+--- a/thread_pthread.c
++++ b/thread_pthread.c
+@@ -721,7 +721,7 @@ ruby_init_stack(volatile VALUE *addr
+ {
+ native_main_thread.id = pthread_self();
+
+-#if MAINSTACKADDR_AVAILABLE
++#if MAINSTACKADDR_AVAILABLE && !(defined(__linux__) && !defined(__GLIBC__))
+ if (native_main_thread.stack_maxsize) return;
+ {
+ void* stackaddr;
+@@ -1680,7 +1680,7 @@ ruby_stack_overflowed_p(const rb_thread_t *th, const void *addr)
+
+ #ifdef STACKADDR_AVAILABLE
+ if (get_stack(&base, &size) == 0) {
+-# ifdef __APPLE__
++# if defined(__APPLE__) || (defined(__linux__) && !defined(__GLIBC__))
+ if (pthread_equal(th->thread_id, native_main_thread.id)) {
+ struct rlimit rlim;
+ if (getrlimit(RLIMIT_STACK, &rlim) == 0 && rlim.rlim_cur > size) {
+
diff --git a/dev-lang/ruby/files/3.0/902-hppa-pthread-stack-size.patch b/dev-lang/ruby/files/3.0/902-hppa-pthread-stack-size.patch
new file mode 100644
index 0000000..7978566
--- /dev/null
+++ b/dev-lang/ruby/files/3.0/902-hppa-pthread-stack-size.patch
@@ -0,0 +1,54 @@
+https://bugs.gentoo.org/701494
+
+From 794b6fce94343c4f9dceca5d08224b0fb364fde8 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Fri, 7 Apr 2023 11:46:12 +0100
+Subject: [PATCH] thread_pthread: Grow main_stack if required (fixes tests on
+ HPPA)
+
+On HPPA, test_insns.rb fails (along with various Ruby gems) with
+'stack level too deep (SystemStackError)'. This turns out to be because HPPA
+defaults to a small(er) stack.
+
+With this change, most of Ruby's test suite now passes on HPPA.
+
+Thanks to both Dave and Helge for the investigation and coming up with the
+patch.
+
+Bug: https://bugs.gentoo.org/701494
+Bug: https://bugs.debian.org/881773
+Bug: https://bugs.debian.org/881772 (for PPC64)
+Bug: https://github.com/rack/rack/issues/1640
+Thanks-to: John David Anglin <dave.anglin@bell.net>
+Thanks-to: Helge Deller <deller@gmx.de>
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/thread_pthread.c
++++ b/thread_pthread.c
+@@ -681,8 +681,22 @@ size_t pthread_get_stacksize_np(pthread_t);
+ # define MAINSTACKADDR_AVAILABLE 0
+ # endif
+ #endif
+-#if MAINSTACKADDR_AVAILABLE && !defined(get_main_stack)
+-# define get_main_stack(addr, size) get_stack(addr, size)
++#if MAINSTACKADDR_AVAILABLE
++static int get_stack(void **, size_t *);
++static int
++get_main_stack(void **addr, size_t *size)
++{
++ int ret = get_stack(addr, size);
++
++#ifdef __hppa__
++ /* On some architectures, the initial stack size may be too small, but fortunately,
++ it's growable. Bump it up to the minimum needed if it is too small. */
++ if (*size < RUBY_VM_THREAD_VM_STACK_SIZE)
++ *size = RUBY_VM_THREAD_VM_STACK_SIZE;
++#endif
++
++ return ret;
++}
+ #endif
+
+ #ifdef STACKADDR_AVAILABLE
+--
+2.40.0
+
diff --git a/dev-lang/ruby/files/3.1/001-socksocket-fix.patch b/dev-lang/ruby/files/3.1/001-socksocket-fix.patch
new file mode 100644
index 0000000..1a79e25
--- /dev/null
+++ b/dev-lang/ruby/files/3.1/001-socksocket-fix.patch
@@ -0,0 +1,15 @@
+Fix compilation with socks5 USE flag.
+
+Patch by Phobos Kappa in https://bugs.gentoo.org/762253
+
+--- a/ext/socket/sockssocket.c 2020-12-25 05:33:01.000000000 +0200
++++ b/ext/socket/sockssocket.c 2020-12-28 15:42:50.310029778 +0200
+@@ -34,7 +34,7 @@
+ init = 1;
+ }
+
+- return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS, Qnil);
++ return rsock_init_inetsock(sock, host, port, Qnil, Qnil, INET_SOCKS, Qnil, Qnil);
+ }
+
+ #ifdef SOCKS5
diff --git a/dev-lang/ruby/files/3.1/010-default-gem-location.patch b/dev-lang/ruby/files/3.1/010-default-gem-location.patch
new file mode 100644
index 0000000..039a44b
--- /dev/null
+++ b/dev-lang/ruby/files/3.1/010-default-gem-location.patch
@@ -0,0 +1,20 @@
+--- a/tool/rbinstall.rb.~1~ 2020-12-25 04:33:01.000000000 +0100
++++ b/tool/rbinstall.rb 2020-12-25 10:05:34.629096405 +0100
+@@ -897,7 +897,7 @@
+ end
+
+ def install_default_gem(dir, srcdir, bindir)
+- gem_dir = Gem.default_dir
++ gem_dir = ENV['GEM_DESTDIR']
+ install_dir = with_destdir(gem_dir)
+ prepare "default gems from #{dir}", gem_dir
+ makedirs(Gem.ensure_default_gem_subdirectories(install_dir, $dir_mode).map {|d| File.join(gem_dir, d)})
+@@ -1018,7 +1018,7 @@
+ end
+ Gem.instance_variable_set(:@ruby, ruby_path) if Gem.ruby != ruby_path
+
+- gem_dir = Gem.default_dir
++ gem_dir = ENV['GEM_DESTDIR']
+ install_dir = with_destdir(gem_dir)
+ prepare "bundled gems", gem_dir
+ RbInstall.no_write do
diff --git a/dev-lang/ruby/files/3.1/011-default-gem-location.patch b/dev-lang/ruby/files/3.1/011-default-gem-location.patch
new file mode 100644
index 0000000..fe5d33d
--- /dev/null
+++ b/dev-lang/ruby/files/3.1/011-default-gem-location.patch
@@ -0,0 +1,20 @@
+--- a/tool/rbinstall.rb.~1~ 2020-12-25 04:33:01.000000000 +0100
++++ b/tool/rbinstall.rb 2020-12-25 10:05:34.629096405 +0100
+@@ -897,7 +897,7 @@
+ end
+
+ def install_default_gem(dir, srcdir, bindir)
+- gem_dir = Gem.default_dir
++ gem_dir = ENV['GEM_DESTDIR']
+ install_dir = with_destdir(gem_dir)
+ prepare "default gems from #{dir}", gem_dir
+ makedirs(Gem.ensure_default_gem_subdirectories(install_dir, $dir_mode).map {|d| File.join(gem_dir, d)})
+@@ -1010,7 +1010,7 @@
+ end
+
+ install?(:ext, :comm, :gem, :'bundled-gems') do
+- gem_dir = Gem.default_dir
++ gem_dir = ENV['GEM_DESTDIR']
+ install_dir = with_destdir(gem_dir)
+ prepare "bundled gems", gem_dir
+ RbInstall.no_write do
diff --git a/dev-lang/ruby/files/3.1/901-musl-stacksize.patch b/dev-lang/ruby/files/3.1/901-musl-stacksize.patch
new file mode 100644
index 0000000..e5fcfce
--- /dev/null
+++ b/dev-lang/ruby/files/3.1/901-musl-stacksize.patch
@@ -0,0 +1,26 @@
+musl has a conservative stacksize, as compared to glibc, so treat it
+like other systems with such stacksize
+
+diff --git a/thread_pthread.c b/thread_pthread.c
+index 951885ffa0..e2d662143b 100644
+--- a/thread_pthread.c
++++ b/thread_pthread.c
+@@ -721,7 +721,7 @@ ruby_init_stack(volatile VALUE *addr
+ {
+ native_main_thread.id = pthread_self();
+
+-#if MAINSTACKADDR_AVAILABLE
++#if MAINSTACKADDR_AVAILABLE && !(defined(__linux__) && !defined(__GLIBC__))
+ if (native_main_thread.stack_maxsize) return;
+ {
+ void* stackaddr;
+@@ -1680,7 +1680,7 @@ ruby_stack_overflowed_p(const rb_thread_t *th, const void *addr)
+
+ #ifdef STACKADDR_AVAILABLE
+ if (get_stack(&base, &size) == 0) {
+-# ifdef __APPLE__
++# if defined(__APPLE__) || (defined(__linux__) && !defined(__GLIBC__))
+ if (pthread_equal(th->thread_id, native_main_thread.id)) {
+ struct rlimit rlim;
+ if (getrlimit(RLIMIT_STACK, &rlim) == 0 && rlim.rlim_cur > size) {
+
diff --git a/dev-lang/ruby/files/3.1/902-hppa-pthread-stack-size.patch b/dev-lang/ruby/files/3.1/902-hppa-pthread-stack-size.patch
new file mode 100644
index 0000000..2578ff0
--- /dev/null
+++ b/dev-lang/ruby/files/3.1/902-hppa-pthread-stack-size.patch
@@ -0,0 +1,54 @@
+https://bugs.gentoo.org/701494
+
+From 91bfb8a5166f4530ce556a11a4b7fb64983b7686 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Fri, 7 Apr 2023 11:46:12 +0100
+Subject: [PATCH] thread_pthread: Grow main_stack if required (fixes tests on
+ HPPA)
+
+On HPPA, test_insns.rb fails (along with various Ruby gems) with
+'stack level too deep (SystemStackError)'. This turns out to be because HPPA
+defaults to a small(er) stack.
+
+With this change, most of Ruby's test suite now passes on HPPA.
+
+Thanks to both Dave and Helge for the investigation and coming up with the
+patch.
+
+Bug: https://bugs.gentoo.org/701494
+Bug: https://bugs.debian.org/881773
+Bug: https://bugs.debian.org/881772 (for PPC64)
+Bug: https://github.com/rack/rack/issues/1640
+Thanks-to: John David Anglin <dave.anglin@bell.net>
+Thanks-to: Helge Deller <deller@gmx.de>
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/thread_pthread.c
++++ b/thread_pthread.c
+@@ -738,8 +738,22 @@ size_t pthread_get_stacksize_np(pthread_t);
+ # define MAINSTACKADDR_AVAILABLE 0
+ # endif
+ #endif
+-#if MAINSTACKADDR_AVAILABLE && !defined(get_main_stack)
+-# define get_main_stack(addr, size) get_stack(addr, size)
++#if MAINSTACKADDR_AVAILABLE
++static int get_stack(void **, size_t *);
++static int
++get_main_stack(void **addr, size_t *size)
++{
++ int ret = get_stack(addr, size);
++
++#ifdef __hppa__
++ /* On some architectures, the initial stack size may be too small, but fortunately,
++ it's growable. Bump it up to the minimum needed if it is too small. */
++ if (*size < RUBY_VM_THREAD_VM_STACK_SIZE)
++ *size = RUBY_VM_THREAD_VM_STACK_SIZE;
++#endif
++
++ return ret;
++}
+ #endif
+
+ #ifdef STACKADDR_AVAILABLE
+--
+2.40.0
+
diff --git a/dev-lang/ruby/files/ruby-3.1-libressl.patch b/dev-lang/ruby/files/ruby-3.1-libressl.patch
new file mode 100644
index 0000000..0394c93
--- /dev/null
+++ b/dev-lang/ruby/files/ruby-3.1-libressl.patch
@@ -0,0 +1,19 @@
+From OpenBSD:
+
+https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/lang/ruby/3.1/patches/patch-ext_openssl_ossl_pkey_c
+
+LibreSSL 3.5 and later provide and need to use
+PEM_write_bio_PrivateKey_traditional()
+
+Index: ext/openssl/ossl_pkey.c
+--- a/ext/openssl/ossl_pkey.c.orig
++++ b/ext/openssl/ossl_pkey.c
+@@ -670,7 +670,7 @@ ossl_pkey_export_traditional(int argc, VALUE *argv, VA
+ }
+ }
+ else {
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
+ if (!PEM_write_bio_PrivateKey_traditional(bio, pkey, enc, NULL, 0,
+ ossl_pem_passwd_cb,
+ (void *)pass)) {
diff --git a/dev-lang/ruby/metadata.xml b/dev-lang/ruby/metadata.xml
new file mode 100644
index 0000000..cf9a216
--- /dev/null
+++ b/dev-lang/ruby/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>ruby@gentoo.org</email>
+ <name>Gentoo Ruby Project</name>
+ </maintainer>
+ <use>
+ <flag name="rdoc">Install <pkg>dev-ruby/rdoc</pkg> after installing Ruby.</flag>
+ <flag name="systemtap">Enable SystemTAP/DTrace tracing</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">ruby/ruby</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-lang/ruby/ruby-3.1.4-r3.ebuild b/dev-lang/ruby/ruby-3.1.4-r3.ebuild
new file mode 100644
index 0000000..1213328
--- /dev/null
+++ b/dev-lang/ruby/ruby-3.1.4-r3.ebuild
@@ -0,0 +1,273 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic multiprocessing
+
+MY_P="${PN}-$(ver_cut 1-3)"
+S=${WORKDIR}/${MY_P}
+
+SLOT=$(ver_cut 1-2)
+MY_SUFFIX=$(ver_rs 1 '' ${SLOT})
+RUBYVERSION=${SLOT}.0
+
+DESCRIPTION="An object-oriented scripting language"
+HOMEPAGE="https://www.ruby-lang.org/"
+SRC_URI="https://cache.ruby-lang.org/pub/ruby/${SLOT}/${MY_P}.tar.xz"
+
+LICENSE="|| ( Ruby-BSD BSD-2 )"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="berkdb debug doc examples gdbm ipv6 jemalloc jit +rdoc socks5 +ssl static-libs systemtap tk valgrind xemacs"
+
+RDEPEND="
+ berkdb? ( sys-libs/db:= )
+ gdbm? ( sys-libs/gdbm:= )
+ jemalloc? ( dev-libs/jemalloc:= )
+ jit? ( || ( sys-devel/gcc:* sys-devel/clang:* ) )
+ ssl? (
+ dev-libs/openssl:0=
+ )
+ socks5? ( >=net-proxy/dante-1.1.13 )
+ systemtap? ( dev-debug/systemtap )
+ tk? (
+ dev-lang/tcl:0=[threads]
+ dev-lang/tk:0=[threads]
+ )
+ dev-libs/libyaml
+ dev-libs/libffi:=
+ sys-libs/readline:0=
+ sys-libs/zlib
+ virtual/libcrypt:=
+ >=app-eselect/eselect-ruby-20201225
+"
+
+DEPEND="
+ ${RDEPEND}
+ valgrind? ( dev-debug/valgrind )
+"
+
+BUNDLED_GEMS="
+ >=dev-ruby/minitest-5.15.0[ruby_targets_ruby31(-)]
+ >=dev-ruby/power_assert-2.0.1[ruby_targets_ruby31(-)]
+ >=dev-ruby/rake-13.0.6-r2[ruby_targets_ruby31(-)]
+ >=dev-ruby/rbs-2.1.0[ruby_targets_ruby31(-)]
+ >=dev-ruby/rexml-3.2.5[ruby_targets_ruby31(-)]
+ >=dev-ruby/rss-0.2.9[ruby_targets_ruby31(-)]
+ >=dev-ruby/test-unit-3.5.3[ruby_targets_ruby31(-)]
+ >=dev-ruby/typeprof-0.12.2[ruby_targets_ruby31(-)]
+"
+
+PDEPEND="
+ ${BUNDLED_GEMS}
+ virtual/rubygems[ruby_targets_ruby31(-)]
+ >=dev-ruby/bundler-2.3.3[ruby_targets_ruby31(-)]
+ >=dev-ruby/did_you_mean-1.6.1[ruby_targets_ruby31(-)]
+ >=dev-ruby/json-2.6.1[ruby_targets_ruby31(-)]
+ rdoc? ( >=dev-ruby/rdoc-6.3.3[ruby_targets_ruby31(-)] )
+ xemacs? ( app-xemacs/ruby-modes )
+"
+
+src_prepare() {
+ eapply "${FILESDIR}"/${PN}-3.1-libressl.patch
+ eapply "${FILESDIR}"/"${SLOT}"/011*.patch
+ eapply "${FILESDIR}"/"${SLOT}"/902*.patch
+
+ if use elibc_musl ; then
+ eapply "${FILESDIR}"/3.1/901-musl-*.patch
+ fi
+
+ einfo "Unbundling gems..."
+ cd "$S"
+ # Remove bundled gems that we will install via PDEPEND, bug
+ # 539700.
+ rm -fr gems/* || die
+ touch gems/bundled_gems || die
+ # Don't install CLI tools since they will clash with the gem
+ rm -f bin/{racc,racc2y,y2racc} || die
+ sed -i -e '/executables/ s:^:#:' lib/racc/racc.gemspec || die
+
+ einfo "Removing bundled libraries..."
+ rm -fr ext/fiddle/libffi-3.2.1 || die
+
+ # Remove tests that are known to fail or require a network connection
+ rm -f test/ruby/test_process.rb test/rubygems/test_gem{,_path_support}.rb || die
+ rm -f test/rinda/test_rinda.rb test/socket/test_tcp.rb test/fiber/test_address_resolve.rb test/resolv/test_addr.rb \
+ spec/ruby/library/socket/tcpsocket/{initialize,open}_spec.rb|| die
+ sed -i -e '/def test_test/askip "Depends on system setup"' test/ruby/test_file_exhaustive.rb || die
+
+ if use prefix ; then
+ # Fix hardcoded SHELL var in mkmf library
+ sed -i -e "s#\(SHELL = \).*#\1${EPREFIX}/bin/sh#" lib/mkmf.rb || die
+
+ if [[ ${CHOST} == *darwin* ]] ; then
+ # avoid symlink loop on Darwin (?!)
+ sed -i \
+ -e '/LIBRUBY_ALIASES=/s/lib$(RUBY_INSTALL_NAME).$(SOEXT)//' \
+ configure.ac || die
+
+ # make ar/libtool hack for Darwin work
+ sed -i \
+ -e "s/ac_cv_prog_ac_ct_AR='libtool/ac_cv_prog_AR='${CHOST}-libtool/" \
+ configure.ac || die
+
+ # disable using security framework (GCC barfs on those headers)
+ sed -i \
+ -e 's/MAC_OS_X_VERSION_MIN_REQUIRED/_DISABLED_/' \
+ random.c || die
+ fi
+ fi
+
+ eapply_user
+
+ eautoreconf
+}
+
+src_configure() {
+ local modules="win32,win32ole" myconf=
+
+ # Ruby's build system does interesting things with MAKEOPTS and doesn't
+ # handle MAKEOPTS="-Oline" or similar well. Just filter it all out
+ # and use -j/-l parsed out from the original MAKEOPTS, then use that.
+ # Newer Portage sets this option by default in GNUMAKEFLAGS if nothing
+ # is set by the user in MAKEOPTS. See bug #900929 and bug #728424.
+ local makeopts_tmp="-j$(makeopts_jobs) -l$(makeopts_loadavg)"
+ unset MAKEOPTS MAKEFLAGS GNUMAKEFLAGS
+ export MAKEOPTS="${makeopts_tmp}"
+
+ # -fomit-frame-pointer makes ruby segfault, see bug #150413.
+ filter-flags -fomit-frame-pointer
+ # In many places aliasing rules are broken; play it safe
+ # as it's risky with newer compilers to leave it as it is.
+ append-flags -fno-strict-aliasing
+
+ # Socks support via dante
+ if use socks5 ; then
+ # Socks support can't be disabled as long as SOCKS_SERVER is
+ # set and socks library is present, so need to unset
+ # SOCKS_SERVER in that case.
+ unset SOCKS_SERVER
+ fi
+
+ # Increase GC_MALLOC_LIMIT if set (default is 8000000)
+ if [ -n "${RUBY_GC_MALLOC_LIMIT}" ] ; then
+ append-flags "-DGC_MALLOC_LIMIT=${RUBY_GC_MALLOC_LIMIT}"
+ fi
+
+ # ipv6 hack, bug 168939. Needs --enable-ipv6.
+ use ipv6 || myconf="${myconf} --with-lookup-order-hack=INET"
+
+ # Determine which modules *not* to build depending in the USE flags.
+ if ! use berkdb ; then
+ modules="${modules},dbm"
+ fi
+ if ! use gdbm ; then
+ modules="${modules},gdbm"
+ fi
+ if ! use ssl ; then
+ modules="${modules},openssl"
+ fi
+ if ! use tk ; then
+ modules="${modules},tk"
+ fi
+
+ # Provide an empty LIBPATHENV because we disable rpath but we do not
+ # need LD_LIBRARY_PATH by default since that breaks USE=multitarget
+ # #564272
+ INSTALL="${EPREFIX}/usr/bin/install -c" LIBPATHENV="" econf \
+ --program-suffix=${MY_SUFFIX} \
+ --with-soname=ruby${MY_SUFFIX} \
+ --with-readline-dir="${EPREFIX}"/usr \
+ --enable-shared \
+ --enable-pthread \
+ --disable-rpath \
+ --without-baseruby \
+ --with-compress-debug-sections=no \
+ --enable-mkmf-verbose \
+ --with-out-ext="${modules}" \
+ $(use_with jemalloc jemalloc) \
+ $(use_enable jit jit-support ) \
+ $(use_enable socks5 socks) \
+ $(use_enable systemtap dtrace) \
+ $(use_enable doc install-doc) \
+ --enable-ipv6 \
+ $(use_enable static-libs static) \
+ $(use_enable static-libs install-static-library) \
+ $(use_with static-libs static-linked-ext) \
+ $(use_enable debug) \
+ $(use_with valgrind) \
+ ${myconf} \
+ --enable-option-checking=no
+
+ # Makefile is broken because it lacks -ldl
+ rm -rf ext/-test-/popen_deadlock || die
+}
+
+src_compile() {
+ emake V=1 EXTLDFLAGS="${LDFLAGS}" MJIT_CFLAGS="${CFLAGS}" MJIT_OPTFLAGS="" MJIT_DEBUGFLAGS=""
+}
+
+src_test() {
+ emake V=1 check
+}
+
+src_install() {
+ # Remove the remaining bundled gems. We do this late in the process
+ # since they are used during the build to e.g. create the
+ # documentation.
+ einfo "Removing default gems before installation"
+ rm -rf lib/bundler* lib/rdoc/rdoc.gemspec || die
+
+ # Ruby is involved in the install process, we don't want interference here.
+ unset RUBYOPT
+
+ local MINIRUBY=$(echo -e 'include Makefile\ngetminiruby:\n\t@echo $(MINIRUBY)'|make -f - getminiruby)
+
+ local -x LD_LIBRARY_PATH="${S}:${ED}/usr/$(get_libdir)${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}"
+
+ if [[ ${CHOST} == *darwin* ]] ; then
+ local -x DYLD_LIBRARY_PATH="${S}:${ED}/usr/$(get_libdir)${DYLD_LIBRARY_PATH+:}${DYLD_LIBRARY_PATH}"
+ fi
+
+ local -x RUBYLIB="${S}:${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}"
+ for d in $(find "${S}/ext" -type d) ; do
+ RUBYLIB="${RUBYLIB}:$d"
+ done
+
+ # Create directory for the default gems
+ local gem_home="${EPREFIX}/usr/$(get_libdir)/ruby/gems/${RUBYVERSION}"
+ mkdir -p "${D}/${gem_home}" || die "mkdir gem home failed"
+
+ emake V=1 DESTDIR="${D}" GEM_DESTDIR=${gem_home} install
+
+ # Remove installed rubygems and rdoc copy
+ rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}/rubygems" || die "rm rubygems failed"
+ rm -rf "${ED}/usr/bin/"gem"${MY_SUFFIX}" || die "rm rdoc bins failed"
+ rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}"/rdoc* || die "rm rdoc failed"
+ rm -rf "${ED}/usr/bin/"{bundle,bundler,ri,rdoc}"${MY_SUFFIX}" || die "rm rdoc bins failed"
+
+ if use doc; then
+ emake DESTDIR="${D}" GEM_DESTDIR=${gem_home} install-doc
+ fi
+
+ if use examples; then
+ dodoc -r sample
+ fi
+
+ dodoc ChangeLog NEWS.md doc/NEWS* README*
+}
+
+pkg_postinst() {
+ if [[ ! -n $(readlink "${EROOT}"/usr/bin/ruby) ]] ; then
+ eselect ruby set ruby${MY_SUFFIX}
+ fi
+
+ elog
+ elog "To switch between available Ruby profiles, execute as root:"
+ elog "\teselect ruby set ruby(30|31|...)"
+ elog
+}
+
+pkg_postrm() {
+ eselect ruby cleanup
+}
diff --git a/dev-lang/ruby/ruby-3.1.4-r5.ebuild b/dev-lang/ruby/ruby-3.1.4-r5.ebuild
new file mode 100644
index 0000000..22d15a9
--- /dev/null
+++ b/dev-lang/ruby/ruby-3.1.4-r5.ebuild
@@ -0,0 +1,277 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic multiprocessing
+
+MY_P="${PN}-$(ver_cut 1-3)"
+S=${WORKDIR}/${MY_P}
+
+SLOT=$(ver_cut 1-2)
+MY_SUFFIX=$(ver_rs 1 '' ${SLOT})
+RUBYVERSION=${SLOT}.0
+
+DESCRIPTION="An object-oriented scripting language"
+HOMEPAGE="https://www.ruby-lang.org/"
+SRC_URI="https://cache.ruby-lang.org/pub/ruby/${SLOT}/${MY_P}.tar.xz"
+
+LICENSE="|| ( Ruby-BSD BSD-2 )"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="berkdb debug doc examples gdbm ipv6 jemalloc jit socks5 +ssl static-libs systemtap tk valgrind xemacs"
+
+RDEPEND="
+ berkdb? ( sys-libs/db:= )
+ gdbm? ( sys-libs/gdbm:= )
+ jemalloc? ( dev-libs/jemalloc:= )
+ jit? ( || ( sys-devel/gcc:* sys-devel/clang:* ) )
+ ssl? (
+ dev-libs/openssl:0=
+ )
+ socks5? ( >=net-proxy/dante-1.1.13 )
+ systemtap? ( dev-debug/systemtap )
+ tk? (
+ dev-lang/tcl:0=[threads]
+ dev-lang/tk:0=[threads]
+ )
+ dev-libs/libyaml
+ dev-libs/libffi:=
+ sys-libs/readline:0=
+ sys-libs/zlib
+ virtual/libcrypt:=
+ >=app-eselect/eselect-ruby-20231008
+"
+
+DEPEND="
+ ${RDEPEND}
+ valgrind? ( dev-debug/valgrind )
+"
+
+BUNDLED_GEMS="
+ >=dev-ruby/irb-1.4.1[ruby_targets_ruby31(-)]
+ >=dev-ruby/minitest-5.15.0[ruby_targets_ruby31(-)]
+ >=dev-ruby/power_assert-2.0.1[ruby_targets_ruby31(-)]
+ >=dev-ruby/rake-13.0.6-r2[ruby_targets_ruby31(-)]
+ >=dev-ruby/rbs-2.1.0[ruby_targets_ruby31(-)]
+ >=dev-ruby/rexml-3.2.5[ruby_targets_ruby31(-)]
+ >=dev-ruby/rss-0.2.9[ruby_targets_ruby31(-)]
+ >=dev-ruby/test-unit-3.5.3[ruby_targets_ruby31(-)]
+ >=dev-ruby/typeprof-0.12.2[ruby_targets_ruby31(-)]
+"
+
+PDEPEND="
+ ${BUNDLED_GEMS}
+ virtual/rubygems[ruby_targets_ruby31(-)]
+ >=dev-ruby/bundler-2.3.3[ruby_targets_ruby31(-)]
+ >=dev-ruby/did_you_mean-1.6.1[ruby_targets_ruby31(-)]
+ >=dev-ruby/json-2.6.1[ruby_targets_ruby31(-)]
+ >=dev-ruby/rdoc-6.3.3[ruby_targets_ruby31(-)]
+ xemacs? ( app-xemacs/ruby-modes )
+"
+
+src_prepare() {
+ eapply "${FILESDIR}"/${PN}-3.1-libressl.patch
+ eapply "${FILESDIR}"/"${SLOT}"/011*.patch
+ eapply "${FILESDIR}"/"${SLOT}"/902*.patch
+
+ if use elibc_musl ; then
+ eapply "${FILESDIR}"/3.1/901-musl-*.patch
+ fi
+
+ einfo "Unbundling gems..."
+ cd "$S"
+ # Remove bundled gems that we will install via PDEPEND, bug
+ # 539700.
+ rm -fr gems/* || die
+ touch gems/bundled_gems || die
+ # Don't install CLI tools since they will clash with the gem
+ rm -f bin/{racc,racc2y,y2racc} || die
+ sed -i -e '/executables/ s:^:#:' lib/racc/racc.gemspec || die
+
+ einfo "Removing bundled libraries..."
+ rm -fr ext/fiddle/libffi-3.2.1 || die
+
+ # Remove webrick tests because setting LD_LIBRARY_PATH does not work for them.
+ rm -rf tool/test/webrick || die
+
+ # Remove tests that are known to fail or require a network connection
+ rm -f test/ruby/test_process.rb test/rubygems/test_gem{,_path_support}.rb || die
+ rm -f test/rinda/test_rinda.rb test/socket/test_tcp.rb test/fiber/test_address_resolve.rb test/resolv/test_addr.rb \
+ spec/ruby/library/socket/tcpsocket/{initialize,open}_spec.rb|| die
+ sed -i -e '/def test_test/askip "Depends on system setup"' test/ruby/test_file_exhaustive.rb || die
+
+ if use prefix ; then
+ # Fix hardcoded SHELL var in mkmf library
+ sed -i -e "s#\(SHELL = \).*#\1${EPREFIX}/bin/sh#" lib/mkmf.rb || die
+
+ if [[ ${CHOST} == *darwin* ]] ; then
+ # avoid symlink loop on Darwin (?!)
+ sed -i \
+ -e '/LIBRUBY_ALIASES=/s/lib$(RUBY_INSTALL_NAME).$(SOEXT)//' \
+ configure.ac || die
+
+ # make ar/libtool hack for Darwin work
+ sed -i \
+ -e "s/ac_cv_prog_ac_ct_AR='libtool/ac_cv_prog_AR='${CHOST}-libtool/" \
+ configure.ac || die
+
+ # disable using security framework (GCC barfs on those headers)
+ sed -i \
+ -e 's/MAC_OS_X_VERSION_MIN_REQUIRED/_DISABLED_/' \
+ random.c || die
+ fi
+ fi
+
+ eapply_user
+
+ eautoreconf
+}
+
+src_configure() {
+ local modules="win32,win32ole" myconf=
+
+ # Ruby's build system does interesting things with MAKEOPTS and doesn't
+ # handle MAKEOPTS="-Oline" or similar well. Just filter it all out
+ # and use -j/-l parsed out from the original MAKEOPTS, then use that.
+ # Newer Portage sets this option by default in GNUMAKEFLAGS if nothing
+ # is set by the user in MAKEOPTS. See bug #900929 and bug #728424.
+ local makeopts_tmp="-j$(makeopts_jobs) -l$(makeopts_loadavg)"
+ unset MAKEOPTS MAKEFLAGS GNUMAKEFLAGS
+ export MAKEOPTS="${makeopts_tmp}"
+
+ # -fomit-frame-pointer makes ruby segfault, see bug #150413.
+ filter-flags -fomit-frame-pointer
+ # In many places aliasing rules are broken; play it safe
+ # as it's risky with newer compilers to leave it as it is.
+ append-flags -fno-strict-aliasing
+
+ # Socks support via dante
+ if use socks5 ; then
+ # Socks support can't be disabled as long as SOCKS_SERVER is
+ # set and socks library is present, so need to unset
+ # SOCKS_SERVER in that case.
+ unset SOCKS_SERVER
+ fi
+
+ # Increase GC_MALLOC_LIMIT if set (default is 8000000)
+ if [ -n "${RUBY_GC_MALLOC_LIMIT}" ] ; then
+ append-flags "-DGC_MALLOC_LIMIT=${RUBY_GC_MALLOC_LIMIT}"
+ fi
+
+ # ipv6 hack, bug 168939. Needs --enable-ipv6.
+ use ipv6 || myconf="${myconf} --with-lookup-order-hack=INET"
+
+ # Determine which modules *not* to build depending in the USE flags.
+ if ! use berkdb ; then
+ modules="${modules},dbm"
+ fi
+ if ! use gdbm ; then
+ modules="${modules},gdbm"
+ fi
+ if ! use ssl ; then
+ modules="${modules},openssl"
+ fi
+ if ! use tk ; then
+ modules="${modules},tk"
+ fi
+
+ # Provide an empty LIBPATHENV because we disable rpath but we do not
+ # need LD_LIBRARY_PATH by default since that breaks USE=multitarget
+ # #564272
+ INSTALL="${EPREFIX}/usr/bin/install -c" LIBPATHENV="" econf \
+ --program-suffix=${MY_SUFFIX} \
+ --with-soname=ruby${MY_SUFFIX} \
+ --with-readline-dir="${EPREFIX}"/usr \
+ --enable-shared \
+ --enable-pthread \
+ --disable-rpath \
+ --without-baseruby \
+ --with-compress-debug-sections=no \
+ --enable-mkmf-verbose \
+ --with-out-ext="${modules}" \
+ $(use_with jemalloc jemalloc) \
+ $(use_enable jit jit-support ) \
+ $(use_enable socks5 socks) \
+ $(use_enable systemtap dtrace) \
+ $(use_enable doc install-doc) \
+ --enable-ipv6 \
+ $(use_enable static-libs static) \
+ $(use_enable static-libs install-static-library) \
+ $(use_with static-libs static-linked-ext) \
+ $(use_enable debug) \
+ $(use_with valgrind) \
+ ${myconf} \
+ --enable-option-checking=no
+
+ # Makefile is broken because it lacks -ldl
+ rm -rf ext/-test-/popen_deadlock || die
+}
+
+src_compile() {
+ emake V=1 EXTLDFLAGS="${LDFLAGS}" MJIT_CFLAGS="${CFLAGS}" MJIT_OPTFLAGS="" MJIT_DEBUGFLAGS=""
+}
+
+src_test() {
+ emake V=1 check
+}
+
+src_install() {
+ # Remove the remaining bundled gems. We do this late in the process
+ # since they are used during the build to e.g. create the
+ # documentation.
+ einfo "Removing default gems before installation"
+ rm -rf lib/bundler* lib/rdoc/rdoc.gemspec || die
+
+ # Ruby is involved in the install process, we don't want interference here.
+ unset RUBYOPT
+
+ local MINIRUBY=$(echo -e 'include Makefile\ngetminiruby:\n\t@echo $(MINIRUBY)'|make -f - getminiruby)
+
+ local -x LD_LIBRARY_PATH="${S}:${ED}/usr/$(get_libdir)${LD_LIBRARY_PATH+:}${LD_LIBRARY_PATH}"
+
+ if [[ ${CHOST} == *darwin* ]] ; then
+ local -x DYLD_LIBRARY_PATH="${S}:${ED}/usr/$(get_libdir)${DYLD_LIBRARY_PATH+:}${DYLD_LIBRARY_PATH}"
+ fi
+
+ local -x RUBYLIB="${S}:${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}"
+ for d in $(find "${S}/ext" -type d) ; do
+ RUBYLIB="${RUBYLIB}:$d"
+ done
+
+ # Create directory for the default gems
+ local gem_home="${EPREFIX}/usr/$(get_libdir)/ruby/gems/${RUBYVERSION}"
+ mkdir -p "${D}/${gem_home}" || die "mkdir gem home failed"
+
+ emake V=1 DESTDIR="${D}" GEM_DESTDIR=${gem_home} install
+
+ # Remove installed rubygems and rdoc copy
+ rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}/rubygems" || die "rm rubygems failed"
+ rm -rf "${ED}/usr/bin/"gem"${MY_SUFFIX}" || die "rm rdoc bins failed"
+ rm -rf "${ED}/usr/$(get_libdir)/ruby/${RUBYVERSION}"/rdoc* || die "rm rdoc failed"
+ rm -rf "${ED}/usr/bin/"{bundle,bundler,ri,rdoc}"${MY_SUFFIX}" || die "rm rdoc bins failed"
+
+ if use doc; then
+ emake DESTDIR="${D}" GEM_DESTDIR=${gem_home} install-doc
+ fi
+
+ if use examples; then
+ dodoc -r sample
+ fi
+
+ dodoc ChangeLog NEWS.md doc/NEWS* README*
+}
+
+pkg_postinst() {
+ if [[ ! -n $(readlink "${EROOT}"/usr/bin/ruby) ]] ; then
+ eselect ruby set ruby${MY_SUFFIX}
+ fi
+
+ elog
+ elog "To switch between available Ruby profiles, execute as root:"
+ elog "\teselect ruby set ruby(30|31|...)"
+ elog
+}
+
+pkg_postrm() {
+ eselect ruby cleanup
+}
diff --git a/dev-lang/rust/Manifest b/dev-lang/rust/Manifest
new file mode 100644
index 0000000..1d9c9d3
--- /dev/null
+++ b/dev-lang/rust/Manifest
@@ -0,0 +1,188 @@
+DIST rust-1.70.0-aarch64-unknown-linux-gnu.tar.xz 212261108 BLAKE2B 56e15d01ea0e84c51ca3d4fc292c124536472e9c3e6d9ae13ab524e520865117b36621eca5072b961831ee6ad3077abd84afa9e092483095234b7ab2ddcae769 SHA512 d64eb19417a03452f591bb779042b2b3ff16d2ac48a9a74d293bc7265980280801784f92cdd0ae0dbc21743433388149557da7642871c72f3bb4b3061cf7eeba
+DIST rust-1.70.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 435383da02632d404ce95ecfc0b0690f18447f22cd82e67cd08e6e8aab072539b33a49c2712bdc35f34a811f8e66bda6bcf9505b41dcdaf4cc66e358df9d7f02 SHA512 634c35b52d85c524a954d0663b6f1507c5aec826768c1a51394bf72bae585afadd3d3af985a9d165a65d178e04813fd592a78d058ed1400bb0fc43b0a1614a27
+DIST rust-1.70.0-aarch64-unknown-linux-musl.tar.xz 195626092 BLAKE2B df5ca11b64513c86dbcab93bbc5eee37a1f2c6307ca479c07ef62d683ec1b1f56bd596284b11695d80c8483ba5ffaacb0bf060d7618f5e79f3957bfe8bae042b SHA512 5bcc47e2e791603b419c2d1f3503a60cc9a4a7351d3e8a61e6f3823c53195f58795cfcdc56c0c2011ae40a21ec7819d7dad32f5f9981f3d39e5f28ba85083d07
+DIST rust-1.70.0-aarch64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 06e279acca2308599b367cfcc105e9a1a9b129c1ce8d70e9c64f34f471fb9f28ba0b3ffc71ba389a8268d7f35fbaeadafb3275be29e7db8e8167ce1a828a3fbc SHA512 945a1679eea5fc89debe6c840b95314fd7be3f5ded9897965584cb53c3571b9ad18b1894fe4f8f82cd2373ee473c002c290ff943466f7d467357a6d56b62ce2b
+DIST rust-1.70.0-arm-unknown-linux-gnueabi.tar.xz 175940376 BLAKE2B 101b06523554df9f115f33dbace6a045fdad5ede100c7ed70a50da8a522e271708223f2cd5600fc4c2d5aa920e8179c9d60c24649dd234afc3fffe20d06935f8 SHA512 b1c3bd1c80437fda5e605aebbedc3f03f13223ab7fb37cf5808c8ccad00f015dd4656979e6f47ae65ef42dd158ffe18e9fa74aa17e80de76e73a8065efdf0760
+DIST rust-1.70.0-arm-unknown-linux-gnueabi.tar.xz.asc 801 BLAKE2B 1e901439a083b6da2e62df19829c76a3cd2486115f855407f329b9cae0dff7a0c24b31dc48c13b28c17975cbc7f3c8d6073d7cc5629e78182f891d01e93d09a1 SHA512 c32b7f12c1c5cb5263444f6ccc5facf69e78a63816915babfe68e81be33bbf8a922618fc47fe2ec7142f8f04127fac89504b332cab5e0b29e028011ec5d2927c
+DIST rust-1.70.0-arm-unknown-linux-gnueabihf.tar.xz 176229396 BLAKE2B 4c3be748a110a0db483b5cc8baff433ef7b67af0c21be41a68a72b4307ac8dfa9717e066db3768204b03550484ebb4d7e6d45345f33ba797844132e1dbdb16dd SHA512 847602b101fe68e639598fd15592e60c8b4b2482077aad62b60918fd09c1928f1ed251197bbbbe3fbc5578a0e1e2abcdfe838e9c54cacba30e3ef2fa3d6e9557
+DIST rust-1.70.0-arm-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B f8d920f2f3c1021ac207b1e3c0004e07bedaa207d463a60c9f2556d057a8e80eeec00565fc61ec9fae67e435bbfd902c4b54d2df0a710fd9f63594e7852498dd SHA512 0b7983572502d918241510abbe23ff913e5757f9a7d64e00701b23666a188a2324d70fd1840cb2b604fec813ce1883e1aa30bb421e1648497f3b165b9ccf4e89
+DIST rust-1.70.0-armv7-unknown-linux-gnueabihf.tar.xz 180820156 BLAKE2B dcaf472e5bce185f56a8ecd509ca0b829afe8203c5f3154c8065b0e3d9848f9f2cb6f6ee30568a52deebb21bec9aa8d05f7f2c2f42d584833a4f998ade707c94 SHA512 adb7d0fbabf14fc654e020bc8f7a2071d3aec7cdc64edb82739e78f0bd6f02d3d0cbcd18a648be24947a80008a1f45a1e35b9ad098b7cd31272ef985a502e25a
+DIST rust-1.70.0-armv7-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 3f42c11e20e1e86b0f934954c7d59b7b09af1613f0f10ff3295a3105c4f90554ff67c5c300f4d8bc1e113cd7631f10a4a1b9bc4f18049c97d6a3a66e6f1d0790 SHA512 981df55ff730f20ec415dd86f9fe035cbdb280d4cf742734db0270311f800db28e0688115937f7a9e525a8ee15adb61787a91d0a89bdefe950cd7489a7a09258
+DIST rust-1.70.0-i686-unknown-linux-gnu.tar.xz 204795680 BLAKE2B 9cf9b73b388145589fab8580bb6efb60cf731ae2dc98eec50abe819771778c9c27277bd62f89c4fc89c70089f499b7c0d02e4e4ba60bbdc31f48a3d534a4ef52 SHA512 a8001d2df7384f29783b4811896a3634d4daa5310d2b3b881e347c9dd727a621417e6e59ac30c6556e123850d1bfe557f8fc57955f4e8ea7b541cf2dde4735b2
+DIST rust-1.70.0-i686-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 002ee6ebeb71b5178ce6e88d5a95db6e176b4262ffde775383187ce705d3a6bf3c756ccf975d8642efc71ab9c90c8540cf6cd20501f6d2b668d91943d5a6cd06 SHA512 ccd6b486a000ccbf4f78ba0863e926c621d06214452a2730da8d05c70972d84bbcb3f49005b23a9acf82e31cec32ea1672fda8c091c04cb70224cdb5740d7bfa
+DIST rust-1.70.0-mips-unknown-linux-gnu.tar.xz 155096952 BLAKE2B c19219093ae7ea268b847b5fe0f20343d16e035c7666a545420473214fca6e5a43201421de693deec721ecf94c8d0ca44148ff7359184f5d07f94fadcddfa8b2 SHA512 8c5178fd56ca57af90ad4efc1dc2265b185858d6fed1e7494bfbd054c4849337af08c0b4d8e99eb126b9c8551800ab5986764faa4fd782abb56ae85b5a6169b5
+DIST rust-1.70.0-mips-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 49e8717adc826756bd7439cb8b8a5d62d7aaaba7ef5ace3f8cf1766d04cf8831a69345ba10a9804abb179fc23a6cd9b2f88fe3277de603ba2e9ebbb7e2c919ba SHA512 02c33b2d80c2b40f013b4a44553e6e8bd84b9df748718ac3cf7b2d6a0b33a1723cac2e142ba80c38195533cbc907b621c4b89cb7790612a175f2cccfd3d508cd
+DIST rust-1.70.0-mips64-unknown-linux-gnuabi64.tar.xz 152952764 BLAKE2B a65bab1e6284cb81d2e6c03d82ca103a6b7984925f85d45caef0cf2735eb8156f9bbff31e9265b7a94827f5098895f7a09e05360e808013779fbe34ebb4de32b SHA512 4ecd8a3155ad2734bb996473d03b346dc8022b89943e1accf8a81348eaa1965fe9d289c5431196c7fc387a945a9fa89c9c2d9ca244723970b6dacdc2b978c453
+DIST rust-1.70.0-mips64-unknown-linux-gnuabi64.tar.xz.asc 801 BLAKE2B aef454db1e0952174c78d0341aa8fc3d1aa3f4bb16019151589d0c377443d61929a03d8b5891133cc4a29d93b6ca5195a0adead6ced96af6a0eeee88dddd8e91 SHA512 6f50a9f0b32e3f6d14039b3f1a2bd13a912d45cb1c297a8af8836c4be6dc9a5590f3f09c2f30132e7aaf9b0e2ea5d356c180462c6054888f6e6ec58b0e99f20f
+DIST rust-1.70.0-mips64el-unknown-linux-gnuabi64.tar.xz 156871924 BLAKE2B 254910113b718725dde06d4350a366aef669662c7a52c3c1f13d2bb8cbb59a6d03bd04def02c9f3e6bcfa0119aa994e708ab8a808e6f4abdfe444af3cea6d5c3 SHA512 333dca6baf1bf580fe028cb5a2c261beebbb906a027142e36a9e93b7eb0728f01320c8a143473829e412524a6d958659775cf0972f40b87ebe3c664e44ef38a8
+DIST rust-1.70.0-mips64el-unknown-linux-gnuabi64.tar.xz.asc 801 BLAKE2B 2ad85a65706830973b380eebf6807092853f4916e44d265b5822f286541981895519ddf863221bcfd7c5789737ea8e553c50dc83ec3e8b43cb8d04d4fcbe574f SHA512 cbc2d658d041d5437db9e8b564fd5e6d8f7ef130157f79aa4a92000f562b40dfd40cbc350553554f5e6bbeac347c9704f72a75ab06cd1f1f3a7031ab64764f9f
+DIST rust-1.70.0-mipsel-unknown-linux-gnu.tar.xz 158491280 BLAKE2B 299065eb46c14e5243450b5a4bd4d6bd18a3cd80331001bbccc563b4d2a52dd051d1791b5bb564c648b0fe4df4fdccf472d43805bd71c3e7cbc1bd424a857758 SHA512 0adbb98062cac36bf3a59218b892a3e85917a230ff07fe371069e1eca0a62169874655e53f607ae100ed998f6c91579faa1cf36f5944ccc5d1b28fa2ad456b54
+DIST rust-1.70.0-mipsel-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9774d50e76700cae25ee51ad9d1a3b718dab9a4be04d0006ff55dafd9918f07cfe2fe5a83b45ee4934a7e0f0b661c4d3838331738a9e69cc77e6331d1b3e489a SHA512 586f3e7e09226d9e5bff379261b107a4ce75614aa53e196cbbb68b7828b25eb9a1743c4e667c4f57b6269f93074394c97acac88854fe89f545a5acd6a233128f
+DIST rust-1.70.0-powerpc-unknown-linux-gnu.tar.xz 174738376 BLAKE2B acac25164e9b5bd7335dfb0249588abb54ff02b012539f540392cac3ddbfd064e9ab000a8790c1d7f980cbf7a9a38e19574aa83297448a48fe42ee1aeaaecd8f SHA512 1a369e3a63e658a86588c6565f36740069417b0e2a207584da5b32994c801362eda463d8a7de9676adf42a8476a5def4c7363150eea7d1a09fd6f3c298279c1a
+DIST rust-1.70.0-powerpc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B ee5c4079fc9493e78713c54540e69047a05f41246f9f88d3da422216fb04d3e876b25ec61f19b7de02f1cbb5dc3aeb7e5c5cd03a5c1d7ff9717d7e49f660b245 SHA512 1b7cb72919453ef5c272ef62c8b76937362dd56a70e292439da1f28f6803ecd3794bdca3c433ce3155823d524ac70a9873c0aa5b7fe8b59f06abc67935cd8450
+DIST rust-1.70.0-powerpc64-unknown-linux-gnu.tar.xz 172874164 BLAKE2B d0c718cfcd533b5aca653144831c50aabd6d292e7cdb8b53be768fd946de91f3274eb07e9c741145fb9a5f632d626629b6d4989f9cef203e240382fdac3ed8f2 SHA512 645c39d447e92c18705be0db6e5e53449fdac6fd0cd2262b8c33dc9fedb596ad3fb3f2a172ca5de019fbaa6d48acdc98c6c742e925c23859a58f27094db82179
+DIST rust-1.70.0-powerpc64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B fc97b83827d351e0ddb95e3f844bdb8458232c374d23fa656ae6ca35a8db34b54b8ec47d18cb316410698970d63caf4bc028d9ea68825f83349320b28a7b1270 SHA512 a21553e7c4b28575f15cc28536d5af6bbc0be6992fbd7c6cf086b5318fd87de60181bc019ad264dca1dc3e59d1091ea0df233db83d69a267a91db9e22847a4ea
+DIST rust-1.70.0-powerpc64le-unknown-linux-gnu.tar.xz 182570028 BLAKE2B 2ae544c9006a850d457ebe240fbdca58905c86cb26be3edeaa95aea02a3201c94852936cf3e91c052f2bfb5960cf923f3bb4ae6d6d92493733f4acf9e70c71b4 SHA512 89cd4d1118ff8f5fec5e148f41ac9cd7dcb76b21b67b1733679c8fd9ed6f726239a22fcb45faf2ba45bb16e04f679bda9e29fdc8d3da3a6ec03f7a6ec85b1927
+DIST rust-1.70.0-powerpc64le-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 234a2051888eeccf772d9b7f41ac6757453c29cd736a2abf1b3d1fe22dd45fa9929efbc501ad429b6e44de13fccfa17d64ce4beb86879498c157b0856bb3eae6 SHA512 48ccff718902cb4d78663b69efdd16925b4df21b735c373db25eccd8baaff3c6dcc5c49ae37d583cdd22f44df91244e34e8463e65db69f8ee6ee96fba90f1cf0
+DIST rust-1.70.0-riscv64gc-unknown-linux-gnu.tar.xz 167304092 BLAKE2B 977fdd1fd305d4cb405d18a21719e37928c5ad0934a62c53ef395c067afa75eb7bf6fba5c9c7004d1413cfb78496809d1425fea9f38fc33916fa7571cc9f687f SHA512 2b19f66ce4702a19f7ebb8329569031c4a5e2deaacd161ba231114780a565fd8f1ae0b3970e021da6b7b0a23b1f41ffe3296f2f2b1dadd5de3f533308ab02d95
+DIST rust-1.70.0-riscv64gc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 26af74d00f9f7c53a15f9c39acef5364a1cbc7df2380ebf43cab3b02240b8fe446c200ef4652ea8684f0470035d8352accf5e0ab5b34dd9632b471458aad2516 SHA512 93ffd6214db7e04e2692f4e05bccb7140c81378da039317f2e04587f1403935abd57b8b9bd5e12b1befc5dec10898c06a508b1ebf83b845564b9b8a42d7041ac
+DIST rust-1.70.0-s390x-unknown-linux-gnu.tar.xz 197741656 BLAKE2B 7d31b09ad69eba9ad1a2b7196679a439907ee80fa3ddee9014f0c78505ee9e1c93514e7f44f83b0ac5ad442c6e7f05568b0ea928a89c5a69601a1a935d2d253b SHA512 3fa31674a3ba33d41c7db2b33e176edac1bd67713b7b52dc51eca73d4ed1821a2a4ecfd2545734fecb57271828ae0bcc7e1c4d0883821b650bff99544484db07
+DIST rust-1.70.0-s390x-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9dac941acb317914f4eac12df601b442e9d9c74f13048dd8120d23c3297e7f5bc77618fa8eb29d4401b141acd59d20e87e1b198f9997041d4113de9ad39b59cf SHA512 64b8658b275a53b52986aa967535ade73009e833fdc89c4e225f3139262fedbeef902702e8e71b18380a0826afbe7dfb1afdd5800bd5f810e66f2193c4de6501
+DIST rust-1.70.0-x86_64-unknown-linux-gnu.tar.xz 163456784 BLAKE2B 49a8397a7129aa70f5ab3876613c9c3f25abe2a48fcdfaeec0bf030529f558dd6ee221bef18ab135b95b2e8bdd61349e3357674a794bd08e4539c0fbbf51bb3e SHA512 8950c85f03f2e7af23c18e9be0ca1cdf7074b9be8d8c7b26102277c150c598bb7d5f1f74400bd70efcd42b38f68c96c7701239719f320311e8b131191ee77512
+DIST rust-1.70.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B e5fae8b3c87f54b39d922fe0c7694e0ba115ae34a668cc873390fc9e4638baaff5b6d1b4c67228c6bfc57b4da9bf77d6a452ca12bf6653d5610895b8ba19d64d SHA512 352749df741287107b966fd603113c51e82a426a7151e224e3a8d1cc7bd4658ef86147f6fce62caccd7b5779d9961be72cbb618db79a2850e8a8c4b0bc229ad3
+DIST rust-1.70.0-x86_64-unknown-linux-musl.tar.xz 233692884 BLAKE2B 295e815bbee6dc135ad17dd78801999afa7880a7a8f5ad4932a7580f1b03d50b850bcc3eb68e9d679e0a2d68392d446423ea752e47bb22d64823bf3222e0b377 SHA512 5e42224e109d525a321c107005660059ddcb0414392abc660b80fb09a55c936c79215989646be0aff6b0427b2f5d82a2a19ec3bd3235883a2037575808aeb69b
+DIST rust-1.70.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 7c5be81109607f191f339cfef87c736e2d35d4a045511036ee6e9bd68f22fbaae825ad5c463b0a5bf29606a8b9cf488172d1338aa4d034767b0f59243613c250 SHA512 241863164ee1a0d702080c9967e2ec5bb7af9222236316c8857b89b517fcbdc362b26ff3e362c4be7fd2989d3fd2aad0a0476feacecd2604855dfa53f5f1af27
+DIST rust-1.72.0-aarch64-unknown-linux-gnu.tar.xz 212153292 BLAKE2B 2896fb7c195bfb0b1b8313c390458c86e18986e2c1fcd973380e26ed78ea955c20c37475c9788fe9b23435020393fd8408566091c2974ba439b86f3b34676100 SHA512 7843b39ac259267c276834c66bb139f0548e5ee2dd1bf9e3830b07cf687e15f4b27f343dc13ff155bd86c8f0580f7f16576bb6731b782447fd0f0511f8c75e95
+DIST rust-1.72.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B aa8b2eac07010a0e564d6681831f99e3379ab5a2520c3fc29cc67803afdcb8952b596b653d8bd8e15305f1ce5b9c97ec611a3d3e8f4f3ab2dd2dd066c0401218 SHA512 308f82d5acdd18469b751d97d89617502ba554e6dfe72cc38cbcda0abb5705dc667f0c18a69aa1260143cfb4a93ce7c77726a917ab2060f7cd7d4a071387fc28
+DIST rust-1.72.0-aarch64-unknown-linux-musl.tar.xz 195414824 BLAKE2B 0bcd33b23ab927c36d2fe4eeca98edf421824d1ac9d88593bfd29476c8faec6fd7deddf0e6efad38faa0000986b234c7f5aed8d15eab9ca37569a434ddfddbf3 SHA512 7ab0adfabe9e5e3226add9fcc34445fecf9bea270cacf5e87c13edfa240c2b26f34cf035386ccd9b8c1edcbd74285d903d3dd7a96f6f1a928f4f60c6e619324d
+DIST rust-1.72.0-aarch64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 243c5108f2f56f742d589a3d510758c7377e5ff2625e1414f6cf5340c111780ad6397305fb01d28af50a9484662777c70328f9b2f490f3e2e3f934a4ff133604 SHA512 49289ccbc79f022d23eaa9d4d9e551365be6cd348e23f01ac099e103cc6cd2508b30494057e181a8246d7c9fe1d7fefb6ff473608e3d8835d098ad6c00dc02a5
+DIST rust-1.72.0-arm-unknown-linux-gnueabi.tar.xz 175875544 BLAKE2B 20dc09b8e2cc48a7a52f184baac30c523cd180524b178a91a72c6b7bc91e8ce0fe3e4d2605b1f9b5aa1535daf29a8e92328bd919a9f5913002086726f5e6d8b7 SHA512 2b8da66ec7575fe4e77d34247cbd91b376f5f00039c02855964883fe0e3610c47f087ff3486b36181ab7724dcecec78762636c9c9fd17a2e9410bee5f7efc84f
+DIST rust-1.72.0-arm-unknown-linux-gnueabi.tar.xz.asc 801 BLAKE2B 8a5cbed0df91a723f3c96b612c2eeb2580073fc895467a051b714b8d29956caee3199422686ebdeec6f38c8b0b05e5ef7a79f4a5ba92d77ed500ffcc4e3532f9 SHA512 a3259d475ad2722319a15ebcdc5c5c7a74b38813d7ee2de5d1d69e7ddcb9cd2bd3144655df73e1f5736262de5166d444a4aa9ec638ab4e2228de0e5b91fc46e0
+DIST rust-1.72.0-arm-unknown-linux-gnueabihf.tar.xz 176030324 BLAKE2B 8285f86700cd5dfb7ad2bdd70fc58a5222e64d7bb70aa51984001ce379b4fc7117e90faba1c3465357a27691231aab1c601f9b603418fb2004a4b2a8ed74a083 SHA512 9f810fd926b7d425c14ae40f8e47f59609fb18618ff4b16f26cc42904f9797a9633852a6747c2a7ecc130adada08ded4c99565a53d563b17ad04350d15145666
+DIST rust-1.72.0-arm-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 6465556de7829ac1c02fc8cf6f9f394d87d8af9326710c100f24de5cdca62c3a6dcb831177d98d9b060a6e4338985513072f3430418e4378c1988509d8f10528 SHA512 3a85a1a7111fc86a5974700de196f716c6cef0436a7bbf791be7ec5eed3252ae654d48f60c5056e5d5000196b34d7cd32d821670677363aa9a94200ff269d6d7
+DIST rust-1.72.0-armv7-unknown-linux-gnueabihf.tar.xz 180272644 BLAKE2B e3c1d8cfdb4a3ed8e445ea1814d62f1d072de67f0c217908c7cdbffb30614cabcf8582e393a62ac43624e0d131bde1c51426ca04d9dfbbec265887b674863b83 SHA512 36f7d44e52668e4e67700834d0614d7f37f3b7219eecd1008ff9660f79226a011bac75402ecd43ae12ef5479d2e2187b10691057c188fc5046cb79138bf6e521
+DIST rust-1.72.0-armv7-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 09ed6107a45ffc61a80dd2ef21a286d184f0a2c8c57a8c0e41fa1eca786941cef06b66b5035eefade29781912118ff1da11a7f7fbb3ab3b4873d8cd2249e3f03 SHA512 7735c460247df0a6536561967090eeb5784a44d1a1cabbefd6d57a0afd74bbaeec96f65e206388f7958b32568997ecadaf83c9e75451986e70fb05167584bae4
+DIST rust-1.72.0-i686-unknown-linux-gnu.tar.xz 203434692 BLAKE2B 2affd5b42c664939ea0c15837baf51c9f315aa456c41e916300b45a3eb06c26995394d292380470442f0fd4b187fb58a1730ecbe9a4928837a7ccc0d59d8ed2b SHA512 fc8ed251d6c9888894b168506e5980cb9802b43485de5c9145d128257b1b60d363612115149f39cc13a9e18929422deb8285dd999abdcdb089d2318dec8ec606
+DIST rust-1.72.0-i686-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 16048265dcb012b67fe9de44c11353a2506b314c45482721648358ee84dd500d13c30ab55e14f0cbc6837761924904355f02a0001a042819201c096965c8bc74 SHA512 5f16000c95372d9799787c3bb0f4d948cca18ab806e368ccee17d4bddb20352492906d54cd56fa3d50545374a70e42a893c37463baaccd1e612358a7c809a9e6
+DIST rust-1.72.0-loongarch64-unknown-linux-gnu.tar.xz 160819080 BLAKE2B 66b5f34f9dbbc633fc240a240d5b0555ac55c5cfddbadeb22168ab90be83410a75a9fbb154fd1aeec2ba8447ff76ed2984966c7352b46afb52fdb2eae82b02a1 SHA512 fdebcca89a65d5cfa6c9d65f89a34989af0b8c5c1396dc182ff6d4ce320111ae6b23c2e06786ebefd8dc40dc391342d38fed38a193daf0b42b6dac64cd79d36e
+DIST rust-1.72.0-loongarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B d7e483773ee6c105829d7b711904dd14194c9e69d6ad1271c45ff826d78cd23da3e8f5dfea688adb157a9c2697d3c36b1e88e7ee2789d571bc90e41701e46540 SHA512 0644e4d76dda08cd95bc45c5797252b26318841844f4d0baa49212c1121c773b64d2a4ea993c83d412e33433e604b1cbdb86ff60f8328cad2f5c741ebfc24a42
+DIST rust-1.72.0-powerpc-unknown-linux-gnu.tar.xz 175099316 BLAKE2B 7eaa2dc7816f63a9a4288d852b2ba7b3e13c5155f5f9a8a6ebb4a2d20f03e900b52054689958a07e7f52918835536ce92a117f8ffa014196040c3bf340d33b78 SHA512 f2e87a12a2d5146011fd9df5532df06b7a936c2ee4866b95d0d484099240df9aa13597877d8f1ef56537928b196dfb89d2b2084784ff9b2f86eb37407661bc4a
+DIST rust-1.72.0-powerpc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 681fae9a730a7f8006e30d05378ca518abd8514edbf69d82e6485f11a8a98f14c819f63618412fbb4c525a4b60367498d79c0b935f6be5c7b8a59f4e60775bfd SHA512 c4f5020297ff35043c1985e04ef5322b18283d1ee24a84cc29fef3f3e48e87612bece6ea5e86a5573b86133fb1cda7402aae98c897062b18d3ab71da48e3b68b
+DIST rust-1.72.0-powerpc64-unknown-linux-gnu.tar.xz 174927468 BLAKE2B 2b7c0d3b22a6b6b80f2f9771a6a6ef678575d94c2dd0dffcde0ab572507a09b663a5a4106f72865b57da37c9e710f75d38882fa0345a73f6f1498566a77e52de SHA512 c7b7f9c2b525c8ea1ec9f9c0090a8a4c098f5680b22b04b30ac86da29586b04d2a901498035ffdb94793b2732ee985c71137c63c1f7b938496568ce8b82d678f
+DIST rust-1.72.0-powerpc64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 5b9a6805c0ca7af4931d47c9950358b896689b452b898f0ae5d21a4c4027c20c321ce6cb2b150ac3b2508ccf0a3a430124a44974cb011572a126594374e9c182 SHA512 239bb2ae442d2b7d970bcbab4bfca77e09ae17d2caf4a2cdcc231d1c9f1aceb4b98a050eb3f3fae3184c2b6f451d32cafdd0d1e11c2714e180f3e3769b9a1b42
+DIST rust-1.72.0-powerpc64le-unknown-linux-gnu.tar.xz 185829712 BLAKE2B 305af3179f7a66e6fd7b8886e9f86e4fd4d2d71654658f0804182bf7ba1a5da6c71903fd89e899eebb74ccae366ada580a7b4a33436b3b82af928ff5d081fce9 SHA512 2401d3490c1e3ec32d185f7f5886c355384ba2cf28c5d14ace0d2b8d14eb5c5cdf4c507c67c104849decc23bdeb7223a151214e11b67c2276dc8f795878c76cb
+DIST rust-1.72.0-powerpc64le-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 10bd90f3e07d892adcc04d9ca43454a78a5e260dc0e90978ebd50d48aaab488466584180324970f790eb181165f2d3961c515225c95efa55ee3d53d4a8f831a8 SHA512 e72d4482171090bd1e801a94b7ddf7002555e37aea9e9543e3d7f263df938ff223c0980dbae4b56665ea42e2c352e94f0f18c418fad02cd68d3b6d7f087f4e7a
+DIST rust-1.72.0-riscv64gc-unknown-linux-gnu.tar.xz 167275368 BLAKE2B 0e77dadf640c0fae29f720458caffb3dfe1d9a6514526676e1da333098341eba20d2df9b191005e5d66e6396b9e12c25520692f862ad84c1fc91eb1a6a71c470 SHA512 157da3684962c3145206910627bebc9fc5f01fc8d7e56477bae2796bc8fafdcc504dcb77cbdcc96cb2288b0cb019452116df7740fae3a87b5274d103da7f3a41
+DIST rust-1.72.0-riscv64gc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B e660968bd401882034d63884e60ddf0e50a42c1e17a517aaf153731a0d319d9de5c074381fd1e56b535e1a870afe2b17b7dbfbbef33463a6bf4ac0a78226abdd SHA512 87bb2b30710a4159d1b2b87dffd45be772dfaf58218459109c8279da21440ce423cf5ee28fee0281c3b2b9eb433880c0f63177b0b775027b15095c9b6ea99bd0
+DIST rust-1.72.0-s390x-unknown-linux-gnu.tar.xz 197718192 BLAKE2B 465815892d2c4c76978fb3f14fae021f95007f17e3b6937ac64f22432aed808e77eda6081f0918d7fd48e00364099ea147e21dd80ffe93600088d7d1b39ae9fb SHA512 5ba7b7fe39fdf9a542040807283ded3271e37a8576e387c7d5333936623f688192902686027e491a6c5405906102afc0dfd465fd4093956b88942d54e5974e45
+DIST rust-1.72.0-s390x-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B cdf0ee76397801ac561e39cddd1eb1ee94454ff52df8e117a35aec010d4534b1ec024e1e1981579924bd976a1a48bc1217c990adb307a2c4fdf618c85801cd0e SHA512 a333a1ecd37aedb9f32365396dcf69e235a3c084bdb34b656929ce38ad78b5a26092ece2b81380efb32544ba578a657615132c02c7f4491855c9ca90d77fb863
+DIST rust-1.72.0-x86_64-unknown-linux-gnu.tar.xz 163402880 BLAKE2B 0f498510f8bbaba4b36e9e1cdc8e1e0482b4f26bc7f42a600b3e3f2294490f230a87d955c4f79c53ce277163660752a39889456d743c74adb2659cde536e09bc SHA512 f02fc82181fe2665aa66ca4948b66abf031c9ca273bb11ba69d1e99bf5bd1707010c4baaa04d8c83e9e97e7bb60440e3562380077903a459f689ef5dbac3ff40
+DIST rust-1.72.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 51083330fef8b0e9f4fafe71e3a08891bec9be8e1c2e64ef37cba463e99c13f44639981c8aae6c86d50c6a23c4846a4f056535dbcbf39a2d9096615862feff87 SHA512 284b74f87e192451ba95cc423089d64334f43da8c221f45acb683a088e7dfd783c488c7ed3fe68619aff4c245271cdcf4b1b8c5f0bef1f8c3d3af0ca13d394c4
+DIST rust-1.72.0-x86_64-unknown-linux-musl.tar.xz 234831716 BLAKE2B 3ee1a5727ad120bcf173dcee3770e342f107777984b06782f5ae588a58e5da94ad4550b00c168ddbe84350605100558bc01e139763b5734cdea32545ee6ee41e SHA512 62d5967669164ce7e8b6815298d79380ca96cce5a6c8a67db84cd3d5fdb6825ba9d2a91d59c2185a93b1c26030ef017c63942dc7a363e742d0abf356bca6f1f5
+DIST rust-1.72.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B e04731dd5edfe93d17cb032d772917d49bd46f195738cefe2e685f42b9ba5148d120e8d71c627cae46a665235f14ac0b35aff58498ff92da7edfdc5d6e562773 SHA512 2ed245aa779c594f8d9cbcbf63e7c68165d600408a25288163ceebf78946210a36958a3df80c50b2006e11930e09ecec0eee233ff659a9d2ffc78c1b55d3b0fc
+DIST rust-1.73.0-aarch64-unknown-linux-gnu.tar.xz 216033148 BLAKE2B 78bac094c78d68102cd5ca6a7bc9ac8a51ecd3e14cc5c66fefca0a0597b5ba439c22d69a323a6e7cafdfec60cadf0672c91ca5f85065ac8d7913c83437ec0256 SHA512 58198ebecaa4652e0477eed6ad2c29524e7a3e991ed437775281ce526c8485b2a1a49c75ac6fd5bdcc6cb997cee4d1b4d82fba49c03ad38bcafa764f5a9bdfb1
+DIST rust-1.73.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B d4b85efab3aef10fd6940630ed3cbf6cca12961228482ce42cdbd4c0c185c55b9ccecb1ca386e7a5c02fa33b77685dc8e2d619ecdec0cb5afc7a01402be5a22e SHA512 b7392e301c00e2ee1be692e6b5a44fdadc4b442979bf8f09fe71f80d82b6f395d0505621ba8eb54fe6145812f7f9c0d2b278e474d6edde51a2318cf27f5080bc
+DIST rust-1.73.0-aarch64-unknown-linux-musl.tar.xz 197525740 BLAKE2B ed84c438426bb0fc9a5a320731ae448f242b70a764d67e46e53a37f0e76262a183886e83fb27166e030740a27e6a79ef1c8f50bfc4a2c9c5d915ee5fa74a251f SHA512 b1a3007217dbb771e459b92a2ce0efca3babb34e9901cd44006d7c8ca92f48f67bdb877d3ec4710c58ad1645da4830a52cc2062b6b5a9827b8d57d508f4029a6
+DIST rust-1.73.0-aarch64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 2e2a965b37bdeec12fbe3f605c4bd10bb51adc7dd1c2e2d185b7306e8c75415d678b1bd83eb68e8a05099eb77958a928e867f87b0a4f05b5315b89869f120a64 SHA512 b65b08a68571cd0cf17f4469c1eb95868e00e6244e30ac0d3c30e0ad6abcaed143a7389002c0f90b2ddbd79b9c9c3856d66387f701a8d0eb9f1683ce456e4910
+DIST rust-1.73.0-arm-unknown-linux-gnueabi.tar.xz 180327600 BLAKE2B f28725f19259806f934298d2b6dde6bf59e5f8bc3ee0ad9b1cf0565a5383a31189170f26495b3103bbc9d86d2ac9b83147b3803508a53b96eebd214d2b0aff90 SHA512 27900c5faa9076db40cc85d973274a09ff44a76936312f905a3d9751d0b7480dc260ed3cec91a65bb78382c67208b28978e2079e28a47a25aa6279d09adcc045
+DIST rust-1.73.0-arm-unknown-linux-gnueabi.tar.xz.asc 801 BLAKE2B 03ad365e06dbaf30d4ca2d8d2d3066d4f956ba5426f2c5b601c3830d9b0741b3655d26eafb3853b41ab01dc377065ca330f9d6fcf89de066c50adb0c9c9fe3bd SHA512 ecef5fe8359d8dbf23337398c1cb90a269ae169a1cd08525361d6f39e0a24dd22c1819c7ee0fe3828431ad492af89d19bf8c3c7b111f7925831362e2050d1040
+DIST rust-1.73.0-arm-unknown-linux-gnueabihf.tar.xz 180870680 BLAKE2B fea49832d8eefa7545b76114874de3d653ed888f753b68cd7636b7a1462bb564e19bbe37a5f3b94cf9a06640bf81f6fcc97f224f0f3e1745eb19f99ae193d3af SHA512 3648672256182cf6c73e31a05af3084b996bf25e1ccad8b96d68501e57a4ae4cf57befdf84db27e3e1a9fa3af051117e94ffcefd14246794e7528020bc26f4d5
+DIST rust-1.73.0-arm-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 7046fad305aabf192a1084328d739754bf76c27fd3f1efcc4be36047ef6c4bf899ef8ae7e3cb359e23578af4c9a25d4e1f453ed8695ba33c630d46351234de69 SHA512 7e046b79d4d0a1bee3c7c5f6b8e3020a342a39e9913a24ef672aa1d197e63905653acc24652b720a4b996029661503e2dfc3b678f297ce15c548281ed772ac23
+DIST rust-1.73.0-armv7-unknown-linux-gnueabihf.tar.xz 184898496 BLAKE2B d0b2ce03ce7ab5e2c843989958a00524fc59000f62dc07f9783f4b9f22c734b67b33e403e3300fe3350322e1ad2b59e64e41b339d5f5c258b29dcdd98dec9c61 SHA512 ca48bb9b683058321b0ae770faf2fd607e03ff5e9291626ccbeba707f5ef8c211c29b9ddf52dfa11958691a127f95dedb742010018bbd6be2fc1d7ddced44190
+DIST rust-1.73.0-armv7-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 12e19ff5f586a7f67bf7e4f6ee96d919293500bbfb3bec306b412a423a3dafe94fe63939f371a644e1d3a1575a6a21df78f11ee63a8dbae9af3a2ce6b03d5104 SHA512 9e1f316abb8f7861fe1188aba1880732b957514fe58de3f10e340c430c1ce64e9627feec1a655335d33605cc6f5ee32830159a8215c5a233f25ebff18e2c7bf7
+DIST rust-1.73.0-i686-unknown-linux-gnu.tar.xz 209918920 BLAKE2B 545c48dce0e275228e260669d0f5b93977a9c7a02237d4ae9d84ed69236f5e412c5980e2c5823478949214c2b775c89c836bbd43e25406c20fbdc52cee328240 SHA512 a80742d14acc1d018ac35b77abba4491b5eafe28bc3173527c865b0e930572f2a92d4fc459db51c34600f8288b20b5790346b5f8e6fbdfcb080f1f14f44a2db4
+DIST rust-1.73.0-i686-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9800a96cf8484b0370f343c2fdda0762bab534fa7551a7716e7665bc90b651207c471ef5e06b2d7acb766959155b5d593b375487b01cf65e980ebc721c3a4042 SHA512 dc0c25c270701ff6509bbff3fd173178ec8aa3e5cf606fe87b803e6f1279dde3571d22cf0c7f28bb0ba5410c08a491f9b9b937d0aa796c0ba30fe43f7e381c1e
+DIST rust-1.73.0-loongarch64-unknown-linux-gnu.tar.xz 161763960 BLAKE2B 1ae7019055a4fb457733826750d2c20708e7d8bfeb8532ac1af5027387bd1f992c2ab1fe08d088b07581b0a81d7ea7ac8e44ff077887297a4d4da2a633089de0 SHA512 9840e1454506e3f0880e8113040eecd1b363bb78371386aa069271e18e70600f81e19358539785a3bd1ada7244b4830362e6f0b466798cda7647ed795072342d
+DIST rust-1.73.0-loongarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B cacbbd7793d6f693cf2c1211529cb4a0c888f3ed4d8674f610e034a7216fcf7f4ecc85331aaeaa89ec02c1412a62fdbda29a3bca6faa64dee0f8d419d055b41d SHA512 64b8594f2f19151927f5b74584822a78b15da97fc8f5e4823dfc222056a203ed68ced70cca915e1694ea6b36fdef5697e5b56062cb761a0d9557e5c08ec8ea07
+DIST rust-1.73.0-powerpc-unknown-linux-gnu.tar.xz 176694620 BLAKE2B e8b43ea4b9ad78ece530985afdeb140e0e960213272857cedcfe4e9262c190c7d26ce77d46fd113d2742cb159442c256a081bb6cf23e6977fa5ca8c6cf21ec30 SHA512 03f889dad45d1bd9ee4af52209af3d763ad5362cf1a617c86b050e0d2fe00c39edc716fc32a83c6e45c118b97d828c32f682ffec5b32f215d6694509a885772f
+DIST rust-1.73.0-powerpc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B e63cf87a2fb0584f2fc5c01a98dbb12bd9a7f4aace54a08505a0b4f9e7141705409d8bff1cd3a2d7cf40504ea274f29e11624ba050d56e4ec2a4e794fdf188f1 SHA512 a86db43be2a2fd92638e6355ac4117e707073fbb98631a8b41064e5b01e12bc1d2c594547778d9c99ec3e24c5c4dce6603cbfcb3715b11aef9d2c2758ee8b7d6
+DIST rust-1.73.0-powerpc64-unknown-linux-gnu.tar.xz 176165132 BLAKE2B 3750ef413de00047fa957ecc6c832995e072b58b78f994bdd6b8291583acd0a4ab54634d4e4778456bce6420135c83e9961aef5e615fd62806531686e33a31d8 SHA512 9f1a669f7d532a831df76292916493e1bcd4a56d95d3819c477898eb0510bc8760d008fc1e7d383927f8afbeff826b0598f9bc4067f692f530856c8e444f44df
+DIST rust-1.73.0-powerpc64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B a1c1db86107b48a554d815811b518f7b28abac90cd08920362643a538670e7859ce43d179de24551b5e4409e0a421029e66b8374b27ddd699ca68fe0f47b8904 SHA512 04604baa0f13693d4bc7a0729df7041a55c0cb9efa11ef511d29d2b5a50c3575867c1ecbb6a23a030dc014876bc9c02e370c8d0eb531249833fbb52dd964f2b4
+DIST rust-1.73.0-powerpc64le-unknown-linux-gnu.tar.xz 187628140 BLAKE2B 1ab716a7d2e536ca3447fc0aa2751d774259ea2e39ee3cc150bfe11967e57bd85b484cf050a39cba717a0552dabe6d1aa79ca7dc24abe4b43d4802fb9cc1bc85 SHA512 d6566978f47067b84715ef39756721ced5f5430d5c92f51b673db39d1e1666a8dd933e998d4fe3ccbc36ec47c62b4fe7e335c4e3b830d27571dcf9e534446d0d
+DIST rust-1.73.0-powerpc64le-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 6b3a29cf580d750a17436036d6bdb2457cafde123c289205aa239457afa4de10b4b97c9f3ccc23cd296a1a388802ac4f696c71e45a2ff7c97d15d63f2a04cba3 SHA512 5840b7986e9472a4907ae01eee0c4a40664ce1a29ff159557766bcf50da773d246a74ffed2bc5bc735d255514e0daba55d10bdbf7d8d2c3a6aeebd704f3009b3
+DIST rust-1.73.0-riscv64gc-unknown-linux-gnu.tar.xz 182202208 BLAKE2B 836d89e6ce276d100edce8016f5a466b99e8aff2646be7e58dea2f38678e4fdb9b93fff1126573a112e19cdb32ee5290fa58df0e5cbb1c309e65927ae1439b52 SHA512 c49031996ecde5dfda4b8bf3869b37ecb51c89e3fb8f69d3d43d865bf2ed6dfa928f0239460f0f3c7b7168eedee9b5a957d956f39ad42fc7276fe64a649ee501
+DIST rust-1.73.0-riscv64gc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 119d6cf2b0b4f8950d51aac6eb865619412e513c6c87f31702572cb2120a20cb23133a763036cbac0a9977a20dccfb58a8b034d19d13892ffbde05c01970ec92 SHA512 578c2576f66d0ad344549a94cf83f80551dbec7ecf2ff8616d81cd1eb3a7154b89701a05caf6a21649361ccdd1abfd37b33de935e91dba02dd914945de3930b5
+DIST rust-1.73.0-s390x-unknown-linux-gnu.tar.xz 201224624 BLAKE2B 5f9f28c5f511a3bd119233e4a2b882119b18a42a8c235bafc57f35e365496fe9d6d88c6278e014345f76a98a235ecec31335178a6b047e5b2188d391ba465e70 SHA512 e946192961623be1e3ab4b3e2c86f16f9fd716ee3ccf88137e6ed7ca92b9e8376552a9b46b48c127f6be76a1fc7b240d9b8db568390fd7d81605634ebb431ea4
+DIST rust-1.73.0-s390x-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B d05fc43c55e47b3a32e8be8f97b072961e920ed09d368968d1121dfaa0dc36e11ca61a0b03df2f708d0eff31a80367b5d465434b851da4c8ff00ce9ecd577bce SHA512 5950cfd08f49bfd0f1277e2f07e333e7188d65d6a61d738dbe586bde8f3647862ef6d6ca5f52d74f357ae3997f1554a2c7cd0399392cde7ec32b1f2aaf8a4c6b
+DIST rust-1.73.0-x86_64-unknown-linux-gnu.tar.xz 161588916 BLAKE2B 10c1c57641e2ae076c55826985d8ef43034a3e4b6fd15d109f949e8bc655dfb16d45ce86482992cc2aa3f4000f3432b8be17019f9f5d29a92fb42c37cd7df72e SHA512 b70886b5ecac41a7e6ea85d1b2d1aa557a0395d3f8abe4b8d1ad91f3b32ac9ae73bebfd7a9c48ebef4141be041cf5bdfab8bdb78e1b4969afb439daca203d5a3
+DIST rust-1.73.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 22e68ec4e6bfa49c15344675abd20ef9449d928943dafc64bfa1cf78dd36ccbce4802af8d4adb84762194dabc512efa74655a93785c127e6942ebeca8f6e3303 SHA512 56e53a1047a23a7f37250a785de2422ee2a3a72fdedb9a02530b3cc1cd978370cbbfc0e67d75f3d537f48c6c78f91d3de949ac2c9392a79404609b169cedaa40
+DIST rust-1.73.0-x86_64-unknown-linux-musl.tar.xz 236190528 BLAKE2B 062b54b31742bc846bdff63fb38be3a3a1f6d2f061da26cee6a0b089feee995fe3dbea536675495ed75d47d657c3d4bf04e36f6752f59f8308f7eb9a397d6e38 SHA512 abd01e0c98a8aa447d01613e24302ca81a8cce7d41179ed60834a39ed1942de0459add3c498a63f94bb1ee8662a2750b375b49894e3108da45f47d3a643cfdba
+DIST rust-1.73.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 9822879d0f14eb5387a623d111ed7a3b1ff038522c071608bd254c4b3479da8a1e9ed78c69c267c1156c45a9cbb2f7db00d123b85f28021a743d392d1cb65c75 SHA512 ff65fd3ca47afeb10f7434d8d4f91b6649739167639c3eadf178aa1339553c5316bd0bb393cd53fcce17c126dcf8db1f1dca6e87044b14762bb20ed8f5a500b7
+DIST rust-1.74.0-aarch64-unknown-linux-gnu.tar.xz 216169516 BLAKE2B 830b97f710a3249c4d1df6b37dc9c429cd8d8c8edb0a77de8d04460bc2132ababa6777dc92b82b8a3b3839256f2dc522128d31a81c8b5ae9820a483368292cc2 SHA512 40a98f9238af1a60a0506e3e1b88e1d61ce68ed6380c78c77b638b1fccbc8cd0e39d7c042a70dcde454a3fe95b6c49950820f728b847dda218fdd91fef7066de
+DIST rust-1.74.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 6b15fd93514659cc64759b7c7c3e26781b87f58022d91bbeacc64906c681ed37b825031e9fd78051671b35c5abbf4d76c11e320742d5b482f36e98ed9d8691e7 SHA512 2480367abacb766e015c3287568cc2ea2f186b48cafe709595641e40471b4da1e29b5e41d2a3b5eb7d9f9329725e46e4110800952e554e84212e3a1ad36f06c5
+DIST rust-1.74.0-aarch64-unknown-linux-musl.tar.xz 196821888 BLAKE2B aa8444b243a670ce5130a0436bbe100b75912a03bf8b3f99f5dbef9b3459fbb3b6e0d0fae6e9d9ec368e95b20f563a8821ed7698cf699b169887dbc63a7a71f4 SHA512 22255c52052977b272dc740853359c15e2764164b38afd473830dd69830d4897d60dc037f0e6190df8a31ee22f80d69f60d7dad968a41b91f23368328e11eef5
+DIST rust-1.74.0-aarch64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B f3ab9235640f5314de7a01564fa60563f123d7d4d8755b4263a687fb22b4d874cbaaf9184436e62c8e65d23c64685d33333f3585dcc518fa90229d1a045186e8 SHA512 2ba35243e3d626347a442bb9b798e698e654d65d81d3d2391b791f33636a74e51b2c5f6270d37abe641f6e243dc70169e990e9fe1ed0392936f272b65216bd08
+DIST rust-1.74.0-arm-unknown-linux-gnueabi.tar.xz 180475660 BLAKE2B 33ac40eec4641d71ed03226dcc0cef62fb4b108835ca8532110237c41c5c1eaf5f2a78ae3b97fd69043898439816702df6d1ce8bbfea36622736b62db1de7d7c SHA512 4f90237267516870a9d236add52b70c4e3ffe2b12ce0280faea4f740aa81b0ab8fdbb0e6e58425c8e33a0795a4bd18cf766d222b9d6f8ec9e972d4ce10ac0640
+DIST rust-1.74.0-arm-unknown-linux-gnueabi.tar.xz.asc 801 BLAKE2B cb1c623548cd2dad04ba2130883fe6ca70466ad8e8d10a0bcbe42ecbf7f3e10c5f62eeccb5300d133458e26c9b340ea9f5aeb3b3bd35420e39ca4c2a751946d9 SHA512 eccee9e6ec905d4b30b620236bb2c3648f4c5e00518c2e1b0ad5d009865d56abfc866f1a100acc8c7ef559590052cd858cd247bd091d31821b27bfef00b9487f
+DIST rust-1.74.0-arm-unknown-linux-gnueabihf.tar.xz 180651920 BLAKE2B 34be0e8e7621bae3a7ae0c0c5fb94df55b42035d4a6219d773e109cf8e17082c81e0b8e831421f702bf269e095b0fd6bb798a8ccd78f12b099e5cfa638458572 SHA512 c6f7f9aa592985206a3af47f8d61e094e0fe3c714deb6c569a8a0bef8f5dd897f8f27ab33dd184eb28a9267c877f21527dd421baa312bbdf08994cb69aeb6ba0
+DIST rust-1.74.0-arm-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 81703b2035f44dd3272cce97671205d6f838f1ef09dc22e25316567119da12ecae6c38d5cd54a82f70253a65357c60cac3d2c6c91ceb90614baedb5fb3707306 SHA512 aa7d6320d868f4b05274a964570f6d1e5bb4b0f72da0875d43356ff2a48a4d1a2605dce1097e88fdb3cae502c05373540799175bf205676088654a0288718995
+DIST rust-1.74.0-armv7-unknown-linux-gnueabihf.tar.xz 184856340 BLAKE2B 5002309dbc31916ff4984637c646136c0be0ff682d105f579f3e66dc3aac51feffd9fe70e1e4020bf554155bab88fceafd0a223ff6f2d8d3c885233b4592303e SHA512 8beb260a0f07b11b91a21ff7a6bc863d412006a4b7a582c769ac6991ef8d93ccbdf3b3e9921ba16fd2d3c4354aec706298fce182c910c26e4fcc61575e6f6213
+DIST rust-1.74.0-armv7-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 6945a1ad0917f5cca07e1d8e292644054a613ccbc7d6d8d8b4bbe1d0e580bd1e7e40c62383fd9ec3a465d9af1db02f28eacb98bfcd5bd9f4c4431f74824f1a7e SHA512 c3652f8a7336e5ba4c45a31a089d99fd9e36bf8f7b593a3bcbb728a24d3d76f81ac908b0ae97905b27ec0697364ce01ef6adcc1853756da300989b4ab4bc6d15
+DIST rust-1.74.0-i686-unknown-linux-gnu.tar.xz 211708688 BLAKE2B ef83549b86e4da0c8ea61d14dc302dd10459798fccabaafaec7e8f24ff2a4695e4378706c48092b8afd3dffac7d995e53100bf0d5f3caf73dcdfda764cd3e656 SHA512 b97e1ee46d8ea20af6a61ee933c66b5314f55c3c3879bd8101943a769dda3ded7c91899fb7eb26ecdbe1f01f35e9784398cb85d494b03bf0673d2c1c8ed27f9a
+DIST rust-1.74.0-i686-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9a0916d77499972812edda89c04563d41e899a68f73fc8867d878e938ef6b37057e97e7209b033d6624674f472b9e8441fd89bc0a82a9ec17c85381b07809367 SHA512 562931b7a78a92ae6f07e502fb044c1ed45ffca94690cf8316c55c85ed37ce426ec72b526a10c4da8bbe947f1b253e618338028ea064eab8bc446ffb291b5aa6
+DIST rust-1.74.0-loongarch64-unknown-linux-gnu.tar.xz 161629420 BLAKE2B da3b11b1c8ce2d3e1f30885279e4524f795bb8680f0f076fc154c7ffcf067d5933f2a89c2c5dc142859adebeda9eebd9559193a5829a114bc670262872069fa1 SHA512 a3d75491371d74d14d5ea3e1578040b1baf67166c899e0c590599d1a5efe5d6fa11c6efa9f2525ef2011650cf62d7e1384f71f9bd33357296915a9564b2f0c3a
+DIST rust-1.74.0-loongarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 58d483bd3f21344f3a2da5ee4a88b2a536baab0503d0fa52f7c97ac7f6cee308401246cedc5b2c38d7d6ecf57290e2e0f48f8a84c72cfd5aca7e2d2310723963 SHA512 28fc0773a95b0822b262dbd48f37b637ec95cfe7694b2b2c9d5b18e0492c802d29dbb0013382fadf2037250faf9b3019cd38882102f864136be1e64623c89882
+DIST rust-1.74.0-powerpc-unknown-linux-gnu.tar.xz 174911076 BLAKE2B 3539adb3fdcdaf6163a58aeaa2d5f1a7ca5e13119d19a559b328d2e994ea5c0147ffc410391c6a7d2714f814b4254d847791a3737596e4fdc97defc7e3838000 SHA512 95b76ca4f0667ed63e76b99ef7b3667d88e13592de941a6cdb85e970ac766667c2d1f7161e20e1d8d63d5968fd5c82f2c0bce5d84f11d59b438b0ef16679faf6
+DIST rust-1.74.0-powerpc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 58262a22b6a589bebf51a494e4bf0217b58cdf214c2eb0bbfa9d9fea20f0a21ab0ce76271772c452fc2d5a0b049bf09c84b342eced0995b9456e68747aaf4c63 SHA512 3c694d9ec22c03d07cbd64dde1bf5f532beafdf3d974e77e5fc09adc1484bb1572625d62fd1e0d13613c4b63c2efd82f58ec9e4a2a8ff87b2527b2da7896e703
+DIST rust-1.74.0-powerpc64-unknown-linux-gnu.tar.xz 176265620 BLAKE2B 2885cb229d612e702e47e7fcbb18a60c9b5aefaacbf14ae146b3078b53e3e64d05273268d4e2e0c61dac1f7f1a5238f82c0ab7e0a05aca25478e661e6f5c7600 SHA512 ce6c5eab3de7ce6800137aa02c19a9c1513738af140c9cb1cf1c89f33f71de50d022a6af92eaadb26898422c7beebb6d6870f2d766e3eb4e363afcffe75a2627
+DIST rust-1.74.0-powerpc64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B e3c29be027c55bd51b1520c9d573b2e3c6b8c094568d57b940db9b895532405717676cfbbb7486b78fed6d3c79453a760132ffe2b2b86bfbf67a7872809cc5ff SHA512 baed4414207068429bf5c4bf445650936bd1ace3bde19f8fdede269a4204e37964c6b172d2d347fa93e472128fbe7ae5696be82d5ef873aa6a3c588a1621f1e2
+DIST rust-1.74.0-powerpc64le-unknown-linux-gnu.tar.xz 187255560 BLAKE2B 29fd06bd7a3f0229b0c1513045932a7786ce10501469f46ffaa9d747d7badb63c69a0d1f13ece3b09ee811b492e1214ad4bf2b875269caf829e5a6eea449f0f1 SHA512 96a18b9938f8e7c6772a7215d866f6bbbb28d379ebfe4f0fe0e32fcb4fdc5f3b7441edbdce3b04fa30ef91f8d5c2a2c1fe75ad0cce1ce1f2ed75cbbeceb1e64e
+DIST rust-1.74.0-powerpc64le-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 0cd802412a19cb27510c91831f953ece98b0ac65c8ad6f91e1b136694403b71b1fd29aa8eccf45384eb59ed72e7a6e4218226826e243d1bd232444c277f8f0e2 SHA512 a73c22b8b0a319c3b0997e463f4cafbae8ce3fd5e66d42db07aa60b6e366a92afe640ac36b0a941879df3510d9341b3cb3c895e2c864c0ebd4b2bab7c5426dd9
+DIST rust-1.74.0-riscv64gc-unknown-linux-gnu.tar.xz 181305504 BLAKE2B 708e30456c32d7fd6d8d07e18bfcc73d339e5c6f5ea92fb3958b538c8a3bc4b79d02c79e2de9a5e2480ec7ae6cab6a36d345cb183a811d738aef0536fd143701 SHA512 050ac10adbed179c646c6348fa43a1bcfa18084de444032d8c064b5f1a7b059aeadbf9e06a75079b2dd9170e1cb078205c2a675e0c39fa694c813f2da2d616dd
+DIST rust-1.74.0-riscv64gc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B a3be1f47f23d62f46b6c2b1dae6d07243c90690f3d097b24b4f7b2a22471d39160593e2703b5baf6a3c701f167d8941241511bca5c78ba79a25da37387ea1cf0 SHA512 a9c4c3e22bafb1c53c71d9836873e84c6a1b3adffeb361394d584b829b5239df39cfacfbddb96c93f4ecf48c4ea98421da3c46245f32659aed49961198db18de
+DIST rust-1.74.0-s390x-unknown-linux-gnu.tar.xz 201169576 BLAKE2B c8d5b9d621fe3a1f3ffe28a09cc0660636d33c6aba5463a99570d4061d736847b95cbb7bb3cd0c2d6a007aa8c4b08364867a5b6d4d12b7f34887327ecfdf041a SHA512 96c00ceb9bea19637d92151ff8ac289e0bc62f05e08a4ebe0221d08271a4e80e0fd628ef2c59240796dd289b6d16efa6d6191aafad1adb11f2d8fff92df3084d
+DIST rust-1.74.0-s390x-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 779fef510b53e24a6b20d868a3dcb349ececfb35f5e7059ccb0ef125d24361a8732e8459051a8b1e4da2ad1c6de342f15f857d4973ac4a1b9c19236cb66c4040 SHA512 bd266f3b6c09c73d400541a436890c85fd7d7b82241ed9952ab41481a1f19df8b477228a54ea4c215f0313aa7515d6b659e8ebc78f6186ac2b9fb2ec04cfa902
+DIST rust-1.74.0-x86_64-unknown-linux-gnu.tar.xz 155920616 BLAKE2B 6213da724e5052fd72aa35816aeded0136c873bdac5536b8d6efd8e830d1db6b909313f58462b5ebeeab148ded4d29a36f2dd5439ac6c1d1c68f73d137928376 SHA512 27dace338e78e437d5b8214778f75e79dec604ca54023ac6046c6761ad02db4790f3df902589a934ef2ec7e162ae201f9a5f6b0bb2e688d5c1eca90462cd75b1
+DIST rust-1.74.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9d81f9c2861963a34b0bf9bb15a584db502d388b15f73ce98f78cae6bea0357403d9bd0e6f8ea427a9f4db5946ba7dbb4242e7fb4400b561b7431235f0dbe2d5 SHA512 e1e5e3850715379d30c557791a4eeba2bea090ac85e09a982579a703b2582eddfbc060e21420f418cb492e8d4abe87d5bd81b5acf6ee8bd17b80bb6e0f65b721
+DIST rust-1.74.0-x86_64-unknown-linux-musl.tar.xz 235589268 BLAKE2B d695695ebbb3bf0dea28b9d337f82d5828e6ee70cf7220c849a6008b32f2b590ff57ee35efd58d9a38cd17e0f77ac1187765e8fd6470e0ee2c6cf75f3e3f1489 SHA512 3a8d4cb87d1295b07f0ed48f6e01e69801be3c93744948ef0145217b0cb17581c11c618a07b72edb0945c2ffbe85c59ec1cfd99ef6a60c2e96486f9d5d04d38a
+DIST rust-1.74.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 0ba1390f67b88fc694df26df22c99ae40f56ccdffb479d9228a17a153de965f8c31dfb4d2c65dad4819d42a0b66b96ff9d3e2c404848dd91141220fdce40710f SHA512 efc779bd0e6fb41297a67efdf731abe3857dace889be284d8ac1e6c239a35749185ad5ac3b82c3b2e55edab3f0e51754c8e53e07d207cf8b4b68ede20cdb8591
+DIST rust-1.75.0-aarch64-unknown-linux-gnu.tar.xz 215543948 BLAKE2B 6d5de2260e4720275bc8c0ce23865840886e27a3cc539ff90c7b8c3a9c04368f2c2a2955dd7c3fe2fe5471492a7ecdf4c2e5a749789a059ad8178a0d70dc32f1 SHA512 7ccd4d605c97cc5a7dfc443ecaee23b4d7c58b0e9673ebd0f9174a4a123639213eb85ed25f19479ea6a818859190e673e0479ee80235a7e35a2d971a636872be
+DIST rust-1.75.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B ee4d716d905f654932ef70d65c3e83c573d9076c447b4e5831d1dd657be407621890d7a9858fee1ca8ab869420edd267f71d73948abc5861315ed4dc0880d18c SHA512 007e9b45b3b3957a8da7d01c45c5cc7d2d49942dac39067038e74b414ff32e810fd902b8dc7f7563b18c565c782b4e701f23f6d1cea397959241d3cdfd6421fd
+DIST rust-1.75.0-aarch64-unknown-linux-musl.tar.xz 195703332 BLAKE2B a662f9402ede618e78c9899c9b01c2138b927286c0269e847ff4fd389a07029eaa4dd5242576457c8ed67b6b46eef26396d079d1dc2749884cb05334676435b9 SHA512 eceececb90e3c2fb19866e58619237b416777399c6212362bc09f784138df83edd9160dd29906ed928a50e0359b2d9471868b594d765d35c1c7d8d22760c4f1e
+DIST rust-1.75.0-aarch64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B c37dd733fdd13617f6c4be580631dc78e40684c4f47d1e90f575e8aa1c122b36c1fd7182773944cf8cd873c84299a484c9f50a48ff70c7cf54e4b5becb6355cf SHA512 5c35f04cc4a58cd29c1d6e9a5616937492f584fca29db099ed1d59442e76700b83583b1d41e7ce4815187c7092af2eb6f307a959e8b7a647818c9ebe84cf4c8a
+DIST rust-1.75.0-arm-unknown-linux-gnueabi.tar.xz 179835780 BLAKE2B c532fc00e99c6428947e5335efe73fb979e66fd8d52f60e9cac7040d253ef15543171f74c4841ad740d2d334c0b2305f59925e42420ea0658307ad434186a715 SHA512 9d2b398cf97ccf8b70a82c1d03322c1e432f9bd4885d8a42ec26d0d6d6095b783630d83b8a9287c77d8d57b7bc648410273460ed6339e9d254d1bcb81191a578
+DIST rust-1.75.0-arm-unknown-linux-gnueabi.tar.xz.asc 801 BLAKE2B 5ab700ba8898ab1211b20bf1d1a89bf3e4223eccad6b0e816b113254f7d44f23a03cb7fa9fe68386b0b18ca57d71f39b28b4328f072037058c301526d760b063 SHA512 12d5791f0c1d092b52862786ba6b80031607ed819568734d904e553bc24677b583c64e93cc0cd05fad2eddc7357b21c5d15ef68d720b0ab037c7787f2a47eea0
+DIST rust-1.75.0-arm-unknown-linux-gnueabihf.tar.xz 179907476 BLAKE2B 6ed49db0214fd8b35e4d184337b38dc8393f8baf2958bb62308125e6f8e2126f0aa19c8d44fed3475b7818b001447d69267504ab3c96136e257c37db5d2c2285 SHA512 61d555d9c33c8e1647338fdfe24fdfbb42e194ce4995939a58bda6c46f4b857a058e344e714b88435a7bdcc5ee4a086bbaa9c670bc01de45249ca8376ec47c80
+DIST rust-1.75.0-arm-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 9d5ae3c83985aafdfd1dda6c1db4bf849b4ebaf91ca71ac7249cc8c89de2b3135e752c21850b20c45c5570bb188db1f8513e1df072ebbdd700c37b3ef5f22051 SHA512 6481cfbf21e108d440c8836963d752496eebdf6018b7439459ea079ca82fa05bfc0bd423594e3537c7b522dce05546e59c125eb0cb24ef4db13ed36413c2c1e3
+DIST rust-1.75.0-armv7-unknown-linux-gnueabihf.tar.xz 184210428 BLAKE2B ef329f05d143590d91cba77e7b9a90a977c316e9ae2d8593e7f0247a5db00ca0115c6d468da5394b36e6ce64b2716a51827f39fdc4a34dc16c9220bf5690f042 SHA512 77bfae1f170cd4b2e85a6cc0e02c6f9d621f386a4c0709a2e99c4383479f8979e067d0e92ee7d267150bbf36bc7134bc053afdff7dc0ad66f289aa182755b1d6
+DIST rust-1.75.0-armv7-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B d0a3ebb883641272211478bec1a8089929be0107b05b0f499d71f96515941f7d1e18870c8685f77ef2375251e6f1484f675bd04d5fc0d544854f15ba6402f0e6 SHA512 79e631dd0c44905732ee312486a7c8233440120abeaf40172172e9d5ef0c9687469bac2693ccc2aeb63030590167d88e0fb7d912663dbef655e54ee4cbe9a323
+DIST rust-1.75.0-i686-unknown-linux-gnu.tar.xz 209938900 BLAKE2B 0c9afda24a93f3f35dd779c08d65d6c2366c916a8a3ce6633cd5502bcdbbba537743d95b76daa29d0b4ed3a822915cd5516e864b911bf354e7436745d5a17021 SHA512 242775555d7d38d9aed83018f0d0f8f5f03347c07ee92751de445826c08bc66c24f8601d83eb79729d001d63e81a5b1e27dbb5fac724d80d49e6430685052ba5
+DIST rust-1.75.0-i686-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9b7d778b75c2d0a6f43f48345cb4735a9d00d457a1b4d868f777eb16db040daf246459620ec478b0632ee0428e6215e5c39d819608ca800dd065b6e95b13a77d SHA512 f307db41c5e380dd023cfa3e91eda98dd1af8004d062fcaa759c4913464ee01abcf168f19a9fdbdda6dec7f718083f4765eb4296614de4c1fb6fa06144116297
+DIST rust-1.75.0-loongarch64-unknown-linux-gnu.tar.xz 160649540 BLAKE2B c96a90d28e6b71e2e5a5bea8f591e6b472f63bbcc59f181800e87d4400e647c8a18110ec50c7d6d10c8f460589386e1fbde6273ccbccea9373813c80f6612a2b SHA512 04b601e96e1fa6a7bc00c7d8463e7ad1fc4fb1bb46383e797189ecb972e23535ff864e5379c56fac400dcaf4c42923b8a5c4fd9aa08adb52bc1db8341f5254f1
+DIST rust-1.75.0-loongarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 9da9a6da9b631e72484a3360d692860e98dc77b74e55cf24d6a6a271e9eaa4787ea2f30c38dba483b18890500704319c1dd34b185adf2cf6aee6730bda8d239f SHA512 d6e20fca261aa2c81c019fffe46c7708b58146f9488041419b84a381761a2cd27606d78fd0f6b5e5e79945e1dd76776d54c335ddb453172deab8bac2c3fdf904
+DIST rust-1.75.0-powerpc-unknown-linux-gnu.tar.xz 174918688 BLAKE2B ff7c03e23f8d21dd8f4e0ebaa958fb97ac7779459ad318304070da0c1d98d832200d20d9331f758a33d6131da387af830392e8b34c33c4d220ae49bc93d7c060 SHA512 7a836a7d2ba883388025693044e59af34b2c41a4ffe93def5ed161bf012fbcba7da81cb521217da142852da05503b18df9a965537ba6ba33ef92f52cada8b7d6
+DIST rust-1.75.0-powerpc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B aa30bfeea014f600b1e3c387476a28af619bd8d63f5b6f10801cc15ee42deca5ab34d3470ec4f07fdfe2b8548f580ff6a63a89c74e1c53c7ef8cd73ddfb69272 SHA512 7efb2c4540a4be9f712698e7a9a905462b2fec70ddd65b9a6ffd28119eb595514366451932c888abe1ffbf93aa8b05c33bb0560c47b478f5122bc87be1c3bd96
+DIST rust-1.75.0-powerpc64-unknown-linux-gnu.tar.xz 174640484 BLAKE2B 768ae78a073b1a7614594ec1f6c381d7a4a9b4be14e548cd5031ea011600755c1934c442795e05f95a720a38c155cd18be188cf7e4b6417d924edc9c2a9076aa SHA512 f83ee23aa8eb7a511984b096876cce60415943d729c77ef4b4cdf0b0f9f8088082058d10881d5866d81a0e94c8515b3966de5a41dc8916d75392650715a844c0
+DIST rust-1.75.0-powerpc64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 2bcdf4419fbf491fedcb32a7b54bf2ceb2aaffe0319d9e15f7eb07997646e11283535c5b2024f2785398bbdcaf586aee0ada7128a47b9b8fbd8ffa9e7d0607b5 SHA512 89a0eb5762d49351cfbadcbe098243095a62d41381ea48ebe8a3bf322998c6a46a59ea30da29c03291738fb3d04cafb3c1f57ad1e9ffedd68b4bc1516fdef66f
+DIST rust-1.75.0-powerpc64le-unknown-linux-gnu.tar.xz 186507032 BLAKE2B 49bfbc50e087874b844a7292fefabc0df5217751e2391c44827baf3e83bc0e6a6ce9b392cca58c5b8df6f7f8503110609667fcd9b34e84122016fd0d8df29058 SHA512 536210c00f9cf4bcdcd5bac308954afa4a1e7145844914a5b614745a9023c04273a58ba4ef83214663d69a0a6fc941cd4011349d54e55d84bc090628a7624874
+DIST rust-1.75.0-powerpc64le-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B b7a48197f9159a6c5d46306808d4ebd17b492669745a941b5db380d76d5ca78095f4bf396804caf7b55bdf47d79b5e88fa2f74aad999306f586e62851d7de029 SHA512 27d86a35df7985a626b64ae7ec05b803a7ef5feefad476c3eddc2d89fad44fe4e520ab29bb27cac8be0a0f3aff7da85e45ae8fef15f2afceeed4962933869e0d
+DIST rust-1.75.0-riscv64gc-unknown-linux-gnu.tar.xz 179877936 BLAKE2B 210b84fe6b0729f52c2dde492b4408f33a7661ea9a40daeb1b2b312788f2c4dc80ce54ca72f08098e8575215e7fa7500694142c0448460bf8a82b2761c236290 SHA512 7cc11f07552cc50e78a2e90c0d0da1a62fb0547f56aa6facac4791ef81e7d62a2d66f3cd079cda91e0db1564c2931074ae40c8c142dc9cede1f9c374379fe49c
+DIST rust-1.75.0-riscv64gc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 8230c219c9cc22c93fc25f023729e87bf5e725f0613cc0a1a205a671c24beecc48997f824e128b56e4242369328666e355fb5e630cefa6339b39ddab61ca273f SHA512 75820f06aea67b3731777d5b7a0cb907a829b65dcabb4ce2fd55bff52837f6929239be6f8c6b303b86a352ecab16d38afde3ef9683cf7d5c4b4046231c9988c0
+DIST rust-1.75.0-s390x-unknown-linux-gnu.tar.xz 199359500 BLAKE2B fffc6c690c4ad8a9985ce8d2b3e6518787b474e47cf1d5a634f38b5d9d4017ac8f5f69206a9229298dd504d2ed2648dacd2d09a8512c008678033608231c2d7c SHA512 bae263c19a59347705959bf2d285420d2074836adcb92a74d2ec922be2ce2f8aff6f758509701a2136473301654bf528b7c1c2522fd7388f5669d1ed94324c50
+DIST rust-1.75.0-s390x-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 74cca56622367225f8326b60540c3738adb2ab12a5e320bc85b448e1cd2111983a0816188dd8767d2f20db0f9120d5d1bcc5393548f1a18c828a55f99e4c50e6 SHA512 00e0181fbf6ea1ba2035b368f3ea143f270f8a3c5e41e441593cf3cf072c31b3874146de8c2c51e3eef5c8f0ce8594132a39516d3f614d8d5f0863b546dfb746
+DIST rust-1.75.0-x86_64-unknown-linux-gnu.tar.xz 156249584 BLAKE2B e6ac90854f589c2fb15144bb4db07a9b05b72196febd07c9de223c74c05c2637c832505f1135faceed14fe8c8bcad0a5205005540faa2bdf0f42949d934107c5 SHA512 86d1a5686f826c8f43f876c4cef42e9483785a37b1aaead73dc64a1ff64e7a025a6771d2e642771c6c847d717c25c6bd2560a2b8b59516a55dece589580b2534
+DIST rust-1.75.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 6614cb3ef782c917e8f7fdc990c5b82e8fcffa71e075f10f9726f405ff566fd963bec64cde4dd7252d9d78e09a184b8ba22d15cc87662ad987cdd37c881d8288 SHA512 bfaeef4cd7643879991955fd33f4cdc4c34afb1202cb77c0736434fb735bd215d18d1a11c25f04a7f2514640858a36832e5805a5f85e92d8b7076aa18607ffc3
+DIST rust-1.75.0-x86_64-unknown-linux-musl.tar.xz 234151836 BLAKE2B 9461afbdf26dea19e118b35ea7ef1ee60c22f601501ae6a08950658598a74a6b3179cbdfd9dc4748a0c2485af721b371e5fb523f27e7d7d702f94b532a70437f SHA512 7d650a29c5d14023a3d7d606b7bac4be6ef7988a82525f02d7af9cf3895bb88284442b8042d27be69689f4bddaa5c5370ef7609d18849986860eafcdf89d2d69
+DIST rust-1.75.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B c222d0989518602c0ecde9d21dbca97e9e60d81083804d1d8b2c6bffc8114af78570fd384eb58e5dba1bf249b99300e7f3f4067c1a66c0cd9fac60443f56f751 SHA512 6f78913e34402cedb37f4a54491c65a8bfe79e535e4e40516f2381bc27783cc7655e9252e7701813578c8ffcaf6b301e61ad32917a475d4388fa472733b21b12
+DIST rust-1.76.0-aarch64-unknown-linux-gnu.tar.xz 217392212 BLAKE2B aa587d69b5acc389a8d1431875f10f6261bbedb259a9009092e663a345fb0ac0cf3ad3459ca549a496853b8d760c7fc56b797ee269bcd15d54bc735cd1100fbf SHA512 ad95566ca7597ef64a03f614cc20b9c8d9b2fe67f33141b817973fa160c2be978511509fee79bdbfc74c50076a607e8543ad5bb4b56723704df27b5573b8d606
+DIST rust-1.76.0-aarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 86834b999cb0ad9de02a32a79f801d28268c986c830ad3f16274cd4c404a4305267c90b677f7a8637f2de08c766ad3555945f77da181906358e3d51b35e258b1 SHA512 79c1b258267d6feaecba18648a7eb620a570c99fb75e422d0a5b946a66f3a5bf6d2b41dca89b4ae79feed704d498674f36de368e4b228b1e38e3499ac8cd4f21
+DIST rust-1.76.0-aarch64-unknown-linux-musl.tar.xz 197852572 BLAKE2B 93985909e049957f80d4a14842c85dd14e5eec6d74e4e439479f353b44b123947c782856de86555262829d755a344ad01a94c41e8852818e727fba74620e1d68 SHA512 1f36245932d3b9bab0b99604085d886d9fd2e575e896e1c28b1771ae916466c060f4d70486e47200d58947147eb5571b922e175b1a450a36388c3c95e6537655
+DIST rust-1.76.0-aarch64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B 50326fb881308300aa01f3783ec6856b7ab9ef80e986cc4e64fc5d6d0bcd246add9330ee5459a3ab5c0bd417d75c2b9486bdbdc19edf5a899dfd9e1ecf31028e SHA512 0e775d73bee5cfc70035db1d0fc4506d022d593cf847e01c3f09ddc48a02c4eb24eabd42391c3241cc05ca49b15e38eea0f56786a4f800df724753ee7c557ab4
+DIST rust-1.76.0-arm-unknown-linux-gnueabi.tar.xz 181085440 BLAKE2B 024b82d285208635dda1c6dd66f634d1b921657d3921c402b7adeb7ac9b495628c31b248ed480d4e52e55293815a686f9ee52a84c2407763de5b961962ca9cc4 SHA512 c6840b3368bed511976c32dd3b22a8d1341c002843958a8cc8666c4f19547eb71d8a90946c1c075cf8af50187c1f14fcad2df488d186941d00cfd6b638b27dde
+DIST rust-1.76.0-arm-unknown-linux-gnueabi.tar.xz.asc 801 BLAKE2B 71f2d3a9de1343eb96a75a7eec3d8d4ca9a02e7ed01a1cd2f4f352855dc6d58cae5ffbd70944d7d1e0c7559c74f8d8a25f3c1c3a14c2f00e5797d0f142b25a12 SHA512 b3dcd4b3e2fb5e5039b7fe654421f7a2f72ec5ebfa841589be715bf0a8ff4ff0a3c46a25d0978b4206678a2f2410c5ca69146f6e3eaa4b02a6231589bb099ed7
+DIST rust-1.76.0-arm-unknown-linux-gnueabihf.tar.xz 181168340 BLAKE2B 8d48ed7c79f87aeb91676c3f90877fbd396341130276e27adf42a0a0e5d3f7ded34a271cca34f1c0fa7f37d5666ba3f2f16eeccd91aa37859adc34077dd2a000 SHA512 6beba28be79a563eab4567ca33dbcaa7cba5f4389fa480ef4e16e528fcdc1ed6a2c7ccce1ee527afbaaa43545bfd80fa47ccd3ca2ea4c38ca2b397bdbee47a3a
+DIST rust-1.76.0-arm-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 534e5f05848e5f6c05f2de69e0c974f5e4860c9ab4501491a651f5d2200aff69c9ece29010aa732d0eac3173b1f148afc3096b5f05146f7be7df14e5d9ecc44f SHA512 fba15a41ffc9202ae27a6c2884bac7367219fc5b1892287a599a1c8d2251bbe763df07da4b9719d73bb6d93fbac3dd1b8c4d8af75acb942200c9d7b1050be009
+DIST rust-1.76.0-armv7-unknown-linux-gnueabihf.tar.xz 184387332 BLAKE2B 7b9b03332f19859d43629d4e65815619fab1845c129a254643f164c025c5d574e71f6001899deec470e93c97fa6ac8c9d71cde5320b6f4cd822c2ab113e4b827 SHA512 3fbb7300e4dbe855207671ad309b71cdbad9cdc41b1c8144734f9de85c904918b137a2fe7284e9046f00526c7fce8b68dcbb40ab8d6543ef31ca0bbbfb396431
+DIST rust-1.76.0-armv7-unknown-linux-gnueabihf.tar.xz.asc 801 BLAKE2B 050c4eead78d8161d46acd4ae47b69612706d8053bdfb5e4cfc0fe20ccbf4544643c1850f14cf93f7d17602849770857551b64c7f8f8db45594b7dbe267ecb41 SHA512 32e72430c4c9a5970994bcc6034d3be1a2a915adc6aa45a0c1cba403f6c44206af3e024afc42fe39a8501322fe46deea9921c9760f8e1f65422960baa88abafb
+DIST rust-1.76.0-i686-unknown-linux-gnu.tar.xz 211679020 BLAKE2B 06c9e52a1b6c802be3c4b0cb424dcf243f08fd5345e4b3977cca82093839cec885f6f491179e9e1f8e64c971bd7bfdbb6c551e463874b44c8b89ea649e8c9f40 SHA512 64605e0c981df2c805ba8cb31a89fabd00332faeea6d04ac57cb4898b7cedc66e4043ca3eeca799a204ffb93ecfa770150f09b99da3a7dc913d4e97331554e8f
+DIST rust-1.76.0-i686-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 72d87215c5ddf03ed0cab99adb97b6f15fa8048fca68b44bdb77cd0df09cb1784cecb80f6618ad43d1b6f41a5848ddc84126ad576ff1ff08a3928cec9811a4d2 SHA512 a6d52e452a7afabb329b75155db9da91d51f809e913b19cde1c51c4d0f79831e962e698cf8e86079649e31a662d13743da23b13d16df6530427eec3e4269be7a
+DIST rust-1.76.0-loongarch64-unknown-linux-gnu.tar.xz 162940496 BLAKE2B 4c3b66199339262ea93de6785980795e493ce4e7de9d7ddf3e7c9fe38ad404f980abf408e979780905c149bb3de65d26cdc654f8b3ad0823a3d5067809fc4944 SHA512 64fac030d7edf9677757b883d1664b7e06ab9d5007d87a78d449acac359d7d6ba694bf4a6635c8bca51f274f842dad0612377aef655bb430f6290459343aa6e2
+DIST rust-1.76.0-loongarch64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B f52e951657308df5a944d35e2f9c19278f6f250474c070593f3b2072f372b8f6c32d379d144c8ae5a3ee31f7de21c00ec1da097f2c8c9a54759d9440ec5eb822 SHA512 d5ed37fd844715daa5d9901b388cbf39854fce3408c1d572f18e83d6207a20345e5e2c2b49b9c1523097245c73e1a448df8ecef2ae5b344e57bbe646b1266af6
+DIST rust-1.76.0-powerpc-unknown-linux-gnu.tar.xz 176795548 BLAKE2B 77e102e4d3821557895f3e24059b65847dc46ce3b81ce73f15063e9a6d383ba12f4c905fcbc85b79c39f00e9cb011fd2831737bb3ee9bb53103b4a7361aa312b SHA512 05ccb4294d788e948b69c9e38abf28454604f6b5bdd04704d6dd5231445e2f791cb18ea5149b4324a152ce9ae356b55036d2f74a5d9dc3aaaa05f5c7e4e69e1f
+DIST rust-1.76.0-powerpc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 6d2fe65e5840cd7ddbf1b18ef89cd337b16e3424b6e20d21e199b274fbbc4d9fd88406c2a119d5b0bd48fc9e47145dade3f37bbf99faff68905e57bd41937c1a SHA512 a1e45e41f901513e97956d336910927d7357cb8c2362be69989528fa5ae7087da409853adfd86354b4b7faec3e8542e400838df1d195843c030d9c6fffed7557
+DIST rust-1.76.0-powerpc64-unknown-linux-gnu.tar.xz 177409476 BLAKE2B 7c9829c8e8ecf2a162663a2c382bff49739ca2bb02b785ffdbcf632edf55a3ea37ea3be09298b0a0a984512aef290123d3b0ca9ae0d088a2a816f38778aec79b SHA512 1f29f66d8e64d4c191bc90b05d791f08317aeec042ced815fd353beef6a7a4f6d5f91755481114e707728bd9a02ed9094b2a75d91d61ddb12748d9d40b211e17
+DIST rust-1.76.0-powerpc64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 3087eda9eec862455906510d38f43b81644243ff7afbd5ddf221cfb2c12408b8ac9a0bd2a269a9499776e04b56b3d52c890e056af544aa56cc06b399614f83b5 SHA512 8a90d5acea677a02b2c5eec93157ee2c47bab895e16408123a0e2c3d44b0f9a9d95fe56dfa903fa1cd2fd298f17050110793e94d60510283c8e3cc120770ce9d
+DIST rust-1.76.0-powerpc64le-unknown-linux-gnu.tar.xz 187967776 BLAKE2B 0ffbbb4e4ca44285d8387fa66c58df72971bba6410faa96f6cfd80c223f4996285fac27672104f25ae2a20cb81a0ec6be0bea1d6893d95eab0d017fbae896509 SHA512 eb8be647651b02f1e9287d075d76c288e34e66514305a68ac118ef41dc14a16e5e1a3f2c5cb8512c4565a2eef3e5063dc4eb11272fa91c01d8313a323c20755c
+DIST rust-1.76.0-powerpc64le-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 5f41ec8841f4004df7b65b50a451027489e303bb2863ece09a14900a229d3180ba23bbf5c770c2939399eb157e97b4a08ccc0632a66eca5ca5cf4c29a1523186 SHA512 929e415a66d8777e2509c25a780b4963b8991adb905a9841dca19a5412a5f86326fd73c43f79c304a48a2898f863b76024b0144109343933a0c5f3f1fb8ed287
+DIST rust-1.76.0-riscv64gc-unknown-linux-gnu.tar.xz 183161264 BLAKE2B 9a0b579bc076b8cc55414c95456caa2146fd0597091d2332c1033d03ac7495684b7b7989ec6a8a108953c681ed88d4b62a9a7fbb39c0300128189a91b035d2df SHA512 29fe21df7b99b9a9483af6f2370e2b5a403c12aee94a1285bfb2d2efa631f9d284c70caf863247843ab1418bc78a26c6f6d5de4e8606456a9ebd265ea3bb504f
+DIST rust-1.76.0-riscv64gc-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 7a380f9d2f2f7083afe7abcd81a15d34df703f076c2c842fee2433c6c40d629bc5b0818fc186b462d653aafeb1fe767de3c01b7a014ec3220d77725bf1074fed SHA512 53e4942d74f42f4a7c35ef4a33833d23a955af157d80588c277f32f30cae63e8543fd4ffb569693ad00a6a20ebdb2d8422ca078ebc85bbf98814815e32791894
+DIST rust-1.76.0-s390x-unknown-linux-gnu.tar.xz 202133724 BLAKE2B d6d68392b9b9b69914cb6986cc1501246e0461a6eb5d18eb0ffe71e0a2a7be20d27e90b117c520723254b4709d08c4fb33d145e5ab559802ba6592dfabf81317 SHA512 fa74e1605eea945445f8ea621a667d50907d8b3ceed700e6b05dbcbf58dc7fec62c1e50247ad9688a5b9c5b78c4a140d93557d494260f8a21b1eb25baa315bec
+DIST rust-1.76.0-s390x-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 574df1144e6e79710a73962511fc73215b3a4d1c3b6623190180c7ec13aa8295e13329c4bc66710013f874054dd756e02bfb2c5f6ce1fc8a07ae0717f958b244 SHA512 17938b3f4671127c9c46a5c51703d430938b73b2e30cd497cbc159ed372889af42e651479d1ca69c000974e21d4d34cfb9e3cf28b79ec8e35540ac319e1b8b9d
+DIST rust-1.76.0-x86_64-unknown-linux-gnu.tar.xz 159385660 BLAKE2B 0846999358aba95a2bebd2ff35ccc9e1954ff4fca66227d1c8c1985c08e91159f2acaa1357544b81e92065a2f9ddf6aee41a2d9199d71d8de1655f9b16ba2ed3 SHA512 1cf0ffb44aee4da9768e27daf5ab3b20e67fc9e8eba5a1718b700c85ecdb61cdef129cb571633294f9c826b6e7bd2958086eec371922ca31af332266d3632609
+DIST rust-1.76.0-x86_64-unknown-linux-gnu.tar.xz.asc 801 BLAKE2B 88e6b124812b409372ee05e2872cb4dfacbc638f8e3b4fb0d5fa4ea63f4594333a9788732502f8bd41e34b5cbc404d7ac08e7690d095a6c37c80b0043dd2be88 SHA512 f7ddca81da468d5617f48240b6d3e8d7d09336ac58f515acd3a20f2d315468ba1d53508dd3264a088ffc0141cb3fbcd8d3c17379f9628270d39c7d44f7727291
+DIST rust-1.76.0-x86_64-unknown-linux-musl.tar.xz 237333892 BLAKE2B e95b92c68e3c2df49fa0d5d84e35f6575fb80571db290b5969441cc09b6c07dee6b2b887f41a2b1ff1e3c099cda2ce2a4a8c05afbcf9f4dc8acbaed5245b69e4 SHA512 04bbbb9a6891c3bb7a20845010029e6ca979548ff70324c08d3162ebc1fa3a84e8c7e2d453495edd34aba19b7a685f048d5047993103bbf221c88ea36350370c
+DIST rust-1.76.0-x86_64-unknown-linux-musl.tar.xz.asc 801 BLAKE2B cd4334fecc17cf03b7333659393004fed4bb895f9b75f93520d1c3e3ee0ce4fcd17d75d748c4a35d31984215c7aec8904ebe3a4ad8bafcd625aef30688a473f7 SHA512 a458372b41c2833bdbd3d6678c35fc23397817b406c409d1ba5e19b4c6246072afff3f938f111382de56f7ff57e660c3eaf3fea0e54871d9af50b52a54f39e41
+DIST rustc-1.71.0-src.tar.xz 151962928 BLAKE2B da8d83cd6621947816630ae487efe7d087266c1352949cedbbd441ba7c7f7c7beb13b9470e66e2f3359c37a050d0e44d22481c418532d3ebb339a456ab092648 SHA512 2c93bafdd248563765a285add48ca77c1e4bad4d5431675ae6a5cdee4cfe7a41e6bcc880a489ca1069a307fd9a005f2d5f8e230dfc95b4a69152b4f9ca49ac44
+DIST rustc-1.71.0-src.tar.xz.asc 801 BLAKE2B e5ddc4b18a6caeeb63c5aed5b5d15989d086f408787d2e603e50e7b8548dc078683062627280fd2a0393bec01c314eb1cc59f9b0e3146abf07b8365a0b44c640 SHA512 cb1b208c8b2bfccf02c73c4246fb238edb0dd10e292c1ef781920964e54e40add3089d988769982c0ce06b719014685b1c37daa2d08b513d86ad73808f4ce3ac
+DIST rustc-1.71.1-src.tar.xz 151983068 BLAKE2B 3dfdbc246feb84a79ae94c2de978c5585ee06cf6b683d2245869b62e28f7c79f89cc589f5431537713bf088236a0b824acefc1b68e418e9eb72e1eea98054e3f SHA512 fd0e5a16bdbeb539184513583089e55f681cb772810df357b6b1464853f7022ac02edab3dd155b2262ed0047e2a25dea3808dd078dcdfce9d399384465009db4
+DIST rustc-1.71.1-src.tar.xz.asc 801 BLAKE2B a88c073a70552d73e2d7695eceabdaa478f34501b7271fabf7f4a09f3efa545181f34353e45776b05918e6aeba88adb02f9731454f7085a7abf1602fc6589983 SHA512 9dd0406cf22f1daa7fcfd015fc1c6f8d36586aa99bf14c1491ee464c1f892ab759feb83e8b55b64713170fb777fdbe038fb5fd01a59c911b6599223baaba0677
+DIST rustc-1.73.0-src.tar.xz 154319536 BLAKE2B 077bdedb36fdbc30db3c6331ac6014615eb79393ad42e38488d037ba38eaa6542467d39b2a14228d0bf6717110f915bf6fdcf0074c6293f413720cc748316eff SHA512 75c59680a82cb9d076b9434744a1c65908524ef769293952f5d9c5779d9a9c6fa4d9aa0c7e7d6b7566a21a50a27cd6ae452b5283a4d4606b2fa1acc24dfd8e0c
+DIST rustc-1.73.0-src.tar.xz.asc 801 BLAKE2B fac2f8652e9a103e8a678b30222e1a505671253827d1d092c4964230a535a85e21cedf00b70f108ac5cb2db961b50e482223e8eaa5b0d585777dd43d80c5931e SHA512 e80ef6280c50522a575f040610184fcf5f45444db2534c6a334e66a69f3338b43d8b34cf035685f28d0e8f006427bbe413611c49fe028c9f72810d74ccfab15e
+DIST rustc-1.74.1-src.tar.xz 155968724 BLAKE2B e05f2379ac94b286f85791a138e1928e5b5b5a7749f0981d82c40c2a12860f55bf96bb2f0e924e35a0f8b2447b13052d38adea909aaa3199105787bb5a4861b3 SHA512 14c7e7ed2f38ab60299d8c7d41d78f042b6b57ef822d577b5138e60bdde31cf141eccd4332a25bc5da3d58eb5313d63c1448b5dfe9e11b8055bb8ea133a9038d
+DIST rustc-1.74.1-src.tar.xz.asc 801 BLAKE2B ddf73175b164233babf31ca3a381b03e20c0f36d017c1d5f85d6ab11f0986d861ab23b11c061e6b2444ced70c3d6a494cc3de4ec86f0deb221a805491bd75420 SHA512 9a96ff9ba9a4e2af4e267b2ec126fc0675c78d0eb767703daa2f28491c3d85c2ab00fbd8584390bf658812ec6c4ab6c57e43b386db59fd505bd3134a8873a09e
+DIST rustc-1.75.0-src.tar.xz 159624388 BLAKE2B 8937b80585eddaa3e1f1ef948899d14a170308518c6fef9fe569560cdd870053776956743f796055f2119399b9ca6c0df12fedd789ae46324d071e5126c4e495 SHA512 7b0f25d91b1b5c317980fc88e059200bd43b56a70b445fbc72fb9b96e09775bfd3a98e9bd9d662af80f0ce3aef527c777ee82777e96ca876f47a972d63da8606
+DIST rustc-1.75.0-src.tar.xz.asc 801 BLAKE2B 434da96b1dc93a5aeed07f4961b087fdd15870e407283ecc00df08dbc1e9f6c65fe459b3a25d39ee55900d53ee583207098ecf3d63f5d6ea114ef0b8398b6a63 SHA512 a0e948553af77ca6e2daa82c69d79079ef7d4ec61957bdff99efd73748200d6c7caa9282daeb3fe3ef849d81a48e66a25336df4c7b6f62f975266aa8b9b93d3a
+DIST rustc-1.76.0-src.tar.xz 162267908 BLAKE2B 0cf726841a837d9906d82a6216e65edad1e3e4a798ccd1ca3824c2098d0c45473854b8bf183c6e9ca70ba095752e77c4f5ef575d98c07243d609857214175f5e SHA512 92e16cfdeb91bde341fe6c2774d92868275b07aa1d46d870ddc9291eadfe4ea9af93e06586fa7d6b8d60534903945cbbe706d354c90272712989c58d2bf174bf
+DIST rustc-1.76.0-src.tar.xz.asc 801 BLAKE2B eadb2f54fceb9c1ac60af72407a2957e37e1ba134a696675a1e9dcf23a2958b41d7f5aa1f75156e4843cefc387cdc9c909e364c3bfcabecc6bfbe262d9c6e8af SHA512 d35c010a5a129580746bcec5c0dad1b0bc1b7864a69505c7c0ccfad436fdfbdf33f87518965a09de187d6a70fb8867dc6a20037c648861031a17501577855120
+DIST rustc-1.77.1-src.tar.xz 162796048 BLAKE2B 18a9fd095808ba78bf50ec94f7fd4087a1033ec79750aa593bacf64219c77ef90c030d41a7d8bc43f7ec8eb30b316c225024be4aeb517100ff6723487f8bb282 SHA512 e057ae638e4c3e54fdb367d48f4b85458121cee0d0ee1ed72f346940b8acad2f16cd9cc8abc16fcf4a17bf244b3300bb56a7e7be3bd0c23b034692c983b84fe8
+DIST rustc-1.77.1-src.tar.xz.asc 801 BLAKE2B 175a551abdb970295d37a0797cf262ac43055a3cb75b23845dbb8696d04b7705b7a2908b82fcbce7cd7dec2e05c382d06622013b9d4aa19fab7f651f7e00bb73 SHA512 eb24976ae97d2980d4c547bcf27d815f4b98b8aa45441a7201a849ee37e0ef15671732c9916d33964b8e802a87ede758daaadf84901bd569527c8b6c48efff23
diff --git a/dev-lang/rust/files/1.62.1-musl-dynamic-linking.patch b/dev-lang/rust/files/1.62.1-musl-dynamic-linking.patch
new file mode 100644
index 0000000..fd56396
--- /dev/null
+++ b/dev-lang/rust/files/1.62.1-musl-dynamic-linking.patch
@@ -0,0 +1,25 @@
+From e42709c46647dab342b826d30324f3e6e5590e00 Mon Sep 17 00:00:00 2001
+From: Jory Pratt <anarchy@gentoo.org>
+Date: Tue, 2 Aug 2022 18:32:53 -0500
+Subject: [PATCH] Enable dynamic linking by default for musl
+
+Signed-off-by: Jory Pratt <anarchy@gentoo.org>
+---
+ compiler/rustc_target/src/spec/linux_musl_base.rs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/compiler/rustc_target/src/spec/linux_musl_base.rs b/compiler/rustc_target/src/spec/linux_musl_base.rs
+index 207a87ab0..8a5a43363 100644
+--- a/compiler/rustc_target/src/spec/linux_musl_base.rs
++++ b/compiler/rustc_target/src/spec/linux_musl_base.rs
+@@ -10,7 +10,7 @@ pub fn opts() -> TargetOptions {
+ base.crt_objects_fallback = Some(CrtObjectsFallback::Musl);
+
+ // These targets statically link libc by default
+- base.crt_static_default = true;
++ base.crt_static_default = false;
+
+ base
+ }
+--
+2.35.1
diff --git a/dev-lang/rust/files/1.67.0-doc-wasm.patch b/dev-lang/rust/files/1.67.0-doc-wasm.patch
new file mode 100644
index 0000000..06011de
--- /dev/null
+++ b/dev-lang/rust/files/1.67.0-doc-wasm.patch
@@ -0,0 +1,34 @@
+From 92aa5f6b272bcdc020a34f8d90f9ef851b5b4504 Mon Sep 17 00:00:00 2001
+From: John Millikin <john@john-millikin.com>
+Date: Mon, 9 Jan 2023 13:54:21 +0900
+Subject: [PATCH] Disable `linux_ext` in wasm32 and fortanix rustdoc builds.
+
+The `std::os::unix` module is stubbed out when building docs for these
+target platforms. The introduction of Linux-specific extension traits
+caused `std::os::net` to depend on sub-modules of `std::os::unix`,
+which broke rustdoc for the `wasm32-unknown-unknown` target.
+
+Adding an additional `#[cfg]` guard solves that rustdoc failure by
+not declaring `linux_ext` on targets with a stubbed `std::os::unix`.
+---
+ library/std/src/os/net/mod.rs | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/library/std/src/os/net/mod.rs b/library/std/src/os/net/mod.rs
+index 5ec267c41e97c..b7046dd7c598c 100644
+--- a/library/std/src/os/net/mod.rs
++++ b/library/std/src/os/net/mod.rs
+@@ -1,4 +1,13 @@
+ //! OS-specific networking functionality.
+
++// See cfg macros in `library/std/src/os/mod.rs` for why these platforms must
++// be special-cased during rustdoc generation.
++#[cfg(not(all(
++ doc,
++ any(
++ all(target_arch = "wasm32", not(target_os = "wasi")),
++ all(target_vendor = "fortanix", target_env = "sgx")
++ )
++)))]
+ #[cfg(any(target_os = "linux", target_os = "android", doc))]
+ pub(super) mod linux_ext;
diff --git a/dev-lang/rust/files/1.70.0-ignore-broken-and-non-applicable-tests.patch b/dev-lang/rust/files/1.70.0-ignore-broken-and-non-applicable-tests.patch
new file mode 100644
index 0000000..2e12c78
--- /dev/null
+++ b/dev-lang/rust/files/1.70.0-ignore-broken-and-non-applicable-tests.patch
@@ -0,0 +1,30 @@
+From 1879d1d1a284bf51c752e47db284ce22701ed5d0 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:38:48 +0000
+Subject: [PATCH 12/15] Ignore broken and non-applicable tests
+
+c-link-to-rust-va-list-fn: unstable feature, broken on aarch64, #56475
+env-funky-keys: can't handle LD_PRELOAD (e.g. sandbox)
+long-linker-command-lines: takes >10 minutes to run (but still passes)
+simd-intrinsic-generic-bitmask.rs: broken on BE, #59356
+sparc-struct-abi: no sparc target
+sysroot-crates-are-unstable: can't run rustc without RPATH
+---
+ test/ui/env-funky-keys.rs | 1 +
+ 6 files changed, 10 insertions(+)
+
+diff --git a/tests/ui/env-funky-keys.rs b/tests/ui/env-funky-keys.rs
+index c5c824ac58d..f3fe047a79c 100644
+--- a/tests/ui/env-funky-keys.rs
++++ b/tests/ui/env-funky-keys.rs
+@@ -1,6 +1,7 @@
+ // run-pass
+ // Ignore this test on Android, because it segfaults there.
+
++// ignore-test
+ // ignore-android
+ // ignore-windows
+ // ignore-cloudabi no execve
+--
+2.24.1
+
diff --git a/dev-lang/rust/files/1.71.0-fix-bashcomp-installation.patch b/dev-lang/rust/files/1.71.0-fix-bashcomp-installation.patch
new file mode 100644
index 0000000..14efbfc
--- /dev/null
+++ b/dev-lang/rust/files/1.71.0-fix-bashcomp-installation.patch
@@ -0,0 +1,23 @@
+https://github.com/rust-lang/rust/pull/113579 which reverts the broken
+https://github.com/rust-lang/rust/pull/110906.
+From: ekusiadadus <ekusiadadus@gmail.com>
+Date: Wed, 12 Jul 2023 00:54:27 +0900
+Subject: [PATCH] Revert "fix: :bug: etc/bash_complettion -> src/etc/... to
+ avoid copy error"
+
+This reverts commit 08ce68b6a6bad360e9c3611ad60cf6598401f878.
+--- a/src/bootstrap/dist.rs
++++ b/src/bootstrap/dist.rs
+@@ -1074,11 +1074,7 @@ impl Step for Cargo {
+
+ tarball.add_file(&cargo, "bin", 0o755);
+ tarball.add_file(etc.join("_cargo"), "share/zsh/site-functions", 0o644);
+- tarball.add_renamed_file(
+- etc.join("cargo.bashcomp.sh"),
+- "src/etc/bash_completion.d",
+- "cargo",
+- );
++ tarball.add_renamed_file(etc.join("cargo.bashcomp.sh"), "etc/bash_completion.d", "cargo");
+ tarball.add_dir(etc.join("man"), "share/man/man1");
+ tarball.add_legal_and_readme_to("share/doc/cargo");
+
diff --git a/dev-lang/rust/files/1.71.0-libressl-openssl-sys.patch b/dev-lang/rust/files/1.71.0-libressl-openssl-sys.patch
new file mode 100644
index 0000000..4869569
--- /dev/null
+++ b/dev-lang/rust/files/1.71.0-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -285,6 +285,7 @@
+ (3, 7, 0) => ('3', '7', '0'),
+ (3, 7, 1) => ('3', '7', '1'),
+ (3, 7, _) => ('3', '7', 'x'),
++ (3, _, _) => ('3', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-lang/rust/files/1.71.0-lint-docs-libpath.patch b/dev-lang/rust/files/1.71.0-lint-docs-libpath.patch
new file mode 100644
index 0000000..27c6738
--- /dev/null
+++ b/dev-lang/rust/files/1.71.0-lint-docs-libpath.patch
@@ -0,0 +1,39 @@
+https://bugs.gentoo.org/910595
+https://github.com/rust-lang/rust/issues/113678
+
+https://github.com/rust-lang/rust/commit/67b5990472e3cac643d8cf90f45fe42201ddec3c
+From: jyn <github@jyn.dev>
+Date: Mon, 10 Jul 2023 15:59:30 -0500
+Subject: [PATCH] Revert "Fix `x test lint-docs` when download-rustc is
+ enabled"
+
+This was not the correct fix. The problem was two-fold:
+- `download-rustc` didn't respect `llvm.assertions`
+- `rust-dev` was missing a bump to `download-ci-llvm-stamp`
+
+The first is fixed in this PR and the latter was fixed a while ago. Revert this change to avoid breaking `rpath = false`.
+--- a/src/tools/lint-docs/src/groups.rs
++++ b/src/tools/lint-docs/src/groups.rs
+@@ -39,7 +39,6 @@ impl<'a> LintExtractor<'a> {
+ fn collect_groups(&self) -> Result<LintGroups, Box<dyn Error>> {
+ let mut result = BTreeMap::new();
+ let mut cmd = Command::new(self.rustc_path);
+- cmd.env_remove("LD_LIBRARY_PATH");
+ cmd.arg("-Whelp");
+ let output = cmd.output().map_err(|e| format!("failed to run command {:?}\n{}", cmd, e))?;
+ if !output.status.success() {
+--- a/src/tools/lint-docs/src/lib.rs
++++ b/src/tools/lint-docs/src/lib.rs
+@@ -403,12 +403,6 @@ impl<'a> LintExtractor<'a> {
+ fs::write(&tempfile, source)
+ .map_err(|e| format!("failed to write {}: {}", tempfile.display(), e))?;
+ let mut cmd = Command::new(self.rustc_path);
+- // NOTE: bootstrap sets `LD_LIBRARY_PATH` for building lint-docs itself.
+- // Unfortunately, lint-docs is a bootstrap tool while rustc is built from source,
+- // and sometimes the paths conflict. In particular, when using `download-rustc`,
+- // the LLVM versions can differ between `ci-llvm` and `ci-rustc-sysroot`.
+- // Unset LD_LIBRARY_PATH here so it doesn't interfere with running the compiler.
+- cmd.env_remove("LD_LIBRARY_PATH");
+ if options.contains(&"edition2015") {
+ cmd.arg("--edition=2015");
+ } else {
diff --git a/dev-lang/rust/files/1.71.1-fix-bootstrap-version-comparison.patch b/dev-lang/rust/files/1.71.1-fix-bootstrap-version-comparison.patch
new file mode 100644
index 0000000..8857c4b
--- /dev/null
+++ b/dev-lang/rust/files/1.71.1-fix-bootstrap-version-comparison.patch
@@ -0,0 +1,26 @@
+https://github.com/rust-lang/rust/pull/114440
+From: Ariadne Conill <ariadne@dereferenced.org>
+Date: Thu, 3 Aug 2023 15:05:40 -0700
+Subject: [PATCH] bootstrap: config: fix version comparison bug
+
+Rust requires a previous version of Rust to build, such as the current version, or the
+previous version. However, the version comparison logic did not take patch releases
+into consideration when doing the version comparison for the current branch, e.g.
+Rust 1.71.1 could not be built by Rust 1.71.0 because it is neither an exact version
+match, or the previous version.
+
+Adjust the version comparison logic to tolerate mismatches in the patch version.
+
+Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
+--- a/src/bootstrap/config.rs
++++ b/src/bootstrap/config.rs
+@@ -2004,7 +2004,8 @@ impl Config {
+ .unwrap();
+ if !(source_version == rustc_version
+ || (source_version.major == rustc_version.major
+- && source_version.minor == rustc_version.minor + 1))
++ && (source_version.minor == rustc_version.minor
++ || source_version.minor == rustc_version.minor + 1)))
+ {
+ let prev_version = format!("{}.{}.x", source_version.major, source_version.minor - 1);
+ eprintln!(
diff --git a/dev-lang/rust/files/1.72.0-bump-libc-deps-to-0.2.146.patch b/dev-lang/rust/files/1.72.0-bump-libc-deps-to-0.2.146.patch
new file mode 100644
index 0000000..bd1c4b5
--- /dev/null
+++ b/dev-lang/rust/files/1.72.0-bump-libc-deps-to-0.2.146.patch
@@ -0,0 +1,156 @@
+This patch bumps all libc dependencies and checksums to 0.2.146, which includes the fix for musl 1.2.4.
+
+--- a/vendor/addr2line-0.20.0/Cargo.lock
++++ b/vendor/addr2line-0.20.0/Cargo.lock
+@@ -246,9 +246,9 @@ checksum = "e2abad23fbc42b3700f2f279844d
+
+ [[package]]
+ name = "libc"
+-version = "0.2.141"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "libtest-mimic"
+--- a/vendor/backtrace-0.3.67/Cargo.lock
++++ b/vendor/backtrace-0.3.67/Cargo.lock
+@@ -64,9 +64,9 @@ checksum = "dec7af912d60cdbd3677c1af9352
+
+ [[package]]
+ name = "libc"
+-version = "0.2.138"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "libloading"
+--- a/vendor/bstr/Cargo.lock
++++ b/vendor/bstr/Cargo.lock
+@@ -34,9 +34,9 @@ dependencies = [
+
+ [[package]]
+ name = "libc"
+-version = "0.2.138"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "memchr"
+--- a/vendor/cranelift-jit/Cargo.lock
++++ b/vendor/cranelift-jit/Cargo.lock
+@@ -224,9 +224,9 @@ dependencies = [
+
+ [[package]]
+ name = "libc"
+-version = "0.2.141"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "log"
+--- a/vendor/crossbeam-channel/Cargo.lock
++++ b/vendor/crossbeam-channel/Cargo.lock
+@@ -50,9 +50,9 @@ dependencies = [
+
+ [[package]]
+ name = "libc"
+-version = "0.2.141"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "num_cpus"
+--- a/vendor/elasticlunr-rs/Cargo.lock
++++ b/vendor/elasticlunr-rs/Cargo.lock
+@@ -555,9 +555,9 @@ checksum = "e2abad23fbc42b3700f2f279844d
+
+ [[package]]
+ name = "libc"
+-version = "0.2.140"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "lindera"
+--- a/vendor/handlebars/Cargo.lock
++++ b/vendor/handlebars/Cargo.lock
+@@ -550,9 +550,9 @@ checksum = "e2abad23fbc42b3700f2f279844d
+
+ [[package]]
+ name = "libc"
+-version = "0.2.140"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "lock_api"
+--- a/vendor/icu_locid/Cargo.lock
++++ b/vendor/icu_locid/Cargo.lock
+@@ -318,9 +318,9 @@ checksum = "e2abad23fbc42b3700f2f279844d
+
+ [[package]]
+ name = "libc"
+-version = "0.2.141"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "litemap"
+--- a/vendor/libffi/Cargo.lock
++++ b/vendor/libffi/Cargo.lock
+@@ -10,9 +10,9 @@ checksum = "50d30906286121d95be3d479533b
+
+ [[package]]
+ name = "libc"
+-version = "0.2.140"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "libffi"
+--- a/vendor/terminal_size/Cargo.lock
++++ b/vendor/terminal_size/Cargo.lock
+@@ -47,9 +47,9 @@ dependencies = [
+
+ [[package]]
+ name = "libc"
+-version = "0.2.140"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "linux-raw-sys"
+--- a/vendor/tracing-tree/Cargo.lock
++++ b/vendor/tracing-tree/Cargo.lock
+@@ -100,9 +100,9 @@ checksum = "e2abad23fbc42b3700f2f279844d
+
+ [[package]]
+ name = "libc"
+-version = "0.2.141"
++version = "0.2.146"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
+
+ [[package]]
+ name = "log"
diff --git a/dev-lang/rust/files/1.72.0-libressl-openssl-sys.patch b/dev-lang/rust/files/1.72.0-libressl-openssl-sys.patch
new file mode 100644
index 0000000..2d03b58
--- /dev/null
+++ b/dev-lang/rust/files/1.72.0-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -274,6 +274,7 @@
+ (3, 7, 1) => ('3', '7', '1'),
+ (3, 7, _) => ('3', '7', 'x'),
+ (3, 8, 0) => ('3', '8', '0'),
++ (3, _, _) => ('3', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-lang/rust/files/1.74.1-cross-compile-libz.patch b/dev-lang/rust/files/1.74.1-cross-compile-libz.patch
new file mode 100644
index 0000000..f2a881b
--- /dev/null
+++ b/dev-lang/rust/files/1.74.1-cross-compile-libz.patch
@@ -0,0 +1,19 @@
+https://paste.sr.ht/~kchibisov/682321e0fd4a3ece4a4b7b71591896f5cd3cdb22
+https://github.com/gentoo/gentoo/pull/35246#discussion_r1484525497
+
+diff --git a/compiler/rustc_llvm/build.rs b/compiler/rustc_llvm/build.rs
+index f606fa483ca..8a2e1c40e8b 100644
+--- a/compiler/rustc_llvm/build.rs
++++ b/compiler/rustc_llvm/build.rs
+@@ -237,10 +237,7 @@ fn main() {
+ // of llvm-config, not the target that we're attempting to link.
+ let mut cmd = Command::new(&llvm_config);
+ cmd.arg(llvm_link_arg).arg("--libs");
+-
+- if !is_crossed {
+- cmd.arg("--system-libs");
+- }
++ cmd.arg("--system-libs");
+
+ if (target.starts_with("arm") && !target.contains("freebsd"))
+ || target.starts_with("mips-")
diff --git a/dev-lang/rust/files/1.75.0-handle-vendored-sources.patch b/dev-lang/rust/files/1.75.0-handle-vendored-sources.patch
new file mode 100644
index 0000000..c68ceba
--- /dev/null
+++ b/dev-lang/rust/files/1.75.0-handle-vendored-sources.patch
@@ -0,0 +1,45 @@
+From 4b7e0a0b56aa2446e670dfd6558380a1039a86aa Mon Sep 17 00:00:00 2001
+From: Arlo Siemsen <arsiem@microsoft.com>
+Date: Thu, 4 Jan 2024 11:40:56 -0600
+Subject: [PATCH] Handle vendored sources when remapping paths
+
+Signed-off-by: Randy Barlow <randy@electronsweatshop.com>
+---
+ src/bootstrap/src/core/builder.rs | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+diff --git a/src/bootstrap/src/core/builder.rs b/src/bootstrap/src/core/builder.rs
+index 4e20babc55a..3770d0687b2 100644
+--- a/src/bootstrap/src/core/builder.rs
++++ b/src/bootstrap/src/core/builder.rs
+@@ -1799,15 +1799,20 @@ pub fn cargo(
+ }
+
+ if self.config.rust_remap_debuginfo {
+- // FIXME: handle vendored sources
+- let registry_src = t!(home::cargo_home()).join("registry").join("src");
+ let mut env_var = OsString::new();
+- for entry in t!(std::fs::read_dir(registry_src)) {
+- if !env_var.is_empty() {
+- env_var.push("\t");
+- }
+- env_var.push(t!(entry).path());
++ if self.config.vendor {
++ let vendor = self.build.src.join("vendor");
++ env_var.push(vendor);
+ env_var.push("=/rust/deps");
++ } else {
++ let registry_src = t!(home::cargo_home()).join("registry").join("src");
++ for entry in t!(std::fs::read_dir(registry_src)) {
++ if !env_var.is_empty() {
++ env_var.push("\t");
++ }
++ env_var.push(t!(entry).path());
++ env_var.push("=/rust/deps");
++ }
+ }
+ cargo.env("RUSTC_CARGO_REGISTRY_SRC_TO_REMAP", env_var);
+ }
+--
+2.43.0
+
diff --git a/dev-lang/rust/files/1.75.0-musl-dynamic-linking.patch b/dev-lang/rust/files/1.75.0-musl-dynamic-linking.patch
new file mode 100644
index 0000000..7dc34f8
--- /dev/null
+++ b/dev-lang/rust/files/1.75.0-musl-dynamic-linking.patch
@@ -0,0 +1,19 @@
+From e42709c46647dab342b826d30324f3e6e5590e00 Mon Sep 17 00:00:00 2001
+From: Jory Pratt <anarchy@gentoo.org>
+Date: Tue, 2 Aug 2022 18:32:53 -0500
+Subject: [PATCH] Enable dynamic linking by default for musl
+
+Signed-off-by: Jory Pratt <anarchy@gentoo.org>
+--- a/compiler/rustc_target/src/spec/base/linux_musl.rs
++++ b/compiler/rustc_target/src/spec/base/linux_musl.rs
+@@ -10,7 +10,7 @@ pub fn opts() -> TargetOptions {
+ base.crt_objects_fallback = Some(CrtObjectsFallback::Musl);
+
+ // These targets statically link libc by default
+- base.crt_static_default = true;
++ base.crt_static_default = false;
+
+ base
+ }
+--
+2.35.1
diff --git a/dev-lang/rust/files/1.76.0-loong-code-model.patch b/dev-lang/rust/files/1.76.0-loong-code-model.patch
new file mode 100644
index 0000000..02bfeca
--- /dev/null
+++ b/dev-lang/rust/files/1.76.0-loong-code-model.patch
@@ -0,0 +1,73 @@
+https://github.com/rust-lang/rust/pull/120661
+From: WANG Xuerui <xen0n@gentoo.org>
+Date: Mon, 5 Feb 2024 13:18:32 +0800
+Subject: [PATCH] target: default to the medium code model on LoongArch targets
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The Rust LoongArch targets have been using the default LLVM code model
+so far, which is "small" in LLVM-speak and "normal" in LoongArch-speak.
+As described in the "Code Model" section of LoongArch ELF psABI spec
+v20231219 [1], one can only make function calls as far as ±128MiB with
+the "normal" code model; this is insufficient for very large software
+containing Rust components that needs to be linked into the big text
+section, such as Chromium.
+
+Because:
+
+* we do not want to ask users to recompile std if they are to build
+ such software,
+* objects compiled with larger code models can be linked with those
+ with smaller code models without problems, and
+* the "medium" code model is comparable to the "small"/"normal" one
+ performance-wise (same data access pattern; each function call
+ becomes 2-insn long and indirect, but this may be relaxed back into
+ the direct 1-insn form in a future LLVM version), but is able to
+ perform function calls within ±128GiB,
+
+it is better to just switch the targets to the "medium" code model,
+which is also "medium" in LLVM-speak.
+
+[1]: https://github.com/loongson/la-abi-specs/blob/v2.30/laelf.adoc#code-models
+--- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs
++++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs
+@@ -1,4 +1,4 @@
+-use crate::spec::{base, Target, TargetOptions};
++use crate::spec::{base, CodeModel, Target, TargetOptions};
+
+ pub fn target() -> Target {
+ Target {
+@@ -7,6 +7,7 @@ pub fn target() -> Target {
+ data_layout: "e-m:e-p:64:64-i64:64-i128:128-n64-S128".into(),
+ arch: "loongarch64".into(),
+ options: TargetOptions {
++ code_model: Some(CodeModel::Medium),
+ cpu: "generic".into(),
+ features: "+f,+d".into(),
+ llvm_abiname: "lp64d".into(),
+--- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs
++++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs
+@@ -16,7 +16,7 @@ pub fn target() -> Target {
+ max_atomic_width: Some(64),
+ relocation_model: RelocModel::Static,
+ panic_strategy: PanicStrategy::Abort,
+- code_model: Some(CodeModel::Small),
++ code_model: Some(CodeModel::Medium),
+ ..Default::default()
+ },
+ }
+--- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs
++++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs
+@@ -17,7 +17,7 @@ pub fn target() -> Target {
+ max_atomic_width: Some(64),
+ relocation_model: RelocModel::Static,
+ panic_strategy: PanicStrategy::Abort,
+- code_model: Some(CodeModel::Small),
++ code_model: Some(CodeModel::Medium),
+ ..Default::default()
+ },
+ }
+--
+2.43.0
+
diff --git a/dev-lang/rust/files/1.77.1-libressl-openssl-sys.patch b/dev-lang/rust/files/1.77.1-libressl-openssl-sys.patch
new file mode 100644
index 0000000..c3ba287
--- /dev/null
+++ b/dev-lang/rust/files/1.77.1-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -293,6 +293,7 @@
+ (3, 8, 0) => ('3', '8', '0'),
+ (3, 8, 1) => ('3', '8', '1'),
+ (3, 8, _) => ('3', '8', 'x'),
++ (_, _, _) => ('x', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-lang/rust/files/rehash-crate.sh b/dev-lang/rust/files/rehash-crate.sh
new file mode 100644
index 0000000..c43f542
--- /dev/null
+++ b/dev-lang/rust/files/rehash-crate.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# $1 = crate patch file
+
+set -euf
+
+cargo='.cargo-checksum.json'
+
+grep -- '^[+][+][+] ' "${1:?}" | while read -r _ f; do
+ file="${f#*/}"
+ orig_sum="$(grep -Eo "\"${file}\":\"[0-9a-fA-F]+\"" "${cargo}" |
+ cut -d':' -f2 | tr -d '"')"
+ if [ -n "${orig_sum}" ]; then
+ sum="$(sha256sum "${file}")"
+ sed -i "s|${orig_sum}|${sum%% *}|" "${cargo}"
+ fi
+done
+
+exit 0
diff --git a/dev-lang/rust/metadata.xml b/dev-lang/rust/metadata.xml
new file mode 100644
index 0000000..1cf83c8
--- /dev/null
+++ b/dev-lang/rust/metadata.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>randy@electronsweatshop.com</email>
+ <name>Randy Barlow</name>
+ </maintainer>
+ <maintainer type="person" proxied="yes">
+ <email>navi@vlhl.dev</email>
+ <name>Anna Figueiredo Gomes</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>rust@gentoo.org</email>
+ <name>Rust Project</name>
+ </maintainer>
+ <use>
+ <flag name="clippy">Install clippy, Rust code linter</flag>
+ <flag name="dist">Install dist tarballs (used for bootstrapping)</flag>
+ <flag name="miri">Install miri, an interpreter for Rust's mid-level intermediate representation (requires USE=nightly, sometimes is broken)</flag>
+ <flag name="nightly">Enable nightly (UNSTABLE) features (NOTE: it does not install nightly version, just enables features marked as nightly at time of release)</flag>
+ <flag name="parallel-compiler">Build a multi-threaded rustc (experimental, not tested by upstream)</flag>
+ <flag name="profiler">Build the profiler runtime and rust-demangler tool (needed for '-C profile-generate' or '-C instrument-coverage' codegen opts)</flag>
+ <flag name="rustfmt">Install rustfmt, Rust code formatter</flag>
+ <flag name="rust-analyzer">Install rust-analyzer, A Rust compiler front-end for IDEs (language server)</flag>
+ <flag name="rust-src">Install rust-src, needed by developer tools and for build-std (cross)</flag>
+ <flag name="system-bootstrap">Bootstrap using installed rust compiler</flag>
+ <flag name="system-llvm">Use the system LLVM installation</flag>
+ <flag name="wasm">Build support for the wasm32-unknown-unknown target</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">rust-lang/rust</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-lang/rust/rust-1.71.0.ebuild b/dev-lang/rust/rust-1.71.0.ebuild
new file mode 100644
index 0000000..5eed9ea
--- /dev/null
+++ b/dev-lang/rust/rust-1.71.0.ebuild
@@ -0,0 +1,759 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
+ multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
+
+if [[ ${PV} = *beta* ]]; then
+ betaver=${PV//*beta}
+ BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+ MY_P="rustc-beta"
+ SLOT="beta/${PV}"
+ SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+else
+ ABI_VER="$(ver_cut 1-2)"
+ SLOT="stable/${ABI_VER}"
+ MY_P="rustc-${PV}"
+ SRC="${MY_P}-src.tar.xz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+
+SRC_URI="
+ https://static.rust-lang.org/dist/${SRC}
+ verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
+ !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
+"
+
+# keep in sync with llvm ebuild of the same version as bundled one.
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM AVR BPF Hexagon Lanai LoongArch Mips MSP430
+ NVPTX PowerPC RISCV Sparc SystemZ VE WebAssembly X86 XCore )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4 UoI-NCSA"
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind +lto miri nightly parallel-compiler profiler rustfmt rust-analyzer rust-src system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+
+# Please keep the LLVM dependency block separate. Since LLVM is slotted,
+# we need to *really* make sure we're not pulling more than one slot
+# simultaneously.
+
+# How to use it:
+# List all the working slots in LLVM_VALID_SLOTS, newest first.
+LLVM_VALID_SLOTS=( 16 )
+LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
+
+# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
+# (-) usedep needed because we may build with older llvm without that target
+LLVM_DEPEND="|| ( "
+for _s in ${LLVM_VALID_SLOTS[@]}; do
+ LLVM_DEPEND+=" ( "
+ for _x in ${ALL_LLVM_TARGETS[@]}; do
+ LLVM_DEPEND+="
+ ${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )
+ wasm? ( sys-devel/lld:${_s} )"
+ done
+ LLVM_DEPEND+=" )"
+done
+unset _s _x
+LLVM_DEPEND+=" )
+ <sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+"
+
+# to bootstrap we need at least exactly previous version, or same.
+# most of the time previous versions fail to bootstrap with newer
+# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
+# but it fails to bootstrap with 1.48.x
+# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.json
+RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
+RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
+BOOTSTRAP_DEPEND="||
+ (
+ =dev-lang/rust-"${RUST_DEP_PREV}"
+ =dev-lang/rust-bin-"${RUST_DEP_PREV}"
+ =dev-lang/rust-"${RUST_DEP_CURR}"
+ =dev-lang/rust-bin-"${RUST_DEP_CURR}"
+ )
+"
+
+BDEPEND="${PYTHON_DEPS}
+ app-eselect/eselect-rust
+ || (
+ >=sys-devel/gcc-4.7
+ >=sys-devel/clang-3.5
+ )
+ system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
+ !system-llvm? (
+ >=dev-build/cmake-3.13.4
+ app-alternatives/ninja
+ )
+ test? ( dev-debug/gdb )
+ verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+DEPEND="
+ >=app-arch/xz-utils-5.2
+ net-misc/curl:=[http2,ssl]
+ sys-libs/zlib:=
+ dev-libs/openssl:0=
+ system-llvm? (
+ ${LLVM_DEPEND}
+ llvm-libunwind? ( sys-libs/llvm-libunwind:= )
+ )
+ !system-llvm? (
+ !llvm-libunwind? (
+ elibc_musl? ( sys-libs/libunwind:= )
+ )
+ )
+"
+
+RDEPEND="${DEPEND}
+ app-eselect/eselect-rust
+ sys-apps/lsb-release
+"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
+ miri? ( nightly )
+ parallel-compiler? ( nightly )
+ rust-analyzer? ( rust-src )
+ test? ( ${ALL_LLVM_TARGETS[*]} )
+ wasm? ( llvm_targets_WebAssembly )
+ x86? ( cpu_flags_x86_sse2 )
+"
+
+# we don't use cmake.eclass, but can get a warning
+CMAKE_WARN_UNUSED_CLI=no
+
+QA_FLAGS_IGNORED="
+ usr/lib/${PN}/${PV}/bin/.*
+ usr/lib/${PN}/${PV}/libexec/.*
+ usr/lib/${PN}/${PV}/lib/lib.*.so
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_SONAME="
+ usr/lib/${PN}/${PV}/lib/lib.*.so.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_PRESTRIPPED="
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+"
+
+# An rmeta file is custom binary format that contains the metadata for the crate.
+# rmeta files do not support linking, since they do not contain compiled object files.
+# so we can safely silence the warning for this QA check.
+QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+# causes double bootstrap
+RESTRICT="test"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
+
+PATCHES=(
+ "${FILESDIR}"/1.71.0-fix-bashcomp-installation.patch
+ "${FILESDIR}"/1.71.0-lint-docs-libpath.patch
+ "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch
+ "${FILESDIR}"/1.62.1-musl-dynamic-linking.patch
+ "${FILESDIR}"/1.67.0-doc-wasm.patch
+)
+
+S="${WORKDIR}/${MY_P}-src"
+
+eapply_crate() {
+ pushd "${1:?}" > /dev/null || die
+ local patch="${2:?}"
+ eapply "${patch}"
+ "${EPREFIX}"/bin/sh "${FILESDIR}"/rehash-crate.sh "${patch}" || die
+ popd > /dev/null || die
+}
+
+toml_usex() {
+ usex "${1}" true false
+}
+
+bootstrap_rust_version_check() {
+ # never call from pkg_pretend. eselect-rust may be not installed yet.
+ [[ ${MERGE_TYPE} == binary ]] && return
+ local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
+ local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
+ local rustc_version=( $(eselect --brief rust show 2>/dev/null) )
+ rustc_version=${rustc_version[0]#rust-bin-}
+ rustc_version=${rustc_version#rust-}
+
+ [[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
+
+ if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
+ eerror "Rust >=${rustc_wanted} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too old"
+ elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
+ eerror "Rust <${rustc_toonew} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too new"
+ else
+ einfo "Using rust ${rustc_version} to build"
+ fi
+}
+
+pre_build_checks() {
+ local M=8192
+ # multiply requirements by 1.3 if we are doing x86-multilib
+ if use amd64; then
+ M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
+ fi
+ M=$(( $(usex clippy 128 0) + ${M} ))
+ M=$(( $(usex miri 128 0) + ${M} ))
+ M=$(( $(usex rustfmt 256 0) + ${M} ))
+ # add 2G if we compile llvm and 256M per llvm_target
+ if ! use system-llvm; then
+ M=$(( 2048 + ${M} ))
+ local ltarget
+ for ltarget in ${ALL_LLVM_TARGETS[@]}; do
+ M=$(( $(usex ${ltarget} 256 0) + ${M} ))
+ done
+ fi
+ M=$(( $(usex wasm 256 0) + ${M} ))
+ M=$(( $(usex debug 2 1) * ${M} ))
+ eshopts_push -s extglob
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ M=$(( 15 * ${M} / 10 ))
+ fi
+ eshopts_pop
+ M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
+ M=$(( $(usex doc 256 0) + ${M} ))
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+llvm_check_deps() {
+ has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
+}
+
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+ local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+ HAVE_LIBCXX
+#endif
+'
+ local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+ [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+pkg_setup() {
+ pre_build_checks
+ python-any-r1_pkg_setup
+
+ export LIBGIT2_NO_PKG_CONFIG=1 #749381
+
+ use system-bootstrap && bootstrap_rust_version_check
+
+ if use system-llvm; then
+ llvm_pkg_setup
+
+ local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ export LLVM_LINK_SHARED=1
+ export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
+ fi
+}
+
+esetup_unwind_hack() {
+ # https://bugs.gentoo.org/870280
+ # this is a hack needed to bootstrap with libgcc_s linked tarball on llvm-libunwind system.
+ # it should trigger for internal bootstrap or system-bootstrap with rust-bin.
+ # the whole idea is for stage0 to bootstrap with fake libgcc_s.
+ # final stage will receive -L${T}/lib but not -lgcc_s args, producing clean compiler.
+ local fakelib="${T}/fakelib"
+ mkdir -p "${fakelib}" || die
+ # we need both symlinks, one for cargo runtime, other for linker.
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so.1" || die
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so" || die
+ export LD_LIBRARY_PATH="${fakelib}"
+ export RUSTFLAGS+=" -L${fakelib}"
+ # this is a literally magic variable that gets through cargo cache, without it some
+ # crates ignore RUSTFLAGS.
+ # this variable can not contain leading space.
+ export MAGIC_EXTRA_RUSTFLAGS+="${MAGIC_EXTRA_RUSTFLAGS:+ }-L${fakelib}"
+}
+
+src_prepare() {
+ eapply_crate vendor/openssl-sys-0.9.85 "${FILESDIR}"/1.71.0-libressl-openssl-sys.patch
+ eapply_crate vendor/openssl-sys "${FILESDIR}"/1.71.0-libressl-openssl-sys.patch
+
+ if ! use system-bootstrap; then
+ has_version sys-devel/gcc || esetup_unwind_hack
+ local rust_stage0_root="${WORKDIR}"/rust-stage0
+ local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi)"
+
+ "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
+ --without=rust-docs-json-preview,rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
+ fi
+
+ default
+}
+
+src_configure() {
+ filter-lto # https://bugs.gentoo.org/862109 https://bugs.gentoo.org/866231
+
+ local rust_target="" rust_targets="" arch_cflags
+
+ # Collect rust target names to compile standard libs for all ABIs.
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
+ done
+ if use wasm; then
+ rust_targets+=",\"wasm32-unknown-unknown\""
+ if use system-llvm; then
+ # un-hardcode rust-lld linker for this target
+ # https://bugs.gentoo.org/715348
+ sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/wasm_base.rs || die
+ fi
+ fi
+ rust_targets="${rust_targets#,}"
+
+ # cargo and rustdoc are mandatory and should always be included
+ local tools='"cargo","rustdoc"'
+ use clippy && tools+=',"clippy"'
+ use miri && tools+=',"miri"'
+ use profiler && tools+=',"rust-demangler"'
+ use rustfmt && tools+=',"rustfmt"'
+ use rust-analyzer && tools+=',"rust-analyzer"'
+ use rust-src && tools+=',"src"'
+
+ local rust_stage0_root
+ if use system-bootstrap; then
+ local printsysroot
+ printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
+ rust_stage0_root="${printsysroot}"
+ else
+ rust_stage0_root="${WORKDIR}"/rust-stage0
+ fi
+ # in case of prefix it will be already prefixed, as --print sysroot returns full path
+ [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
+
+ rust_target="$(rust_abi)"
+
+ local cm_btype="$(usex debug DEBUG RELEASE)"
+ cat <<- _EOF_ > "${S}"/config.toml
+ changelog-seen = 2
+ [llvm]
+ download-ci-llvm = false
+ optimize = $(toml_usex !debug)
+ release-debuginfo = $(toml_usex debug)
+ assertions = $(toml_usex debug)
+ ninja = true
+ targets = "${LLVM_TARGETS// /;}"
+ experimental-targets = ""
+ link-shared = $(toml_usex system-llvm)
+ $(if is_libcxx_linked; then
+ # https://bugs.gentoo.org/732632
+ echo "use-libcxx = true"
+ echo "static-libstdcpp = false"
+ fi)
+ $(case "${rust_target}" in
+ i586-*-linux-*)
+ # https://github.com/rust-lang/rust/issues/93059
+ echo 'cflags = "-fcf-protection=none"'
+ echo 'cxxflags = "-fcf-protection=none"'
+ echo 'ldflags = "-fcf-protection=none"'
+ ;;
+ *)
+ ;;
+ esac)
+ enable-warnings = false
+ [llvm.build-config]
+ CMAKE_VERBOSE_MAKEFILE = "ON"
+ CMAKE_C_FLAGS_${cm_btype} = "${CFLAGS}"
+ CMAKE_CXX_FLAGS_${cm_btype} = "${CXXFLAGS}"
+ CMAKE_EXE_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_MODULE_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_SHARED_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_STATIC_LINKER_FLAGS_${cm_btype} = "${ARFLAGS}"
+ [build]
+ build-stage = 2
+ test-stage = 2
+ build = "${rust_target}"
+ host = ["${rust_target}"]
+ target = [${rust_targets}]
+ cargo = "${rust_stage0_root}/bin/cargo"
+ rustc = "${rust_stage0_root}/bin/rustc"
+ rustfmt = "${rust_stage0_root}/bin/rustfmt"
+ docs = $(toml_usex doc)
+ compiler-docs = false
+ submodules = false
+ python = "${EPYTHON}"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [${tools}]
+ verbose = 2
+ sanitizers = false
+ profiler = $(toml_usex profiler)
+ cargo-native-static = false
+ [install]
+ prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+ sysconfdir = "etc"
+ docdir = "share/doc/rust"
+ bindir = "bin"
+ libdir = "lib"
+ mandir = "share/man"
+ [rust]
+ # https://github.com/rust-lang/rust/issues/54872
+ codegen-units-std = 1
+ optimize = true
+ debug = $(toml_usex debug)
+ debug-assertions = $(toml_usex debug)
+ debug-assertions-std = $(toml_usex debug)
+ debuginfo-level = $(usex debug 2 0)
+ debuginfo-level-rustc = $(usex debug 2 0)
+ debuginfo-level-std = $(usex debug 2 0)
+ debuginfo-level-tools = $(usex debug 2 0)
+ debuginfo-level-tests = 0
+ backtrace = true
+ incremental = false
+ default-linker = "$(tc-getCC)"
+ parallel-compiler = $(toml_usex parallel-compiler)
+ channel = "$(usex nightly nightly stable)"
+ description = "gentoo"
+ rpath = false
+ verbose-tests = true
+ optimize-tests = $(toml_usex !debug)
+ codegen-tests = true
+ dist-src = false
+ remap-debuginfo = true
+ lld = $(usex system-llvm false $(toml_usex wasm))
+ # only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
+ # https://github.com/rust-lang/rust/issues/74976
+ # https://github.com/rust-lang/rust/issues/76526
+ deny-warnings = $(usex wasm $(usex doc false true) true)
+ backtrace-on-ice = true
+ jemalloc = false
+ lto = "$(usex lto fat off)"
+ [dist]
+ src-tarball = false
+ compression-formats = ["xz"]
+ compression-profile = "balanced"
+ _EOF_
+
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+ arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+ export CFLAGS_${rust_target//-/_}="${arch_cflags}"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${rust_target}]
+ ar = "$(tc-getAR)"
+ cc = "$(tc-getCC)"
+ cxx = "$(tc-getCXX)"
+ linker = "$(tc-getCC)"
+ ranlib = "$(tc-getRANLIB)"
+ llvm-libunwind = "$(usex llvm-libunwind $(usex system-llvm system in-tree) no)"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ # by default librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
+ # but we patch it and set to false here as well
+ if use elibc_musl; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ crt-static = false
+ _EOF_
+ fi
+ done
+ if use wasm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.wasm32-unknown-unknown]
+ linker = "$(usex system-llvm lld rust-lld)"
+ # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483
+ profiler = false
+ _EOF_
+ fi
+
+ if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
+ # experimental cross support
+ # discussion: https://bugs.gentoo.org/679878
+ # TODO: c*flags, clang, system-llvm, cargo.eclass target support
+ # it would be much better if we could split out stdlib
+ # complilation to separate ebuild and abuse CATEGORY to
+ # just install to /usr/lib/rustlib/<target>
+
+ # extra targets defined as a bash array
+ # spec format: <LLVM target>:<rust-target>:<CTARGET>
+ # best place would be /etc/portage/env/dev-lang/rust
+ # Example:
+ # RUST_CROSS_TARGETS=(
+ # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
+ # )
+ # no extra hand holding is done, no target transformations, all
+ # values are passed as-is with just basic checks, so it's up to user to supply correct values
+ # valid rust targets can be obtained with
+ # rustc --print target-list
+ # matching cross toolchain has to be installed
+ # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
+ # only gcc toolchains installed with crossdev are checked for now.
+
+ # BUG: we can't pass host flags to cross compiler, so just filter for now
+ # BUG: this should be more fine-grained.
+ filter-flags '-mcpu=*' '-march=*' '-mtune=*'
+
+ local cross_target_spec
+ for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
+ # extracts first element form <LLVM target>:<rust-target>:<CTARGET>
+ local cross_llvm_target="${cross_target_spec%%:*}"
+ # extracts toolchain triples, <rust-target>:<CTARGET>
+ local cross_triples="${cross_target_spec#*:}"
+ # extracts first element after before : separator
+ local cross_rust_target="${cross_triples%%:*}"
+ # extracts last element after : separator
+ local cross_toolchain="${cross_triples##*:}"
+ use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
+ command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${cross_rust_target}]
+ ar = "${cross_toolchain}-ar"
+ cc = "${cross_toolchain}-gcc"
+ cxx = "${cross_toolchain}-g++"
+ linker = "${cross_toolchain}-gcc"
+ ranlib = "${cross_toolchain}-ranlib"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ if [[ "${cross_toolchain}" == *-musl* ]]; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
+ _EOF_
+ fi
+
+ # append cross target to "normal" target list
+ # example 'target = ["powerpc64le-unknown-linux-gnu"]'
+ # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
+
+ rust_targets="${rust_targets},\"${cross_rust_target}\""
+ sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
+
+ ewarn
+ ewarn "Enabled ${cross_rust_target} rust target"
+ ewarn "Using ${cross_toolchain} cross toolchain"
+ ewarn
+ if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
+ ewarn "'sys-devel/binutils[multitarget]' is not installed"
+ ewarn "'strip' will be unable to strip cross libraries"
+ ewarn "cross targets will be installed with full debug information"
+ ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
+ ewarn
+ ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
+ ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
+ ewarn
+ fi
+ done
+ fi # I_KNOW_WHAT_I_AM_DOING_CROSS
+
+ einfo "Rust configured with the following flags:"
+ echo
+ echo RUSTFLAGS="\"${RUSTFLAGS}\""
+ echo RUSTFLAGS_BOOTSTRAP="\"${RUSTFLAGS_BOOTSTRAP}\""
+ echo RUSTFLAGS_NOT_BOOTSTRAP="\"${RUSTFLAGS_NOT_BOOTSTRAP}\""
+ echo MAGIC_EXTRA_RUSTFLAGS="\"${MAGIC_EXTRA_RUSTFLAGS}\""
+ env | grep "CARGO_TARGET_.*_RUSTFLAGS="
+ env | grep "CFLAGS_.*"
+ echo
+ einfo "config.toml contents:"
+ cat "${S}"/config.toml || die
+ echo
+}
+
+src_compile() {
+ RUST_BACKTRACE=1 "${EPYTHON}" ./x.py build -vvv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+}
+
+src_test() {
+ # https://rustc-dev-guide.rust-lang.org/tests/intro.html
+
+ # those are basic and codegen tests.
+ local tests=(
+ codegen
+ codegen-units
+ compile-fail
+ incremental
+ mir-opt
+ pretty
+ run-make
+ )
+
+ # fails if llvm is not built with ALL targets.
+ # and known to fail with system llvm sometimes.
+ use system-llvm || tests+=( assembly )
+
+ # fragile/expensive/less important tests
+ # or tests that require extra builds
+ # TODO: instead of skipping, just make some nonfatal.
+ if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
+ tests+=(
+ rustdoc
+ rustdoc-js
+ rustdoc-js-std
+ rustdoc-ui
+ run-make-fulldeps
+ ui
+ ui-fulldeps
+ )
+ fi
+
+ local i failed=()
+ einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
+ for i in "${tests[@]}"; do
+ local t="src/test/${i}"
+ einfo "rust_src_test: running ${t}"
+ if ! RUST_BACKTRACE=1 "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
+ -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
+ then
+ failed+=( "${t}" )
+ eerror "rust_src_test: ${t} failed"
+ fi
+ done
+
+ if [[ ${#failed[@]} -ne 0 ]]; then
+ eerror "rust_src_test: failure summary: ${failed[@]}"
+ die "aborting due to test failures"
+ fi
+}
+
+src_install() {
+ DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+
+ # bug #689562, #689160
+ rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
+ rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+ newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
+
+ local symlinks=(
+ cargo
+ rustc
+ rustdoc
+ rust-gdb
+ rust-gdbgui
+ rust-lldb
+ )
+
+ use clippy && symlinks+=( clippy-driver cargo-clippy )
+ use miri && symlinks+=( miri cargo-miri )
+ use profiler && symlinks+=( rust-demangler )
+ use rustfmt && symlinks+=( rustfmt cargo-fmt )
+ use rust-analyzer && symlinks+=( rust-analyzer )
+
+ einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
+ local i
+ for i in "${symlinks[@]}"; do
+ # we need realpath on /usr/bin/* symlink return version-appended binary path.
+ # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
+ # need to fix eselect-rust to remove this hack.
+ local ver_i="${i}-${PV}"
+ if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+ einfo "Installing ${i} symlink"
+ ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+ else
+ ewarn "${i} symlink requested, but source file not found"
+ ewarn "please report this"
+ fi
+ dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+ done
+
+ # symlinks to switch components to active rust in eselect
+ dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
+ dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
+ dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
+ dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
+ dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+
+ newenvd - "50${P}" <<-_EOF_
+ LDPATH="${EPREFIX}/usr/lib/rust/lib"
+ MANPATH="${EPREFIX}/usr/lib/rust/man"
+ _EOF_
+
+ rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+
+ # note: eselect-rust adds EROOT to all paths below
+ cat <<-_EOF_ > "${T}/provider-${P}"
+ /usr/bin/cargo
+ /usr/bin/rustdoc
+ /usr/bin/rust-gdb
+ /usr/bin/rust-gdbgui
+ /usr/bin/rust-lldb
+ /usr/lib/rustlib
+ /usr/lib/rust/lib
+ /usr/lib/rust/libexec
+ /usr/lib/rust/man
+ /usr/share/doc/rust
+ _EOF_
+
+ if use clippy; then
+ echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+ fi
+ if use miri; then
+ echo /usr/bin/miri >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
+ fi
+ if use profiler; then
+ echo /usr/bin/rust-demangler >> "${T}/provider-${P}"
+ fi
+ if use rustfmt; then
+ echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+ fi
+ if use rust-analyzer; then
+ echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+ fi
+
+ insinto /etc/env.d/rust
+ doins "${T}/provider-${P}"
+
+ if use dist; then
+ insinto "/usr/lib/${PN}/${PV}/dist"
+ doins -r "${S}/build/dist/."
+ fi
+}
+
+pkg_postinst() {
+ eselect rust update
+
+ if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+ elog "Rust installs a helper script for calling GDB and LLDB,"
+ elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+ fi
+
+ if has_version app-editors/emacs; then
+ elog "install app-emacs/rust-mode to get emacs support for rust."
+ fi
+
+ if has_version app-editors/gvim || has_version app-editors/vim; then
+ elog "install app-vim/rust-vim to get vim support for rust."
+ fi
+}
+
+pkg_postrm() {
+ eselect rust cleanup
+}
diff --git a/dev-lang/rust/rust-1.71.1.ebuild b/dev-lang/rust/rust-1.71.1.ebuild
new file mode 100644
index 0000000..36d61ae
--- /dev/null
+++ b/dev-lang/rust/rust-1.71.1.ebuild
@@ -0,0 +1,759 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
+ multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
+
+if [[ ${PV} = *beta* ]]; then
+ betaver=${PV//*beta}
+ BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+ MY_P="rustc-beta"
+ SLOT="beta/${PV}"
+ SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+else
+ ABI_VER="$(ver_cut 1-2)"
+ SLOT="stable/${ABI_VER}"
+ MY_P="rustc-${PV}"
+ SRC="${MY_P}-src.tar.xz"
+ KEYWORDS="amd64 arm arm64 ~loong ~mips ppc ppc64 ~riscv sparc x86"
+fi
+
+RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+
+SRC_URI="
+ https://static.rust-lang.org/dist/${SRC}
+ verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
+ !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
+"
+
+# keep in sync with llvm ebuild of the same version as bundled one.
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM AVR BPF Hexagon Lanai LoongArch Mips MSP430
+ NVPTX PowerPC RISCV Sparc SystemZ VE WebAssembly X86 XCore )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4 UoI-NCSA"
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind +lto miri nightly parallel-compiler profiler rustfmt rust-analyzer rust-src system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+
+# Please keep the LLVM dependency block separate. Since LLVM is slotted,
+# we need to *really* make sure we're not pulling more than one slot
+# simultaneously.
+
+# How to use it:
+# List all the working slots in LLVM_VALID_SLOTS, newest first.
+LLVM_VALID_SLOTS=( 16 )
+LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
+
+# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
+# (-) usedep needed because we may build with older llvm without that target
+LLVM_DEPEND="|| ( "
+for _s in ${LLVM_VALID_SLOTS[@]}; do
+ LLVM_DEPEND+=" ( "
+ for _x in ${ALL_LLVM_TARGETS[@]}; do
+ LLVM_DEPEND+="
+ ${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )
+ wasm? ( sys-devel/lld:${_s} )"
+ done
+ LLVM_DEPEND+=" )"
+done
+unset _s _x
+LLVM_DEPEND+=" )
+ <sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+"
+
+# to bootstrap we need at least exactly previous version, or same.
+# most of the time previous versions fail to bootstrap with newer
+# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
+# but it fails to bootstrap with 1.48.x
+# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.json
+RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
+RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
+BOOTSTRAP_DEPEND="||
+ (
+ =dev-lang/rust-"${RUST_DEP_PREV}"
+ =dev-lang/rust-bin-"${RUST_DEP_PREV}"
+ =dev-lang/rust-"${RUST_DEP_CURR}"
+ =dev-lang/rust-bin-"${RUST_DEP_CURR}"
+ )
+"
+
+BDEPEND="${PYTHON_DEPS}
+ app-eselect/eselect-rust
+ || (
+ >=sys-devel/gcc-4.7
+ >=sys-devel/clang-3.5
+ )
+ system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
+ !system-llvm? (
+ >=dev-build/cmake-3.13.4
+ app-alternatives/ninja
+ )
+ test? ( dev-debug/gdb )
+ verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+DEPEND="
+ >=app-arch/xz-utils-5.2
+ net-misc/curl:=[http2,ssl]
+ sys-libs/zlib:=
+ dev-libs/openssl:0=
+ system-llvm? (
+ ${LLVM_DEPEND}
+ llvm-libunwind? ( sys-libs/llvm-libunwind:= )
+ )
+ !system-llvm? (
+ !llvm-libunwind? (
+ elibc_musl? ( sys-libs/libunwind:= )
+ )
+ )
+"
+
+RDEPEND="${DEPEND}
+ app-eselect/eselect-rust
+ sys-apps/lsb-release
+"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
+ miri? ( nightly )
+ parallel-compiler? ( nightly )
+ rust-analyzer? ( rust-src )
+ test? ( ${ALL_LLVM_TARGETS[*]} )
+ wasm? ( llvm_targets_WebAssembly )
+ x86? ( cpu_flags_x86_sse2 )
+"
+
+# we don't use cmake.eclass, but can get a warning
+CMAKE_WARN_UNUSED_CLI=no
+
+QA_FLAGS_IGNORED="
+ usr/lib/${PN}/${PV}/bin/.*
+ usr/lib/${PN}/${PV}/libexec/.*
+ usr/lib/${PN}/${PV}/lib/lib.*.so
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_SONAME="
+ usr/lib/${PN}/${PV}/lib/lib.*.so.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_PRESTRIPPED="
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+"
+
+# An rmeta file is custom binary format that contains the metadata for the crate.
+# rmeta files do not support linking, since they do not contain compiled object files.
+# so we can safely silence the warning for this QA check.
+QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+# causes double bootstrap
+RESTRICT="test"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
+
+PATCHES=(
+ "${FILESDIR}"/1.71.1-fix-bootstrap-version-comparison.patch
+ "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch
+ "${FILESDIR}"/1.62.1-musl-dynamic-linking.patch
+ "${FILESDIR}"/1.67.0-doc-wasm.patch
+)
+
+S="${WORKDIR}/${MY_P}-src"
+
+eapply_crate() {
+ pushd "${1:?}" > /dev/null || die
+ local patch="${2:?}"
+ eapply "${patch}"
+ "${EPREFIX}"/bin/sh "${FILESDIR}"/rehash-crate.sh "${patch}" || die
+ popd > /dev/null || die
+}
+
+toml_usex() {
+ usex "${1}" true false
+}
+
+bootstrap_rust_version_check() {
+ # never call from pkg_pretend. eselect-rust may be not installed yet.
+ [[ ${MERGE_TYPE} == binary ]] && return
+ local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
+ local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
+ local rustc_version=( $(eselect --brief rust show 2>/dev/null) )
+ rustc_version=${rustc_version[0]#rust-bin-}
+ rustc_version=${rustc_version#rust-}
+
+ [[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
+
+ if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
+ eerror "Rust >=${rustc_wanted} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too old"
+ elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
+ eerror "Rust <${rustc_toonew} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too new"
+ else
+ einfo "Using rust ${rustc_version} to build"
+ fi
+}
+
+pre_build_checks() {
+ local M=8192
+ # multiply requirements by 1.3 if we are doing x86-multilib
+ if use amd64; then
+ M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
+ fi
+ M=$(( $(usex clippy 128 0) + ${M} ))
+ M=$(( $(usex miri 128 0) + ${M} ))
+ M=$(( $(usex rustfmt 256 0) + ${M} ))
+ # add 2G if we compile llvm and 256M per llvm_target
+ if ! use system-llvm; then
+ M=$(( 2048 + ${M} ))
+ local ltarget
+ for ltarget in ${ALL_LLVM_TARGETS[@]}; do
+ M=$(( $(usex ${ltarget} 256 0) + ${M} ))
+ done
+ fi
+ M=$(( $(usex wasm 256 0) + ${M} ))
+ M=$(( $(usex debug 2 1) * ${M} ))
+ eshopts_push -s extglob
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ M=$(( 15 * ${M} / 10 ))
+ fi
+ eshopts_pop
+ M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
+ M=$(( $(usex doc 256 0) + ${M} ))
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+llvm_check_deps() {
+ has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
+}
+
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+ local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+ HAVE_LIBCXX
+#endif
+'
+ local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+ [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+pkg_setup() {
+ pre_build_checks
+ python-any-r1_pkg_setup
+
+ export LIBGIT2_NO_PKG_CONFIG=1 #749381
+
+ use system-bootstrap && bootstrap_rust_version_check
+
+ if use system-llvm; then
+ llvm_pkg_setup
+
+ local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ export LLVM_LINK_SHARED=1
+ export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
+ fi
+}
+
+esetup_unwind_hack() {
+ # https://bugs.gentoo.org/870280
+ # this is a hack needed to bootstrap with libgcc_s linked tarball on llvm-libunwind system.
+ # it should trigger for internal bootstrap or system-bootstrap with rust-bin.
+ # the whole idea is for stage0 to bootstrap with fake libgcc_s.
+ # final stage will receive -L${T}/lib but not -lgcc_s args, producing clean compiler.
+ local fakelib="${T}/fakelib"
+ mkdir -p "${fakelib}" || die
+ # we need both symlinks, one for cargo runtime, other for linker.
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so.1" || die
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so" || die
+ export LD_LIBRARY_PATH="${fakelib}"
+ export RUSTFLAGS+=" -L${fakelib}"
+ # this is a literally magic variable that gets through cargo cache, without it some
+ # crates ignore RUSTFLAGS.
+ # this variable can not contain leading space.
+ export MAGIC_EXTRA_RUSTFLAGS+="${MAGIC_EXTRA_RUSTFLAGS:+ }-L${fakelib}"
+}
+
+src_prepare() {
+ eapply_crate vendor/openssl-sys-0.9.85 "${FILESDIR}"/1.71.0-libressl-openssl-sys.patch
+ eapply_crate vendor/openssl-sys "${FILESDIR}"/1.71.0-libressl-openssl-sys.patch
+
+ if ! use system-bootstrap; then
+ has_version sys-devel/gcc || esetup_unwind_hack
+ local rust_stage0_root="${WORKDIR}"/rust-stage0
+ local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi)"
+
+ "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
+ --without=rust-docs-json-preview,rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
+ fi
+
+ default
+}
+
+src_configure() {
+ filter-lto # https://bugs.gentoo.org/862109 https://bugs.gentoo.org/866231
+
+ local rust_target="" rust_targets="" arch_cflags
+
+ # Collect rust target names to compile standard libs for all ABIs.
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
+ done
+ if use wasm; then
+ rust_targets+=",\"wasm32-unknown-unknown\""
+ if use system-llvm; then
+ # un-hardcode rust-lld linker for this target
+ # https://bugs.gentoo.org/715348
+ sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/wasm_base.rs || die
+ fi
+ fi
+ rust_targets="${rust_targets#,}"
+
+ # cargo and rustdoc are mandatory and should always be included
+ local tools='"cargo","rustdoc"'
+ use clippy && tools+=',"clippy"'
+ use miri && tools+=',"miri"'
+ use profiler && tools+=',"rust-demangler"'
+ use rustfmt && tools+=',"rustfmt"'
+ use rust-analyzer && tools+=',"rust-analyzer"'
+ use rust-src && tools+=',"src"'
+
+ local rust_stage0_root
+ if use system-bootstrap; then
+ local printsysroot
+ printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
+ rust_stage0_root="${printsysroot}"
+ else
+ rust_stage0_root="${WORKDIR}"/rust-stage0
+ fi
+ # in case of prefix it will be already prefixed, as --print sysroot returns full path
+ [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
+
+ rust_target="$(rust_abi)"
+
+ local cm_btype="$(usex debug DEBUG RELEASE)"
+ cat <<- _EOF_ > "${S}"/config.toml
+ changelog-seen = 2
+ [llvm]
+ download-ci-llvm = false
+ optimize = $(toml_usex !debug)
+ release-debuginfo = $(toml_usex debug)
+ assertions = $(toml_usex debug)
+ ninja = true
+ targets = "${LLVM_TARGETS// /;}"
+ experimental-targets = ""
+ link-shared = $(toml_usex system-llvm)
+ $(if is_libcxx_linked; then
+ # https://bugs.gentoo.org/732632
+ echo "use-libcxx = true"
+ echo "static-libstdcpp = false"
+ fi)
+ $(case "${rust_target}" in
+ i586-*-linux-*)
+ # https://github.com/rust-lang/rust/issues/93059
+ echo 'cflags = "-fcf-protection=none"'
+ echo 'cxxflags = "-fcf-protection=none"'
+ echo 'ldflags = "-fcf-protection=none"'
+ ;;
+ *)
+ ;;
+ esac)
+ enable-warnings = false
+ [llvm.build-config]
+ CMAKE_VERBOSE_MAKEFILE = "ON"
+ CMAKE_C_FLAGS_${cm_btype} = "${CFLAGS}"
+ CMAKE_CXX_FLAGS_${cm_btype} = "${CXXFLAGS}"
+ CMAKE_EXE_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_MODULE_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_SHARED_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_STATIC_LINKER_FLAGS_${cm_btype} = "${ARFLAGS}"
+ [build]
+ build-stage = 2
+ test-stage = 2
+ build = "${rust_target}"
+ host = ["${rust_target}"]
+ target = [${rust_targets}]
+ cargo = "${rust_stage0_root}/bin/cargo"
+ rustc = "${rust_stage0_root}/bin/rustc"
+ rustfmt = "${rust_stage0_root}/bin/rustfmt"
+ docs = $(toml_usex doc)
+ compiler-docs = false
+ submodules = false
+ python = "${EPYTHON}"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [${tools}]
+ verbose = 2
+ sanitizers = false
+ profiler = $(toml_usex profiler)
+ cargo-native-static = false
+ [install]
+ prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+ sysconfdir = "etc"
+ docdir = "share/doc/rust"
+ bindir = "bin"
+ libdir = "lib"
+ mandir = "share/man"
+ [rust]
+ # https://github.com/rust-lang/rust/issues/54872
+ codegen-units-std = 1
+ optimize = true
+ debug = $(toml_usex debug)
+ debug-assertions = $(toml_usex debug)
+ debug-assertions-std = $(toml_usex debug)
+ debuginfo-level = $(usex debug 2 0)
+ debuginfo-level-rustc = $(usex debug 2 0)
+ debuginfo-level-std = $(usex debug 2 0)
+ debuginfo-level-tools = $(usex debug 2 0)
+ debuginfo-level-tests = 0
+ backtrace = true
+ incremental = false
+ default-linker = "$(tc-getCC)"
+ parallel-compiler = $(toml_usex parallel-compiler)
+ channel = "$(usex nightly nightly stable)"
+ description = "gentoo"
+ rpath = false
+ verbose-tests = true
+ optimize-tests = $(toml_usex !debug)
+ codegen-tests = true
+ dist-src = false
+ remap-debuginfo = true
+ lld = $(usex system-llvm false $(toml_usex wasm))
+ # only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
+ # https://github.com/rust-lang/rust/issues/74976
+ # https://github.com/rust-lang/rust/issues/76526
+ deny-warnings = $(usex wasm $(usex doc false true) true)
+ backtrace-on-ice = true
+ jemalloc = false
+ lto = "$(usex lto fat off)"
+ [dist]
+ src-tarball = false
+ compression-formats = ["xz"]
+ compression-profile = "balanced"
+ _EOF_
+
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+ arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+ export CFLAGS_${rust_target//-/_}="${arch_cflags}"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${rust_target}]
+ ar = "$(tc-getAR)"
+ cc = "$(tc-getCC)"
+ cxx = "$(tc-getCXX)"
+ linker = "$(tc-getCC)"
+ ranlib = "$(tc-getRANLIB)"
+ llvm-libunwind = "$(usex llvm-libunwind $(usex system-llvm system in-tree) no)"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ # by default librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
+ # but we patch it and set to false here as well
+ if use elibc_musl; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ crt-static = false
+ _EOF_
+ fi
+ done
+ if use wasm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.wasm32-unknown-unknown]
+ linker = "$(usex system-llvm lld rust-lld)"
+ # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483
+ profiler = false
+ _EOF_
+ fi
+
+ if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
+ # experimental cross support
+ # discussion: https://bugs.gentoo.org/679878
+ # TODO: c*flags, clang, system-llvm, cargo.eclass target support
+ # it would be much better if we could split out stdlib
+ # complilation to separate ebuild and abuse CATEGORY to
+ # just install to /usr/lib/rustlib/<target>
+
+ # extra targets defined as a bash array
+ # spec format: <LLVM target>:<rust-target>:<CTARGET>
+ # best place would be /etc/portage/env/dev-lang/rust
+ # Example:
+ # RUST_CROSS_TARGETS=(
+ # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
+ # )
+ # no extra hand holding is done, no target transformations, all
+ # values are passed as-is with just basic checks, so it's up to user to supply correct values
+ # valid rust targets can be obtained with
+ # rustc --print target-list
+ # matching cross toolchain has to be installed
+ # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
+ # only gcc toolchains installed with crossdev are checked for now.
+
+ # BUG: we can't pass host flags to cross compiler, so just filter for now
+ # BUG: this should be more fine-grained.
+ filter-flags '-mcpu=*' '-march=*' '-mtune=*'
+
+ local cross_target_spec
+ for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
+ # extracts first element form <LLVM target>:<rust-target>:<CTARGET>
+ local cross_llvm_target="${cross_target_spec%%:*}"
+ # extracts toolchain triples, <rust-target>:<CTARGET>
+ local cross_triples="${cross_target_spec#*:}"
+ # extracts first element after before : separator
+ local cross_rust_target="${cross_triples%%:*}"
+ # extracts last element after : separator
+ local cross_toolchain="${cross_triples##*:}"
+ use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
+ command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${cross_rust_target}]
+ ar = "${cross_toolchain}-ar"
+ cc = "${cross_toolchain}-gcc"
+ cxx = "${cross_toolchain}-g++"
+ linker = "${cross_toolchain}-gcc"
+ ranlib = "${cross_toolchain}-ranlib"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ if [[ "${cross_toolchain}" == *-musl* ]]; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
+ _EOF_
+ fi
+
+ # append cross target to "normal" target list
+ # example 'target = ["powerpc64le-unknown-linux-gnu"]'
+ # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
+
+ rust_targets="${rust_targets},\"${cross_rust_target}\""
+ sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
+
+ ewarn
+ ewarn "Enabled ${cross_rust_target} rust target"
+ ewarn "Using ${cross_toolchain} cross toolchain"
+ ewarn
+ if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
+ ewarn "'sys-devel/binutils[multitarget]' is not installed"
+ ewarn "'strip' will be unable to strip cross libraries"
+ ewarn "cross targets will be installed with full debug information"
+ ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
+ ewarn
+ ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
+ ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
+ ewarn
+ fi
+ done
+ fi # I_KNOW_WHAT_I_AM_DOING_CROSS
+
+ einfo "Rust configured with the following flags:"
+ echo
+ echo RUSTFLAGS="\"${RUSTFLAGS}\""
+ echo RUSTFLAGS_BOOTSTRAP="\"${RUSTFLAGS_BOOTSTRAP}\""
+ echo RUSTFLAGS_NOT_BOOTSTRAP="\"${RUSTFLAGS_NOT_BOOTSTRAP}\""
+ echo MAGIC_EXTRA_RUSTFLAGS="\"${MAGIC_EXTRA_RUSTFLAGS}\""
+ env | grep "CARGO_TARGET_.*_RUSTFLAGS="
+ env | grep "CFLAGS_.*"
+ echo
+ einfo "config.toml contents:"
+ cat "${S}"/config.toml || die
+ echo
+}
+
+src_compile() {
+ RUST_BACKTRACE=1 "${EPYTHON}" ./x.py build -vvv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+}
+
+src_test() {
+ # https://rustc-dev-guide.rust-lang.org/tests/intro.html
+
+ # those are basic and codegen tests.
+ local tests=(
+ codegen
+ codegen-units
+ compile-fail
+ incremental
+ mir-opt
+ pretty
+ run-make
+ )
+
+ # fails if llvm is not built with ALL targets.
+ # and known to fail with system llvm sometimes.
+ use system-llvm || tests+=( assembly )
+
+ # fragile/expensive/less important tests
+ # or tests that require extra builds
+ # TODO: instead of skipping, just make some nonfatal.
+ if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
+ tests+=(
+ rustdoc
+ rustdoc-js
+ rustdoc-js-std
+ rustdoc-ui
+ run-make-fulldeps
+ ui
+ ui-fulldeps
+ )
+ fi
+
+ local i failed=()
+ einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
+ for i in "${tests[@]}"; do
+ local t="src/test/${i}"
+ einfo "rust_src_test: running ${t}"
+ if ! RUST_BACKTRACE=1 "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
+ -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
+ then
+ failed+=( "${t}" )
+ eerror "rust_src_test: ${t} failed"
+ fi
+ done
+
+ if [[ ${#failed[@]} -ne 0 ]]; then
+ eerror "rust_src_test: failure summary: ${failed[@]}"
+ die "aborting due to test failures"
+ fi
+}
+
+src_install() {
+ DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+
+ # bug #689562, #689160
+ rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
+ rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+ newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
+
+ local symlinks=(
+ cargo
+ rustc
+ rustdoc
+ rust-gdb
+ rust-gdbgui
+ rust-lldb
+ )
+
+ use clippy && symlinks+=( clippy-driver cargo-clippy )
+ use miri && symlinks+=( miri cargo-miri )
+ use profiler && symlinks+=( rust-demangler )
+ use rustfmt && symlinks+=( rustfmt cargo-fmt )
+ use rust-analyzer && symlinks+=( rust-analyzer )
+
+ einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
+ local i
+ for i in "${symlinks[@]}"; do
+ # we need realpath on /usr/bin/* symlink return version-appended binary path.
+ # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
+ # need to fix eselect-rust to remove this hack.
+ local ver_i="${i}-${PV}"
+ if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+ einfo "Installing ${i} symlink"
+ ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+ else
+ ewarn "${i} symlink requested, but source file not found"
+ ewarn "please report this"
+ fi
+ dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+ done
+
+ # symlinks to switch components to active rust in eselect
+ dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
+ dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
+ dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
+ dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
+ dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+
+ newenvd - "50${P}" <<-_EOF_
+ LDPATH="${EPREFIX}/usr/lib/rust/lib"
+ MANPATH="${EPREFIX}/usr/lib/rust/man"
+ _EOF_
+
+ rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/bin"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+
+ # note: eselect-rust adds EROOT to all paths below
+ cat <<-_EOF_ > "${T}/provider-${P}"
+ /usr/bin/cargo
+ /usr/bin/rustdoc
+ /usr/bin/rust-gdb
+ /usr/bin/rust-gdbgui
+ /usr/bin/rust-lldb
+ /usr/lib/rustlib
+ /usr/lib/rust/lib
+ /usr/lib/rust/libexec
+ /usr/lib/rust/man
+ /usr/share/doc/rust
+ _EOF_
+
+ if use clippy; then
+ echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+ fi
+ if use miri; then
+ echo /usr/bin/miri >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
+ fi
+ if use profiler; then
+ echo /usr/bin/rust-demangler >> "${T}/provider-${P}"
+ fi
+ if use rustfmt; then
+ echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+ fi
+ if use rust-analyzer; then
+ echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+ fi
+
+ insinto /etc/env.d/rust
+ doins "${T}/provider-${P}"
+
+ if use dist; then
+ insinto "/usr/lib/${PN}/${PV}/dist"
+ doins -r "${S}/build/dist/."
+ fi
+}
+
+pkg_postinst() {
+ eselect rust update
+
+ if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+ elog "Rust installs a helper script for calling GDB and LLDB,"
+ elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+ fi
+
+ if has_version app-editors/emacs; then
+ elog "install app-emacs/rust-mode to get emacs support for rust."
+ fi
+
+ if has_version app-editors/gvim || has_version app-editors/vim; then
+ elog "install app-vim/rust-vim to get vim support for rust."
+ fi
+}
+
+pkg_postrm() {
+ eselect rust cleanup
+}
diff --git a/dev-lang/rust/rust-1.73.0.ebuild b/dev-lang/rust/rust-1.73.0.ebuild
new file mode 100644
index 0000000..6bf90ad
--- /dev/null
+++ b/dev-lang/rust/rust-1.73.0.ebuild
@@ -0,0 +1,769 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
+ multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
+
+if [[ ${PV} = *beta* ]]; then
+ betaver=${PV//*beta}
+ BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+ MY_P="rustc-beta"
+ SLOT="beta/${PV}"
+ SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+else
+ ABI_VER="$(ver_cut 1-2)"
+ SLOT="stable/${ABI_VER}"
+ MY_P="rustc-${PV}"
+ SRC="${MY_P}-src.tar.xz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+
+SRC_URI="
+ https://static.rust-lang.org/dist/${SRC}
+ verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
+ !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
+"
+
+# keep in sync with llvm ebuild of the same version as bundled one.
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY DirectX Hexagon Lanai
+ LoongArch M68k Mips MSP430 NVPTX PowerPC RISCV Sparc SPIRV SystemZ VE
+ WebAssembly X86 XCore Xtensa )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind +lto miri nightly parallel-compiler profiler rustfmt rust-analyzer rust-src system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+
+# Please keep the LLVM dependency block separate. Since LLVM is slotted,
+# we need to *really* make sure we're not pulling more than one slot
+# simultaneously.
+
+# How to use it:
+# List all the working slots in LLVM_VALID_SLOTS, newest first.
+LLVM_VALID_SLOTS=( 17 )
+LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
+
+# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
+# (-) usedep needed because we may build with older llvm without that target
+LLVM_DEPEND="|| ( "
+for _s in ${LLVM_VALID_SLOTS[@]}; do
+ LLVM_DEPEND+=" ( "
+ for _x in ${ALL_LLVM_TARGETS[@]}; do
+ LLVM_DEPEND+="
+ ${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )
+ wasm? ( sys-devel/lld:${_s} )"
+ done
+ LLVM_DEPEND+=" )"
+done
+unset _s _x
+LLVM_DEPEND+=" )
+ <sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+"
+
+# to bootstrap we need at least exactly previous version, or same.
+# most of the time previous versions fail to bootstrap with newer
+# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
+# but it fails to bootstrap with 1.48.x
+# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.json
+RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
+RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
+BOOTSTRAP_DEPEND="||
+ (
+ =dev-lang/rust-"${RUST_DEP_PREV}"
+ =dev-lang/rust-bin-"${RUST_DEP_PREV}"
+ =dev-lang/rust-"${RUST_DEP_CURR}"
+ =dev-lang/rust-bin-"${RUST_DEP_CURR}"
+ )
+"
+
+BDEPEND="${PYTHON_DEPS}
+ app-eselect/eselect-rust
+ || (
+ >=sys-devel/gcc-4.7
+ >=sys-devel/clang-3.5
+ )
+ system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
+ !system-llvm? (
+ >=dev-build/cmake-3.13.4
+ app-alternatives/ninja
+ )
+ test? ( dev-debug/gdb )
+ verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+DEPEND="
+ >=app-arch/xz-utils-5.2
+ net-misc/curl:=[http2,ssl]
+ sys-libs/zlib:=
+ dev-libs/openssl:0=
+ system-llvm? (
+ ${LLVM_DEPEND}
+ llvm-libunwind? ( sys-libs/llvm-libunwind:= )
+ )
+ !system-llvm? (
+ !llvm-libunwind? (
+ elibc_musl? ( sys-libs/libunwind:= )
+ )
+ )
+"
+
+RDEPEND="${DEPEND}
+ app-eselect/eselect-rust
+ sys-apps/lsb-release
+"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
+ miri? ( nightly )
+ parallel-compiler? ( nightly )
+ rust-analyzer? ( rust-src )
+ test? ( ${ALL_LLVM_TARGETS[*]} )
+ wasm? ( llvm_targets_WebAssembly )
+ x86? ( cpu_flags_x86_sse2 )
+"
+
+# we don't use cmake.eclass, but can get a warning
+CMAKE_WARN_UNUSED_CLI=no
+
+QA_FLAGS_IGNORED="
+ usr/lib/${PN}/${PV}/bin/.*
+ usr/lib/${PN}/${PV}/libexec/.*
+ usr/lib/${PN}/${PV}/lib/lib.*.so
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_SONAME="
+ usr/lib/${PN}/${PV}/lib/lib.*.so.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_PRESTRIPPED="
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+"
+
+# An rmeta file is custom binary format that contains the metadata for the crate.
+# rmeta files do not support linking, since they do not contain compiled object files.
+# so we can safely silence the warning for this QA check.
+QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+# causes double bootstrap
+RESTRICT="test"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
+
+PATCHES=(
+ "${FILESDIR}"/1.72.0-bump-libc-deps-to-0.2.146.patch
+ "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch
+ "${FILESDIR}"/1.62.1-musl-dynamic-linking.patch
+ "${FILESDIR}"/1.67.0-doc-wasm.patch
+)
+
+S="${WORKDIR}/${MY_P}-src"
+
+clear_vendor_checksums() {
+ sed -i 's/\("files":{\)[^}]*/\1/' "vendor/${1}/.cargo-checksum.json" || die
+}
+
+eapply_crate() {
+ pushd "${1:?}" > /dev/null || die
+ local patch="${2:?}"
+ eapply "${patch}"
+ "${EPREFIX}"/bin/sh "${FILESDIR}"/rehash-crate.sh "${patch}" || die
+ popd > /dev/null || die
+}
+
+toml_usex() {
+ usex "${1}" true false
+}
+
+bootstrap_rust_version_check() {
+ # never call from pkg_pretend. eselect-rust may be not installed yet.
+ [[ ${MERGE_TYPE} == binary ]] && return
+ local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
+ local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
+ local rustc_version=( $(eselect --brief rust show 2>/dev/null) )
+ rustc_version=${rustc_version[0]#rust-bin-}
+ rustc_version=${rustc_version#rust-}
+
+ [[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
+
+ if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
+ eerror "Rust >=${rustc_wanted} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too old"
+ elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
+ eerror "Rust <${rustc_toonew} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too new"
+ else
+ einfo "Using rust ${rustc_version} to build"
+ fi
+}
+
+pre_build_checks() {
+ local M=8192
+ # multiply requirements by 1.3 if we are doing x86-multilib
+ if use amd64; then
+ M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
+ fi
+ M=$(( $(usex clippy 128 0) + ${M} ))
+ M=$(( $(usex miri 128 0) + ${M} ))
+ M=$(( $(usex rustfmt 256 0) + ${M} ))
+ # add 2G if we compile llvm and 256M per llvm_target
+ if ! use system-llvm; then
+ M=$(( 2048 + ${M} ))
+ local ltarget
+ for ltarget in ${ALL_LLVM_TARGETS[@]}; do
+ M=$(( $(usex ${ltarget} 256 0) + ${M} ))
+ done
+ fi
+ M=$(( $(usex wasm 256 0) + ${M} ))
+ M=$(( $(usex debug 2 1) * ${M} ))
+ eshopts_push -s extglob
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ M=$(( 15 * ${M} / 10 ))
+ fi
+ eshopts_pop
+ M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
+ M=$(( $(usex doc 256 0) + ${M} ))
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+llvm_check_deps() {
+ has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
+}
+
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+ local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+ HAVE_LIBCXX
+#endif
+'
+ local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+ [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+pkg_setup() {
+ pre_build_checks
+ python-any-r1_pkg_setup
+
+ export LIBGIT2_NO_PKG_CONFIG=1 #749381
+
+ use system-bootstrap && bootstrap_rust_version_check
+
+ if use system-llvm; then
+ llvm_pkg_setup
+
+ local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ export LLVM_LINK_SHARED=1
+ export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
+ fi
+}
+
+esetup_unwind_hack() {
+ # https://bugs.gentoo.org/870280
+ # this is a hack needed to bootstrap with libgcc_s linked tarball on llvm-libunwind system.
+ # it should trigger for internal bootstrap or system-bootstrap with rust-bin.
+ # the whole idea is for stage0 to bootstrap with fake libgcc_s.
+ # final stage will receive -L${T}/lib but not -lgcc_s args, producing clean compiler.
+ local fakelib="${T}/fakelib"
+ mkdir -p "${fakelib}" || die
+ # we need both symlinks, one for cargo runtime, other for linker.
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so.1" || die
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so" || die
+ export LD_LIBRARY_PATH="${fakelib}"
+ export RUSTFLAGS+=" -L${fakelib}"
+ # this is a literally magic variable that gets through cargo cache, without it some
+ # crates ignore RUSTFLAGS.
+ # this variable can not contain leading space.
+ export MAGIC_EXTRA_RUSTFLAGS+="${MAGIC_EXTRA_RUSTFLAGS:+ }-L${fakelib}"
+}
+
+src_prepare() {
+ eapply_crate vendor/openssl-sys "${FILESDIR}"/1.72.0-libressl-openssl-sys.patch
+
+ # Clear vendor checksums for crates that we patched to bump libc.
+ for i in addr2line-0.20.0 bstr cranelift-jit crossbeam-channel elasticlunr-rs handlebars icu_locid libffi \
+ terminal_size tracing-tree; do
+ clear_vendor_checksums "${i}"
+ done
+
+ if ! use system-bootstrap; then
+ has_version sys-devel/gcc || esetup_unwind_hack
+ local rust_stage0_root="${WORKDIR}"/rust-stage0
+ local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi)"
+
+ "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
+ --without=rust-docs-json-preview,rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
+ fi
+
+ default
+}
+
+src_configure() {
+ filter-lto # https://bugs.gentoo.org/862109 https://bugs.gentoo.org/866231
+
+ local rust_target="" rust_targets="" arch_cflags
+
+ # Collect rust target names to compile standard libs for all ABIs.
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
+ done
+ if use wasm; then
+ rust_targets+=",\"wasm32-unknown-unknown\""
+ if use system-llvm; then
+ # un-hardcode rust-lld linker for this target
+ # https://bugs.gentoo.org/715348
+ sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/wasm_base.rs || die
+ fi
+ fi
+ rust_targets="${rust_targets#,}"
+
+ # cargo and rustdoc are mandatory and should always be included
+ local tools='"cargo","rustdoc"'
+ use clippy && tools+=',"clippy"'
+ use miri && tools+=',"miri"'
+ use profiler && tools+=',"rust-demangler"'
+ use rustfmt && tools+=',"rustfmt"'
+ use rust-analyzer && tools+=',"rust-analyzer"'
+ use rust-src && tools+=',"src"'
+
+ local rust_stage0_root
+ if use system-bootstrap; then
+ local printsysroot
+ printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
+ rust_stage0_root="${printsysroot}"
+ else
+ rust_stage0_root="${WORKDIR}"/rust-stage0
+ fi
+ # in case of prefix it will be already prefixed, as --print sysroot returns full path
+ [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
+
+ rust_target="$(rust_abi)"
+
+ local cm_btype="$(usex debug DEBUG RELEASE)"
+ cat <<- _EOF_ > "${S}"/config.toml
+ changelog-seen = 2
+ [llvm]
+ download-ci-llvm = false
+ optimize = $(toml_usex !debug)
+ release-debuginfo = $(toml_usex debug)
+ assertions = $(toml_usex debug)
+ ninja = true
+ targets = "${LLVM_TARGETS// /;}"
+ experimental-targets = ""
+ link-shared = $(toml_usex system-llvm)
+ $(if is_libcxx_linked; then
+ # https://bugs.gentoo.org/732632
+ echo "use-libcxx = true"
+ echo "static-libstdcpp = false"
+ fi)
+ $(case "${rust_target}" in
+ i586-*-linux-*)
+ # https://github.com/rust-lang/rust/issues/93059
+ echo 'cflags = "-fcf-protection=none"'
+ echo 'cxxflags = "-fcf-protection=none"'
+ echo 'ldflags = "-fcf-protection=none"'
+ ;;
+ *)
+ ;;
+ esac)
+ enable-warnings = false
+ [llvm.build-config]
+ CMAKE_VERBOSE_MAKEFILE = "ON"
+ CMAKE_C_FLAGS_${cm_btype} = "${CFLAGS}"
+ CMAKE_CXX_FLAGS_${cm_btype} = "${CXXFLAGS}"
+ CMAKE_EXE_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_MODULE_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_SHARED_LINKER_FLAGS_${cm_btype} = "${LDFLAGS}"
+ CMAKE_STATIC_LINKER_FLAGS_${cm_btype} = "${ARFLAGS}"
+ [build]
+ build-stage = 2
+ test-stage = 2
+ build = "${rust_target}"
+ host = ["${rust_target}"]
+ target = [${rust_targets}]
+ cargo = "${rust_stage0_root}/bin/cargo"
+ rustc = "${rust_stage0_root}/bin/rustc"
+ rustfmt = "${rust_stage0_root}/bin/rustfmt"
+ docs = $(toml_usex doc)
+ compiler-docs = false
+ submodules = false
+ python = "${EPYTHON}"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [${tools}]
+ verbose = 2
+ sanitizers = false
+ profiler = $(toml_usex profiler)
+ cargo-native-static = false
+ [install]
+ prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+ sysconfdir = "etc"
+ docdir = "share/doc/rust"
+ bindir = "bin"
+ libdir = "lib"
+ mandir = "share/man"
+ [rust]
+ # https://github.com/rust-lang/rust/issues/54872
+ codegen-units-std = 1
+ optimize = true
+ debug = $(toml_usex debug)
+ debug-assertions = $(toml_usex debug)
+ debug-assertions-std = $(toml_usex debug)
+ debuginfo-level = $(usex debug 2 0)
+ debuginfo-level-rustc = $(usex debug 2 0)
+ debuginfo-level-std = $(usex debug 2 0)
+ debuginfo-level-tools = $(usex debug 2 0)
+ debuginfo-level-tests = 0
+ backtrace = true
+ incremental = false
+ default-linker = "$(tc-getCC)"
+ parallel-compiler = $(toml_usex parallel-compiler)
+ channel = "$(usex nightly nightly stable)"
+ description = "gentoo"
+ rpath = false
+ verbose-tests = true
+ optimize-tests = $(toml_usex !debug)
+ codegen-tests = true
+ dist-src = false
+ remap-debuginfo = true
+ lld = $(usex system-llvm false $(toml_usex wasm))
+ # only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
+ # https://github.com/rust-lang/rust/issues/74976
+ # https://github.com/rust-lang/rust/issues/76526
+ deny-warnings = $(usex wasm $(usex doc false true) true)
+ backtrace-on-ice = true
+ jemalloc = false
+ lto = "$(usex lto fat off)"
+ [dist]
+ src-tarball = false
+ compression-formats = ["xz"]
+ compression-profile = "balanced"
+ _EOF_
+
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+ arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+ export CFLAGS_${rust_target//-/_}="${arch_cflags}"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${rust_target}]
+ ar = "$(tc-getAR)"
+ cc = "$(tc-getCC)"
+ cxx = "$(tc-getCXX)"
+ linker = "$(tc-getCC)"
+ ranlib = "$(tc-getRANLIB)"
+ llvm-libunwind = "$(usex llvm-libunwind $(usex system-llvm system in-tree) no)"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ # by default librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
+ # but we patch it and set to false here as well
+ if use elibc_musl; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ crt-static = false
+ _EOF_
+ fi
+ done
+ if use wasm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.wasm32-unknown-unknown]
+ linker = "$(usex system-llvm lld rust-lld)"
+ # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483
+ profiler = false
+ _EOF_
+ fi
+
+ if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
+ # experimental cross support
+ # discussion: https://bugs.gentoo.org/679878
+ # TODO: c*flags, clang, system-llvm, cargo.eclass target support
+ # it would be much better if we could split out stdlib
+ # complilation to separate ebuild and abuse CATEGORY to
+ # just install to /usr/lib/rustlib/<target>
+
+ # extra targets defined as a bash array
+ # spec format: <LLVM target>:<rust-target>:<CTARGET>
+ # best place would be /etc/portage/env/dev-lang/rust
+ # Example:
+ # RUST_CROSS_TARGETS=(
+ # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
+ # )
+ # no extra hand holding is done, no target transformations, all
+ # values are passed as-is with just basic checks, so it's up to user to supply correct values
+ # valid rust targets can be obtained with
+ # rustc --print target-list
+ # matching cross toolchain has to be installed
+ # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
+ # only gcc toolchains installed with crossdev are checked for now.
+
+ # BUG: we can't pass host flags to cross compiler, so just filter for now
+ # BUG: this should be more fine-grained.
+ filter-flags '-mcpu=*' '-march=*' '-mtune=*'
+
+ local cross_target_spec
+ for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
+ # extracts first element form <LLVM target>:<rust-target>:<CTARGET>
+ local cross_llvm_target="${cross_target_spec%%:*}"
+ # extracts toolchain triples, <rust-target>:<CTARGET>
+ local cross_triples="${cross_target_spec#*:}"
+ # extracts first element after before : separator
+ local cross_rust_target="${cross_triples%%:*}"
+ # extracts last element after : separator
+ local cross_toolchain="${cross_triples##*:}"
+ use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
+ command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${cross_rust_target}]
+ ar = "${cross_toolchain}-ar"
+ cc = "${cross_toolchain}-gcc"
+ cxx = "${cross_toolchain}-g++"
+ linker = "${cross_toolchain}-gcc"
+ ranlib = "${cross_toolchain}-ranlib"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ if [[ "${cross_toolchain}" == *-musl* ]]; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
+ _EOF_
+ fi
+
+ # append cross target to "normal" target list
+ # example 'target = ["powerpc64le-unknown-linux-gnu"]'
+ # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
+
+ rust_targets="${rust_targets},\"${cross_rust_target}\""
+ sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
+
+ ewarn
+ ewarn "Enabled ${cross_rust_target} rust target"
+ ewarn "Using ${cross_toolchain} cross toolchain"
+ ewarn
+ if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
+ ewarn "'sys-devel/binutils[multitarget]' is not installed"
+ ewarn "'strip' will be unable to strip cross libraries"
+ ewarn "cross targets will be installed with full debug information"
+ ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
+ ewarn
+ ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
+ ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
+ ewarn
+ fi
+ done
+ fi # I_KNOW_WHAT_I_AM_DOING_CROSS
+
+ einfo "Rust configured with the following flags:"
+ echo
+ echo RUSTFLAGS="\"${RUSTFLAGS}\""
+ echo RUSTFLAGS_BOOTSTRAP="\"${RUSTFLAGS_BOOTSTRAP}\""
+ echo RUSTFLAGS_NOT_BOOTSTRAP="\"${RUSTFLAGS_NOT_BOOTSTRAP}\""
+ echo MAGIC_EXTRA_RUSTFLAGS="\"${MAGIC_EXTRA_RUSTFLAGS}\""
+ env | grep "CARGO_TARGET_.*_RUSTFLAGS="
+ env | grep "CFLAGS_.*"
+ echo
+ einfo "config.toml contents:"
+ cat "${S}"/config.toml || die
+ echo
+}
+
+src_compile() {
+ RUST_BACKTRACE=1 "${EPYTHON}" ./x.py build -vvv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+}
+
+src_test() {
+ # https://rustc-dev-guide.rust-lang.org/tests/intro.html
+
+ # those are basic and codegen tests.
+ local tests=(
+ codegen
+ codegen-units
+ compile-fail
+ incremental
+ mir-opt
+ pretty
+ run-make
+ )
+
+ # fails if llvm is not built with ALL targets.
+ # and known to fail with system llvm sometimes.
+ use system-llvm || tests+=( assembly )
+
+ # fragile/expensive/less important tests
+ # or tests that require extra builds
+ # TODO: instead of skipping, just make some nonfatal.
+ if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
+ tests+=(
+ rustdoc
+ rustdoc-js
+ rustdoc-js-std
+ rustdoc-ui
+ run-make-fulldeps
+ ui
+ ui-fulldeps
+ )
+ fi
+
+ local i failed=()
+ einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
+ for i in "${tests[@]}"; do
+ local t="src/test/${i}"
+ einfo "rust_src_test: running ${t}"
+ if ! RUST_BACKTRACE=1 "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
+ -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
+ then
+ failed+=( "${t}" )
+ eerror "rust_src_test: ${t} failed"
+ fi
+ done
+
+ if [[ ${#failed[@]} -ne 0 ]]; then
+ eerror "rust_src_test: failure summary: ${failed[@]}"
+ die "aborting due to test failures"
+ fi
+}
+
+src_install() {
+ DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+
+ # bug #689562, #689160
+ rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
+ rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+ newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
+
+ local symlinks=(
+ cargo
+ rustc
+ rustdoc
+ rust-gdb
+ rust-gdbgui
+ rust-lldb
+ )
+
+ use clippy && symlinks+=( clippy-driver cargo-clippy )
+ use miri && symlinks+=( miri cargo-miri )
+ use profiler && symlinks+=( rust-demangler )
+ use rustfmt && symlinks+=( rustfmt cargo-fmt )
+ use rust-analyzer && symlinks+=( rust-analyzer )
+
+ einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
+ local i
+ for i in "${symlinks[@]}"; do
+ # we need realpath on /usr/bin/* symlink return version-appended binary path.
+ # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
+ # need to fix eselect-rust to remove this hack.
+ local ver_i="${i}-${PV}"
+ if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+ einfo "Installing ${i} symlink"
+ ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+ else
+ ewarn "${i} symlink requested, but source file not found"
+ ewarn "please report this"
+ fi
+ dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+ done
+
+ # symlinks to switch components to active rust in eselect
+ dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
+ dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
+ dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
+ dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
+ dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+
+ newenvd - "50${P}" <<-_EOF_
+ LDPATH="${EPREFIX}/usr/lib/rust/lib"
+ MANPATH="${EPREFIX}/usr/lib/rust/man"
+ _EOF_
+
+ rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/bin"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+
+ # note: eselect-rust adds EROOT to all paths below
+ cat <<-_EOF_ > "${T}/provider-${P}"
+ /usr/bin/cargo
+ /usr/bin/rustdoc
+ /usr/bin/rust-gdb
+ /usr/bin/rust-gdbgui
+ /usr/bin/rust-lldb
+ /usr/lib/rustlib
+ /usr/lib/rust/lib
+ /usr/lib/rust/libexec
+ /usr/lib/rust/man
+ /usr/share/doc/rust
+ _EOF_
+
+ if use clippy; then
+ echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+ fi
+ if use miri; then
+ echo /usr/bin/miri >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
+ fi
+ if use profiler; then
+ echo /usr/bin/rust-demangler >> "${T}/provider-${P}"
+ fi
+ if use rustfmt; then
+ echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+ fi
+ if use rust-analyzer; then
+ echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+ fi
+
+ insinto /etc/env.d/rust
+ doins "${T}/provider-${P}"
+
+ if use dist; then
+ insinto "/usr/lib/${PN}/${PV}/dist"
+ doins -r "${S}/build/dist/."
+ fi
+}
+
+pkg_postinst() {
+ eselect rust update
+
+ if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+ elog "Rust installs a helper script for calling GDB and LLDB,"
+ elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+ fi
+
+ if has_version app-editors/emacs; then
+ elog "install app-emacs/rust-mode to get emacs support for rust."
+ fi
+
+ if has_version app-editors/gvim || has_version app-editors/vim; then
+ elog "install app-vim/rust-vim to get vim support for rust."
+ fi
+}
+
+pkg_postrm() {
+ eselect rust cleanup
+}
diff --git a/dev-lang/rust/rust-1.74.1.ebuild b/dev-lang/rust/rust-1.74.1.ebuild
new file mode 100644
index 0000000..5fec8f3
--- /dev/null
+++ b/dev-lang/rust/rust-1.74.1.ebuild
@@ -0,0 +1,794 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
+ multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
+
+if [[ ${PV} = *beta* ]]; then
+ betaver=${PV//*beta}
+ BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+ MY_P="rustc-beta"
+ SLOT="beta/${PV}"
+ SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+else
+ ABI_VER="$(ver_cut 1-2)"
+ SLOT="stable/${ABI_VER}"
+ MY_P="rustc-${PV}"
+ SRC="${MY_P}-src.tar.xz"
+ KEYWORDS="amd64 arm arm64 ~loong ~mips ppc ppc64 ~riscv sparc x86"
+fi
+
+RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+
+SRC_URI="
+ https://static.rust-lang.org/dist/${SRC}
+ verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
+ !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
+"
+
+# keep in sync with llvm ebuild of the same version as bundled one.
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY DirectX Hexagon Lanai
+ LoongArch M68k Mips MSP430 NVPTX PowerPC RISCV Sparc SPIRV SystemZ VE
+ WebAssembly X86 XCore Xtensa )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind +lto miri nightly parallel-compiler profiler rustfmt rust-analyzer rust-src system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+
+# Please keep the LLVM dependency block separate. Since LLVM is slotted,
+# we need to *really* make sure we're not pulling more than one slot
+# simultaneously.
+
+# How to use it:
+# List all the working slots in LLVM_VALID_SLOTS, newest first.
+LLVM_VALID_SLOTS=( 17 )
+LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
+
+# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
+# (-) usedep needed because we may build with older llvm without that target
+LLVM_DEPEND="|| ( "
+for _s in ${LLVM_VALID_SLOTS[@]}; do
+ LLVM_DEPEND+=" ( "
+ for _x in ${ALL_LLVM_TARGETS[@]}; do
+ LLVM_DEPEND+="
+ ${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )
+ wasm? ( sys-devel/lld:${_s} )"
+ done
+ LLVM_DEPEND+=" )"
+done
+unset _s _x
+LLVM_DEPEND+=" )
+ <sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+"
+
+# to bootstrap we need at least exactly previous version, or same.
+# most of the time previous versions fail to bootstrap with newer
+# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
+# but it fails to bootstrap with 1.48.x
+# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.json
+RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
+RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
+BOOTSTRAP_DEPEND="||
+ (
+ =dev-lang/rust-"${RUST_DEP_PREV}"
+ =dev-lang/rust-bin-"${RUST_DEP_PREV}"
+ =dev-lang/rust-"${RUST_DEP_CURR}"
+ =dev-lang/rust-bin-"${RUST_DEP_CURR}"
+ )
+"
+
+BDEPEND="${PYTHON_DEPS}
+ app-eselect/eselect-rust
+ || (
+ >=sys-devel/gcc-4.7
+ >=sys-devel/clang-3.5
+ )
+ system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
+ !system-llvm? (
+ >=dev-build/cmake-3.13.4
+ app-alternatives/ninja
+ )
+ test? ( dev-debug/gdb )
+ verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+DEPEND="
+ >=app-arch/xz-utils-5.2
+ net-misc/curl:=[http2,ssl]
+ sys-libs/zlib:=
+ dev-libs/openssl:0=
+ system-llvm? (
+ ${LLVM_DEPEND}
+ llvm-libunwind? ( sys-libs/llvm-libunwind:= )
+ )
+ !system-llvm? (
+ !llvm-libunwind? (
+ elibc_musl? ( sys-libs/libunwind:= )
+ )
+ )
+"
+
+RDEPEND="${DEPEND}
+ app-eselect/eselect-rust
+ sys-apps/lsb-release
+"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
+ miri? ( nightly )
+ parallel-compiler? ( nightly )
+ rust-analyzer? ( rust-src )
+ test? ( ${ALL_LLVM_TARGETS[*]} )
+ wasm? ( llvm_targets_WebAssembly )
+ x86? ( cpu_flags_x86_sse2 )
+"
+
+# we don't use cmake.eclass, but can get a warning
+CMAKE_WARN_UNUSED_CLI=no
+
+QA_FLAGS_IGNORED="
+ usr/lib/${PN}/${PV}/bin/.*
+ usr/lib/${PN}/${PV}/libexec/.*
+ usr/lib/${PN}/${PV}/lib/lib.*.so
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_SONAME="
+ usr/lib/${PN}/${PV}/lib/lib.*.so.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_PRESTRIPPED="
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+"
+
+# An rmeta file is custom binary format that contains the metadata for the crate.
+# rmeta files do not support linking, since they do not contain compiled object files.
+# so we can safely silence the warning for this QA check.
+QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+# causes double bootstrap
+RESTRICT="test"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
+
+PATCHES=(
+ "${FILESDIR}"/1.74.1-cross-compile-libz.patch
+ #"${FILESDIR}"/1.72.0-bump-libc-deps-to-0.2.146.patch # pending refresh
+ "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch
+ "${FILESDIR}"/1.62.1-musl-dynamic-linking.patch
+ "${FILESDIR}"/1.67.0-doc-wasm.patch
+)
+
+S="${WORKDIR}/${MY_P}-src"
+
+clear_vendor_checksums() {
+ sed -i 's/\("files":{\)[^}]*/\1/' "vendor/${1}/.cargo-checksum.json" || die
+}
+
+eapply_crate() {
+ pushd "${1:?}" > /dev/null || die
+ local patch="${2:?}"
+ eapply "${patch}"
+ "${EPREFIX}"/bin/sh "${FILESDIR}"/rehash-crate.sh "${patch}" || die
+ popd > /dev/null || die
+}
+
+toml_usex() {
+ usex "${1}" true false
+}
+
+bootstrap_rust_version_check() {
+ # never call from pkg_pretend. eselect-rust may be not installed yet.
+ [[ ${MERGE_TYPE} == binary ]] && return
+ local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
+ local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
+ local rustc_version=( $(eselect --brief --root="${BROOT}" rust show 2>/dev/null) )
+ rustc_version=${rustc_version[0]#rust-bin-}
+ rustc_version=${rustc_version#rust-}
+
+ [[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
+
+ if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
+ eerror "Rust >=${rustc_wanted} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too old"
+ elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
+ eerror "Rust <${rustc_toonew} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too new"
+ else
+ einfo "Using rust ${rustc_version} to build"
+ fi
+}
+
+pre_build_checks() {
+ local M=8192
+ # multiply requirements by 1.3 if we are doing x86-multilib
+ if use amd64; then
+ M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
+ fi
+ M=$(( $(usex clippy 128 0) + ${M} ))
+ M=$(( $(usex miri 128 0) + ${M} ))
+ M=$(( $(usex rustfmt 256 0) + ${M} ))
+ # add 2G if we compile llvm and 256M per llvm_target
+ if ! use system-llvm; then
+ M=$(( 2048 + ${M} ))
+ local ltarget
+ for ltarget in ${ALL_LLVM_TARGETS[@]}; do
+ M=$(( $(usex ${ltarget} 256 0) + ${M} ))
+ done
+ fi
+ M=$(( $(usex wasm 256 0) + ${M} ))
+ M=$(( $(usex debug 2 1) * ${M} ))
+ eshopts_push -s extglob
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ M=$(( 15 * ${M} / 10 ))
+ fi
+ eshopts_pop
+ M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
+ M=$(( $(usex doc 256 0) + ${M} ))
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+llvm_check_deps() {
+ has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
+}
+
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+ local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+ HAVE_LIBCXX
+#endif
+'
+ local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+ [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+pkg_setup() {
+ pre_build_checks
+ python-any-r1_pkg_setup
+
+ export LIBGIT2_NO_PKG_CONFIG=1 #749381
+ if tc-is-cross-compiler; then
+ export PKG_CONFIG_ALLOW_CROSS=1
+ export PKG_CONFIG_PATH="${ROOT}/usr/$(get_libdir)/pkgconfig"
+ export OPENSSL_INCLUDE_DIR="${ROOT}/usr/include"
+ export OPENSSL_LIB_DIR="${ROOT}/usr/$(get_libdir)"
+
+ use system-bootstrap || die "USE=system-bootstrap is required when cross-compiling"
+ use system-llvm && die "USE=system-llvm not allowed when cross-compiling"
+ local cross_llvm_target="$(llvm_tuple_to_target "${CBUILD}")"
+ use "llvm_targets_${cross_llvm_target}" || \
+ die "Must enable LLVM_TARGETS=${cross_llvm_target} matching CBUILD=${CBUILD} when cross-compiling"
+ fi
+
+ use system-bootstrap && bootstrap_rust_version_check
+
+ if use system-llvm; then
+ llvm_pkg_setup
+
+ local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ export LLVM_LINK_SHARED=1
+ export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
+ fi
+}
+
+esetup_unwind_hack() {
+ # https://bugs.gentoo.org/870280
+ # this is a hack needed to bootstrap with libgcc_s linked tarball on llvm-libunwind system.
+ # it should trigger for internal bootstrap or system-bootstrap with rust-bin.
+ # the whole idea is for stage0 to bootstrap with fake libgcc_s.
+ # final stage will receive -L${T}/lib but not -lgcc_s args, producing clean compiler.
+ local fakelib="${T}/fakelib"
+ mkdir -p "${fakelib}" || die
+ # we need both symlinks, one for cargo runtime, other for linker.
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so.1" || die
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so" || die
+ export LD_LIBRARY_PATH="${fakelib}"
+ export RUSTFLAGS+=" -L${fakelib}"
+ # this is a literally magic variable that gets through cargo cache, without it some
+ # crates ignore RUSTFLAGS.
+ # this variable can not contain leading space.
+ export MAGIC_EXTRA_RUSTFLAGS+="${MAGIC_EXTRA_RUSTFLAGS:+ }-L${fakelib}"
+}
+
+src_prepare() {
+ eapply_crate vendor/openssl-sys "${FILESDIR}"/1.72.0-libressl-openssl-sys.patch
+
+ # Clear vendor checksums for crates that we patched to bump libc.
+ # NOTE: refresh this on each bump.
+ #for i in addr2line-0.20.0 bstr cranelift-jit crossbeam-channel elasticlunr-rs handlebars icu_locid libffi \
+ # terminal_size tracing-tree; do
+ # clear_vendor_checksums "${i}"
+ #done
+
+ if ! use system-bootstrap; then
+ has_version sys-devel/gcc || esetup_unwind_hack
+ local rust_stage0_root="${WORKDIR}"/rust-stage0
+ local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi "${CBUILD}")"
+
+ "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
+ --without=rust-docs-json-preview,rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
+ fi
+
+ default
+}
+
+src_configure() {
+ filter-lto # https://bugs.gentoo.org/862109 https://bugs.gentoo.org/866231
+
+ local rust_target="" rust_targets="" arch_cflags
+
+ # Collect rust target names to compile standard libs for all ABIs.
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
+ done
+ if use wasm; then
+ rust_targets+=",\"wasm32-unknown-unknown\""
+ if use system-llvm; then
+ # un-hardcode rust-lld linker for this target
+ # https://bugs.gentoo.org/715348
+ sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/wasm_base.rs || die
+ fi
+ fi
+ rust_targets="${rust_targets#,}"
+
+ # cargo and rustdoc are mandatory and should always be included
+ local tools='"cargo","rustdoc"'
+ use clippy && tools+=',"clippy"'
+ use miri && tools+=',"miri"'
+ use profiler && tools+=',"rust-demangler"'
+ use rustfmt && tools+=',"rustfmt"'
+ use rust-analyzer && tools+=',"rust-analyzer"'
+ use rust-src && tools+=',"src"'
+
+ local rust_stage0_root
+ if use system-bootstrap; then
+ local printsysroot
+ printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
+ rust_stage0_root="${printsysroot}"
+ else
+ rust_stage0_root="${WORKDIR}"/rust-stage0
+ fi
+ # in case of prefix it will be already prefixed, as --print sysroot returns full path
+ [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
+
+ rust_target="$(rust_abi)"
+ rust_build="$(rust_abi "${CBUILD}")"
+ rust_host="$(rust_abi "${CHOST}")"
+
+ local cm_btype="$(usex debug DEBUG RELEASE)"
+ cat <<- _EOF_ > "${S}"/config.toml
+ changelog-seen = 2
+ [llvm]
+ download-ci-llvm = false
+ optimize = $(toml_usex !debug)
+ release-debuginfo = $(toml_usex debug)
+ assertions = $(toml_usex debug)
+ ninja = true
+ targets = "${LLVM_TARGETS// /;}"
+ experimental-targets = ""
+ link-shared = $(toml_usex system-llvm)
+ $(if is_libcxx_linked; then
+ # https://bugs.gentoo.org/732632
+ echo "use-libcxx = true"
+ echo "static-libstdcpp = false"
+ fi)
+ $(case "${rust_target}" in
+ i586-*-linux-*)
+ # https://github.com/rust-lang/rust/issues/93059
+ echo 'cflags = "-fcf-protection=none"'
+ echo 'cxxflags = "-fcf-protection=none"'
+ echo 'ldflags = "-fcf-protection=none"'
+ ;;
+ *)
+ ;;
+ esac)
+ enable-warnings = false
+ [llvm.build-config]
+ CMAKE_VERBOSE_MAKEFILE = "ON"
+ $(if ! tc-is-cross-compiler; then
+ # When cross-compiling, LLVM is compiled twice, once for host and
+ # once for target. Unfortunately, this build configuration applies
+ # to both, which means any flags applicable to one target but not
+ # the other will break. Conditionally disable respecting user
+ # flags when cross-compiling.
+ echo "CMAKE_C_FLAGS_${cm_btype} = \"${CFLAGS}\""
+ echo "CMAKE_CXX_FLAGS_${cm_btype} = \"${CXXFLAGS}\""
+ echo "CMAKE_EXE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_MODULE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_SHARED_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_STATIC_LINKER_FLAGS_${cm_btype} = \"${ARFLAGS}\""
+ fi)
+ [build]
+ build-stage = 2
+ test-stage = 2
+ build = "${rust_build}"
+ host = ["${rust_host}"]
+ target = [${rust_targets}]
+ cargo = "${rust_stage0_root}/bin/cargo"
+ rustc = "${rust_stage0_root}/bin/rustc"
+ rustfmt = "${rust_stage0_root}/bin/rustfmt"
+ docs = $(toml_usex doc)
+ compiler-docs = false
+ submodules = false
+ python = "${EPYTHON}"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [${tools}]
+ verbose = 2
+ sanitizers = false
+ profiler = $(toml_usex profiler)
+ cargo-native-static = false
+ [install]
+ prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+ sysconfdir = "etc"
+ docdir = "share/doc/rust"
+ bindir = "bin"
+ libdir = "lib"
+ mandir = "share/man"
+ [rust]
+ # https://github.com/rust-lang/rust/issues/54872
+ codegen-units-std = 1
+ optimize = true
+ debug = $(toml_usex debug)
+ debug-assertions = $(toml_usex debug)
+ debug-assertions-std = $(toml_usex debug)
+ debuginfo-level = $(usex debug 2 0)
+ debuginfo-level-rustc = $(usex debug 2 0)
+ debuginfo-level-std = $(usex debug 2 0)
+ debuginfo-level-tools = $(usex debug 2 0)
+ debuginfo-level-tests = 0
+ backtrace = true
+ incremental = false
+ $(if ! tc-is-cross-compiler; then
+ echo "default-linker = \"$(tc-getCC)\""
+ fi)
+ parallel-compiler = $(toml_usex parallel-compiler)
+ channel = "$(usex nightly nightly stable)"
+ description = "gentoo"
+ rpath = false
+ verbose-tests = true
+ optimize-tests = $(toml_usex !debug)
+ codegen-tests = true
+ dist-src = false
+ remap-debuginfo = true
+ lld = $(usex system-llvm false $(toml_usex wasm))
+ # only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
+ # https://github.com/rust-lang/rust/issues/74976
+ # https://github.com/rust-lang/rust/issues/76526
+ deny-warnings = $(usex wasm $(usex doc false true) true)
+ backtrace-on-ice = true
+ jemalloc = false
+ lto = "$(usex lto fat off)"
+ [dist]
+ src-tarball = false
+ compression-formats = ["xz"]
+ compression-profile = "balanced"
+ _EOF_
+
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+ arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+ export CFLAGS_${rust_target//-/_}="${arch_cflags}"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${rust_target}]
+ ar = "$(tc-getAR)"
+ cc = "$(tc-getCC)"
+ cxx = "$(tc-getCXX)"
+ linker = "$(tc-getCC)"
+ ranlib = "$(tc-getRANLIB)"
+ llvm-libunwind = "$(usex llvm-libunwind $(usex system-llvm system in-tree) no)"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ # by default librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
+ # but we patch it and set to false here as well
+ if use elibc_musl; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ crt-static = false
+ _EOF_
+ fi
+ done
+ if use wasm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.wasm32-unknown-unknown]
+ linker = "$(usex system-llvm lld rust-lld)"
+ # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483
+ profiler = false
+ _EOF_
+ fi
+
+ if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
+ # experimental cross support
+ # discussion: https://bugs.gentoo.org/679878
+ # TODO: c*flags, clang, system-llvm, cargo.eclass target support
+ # it would be much better if we could split out stdlib
+ # complilation to separate ebuild and abuse CATEGORY to
+ # just install to /usr/lib/rustlib/<target>
+
+ # extra targets defined as a bash array
+ # spec format: <LLVM target>:<rust-target>:<CTARGET>
+ # best place would be /etc/portage/env/dev-lang/rust
+ # Example:
+ # RUST_CROSS_TARGETS=(
+ # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
+ # )
+ # no extra hand holding is done, no target transformations, all
+ # values are passed as-is with just basic checks, so it's up to user to supply correct values
+ # valid rust targets can be obtained with
+ # rustc --print target-list
+ # matching cross toolchain has to be installed
+ # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
+ # only gcc toolchains installed with crossdev are checked for now.
+
+ # BUG: we can't pass host flags to cross compiler, so just filter for now
+ # BUG: this should be more fine-grained.
+ filter-flags '-mcpu=*' '-march=*' '-mtune=*'
+
+ local cross_target_spec
+ for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
+ # extracts first element form <LLVM target>:<rust-target>:<CTARGET>
+ local cross_llvm_target="${cross_target_spec%%:*}"
+ # extracts toolchain triples, <rust-target>:<CTARGET>
+ local cross_triples="${cross_target_spec#*:}"
+ # extracts first element after before : separator
+ local cross_rust_target="${cross_triples%%:*}"
+ # extracts last element after : separator
+ local cross_toolchain="${cross_triples##*:}"
+ use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
+ command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${cross_rust_target}]
+ ar = "${cross_toolchain}-ar"
+ cc = "${cross_toolchain}-gcc"
+ cxx = "${cross_toolchain}-g++"
+ linker = "${cross_toolchain}-gcc"
+ ranlib = "${cross_toolchain}-ranlib"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ if [[ "${cross_toolchain}" == *-musl* ]]; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
+ _EOF_
+ fi
+
+ # append cross target to "normal" target list
+ # example 'target = ["powerpc64le-unknown-linux-gnu"]'
+ # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
+
+ rust_targets="${rust_targets},\"${cross_rust_target}\""
+ sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
+
+ ewarn
+ ewarn "Enabled ${cross_rust_target} rust target"
+ ewarn "Using ${cross_toolchain} cross toolchain"
+ ewarn
+ if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
+ ewarn "'sys-devel/binutils[multitarget]' is not installed"
+ ewarn "'strip' will be unable to strip cross libraries"
+ ewarn "cross targets will be installed with full debug information"
+ ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
+ ewarn
+ ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
+ ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
+ ewarn
+ fi
+ done
+ fi # I_KNOW_WHAT_I_AM_DOING_CROSS
+
+ einfo "Rust configured with the following flags:"
+ echo
+ echo RUSTFLAGS="\"${RUSTFLAGS}\""
+ echo RUSTFLAGS_BOOTSTRAP="\"${RUSTFLAGS_BOOTSTRAP}\""
+ echo RUSTFLAGS_NOT_BOOTSTRAP="\"${RUSTFLAGS_NOT_BOOTSTRAP}\""
+ echo MAGIC_EXTRA_RUSTFLAGS="\"${MAGIC_EXTRA_RUSTFLAGS}\""
+ env | grep "CARGO_TARGET_.*_RUSTFLAGS="
+ env | grep "CFLAGS_.*"
+ echo
+ einfo "config.toml contents:"
+ cat "${S}"/config.toml || die
+ echo
+}
+
+src_compile() {
+ RUST_BACKTRACE=1 "${EPYTHON}" ./x.py build -vvv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+}
+
+src_test() {
+ # https://rustc-dev-guide.rust-lang.org/tests/intro.html
+
+ # those are basic and codegen tests.
+ local tests=(
+ codegen
+ codegen-units
+ compile-fail
+ incremental
+ mir-opt
+ pretty
+ run-make
+ )
+
+ # fails if llvm is not built with ALL targets.
+ # and known to fail with system llvm sometimes.
+ use system-llvm || tests+=( assembly )
+
+ # fragile/expensive/less important tests
+ # or tests that require extra builds
+ # TODO: instead of skipping, just make some nonfatal.
+ if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
+ tests+=(
+ rustdoc
+ rustdoc-js
+ rustdoc-js-std
+ rustdoc-ui
+ run-make-fulldeps
+ ui
+ ui-fulldeps
+ )
+ fi
+
+ local i failed=()
+ einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
+ for i in "${tests[@]}"; do
+ local t="src/test/${i}"
+ einfo "rust_src_test: running ${t}"
+ if ! RUST_BACKTRACE=1 "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
+ -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
+ then
+ failed+=( "${t}" )
+ eerror "rust_src_test: ${t} failed"
+ fi
+ done
+
+ if [[ ${#failed[@]} -ne 0 ]]; then
+ eerror "rust_src_test: failure summary: ${failed[@]}"
+ die "aborting due to test failures"
+ fi
+}
+
+src_install() {
+ DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+
+ # bug #689562, #689160
+ rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
+ rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+ newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
+
+ local symlinks=(
+ cargo
+ rustc
+ rustdoc
+ rust-gdb
+ rust-gdbgui
+ rust-lldb
+ )
+
+ use clippy && symlinks+=( clippy-driver cargo-clippy )
+ use miri && symlinks+=( miri cargo-miri )
+ use profiler && symlinks+=( rust-demangler )
+ use rustfmt && symlinks+=( rustfmt cargo-fmt )
+ use rust-analyzer && symlinks+=( rust-analyzer )
+
+ einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
+ local i
+ for i in "${symlinks[@]}"; do
+ # we need realpath on /usr/bin/* symlink return version-appended binary path.
+ # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
+ # need to fix eselect-rust to remove this hack.
+ local ver_i="${i}-${PV}"
+ if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+ einfo "Installing ${i} symlink"
+ ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+ else
+ ewarn "${i} symlink requested, but source file not found"
+ ewarn "please report this"
+ fi
+ dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+ done
+
+ # symlinks to switch components to active rust in eselect
+ dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
+ dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
+ dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
+ dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
+ dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+
+ newenvd - "50${P}" <<-_EOF_
+ LDPATH="${EPREFIX}/usr/lib/rust/lib"
+ MANPATH="${EPREFIX}/usr/lib/rust/man"
+ _EOF_
+
+ rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/bin"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+
+ # note: eselect-rust adds EROOT to all paths below
+ cat <<-_EOF_ > "${T}/provider-${P}"
+ /usr/bin/cargo
+ /usr/bin/rustdoc
+ /usr/bin/rust-gdb
+ /usr/bin/rust-gdbgui
+ /usr/bin/rust-lldb
+ /usr/lib/rustlib
+ /usr/lib/rust/lib
+ /usr/lib/rust/libexec
+ /usr/lib/rust/man
+ /usr/share/doc/rust
+ _EOF_
+
+ if use clippy; then
+ echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+ fi
+ if use miri; then
+ echo /usr/bin/miri >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
+ fi
+ if use profiler; then
+ echo /usr/bin/rust-demangler >> "${T}/provider-${P}"
+ fi
+ if use rustfmt; then
+ echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+ fi
+ if use rust-analyzer; then
+ echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+ fi
+
+ insinto /etc/env.d/rust
+ doins "${T}/provider-${P}"
+
+ if use dist; then
+ insinto "/usr/lib/${PN}/${PV}/dist"
+ doins -r "${S}/build/dist/."
+ fi
+}
+
+pkg_postinst() {
+ eselect rust update
+
+ if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+ elog "Rust installs a helper script for calling GDB and LLDB,"
+ elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+ fi
+
+ if has_version app-editors/emacs; then
+ elog "install app-emacs/rust-mode to get emacs support for rust."
+ fi
+
+ if has_version app-editors/gvim || has_version app-editors/vim; then
+ elog "install app-vim/rust-vim to get vim support for rust."
+ fi
+}
+
+pkg_postrm() {
+ eselect rust cleanup
+}
diff --git a/dev-lang/rust/rust-1.75.0-r1.ebuild b/dev-lang/rust/rust-1.75.0-r1.ebuild
new file mode 100644
index 0000000..d874d98
--- /dev/null
+++ b/dev-lang/rust/rust-1.75.0-r1.ebuild
@@ -0,0 +1,797 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
+ multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
+
+if [[ ${PV} = *beta* ]]; then
+ betaver=${PV//*beta}
+ BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+ MY_P="rustc-beta"
+ SLOT="beta/${PV}"
+ SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+else
+ ABI_VER="$(ver_cut 1-2)"
+ SLOT="stable/${ABI_VER}"
+ MY_P="rustc-${PV}"
+ SRC="${MY_P}-src.tar.xz"
+ KEYWORDS="amd64 arm arm64 ~loong ~mips ppc ppc64 ~riscv sparc x86"
+fi
+
+RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+
+SRC_URI="
+ https://static.rust-lang.org/dist/${SRC}
+ verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
+ !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
+"
+
+# keep in sync with llvm ebuild of the same version as bundled one.
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY DirectX Hexagon Lanai
+ LoongArch M68k Mips MSP430 NVPTX PowerPC RISCV Sparc SPIRV SystemZ VE
+ WebAssembly X86 XCore Xtensa )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind +lto miri nightly parallel-compiler profiler rustfmt rust-analyzer rust-src system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+
+# Please keep the LLVM dependency block separate. Since LLVM is slotted,
+# we need to *really* make sure we're not pulling more than one slot
+# simultaneously.
+
+# How to use it:
+# List all the working slots in LLVM_VALID_SLOTS, newest first.
+LLVM_VALID_SLOTS=( 17 )
+LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
+
+# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
+# (-) usedep needed because we may build with older llvm without that target
+LLVM_DEPEND="|| ( "
+for _s in ${LLVM_VALID_SLOTS[@]}; do
+ LLVM_DEPEND+=" ( "
+ for _x in ${ALL_LLVM_TARGETS[@]}; do
+ LLVM_DEPEND+="
+ ${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )
+ wasm? ( sys-devel/lld:${_s} )"
+ done
+ LLVM_DEPEND+=" )"
+done
+unset _s _x
+LLVM_DEPEND+=" )
+ <sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+"
+
+# to bootstrap we need at least exactly previous version, or same.
+# most of the time previous versions fail to bootstrap with newer
+# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
+# but it fails to bootstrap with 1.48.x
+# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.json
+RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
+RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
+BOOTSTRAP_DEPEND="||
+ (
+ =dev-lang/rust-"${RUST_DEP_PREV}"
+ =dev-lang/rust-bin-"${RUST_DEP_PREV}"
+ =dev-lang/rust-"${RUST_DEP_CURR}"
+ =dev-lang/rust-bin-"${RUST_DEP_CURR}"
+ )
+"
+
+BDEPEND="${PYTHON_DEPS}
+ app-eselect/eselect-rust
+ || (
+ >=sys-devel/gcc-4.7
+ >=sys-devel/clang-3.5
+ )
+ system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
+ !system-llvm? (
+ >=dev-build/cmake-3.13.4
+ app-alternatives/ninja
+ )
+ test? ( dev-debug/gdb )
+ verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+DEPEND="
+ >=app-arch/xz-utils-5.2
+ net-misc/curl:=[http2,ssl]
+ sys-libs/zlib:=
+ dev-libs/openssl:0=
+ system-llvm? (
+ ${LLVM_DEPEND}
+ llvm-libunwind? ( sys-libs/llvm-libunwind:= )
+ )
+ !system-llvm? (
+ !llvm-libunwind? (
+ elibc_musl? ( sys-libs/libunwind:= )
+ )
+ )
+"
+
+RDEPEND="${DEPEND}
+ app-eselect/eselect-rust
+ sys-apps/lsb-release
+"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
+ miri? ( nightly )
+ parallel-compiler? ( nightly )
+ rust-analyzer? ( rust-src )
+ test? ( ${ALL_LLVM_TARGETS[*]} )
+ wasm? ( llvm_targets_WebAssembly )
+ x86? ( cpu_flags_x86_sse2 )
+"
+
+# we don't use cmake.eclass, but can get a warning
+CMAKE_WARN_UNUSED_CLI=no
+
+QA_FLAGS_IGNORED="
+ usr/lib/${PN}/${PV}/bin/.*
+ usr/lib/${PN}/${PV}/libexec/.*
+ usr/lib/${PN}/${PV}/lib/lib.*.so
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_SONAME="
+ usr/lib/${PN}/${PV}/lib/lib.*.so.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_PRESTRIPPED="
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+"
+
+# An rmeta file is custom binary format that contains the metadata for the crate.
+# rmeta files do not support linking, since they do not contain compiled object files.
+# so we can safely silence the warning for this QA check.
+QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+# causes double bootstrap
+RESTRICT="test"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
+
+PATCHES=(
+ "${FILESDIR}"/1.75.0-musl-dynamic-linking.patch
+ "${FILESDIR}"/1.74.1-cross-compile-libz.patch
+ #"${FILESDIR}"/1.72.0-bump-libc-deps-to-0.2.146.patch # pending refresh
+ "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch
+ "${FILESDIR}"/1.67.0-doc-wasm.patch
+ # This patch shouldn't be necessary for later versions of Rust because its
+ # code was backported from master.
+ "${FILESDIR}"/1.75.0-handle-vendored-sources.patch
+)
+
+S="${WORKDIR}/${MY_P}-src"
+
+clear_vendor_checksums() {
+ sed -i 's/\("files":{\)[^}]*/\1/' "vendor/${1}/.cargo-checksum.json" || die
+}
+
+eapply_crate() {
+ pushd "${1:?}" > /dev/null || die
+ local patch="${2:?}"
+ eapply "${patch}"
+ "${EPREFIX}"/bin/sh "${FILESDIR}"/rehash-crate.sh "${patch}" || die
+ popd > /dev/null || die
+}
+
+toml_usex() {
+ usex "${1}" true false
+}
+
+bootstrap_rust_version_check() {
+ # never call from pkg_pretend. eselect-rust may be not installed yet.
+ [[ ${MERGE_TYPE} == binary ]] && return
+ local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
+ local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
+ local rustc_version=( $(eselect --brief --root="${BROOT}" rust show 2>/dev/null) )
+ rustc_version=${rustc_version[0]#rust-bin-}
+ rustc_version=${rustc_version#rust-}
+
+ [[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
+
+ if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
+ eerror "Rust >=${rustc_wanted} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too old"
+ elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
+ eerror "Rust <${rustc_toonew} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too new"
+ else
+ einfo "Using rust ${rustc_version} to build"
+ fi
+}
+
+pre_build_checks() {
+ local M=8192
+ # multiply requirements by 1.3 if we are doing x86-multilib
+ if use amd64; then
+ M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
+ fi
+ M=$(( $(usex clippy 128 0) + ${M} ))
+ M=$(( $(usex miri 128 0) + ${M} ))
+ M=$(( $(usex rustfmt 256 0) + ${M} ))
+ # add 2G if we compile llvm and 256M per llvm_target
+ if ! use system-llvm; then
+ M=$(( 2048 + ${M} ))
+ local ltarget
+ for ltarget in ${ALL_LLVM_TARGETS[@]}; do
+ M=$(( $(usex ${ltarget} 256 0) + ${M} ))
+ done
+ fi
+ M=$(( $(usex wasm 256 0) + ${M} ))
+ M=$(( $(usex debug 2 1) * ${M} ))
+ eshopts_push -s extglob
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ M=$(( 15 * ${M} / 10 ))
+ fi
+ eshopts_pop
+ M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
+ M=$(( $(usex doc 256 0) + ${M} ))
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+llvm_check_deps() {
+ has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
+}
+
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+ local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+ HAVE_LIBCXX
+#endif
+'
+ local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+ [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+pkg_setup() {
+ pre_build_checks
+ python-any-r1_pkg_setup
+
+ export LIBGIT2_NO_PKG_CONFIG=1 #749381
+ if tc-is-cross-compiler; then
+ export PKG_CONFIG_ALLOW_CROSS=1
+ export PKG_CONFIG_PATH="${ROOT}/usr/$(get_libdir)/pkgconfig"
+ export OPENSSL_INCLUDE_DIR="${ROOT}/usr/include"
+ export OPENSSL_LIB_DIR="${ROOT}/usr/$(get_libdir)"
+
+ use system-bootstrap || die "USE=system-bootstrap is required when cross-compiling"
+ use system-llvm && die "USE=system-llvm not allowed when cross-compiling"
+ local cross_llvm_target="$(llvm_tuple_to_target "${CBUILD}")"
+ use "llvm_targets_${cross_llvm_target}" || \
+ die "Must enable LLVM_TARGETS=${cross_llvm_target} matching CBUILD=${CBUILD} when cross-compiling"
+ fi
+
+ use system-bootstrap && bootstrap_rust_version_check
+
+ if use system-llvm; then
+ llvm_pkg_setup
+
+ local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ export LLVM_LINK_SHARED=1
+ export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
+ fi
+}
+
+esetup_unwind_hack() {
+ # https://bugs.gentoo.org/870280
+ # this is a hack needed to bootstrap with libgcc_s linked tarball on llvm-libunwind system.
+ # it should trigger for internal bootstrap or system-bootstrap with rust-bin.
+ # the whole idea is for stage0 to bootstrap with fake libgcc_s.
+ # final stage will receive -L${T}/lib but not -lgcc_s args, producing clean compiler.
+ local fakelib="${T}/fakelib"
+ mkdir -p "${fakelib}" || die
+ # we need both symlinks, one for cargo runtime, other for linker.
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so.1" || die
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so" || die
+ export LD_LIBRARY_PATH="${fakelib}"
+ export RUSTFLAGS+=" -L${fakelib}"
+ # this is a literally magic variable that gets through cargo cache, without it some
+ # crates ignore RUSTFLAGS.
+ # this variable can not contain leading space.
+ export MAGIC_EXTRA_RUSTFLAGS+="${MAGIC_EXTRA_RUSTFLAGS:+ }-L${fakelib}"
+}
+
+src_prepare() {
+ eapply_crate vendor/openssl-sys "${FILESDIR}"/1.72.0-libressl-openssl-sys.patch
+
+ # Clear vendor checksums for crates that we patched to bump libc.
+ # NOTE: refresh this on each bump.
+ #for i in addr2line-0.20.0 bstr cranelift-jit crossbeam-channel elasticlunr-rs handlebars icu_locid libffi \
+ # terminal_size tracing-tree; do
+ # clear_vendor_checksums "${i}"
+ #done
+
+ if ! use system-bootstrap; then
+ has_version sys-devel/gcc || esetup_unwind_hack
+ local rust_stage0_root="${WORKDIR}"/rust-stage0
+ local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi "${CBUILD}")"
+
+ "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
+ --without=rust-docs-json-preview,rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
+ fi
+
+ default
+}
+
+src_configure() {
+ filter-lto # https://bugs.gentoo.org/862109 https://bugs.gentoo.org/866231
+
+ local rust_target="" rust_targets="" arch_cflags
+
+ # Collect rust target names to compile standard libs for all ABIs.
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
+ done
+ if use wasm; then
+ rust_targets+=",\"wasm32-unknown-unknown\""
+ if use system-llvm; then
+ # un-hardcode rust-lld linker for this target
+ # https://bugs.gentoo.org/715348
+ sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/base/wasm.rs || die
+ fi
+ fi
+ rust_targets="${rust_targets#,}"
+
+ # cargo and rustdoc are mandatory and should always be included
+ local tools='"cargo","rustdoc"'
+ use clippy && tools+=',"clippy"'
+ use miri && tools+=',"miri"'
+ use profiler && tools+=',"rust-demangler"'
+ use rustfmt && tools+=',"rustfmt"'
+ use rust-analyzer && tools+=',"rust-analyzer"'
+ use rust-src && tools+=',"src"'
+
+ local rust_stage0_root
+ if use system-bootstrap; then
+ local printsysroot
+ printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
+ rust_stage0_root="${printsysroot}"
+ else
+ rust_stage0_root="${WORKDIR}"/rust-stage0
+ fi
+ # in case of prefix it will be already prefixed, as --print sysroot returns full path
+ [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
+
+ rust_target="$(rust_abi)"
+ rust_build="$(rust_abi "${CBUILD}")"
+ rust_host="$(rust_abi "${CHOST}")"
+
+ local cm_btype="$(usex debug DEBUG RELEASE)"
+ cat <<- _EOF_ > "${S}"/config.toml
+ changelog-seen = 2
+ [llvm]
+ download-ci-llvm = false
+ optimize = $(toml_usex !debug)
+ release-debuginfo = $(toml_usex debug)
+ assertions = $(toml_usex debug)
+ ninja = true
+ targets = "${LLVM_TARGETS// /;}"
+ experimental-targets = ""
+ link-shared = $(toml_usex system-llvm)
+ $(if is_libcxx_linked; then
+ # https://bugs.gentoo.org/732632
+ echo "use-libcxx = true"
+ echo "static-libstdcpp = false"
+ fi)
+ $(case "${rust_target}" in
+ i586-*-linux-*)
+ # https://github.com/rust-lang/rust/issues/93059
+ echo 'cflags = "-fcf-protection=none"'
+ echo 'cxxflags = "-fcf-protection=none"'
+ echo 'ldflags = "-fcf-protection=none"'
+ ;;
+ *)
+ ;;
+ esac)
+ enable-warnings = false
+ [llvm.build-config]
+ CMAKE_VERBOSE_MAKEFILE = "ON"
+ $(if ! tc-is-cross-compiler; then
+ # When cross-compiling, LLVM is compiled twice, once for host and
+ # once for target. Unfortunately, this build configuration applies
+ # to both, which means any flags applicable to one target but not
+ # the other will break. Conditionally disable respecting user
+ # flags when cross-compiling.
+ echo "CMAKE_C_FLAGS_${cm_btype} = \"${CFLAGS}\""
+ echo "CMAKE_CXX_FLAGS_${cm_btype} = \"${CXXFLAGS}\""
+ echo "CMAKE_EXE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_MODULE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_SHARED_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_STATIC_LINKER_FLAGS_${cm_btype} = \"${ARFLAGS}\""
+ fi)
+ [build]
+ build-stage = 2
+ test-stage = 2
+ build = "${rust_build}"
+ host = ["${rust_host}"]
+ target = [${rust_targets}]
+ cargo = "${rust_stage0_root}/bin/cargo"
+ rustc = "${rust_stage0_root}/bin/rustc"
+ rustfmt = "${rust_stage0_root}/bin/rustfmt"
+ docs = $(toml_usex doc)
+ compiler-docs = false
+ submodules = false
+ python = "${EPYTHON}"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [${tools}]
+ verbose = 2
+ sanitizers = false
+ profiler = $(toml_usex profiler)
+ cargo-native-static = false
+ [install]
+ prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+ sysconfdir = "etc"
+ docdir = "share/doc/rust"
+ bindir = "bin"
+ libdir = "lib"
+ mandir = "share/man"
+ [rust]
+ # https://github.com/rust-lang/rust/issues/54872
+ codegen-units-std = 1
+ optimize = true
+ debug = $(toml_usex debug)
+ debug-assertions = $(toml_usex debug)
+ debug-assertions-std = $(toml_usex debug)
+ debuginfo-level = $(usex debug 2 0)
+ debuginfo-level-rustc = $(usex debug 2 0)
+ debuginfo-level-std = $(usex debug 2 0)
+ debuginfo-level-tools = $(usex debug 2 0)
+ debuginfo-level-tests = 0
+ backtrace = true
+ incremental = false
+ $(if ! tc-is-cross-compiler; then
+ echo "default-linker = \"$(tc-getCC)\""
+ fi)
+ parallel-compiler = $(toml_usex parallel-compiler)
+ channel = "$(usex nightly nightly stable)"
+ description = "gentoo"
+ rpath = false
+ verbose-tests = true
+ optimize-tests = $(toml_usex !debug)
+ codegen-tests = true
+ dist-src = false
+ remap-debuginfo = true
+ lld = $(usex system-llvm false $(toml_usex wasm))
+ # only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
+ # https://github.com/rust-lang/rust/issues/74976
+ # https://github.com/rust-lang/rust/issues/76526
+ deny-warnings = $(usex wasm $(usex doc false true) true)
+ backtrace-on-ice = true
+ jemalloc = false
+ lto = "$(usex lto fat off)"
+ [dist]
+ src-tarball = false
+ compression-formats = ["xz"]
+ compression-profile = "balanced"
+ _EOF_
+
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+ arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+ export CFLAGS_${rust_target//-/_}="${arch_cflags}"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${rust_target}]
+ ar = "$(tc-getAR)"
+ cc = "$(tc-getCC)"
+ cxx = "$(tc-getCXX)"
+ linker = "$(tc-getCC)"
+ ranlib = "$(tc-getRANLIB)"
+ llvm-libunwind = "$(usex llvm-libunwind $(usex system-llvm system in-tree) no)"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ # by default librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
+ # but we patch it and set to false here as well
+ if use elibc_musl; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ crt-static = false
+ _EOF_
+ fi
+ done
+ if use wasm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.wasm32-unknown-unknown]
+ linker = "$(usex system-llvm lld rust-lld)"
+ # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483
+ profiler = false
+ _EOF_
+ fi
+
+ if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
+ # experimental cross support
+ # discussion: https://bugs.gentoo.org/679878
+ # TODO: c*flags, clang, system-llvm, cargo.eclass target support
+ # it would be much better if we could split out stdlib
+ # complilation to separate ebuild and abuse CATEGORY to
+ # just install to /usr/lib/rustlib/<target>
+
+ # extra targets defined as a bash array
+ # spec format: <LLVM target>:<rust-target>:<CTARGET>
+ # best place would be /etc/portage/env/dev-lang/rust
+ # Example:
+ # RUST_CROSS_TARGETS=(
+ # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
+ # )
+ # no extra hand holding is done, no target transformations, all
+ # values are passed as-is with just basic checks, so it's up to user to supply correct values
+ # valid rust targets can be obtained with
+ # rustc --print target-list
+ # matching cross toolchain has to be installed
+ # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
+ # only gcc toolchains installed with crossdev are checked for now.
+
+ # BUG: we can't pass host flags to cross compiler, so just filter for now
+ # BUG: this should be more fine-grained.
+ filter-flags '-mcpu=*' '-march=*' '-mtune=*'
+
+ local cross_target_spec
+ for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
+ # extracts first element form <LLVM target>:<rust-target>:<CTARGET>
+ local cross_llvm_target="${cross_target_spec%%:*}"
+ # extracts toolchain triples, <rust-target>:<CTARGET>
+ local cross_triples="${cross_target_spec#*:}"
+ # extracts first element after before : separator
+ local cross_rust_target="${cross_triples%%:*}"
+ # extracts last element after : separator
+ local cross_toolchain="${cross_triples##*:}"
+ use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
+ command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${cross_rust_target}]
+ ar = "${cross_toolchain}-ar"
+ cc = "${cross_toolchain}-gcc"
+ cxx = "${cross_toolchain}-g++"
+ linker = "${cross_toolchain}-gcc"
+ ranlib = "${cross_toolchain}-ranlib"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ if [[ "${cross_toolchain}" == *-musl* ]]; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
+ _EOF_
+ fi
+
+ # append cross target to "normal" target list
+ # example 'target = ["powerpc64le-unknown-linux-gnu"]'
+ # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
+
+ rust_targets="${rust_targets},\"${cross_rust_target}\""
+ sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
+
+ ewarn
+ ewarn "Enabled ${cross_rust_target} rust target"
+ ewarn "Using ${cross_toolchain} cross toolchain"
+ ewarn
+ if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
+ ewarn "'sys-devel/binutils[multitarget]' is not installed"
+ ewarn "'strip' will be unable to strip cross libraries"
+ ewarn "cross targets will be installed with full debug information"
+ ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
+ ewarn
+ ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
+ ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
+ ewarn
+ fi
+ done
+ fi # I_KNOW_WHAT_I_AM_DOING_CROSS
+
+ einfo "Rust configured with the following flags:"
+ echo
+ echo RUSTFLAGS="\"${RUSTFLAGS}\""
+ echo RUSTFLAGS_BOOTSTRAP="\"${RUSTFLAGS_BOOTSTRAP}\""
+ echo RUSTFLAGS_NOT_BOOTSTRAP="\"${RUSTFLAGS_NOT_BOOTSTRAP}\""
+ echo MAGIC_EXTRA_RUSTFLAGS="\"${MAGIC_EXTRA_RUSTFLAGS}\""
+ env | grep "CARGO_TARGET_.*_RUSTFLAGS="
+ env | grep "CFLAGS_.*"
+ echo
+ einfo "config.toml contents:"
+ cat "${S}"/config.toml || die
+ echo
+}
+
+src_compile() {
+ RUST_BACKTRACE=1 "${EPYTHON}" ./x.py build -vvv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+}
+
+src_test() {
+ # https://rustc-dev-guide.rust-lang.org/tests/intro.html
+
+ # those are basic and codegen tests.
+ local tests=(
+ codegen
+ codegen-units
+ compile-fail
+ incremental
+ mir-opt
+ pretty
+ run-make
+ )
+
+ # fails if llvm is not built with ALL targets.
+ # and known to fail with system llvm sometimes.
+ use system-llvm || tests+=( assembly )
+
+ # fragile/expensive/less important tests
+ # or tests that require extra builds
+ # TODO: instead of skipping, just make some nonfatal.
+ if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
+ tests+=(
+ rustdoc
+ rustdoc-js
+ rustdoc-js-std
+ rustdoc-ui
+ run-make-fulldeps
+ ui
+ ui-fulldeps
+ )
+ fi
+
+ local i failed=()
+ einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
+ for i in "${tests[@]}"; do
+ local t="src/test/${i}"
+ einfo "rust_src_test: running ${t}"
+ if ! RUST_BACKTRACE=1 "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
+ -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
+ then
+ failed+=( "${t}" )
+ eerror "rust_src_test: ${t} failed"
+ fi
+ done
+
+ if [[ ${#failed[@]} -ne 0 ]]; then
+ eerror "rust_src_test: failure summary: ${failed[@]}"
+ die "aborting due to test failures"
+ fi
+}
+
+src_install() {
+ DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+
+ # bug #689562, #689160
+ rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
+ rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+ newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
+
+ local symlinks=(
+ cargo
+ rustc
+ rustdoc
+ rust-gdb
+ rust-gdbgui
+ rust-lldb
+ )
+
+ use clippy && symlinks+=( clippy-driver cargo-clippy )
+ use miri && symlinks+=( miri cargo-miri )
+ use profiler && symlinks+=( rust-demangler )
+ use rustfmt && symlinks+=( rustfmt cargo-fmt )
+ use rust-analyzer && symlinks+=( rust-analyzer )
+
+ einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
+ local i
+ for i in "${symlinks[@]}"; do
+ # we need realpath on /usr/bin/* symlink return version-appended binary path.
+ # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
+ # need to fix eselect-rust to remove this hack.
+ local ver_i="${i}-${PV}"
+ if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+ einfo "Installing ${i} symlink"
+ ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+ else
+ ewarn "${i} symlink requested, but source file not found"
+ ewarn "please report this"
+ fi
+ dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+ done
+
+ # symlinks to switch components to active rust in eselect
+ dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
+ dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
+ dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
+ dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
+ dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+
+ newenvd - "50${P}" <<-_EOF_
+ LDPATH="${EPREFIX}/usr/lib/rust/lib"
+ MANPATH="${EPREFIX}/usr/lib/rust/man"
+ _EOF_
+
+ rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/bin"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+
+ # note: eselect-rust adds EROOT to all paths below
+ cat <<-_EOF_ > "${T}/provider-${P}"
+ /usr/bin/cargo
+ /usr/bin/rustdoc
+ /usr/bin/rust-gdb
+ /usr/bin/rust-gdbgui
+ /usr/bin/rust-lldb
+ /usr/lib/rustlib
+ /usr/lib/rust/lib
+ /usr/lib/rust/libexec
+ /usr/lib/rust/man
+ /usr/share/doc/rust
+ _EOF_
+
+ if use clippy; then
+ echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+ fi
+ if use miri; then
+ echo /usr/bin/miri >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
+ fi
+ if use profiler; then
+ echo /usr/bin/rust-demangler >> "${T}/provider-${P}"
+ fi
+ if use rustfmt; then
+ echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+ fi
+ if use rust-analyzer; then
+ echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+ fi
+
+ insinto /etc/env.d/rust
+ doins "${T}/provider-${P}"
+
+ if use dist; then
+ insinto "/usr/lib/${PN}/${PV}/dist"
+ doins -r "${S}/build/dist/."
+ fi
+}
+
+pkg_postinst() {
+ eselect rust update
+
+ if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+ elog "Rust installs a helper script for calling GDB and LLDB,"
+ elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+ fi
+
+ if has_version app-editors/emacs; then
+ elog "install app-emacs/rust-mode to get emacs support for rust."
+ fi
+
+ if has_version app-editors/gvim || has_version app-editors/vim; then
+ elog "install app-vim/rust-vim to get vim support for rust."
+ fi
+}
+
+pkg_postrm() {
+ eselect rust cleanup
+}
diff --git a/dev-lang/rust/rust-1.76.0-r1.ebuild b/dev-lang/rust/rust-1.76.0-r1.ebuild
new file mode 100644
index 0000000..0f297fa
--- /dev/null
+++ b/dev-lang/rust/rust-1.76.0-r1.ebuild
@@ -0,0 +1,797 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
+ multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
+
+if [[ ${PV} = *beta* ]]; then
+ betaver=${PV//*beta}
+ BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+ MY_P="rustc-beta"
+ SLOT="beta/${PV}"
+ SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+else
+ ABI_VER="$(ver_cut 1-2)"
+ SLOT="stable/${ABI_VER}"
+ MY_P="rustc-${PV}"
+ SRC="${MY_P}-src.tar.xz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+
+SRC_URI="
+ https://static.rust-lang.org/dist/${SRC}
+ verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
+ !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
+"
+
+# keep in sync with llvm ebuild of the same version as bundled one.
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY DirectX Hexagon Lanai
+ LoongArch M68k Mips MSP430 NVPTX PowerPC RISCV Sparc SPIRV SystemZ VE
+ WebAssembly X86 XCore Xtensa )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind lto miri nightly parallel-compiler profiler rustfmt rust-analyzer rust-src system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+
+# Please keep the LLVM dependency block separate. Since LLVM is slotted,
+# we need to *really* make sure we're not pulling more than one slot
+# simultaneously.
+
+# How to use it:
+# List all the working slots in LLVM_VALID_SLOTS, newest first.
+LLVM_VALID_SLOTS=( 17 )
+LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
+
+# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
+# (-) usedep needed because we may build with older llvm without that target
+LLVM_DEPEND="|| ( "
+for _s in ${LLVM_VALID_SLOTS[@]}; do
+ LLVM_DEPEND+=" ( "
+ for _x in ${ALL_LLVM_TARGETS[@]}; do
+ LLVM_DEPEND+="
+ ${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )
+ wasm? ( sys-devel/lld:${_s} )"
+ done
+ LLVM_DEPEND+=" )"
+done
+unset _s _x
+LLVM_DEPEND+=" )
+ <sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+"
+
+# to bootstrap we need at least exactly previous version, or same.
+# most of the time previous versions fail to bootstrap with newer
+# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
+# but it fails to bootstrap with 1.48.x
+# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.json
+RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
+RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
+BOOTSTRAP_DEPEND="||
+ (
+ =dev-lang/rust-"${RUST_DEP_PREV}"
+ =dev-lang/rust-bin-"${RUST_DEP_PREV}"
+ =dev-lang/rust-"${RUST_DEP_CURR}"
+ =dev-lang/rust-bin-"${RUST_DEP_CURR}"
+ )
+"
+
+BDEPEND="${PYTHON_DEPS}
+ app-eselect/eselect-rust
+ || (
+ >=sys-devel/gcc-4.7
+ >=sys-devel/clang-3.5
+ )
+ system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
+ !system-llvm? (
+ >=dev-build/cmake-3.13.4
+ app-alternatives/ninja
+ )
+ test? ( dev-debug/gdb )
+ verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+DEPEND="
+ >=app-arch/xz-utils-5.2
+ net-misc/curl:=[http2,ssl]
+ sys-libs/zlib:=
+ dev-libs/openssl:0=
+ system-llvm? (
+ ${LLVM_DEPEND}
+ llvm-libunwind? ( sys-libs/llvm-libunwind:= )
+ )
+ !system-llvm? (
+ !llvm-libunwind? (
+ elibc_musl? ( sys-libs/libunwind:= )
+ )
+ )
+"
+
+RDEPEND="${DEPEND}
+ app-eselect/eselect-rust
+ sys-apps/lsb-release
+"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
+ miri? ( nightly )
+ parallel-compiler? ( nightly )
+ rust-analyzer? ( rust-src )
+ test? ( ${ALL_LLVM_TARGETS[*]} )
+ wasm? ( llvm_targets_WebAssembly )
+ x86? ( cpu_flags_x86_sse2 )
+"
+
+# we don't use cmake.eclass, but can get a warning
+CMAKE_WARN_UNUSED_CLI=no
+
+QA_FLAGS_IGNORED="
+ usr/lib/${PN}/${PV}/bin/.*
+ usr/lib/${PN}/${PV}/libexec/.*
+ usr/lib/${PN}/${PV}/lib/lib.*.so
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_SONAME="
+ usr/lib/${PN}/${PV}/lib/lib.*.so.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_PRESTRIPPED="
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+"
+
+# An rmeta file is custom binary format that contains the metadata for the crate.
+# rmeta files do not support linking, since they do not contain compiled object files.
+# so we can safely silence the warning for this QA check.
+QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+# causes double bootstrap
+RESTRICT="test"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
+
+PATCHES=(
+ "${FILESDIR}"/1.75.0-musl-dynamic-linking.patch
+ "${FILESDIR}"/1.74.1-cross-compile-libz.patch
+ #"${FILESDIR}"/1.72.0-bump-libc-deps-to-0.2.146.patch # pending refresh
+ "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch
+ "${FILESDIR}"/1.67.0-doc-wasm.patch
+ "${FILESDIR}"/1.75.0-handle-vendored-sources.patch # remove for >=1.77.0
+ "${FILESDIR}"/1.76.0-loong-code-model.patch # remove for >=1.78.0
+)
+
+S="${WORKDIR}/${MY_P}-src"
+
+clear_vendor_checksums() {
+ sed -i 's/\("files":{\)[^}]*/\1/' "vendor/${1}/.cargo-checksum.json" || die
+}
+
+eapply_crate() {
+ pushd "${1:?}" > /dev/null || die
+ local patch="${2:?}"
+ eapply "${patch}"
+ "${EPREFIX}"/bin/sh "${FILESDIR}"/rehash-crate.sh "${patch}" || die
+ popd > /dev/null || die
+}
+
+toml_usex() {
+ usex "${1}" true false
+}
+
+bootstrap_rust_version_check() {
+ # never call from pkg_pretend. eselect-rust may be not installed yet.
+ [[ ${MERGE_TYPE} == binary ]] && return
+ local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
+ local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
+ local rustc_version=( $(eselect --brief --root="${BROOT}" rust show 2>/dev/null) )
+ rustc_version=${rustc_version[0]#rust-bin-}
+ rustc_version=${rustc_version#rust-}
+
+ [[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
+
+ if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
+ eerror "Rust >=${rustc_wanted} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too old"
+ elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
+ eerror "Rust <${rustc_toonew} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too new"
+ else
+ einfo "Using rust ${rustc_version} to build"
+ fi
+}
+
+pre_build_checks() {
+ local M=8192
+ # multiply requirements by 1.3 if we are doing x86-multilib
+ if use amd64; then
+ M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
+ fi
+ M=$(( $(usex clippy 128 0) + ${M} ))
+ M=$(( $(usex miri 128 0) + ${M} ))
+ M=$(( $(usex rustfmt 256 0) + ${M} ))
+ # add 2G if we compile llvm and 256M per llvm_target
+ if ! use system-llvm; then
+ M=$(( 2048 + ${M} ))
+ local ltarget
+ for ltarget in ${ALL_LLVM_TARGETS[@]}; do
+ M=$(( $(usex ${ltarget} 256 0) + ${M} ))
+ done
+ fi
+ M=$(( $(usex wasm 256 0) + ${M} ))
+ M=$(( $(usex debug 2 1) * ${M} ))
+ eshopts_push -s extglob
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ M=$(( 15 * ${M} / 10 ))
+ fi
+ eshopts_pop
+ M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
+ M=$(( $(usex doc 256 0) + ${M} ))
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+llvm_check_deps() {
+ has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
+}
+
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+ local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+ HAVE_LIBCXX
+#endif
+'
+ local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+ [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+pkg_setup() {
+ pre_build_checks
+ python-any-r1_pkg_setup
+
+ export LIBGIT2_NO_PKG_CONFIG=1 #749381
+ if tc-is-cross-compiler; then
+ export PKG_CONFIG_ALLOW_CROSS=1
+ export PKG_CONFIG_PATH="${ROOT}/usr/$(get_libdir)/pkgconfig"
+ export OPENSSL_INCLUDE_DIR="${ROOT}/usr/include"
+ export OPENSSL_LIB_DIR="${ROOT}/usr/$(get_libdir)"
+
+ use system-bootstrap || die "USE=system-bootstrap is required when cross-compiling"
+ use system-llvm && die "USE=system-llvm not allowed when cross-compiling"
+ local cross_llvm_target="$(llvm_tuple_to_target "${CBUILD}")"
+ use "llvm_targets_${cross_llvm_target}" || \
+ die "Must enable LLVM_TARGETS=${cross_llvm_target} matching CBUILD=${CBUILD} when cross-compiling"
+ fi
+
+ use system-bootstrap && bootstrap_rust_version_check
+
+ if use system-llvm; then
+ llvm_pkg_setup
+
+ local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ export LLVM_LINK_SHARED=1
+ export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
+ fi
+}
+
+esetup_unwind_hack() {
+ # https://bugs.gentoo.org/870280
+ # this is a hack needed to bootstrap with libgcc_s linked tarball on llvm-libunwind system.
+ # it should trigger for internal bootstrap or system-bootstrap with rust-bin.
+ # the whole idea is for stage0 to bootstrap with fake libgcc_s.
+ # final stage will receive -L${T}/lib but not -lgcc_s args, producing clean compiler.
+ local fakelib="${T}/fakelib"
+ mkdir -p "${fakelib}" || die
+ # we need both symlinks, one for cargo runtime, other for linker.
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so.1" || die
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so" || die
+ export LD_LIBRARY_PATH="${fakelib}"
+ export RUSTFLAGS+=" -L${fakelib}"
+ # this is a literally magic variable that gets through cargo cache, without it some
+ # crates ignore RUSTFLAGS.
+ # this variable can not contain leading space.
+ export MAGIC_EXTRA_RUSTFLAGS+="${MAGIC_EXTRA_RUSTFLAGS:+ }-L${fakelib}"
+}
+
+src_prepare() {
+ eapply_crate vendor/openssl-sys "${FILESDIR}"/1.72.0-libressl-openssl-sys.patch
+
+ # Clear vendor checksums for crates that we patched to bump libc.
+ # NOTE: refresh this on each bump.
+ #for i in addr2line-0.20.0 bstr cranelift-jit crossbeam-channel elasticlunr-rs handlebars icu_locid libffi \
+ # terminal_size tracing-tree; do
+ # clear_vendor_checksums "${i}"
+ #done
+
+ if ! use system-bootstrap; then
+ has_version sys-devel/gcc || esetup_unwind_hack
+ local rust_stage0_root="${WORKDIR}"/rust-stage0
+ local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi "${CBUILD}")"
+
+ "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
+ --without=rust-docs-json-preview,rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
+ fi
+
+ default
+}
+
+src_configure() {
+ filter-lto # https://bugs.gentoo.org/862109 https://bugs.gentoo.org/866231
+
+ local rust_target="" rust_targets="" arch_cflags
+
+ # Collect rust target names to compile standard libs for all ABIs.
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
+ done
+ if use wasm; then
+ rust_targets+=",\"wasm32-unknown-unknown\""
+ if use system-llvm; then
+ # un-hardcode rust-lld linker for this target
+ # https://bugs.gentoo.org/715348
+ sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/base/wasm.rs || die
+ fi
+ fi
+ rust_targets="${rust_targets#,}"
+
+ # cargo and rustdoc are mandatory and should always be included
+ local tools='"cargo","rustdoc"'
+ use clippy && tools+=',"clippy"'
+ use miri && tools+=',"miri"'
+ use profiler && tools+=',"rust-demangler"'
+ use rustfmt && tools+=',"rustfmt"'
+ use rust-analyzer && tools+=',"rust-analyzer"'
+ use rust-src && tools+=',"src"'
+
+ local rust_stage0_root
+ if use system-bootstrap; then
+ local printsysroot
+ printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
+ rust_stage0_root="${printsysroot}"
+ else
+ rust_stage0_root="${WORKDIR}"/rust-stage0
+ fi
+ # in case of prefix it will be already prefixed, as --print sysroot returns full path
+ [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
+
+ rust_target="$(rust_abi)"
+ rust_build="$(rust_abi "${CBUILD}")"
+ rust_host="$(rust_abi "${CHOST}")"
+
+ local cm_btype="$(usex debug DEBUG RELEASE)"
+ cat <<- _EOF_ > "${S}"/config.toml
+ changelog-seen = 2
+ [llvm]
+ download-ci-llvm = false
+ optimize = $(toml_usex !debug)
+ release-debuginfo = $(toml_usex debug)
+ assertions = $(toml_usex debug)
+ ninja = true
+ targets = "${LLVM_TARGETS// /;}"
+ experimental-targets = ""
+ link-shared = $(toml_usex system-llvm)
+ $(if is_libcxx_linked; then
+ # https://bugs.gentoo.org/732632
+ echo "use-libcxx = true"
+ echo "static-libstdcpp = false"
+ fi)
+ $(case "${rust_target}" in
+ i586-*-linux-*)
+ # https://github.com/rust-lang/rust/issues/93059
+ echo 'cflags = "-fcf-protection=none"'
+ echo 'cxxflags = "-fcf-protection=none"'
+ echo 'ldflags = "-fcf-protection=none"'
+ ;;
+ *)
+ ;;
+ esac)
+ enable-warnings = false
+ [llvm.build-config]
+ CMAKE_VERBOSE_MAKEFILE = "ON"
+ $(if ! tc-is-cross-compiler; then
+ # When cross-compiling, LLVM is compiled twice, once for host and
+ # once for target. Unfortunately, this build configuration applies
+ # to both, which means any flags applicable to one target but not
+ # the other will break. Conditionally disable respecting user
+ # flags when cross-compiling.
+ echo "CMAKE_C_FLAGS_${cm_btype} = \"${CFLAGS}\""
+ echo "CMAKE_CXX_FLAGS_${cm_btype} = \"${CXXFLAGS}\""
+ echo "CMAKE_EXE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_MODULE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_SHARED_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_STATIC_LINKER_FLAGS_${cm_btype} = \"${ARFLAGS}\""
+ fi)
+ [build]
+ build-stage = 2
+ test-stage = 2
+ build = "${rust_build}"
+ host = ["${rust_host}"]
+ target = [${rust_targets}]
+ cargo = "${rust_stage0_root}/bin/cargo"
+ rustc = "${rust_stage0_root}/bin/rustc"
+ rustfmt = "${rust_stage0_root}/bin/rustfmt"
+ docs = $(toml_usex doc)
+ compiler-docs = false
+ submodules = false
+ python = "${EPYTHON}"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [${tools}]
+ verbose = 2
+ sanitizers = false
+ profiler = $(toml_usex profiler)
+ cargo-native-static = false
+ [install]
+ prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+ sysconfdir = "etc"
+ docdir = "share/doc/rust"
+ bindir = "bin"
+ libdir = "lib"
+ mandir = "share/man"
+ [rust]
+ # https://github.com/rust-lang/rust/issues/54872
+ codegen-units-std = 1
+ optimize = true
+ debug = $(toml_usex debug)
+ debug-assertions = $(toml_usex debug)
+ debug-assertions-std = $(toml_usex debug)
+ debuginfo-level = $(usex debug 2 0)
+ debuginfo-level-rustc = $(usex debug 2 0)
+ debuginfo-level-std = $(usex debug 2 0)
+ debuginfo-level-tools = $(usex debug 2 0)
+ debuginfo-level-tests = 0
+ backtrace = true
+ incremental = false
+ $(if ! tc-is-cross-compiler; then
+ echo "default-linker = \"$(tc-getCC)\""
+ fi)
+ parallel-compiler = $(toml_usex parallel-compiler)
+ channel = "$(usex nightly nightly stable)"
+ description = "gentoo"
+ rpath = false
+ verbose-tests = true
+ optimize-tests = $(toml_usex !debug)
+ codegen-tests = true
+ dist-src = false
+ remap-debuginfo = true
+ lld = $(usex system-llvm false $(toml_usex wasm))
+ # only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
+ # https://github.com/rust-lang/rust/issues/74976
+ # https://github.com/rust-lang/rust/issues/76526
+ deny-warnings = $(usex wasm $(usex doc false true) true)
+ backtrace-on-ice = true
+ jemalloc = false
+ # See https://github.com/rust-lang/rust/issues/121124
+ lto = "$(usex lto thin off)"
+ [dist]
+ src-tarball = false
+ compression-formats = ["xz"]
+ compression-profile = "balanced"
+ _EOF_
+
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+ arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+ export CFLAGS_${rust_target//-/_}="${arch_cflags}"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${rust_target}]
+ ar = "$(tc-getAR)"
+ cc = "$(tc-getCC)"
+ cxx = "$(tc-getCXX)"
+ linker = "$(tc-getCC)"
+ ranlib = "$(tc-getRANLIB)"
+ llvm-libunwind = "$(usex llvm-libunwind $(usex system-llvm system in-tree) no)"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ # by default librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
+ # but we patch it and set to false here as well
+ if use elibc_musl; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ crt-static = false
+ _EOF_
+ fi
+ done
+ if use wasm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.wasm32-unknown-unknown]
+ linker = "$(usex system-llvm lld rust-lld)"
+ # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483
+ profiler = false
+ _EOF_
+ fi
+
+ if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
+ # experimental cross support
+ # discussion: https://bugs.gentoo.org/679878
+ # TODO: c*flags, clang, system-llvm, cargo.eclass target support
+ # it would be much better if we could split out stdlib
+ # complilation to separate ebuild and abuse CATEGORY to
+ # just install to /usr/lib/rustlib/<target>
+
+ # extra targets defined as a bash array
+ # spec format: <LLVM target>:<rust-target>:<CTARGET>
+ # best place would be /etc/portage/env/dev-lang/rust
+ # Example:
+ # RUST_CROSS_TARGETS=(
+ # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
+ # )
+ # no extra hand holding is done, no target transformations, all
+ # values are passed as-is with just basic checks, so it's up to user to supply correct values
+ # valid rust targets can be obtained with
+ # rustc --print target-list
+ # matching cross toolchain has to be installed
+ # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
+ # only gcc toolchains installed with crossdev are checked for now.
+
+ # BUG: we can't pass host flags to cross compiler, so just filter for now
+ # BUG: this should be more fine-grained.
+ filter-flags '-mcpu=*' '-march=*' '-mtune=*'
+
+ local cross_target_spec
+ for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
+ # extracts first element form <LLVM target>:<rust-target>:<CTARGET>
+ local cross_llvm_target="${cross_target_spec%%:*}"
+ # extracts toolchain triples, <rust-target>:<CTARGET>
+ local cross_triples="${cross_target_spec#*:}"
+ # extracts first element after before : separator
+ local cross_rust_target="${cross_triples%%:*}"
+ # extracts last element after : separator
+ local cross_toolchain="${cross_triples##*:}"
+ use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
+ command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${cross_rust_target}]
+ ar = "${cross_toolchain}-ar"
+ cc = "${cross_toolchain}-gcc"
+ cxx = "${cross_toolchain}-g++"
+ linker = "${cross_toolchain}-gcc"
+ ranlib = "${cross_toolchain}-ranlib"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ if [[ "${cross_toolchain}" == *-musl* ]]; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
+ _EOF_
+ fi
+
+ # append cross target to "normal" target list
+ # example 'target = ["powerpc64le-unknown-linux-gnu"]'
+ # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
+
+ rust_targets="${rust_targets},\"${cross_rust_target}\""
+ sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
+
+ ewarn
+ ewarn "Enabled ${cross_rust_target} rust target"
+ ewarn "Using ${cross_toolchain} cross toolchain"
+ ewarn
+ if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
+ ewarn "'sys-devel/binutils[multitarget]' is not installed"
+ ewarn "'strip' will be unable to strip cross libraries"
+ ewarn "cross targets will be installed with full debug information"
+ ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
+ ewarn
+ ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
+ ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
+ ewarn
+ fi
+ done
+ fi # I_KNOW_WHAT_I_AM_DOING_CROSS
+
+ einfo "Rust configured with the following flags:"
+ echo
+ echo RUSTFLAGS="\"${RUSTFLAGS}\""
+ echo RUSTFLAGS_BOOTSTRAP="\"${RUSTFLAGS_BOOTSTRAP}\""
+ echo RUSTFLAGS_NOT_BOOTSTRAP="\"${RUSTFLAGS_NOT_BOOTSTRAP}\""
+ echo MAGIC_EXTRA_RUSTFLAGS="\"${MAGIC_EXTRA_RUSTFLAGS}\""
+ env | grep "CARGO_TARGET_.*_RUSTFLAGS="
+ env | grep "CFLAGS_.*"
+ echo
+ einfo "config.toml contents:"
+ cat "${S}"/config.toml || die
+ echo
+}
+
+src_compile() {
+ RUST_BACKTRACE=1 "${EPYTHON}" ./x.py build -vvv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+}
+
+src_test() {
+ # https://rustc-dev-guide.rust-lang.org/tests/intro.html
+
+ # those are basic and codegen tests.
+ local tests=(
+ codegen
+ codegen-units
+ compile-fail
+ incremental
+ mir-opt
+ pretty
+ run-make
+ )
+
+ # fails if llvm is not built with ALL targets.
+ # and known to fail with system llvm sometimes.
+ use system-llvm || tests+=( assembly )
+
+ # fragile/expensive/less important tests
+ # or tests that require extra builds
+ # TODO: instead of skipping, just make some nonfatal.
+ if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
+ tests+=(
+ rustdoc
+ rustdoc-js
+ rustdoc-js-std
+ rustdoc-ui
+ run-make-fulldeps
+ ui
+ ui-fulldeps
+ )
+ fi
+
+ local i failed=()
+ einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
+ for i in "${tests[@]}"; do
+ local t="src/test/${i}"
+ einfo "rust_src_test: running ${t}"
+ if ! RUST_BACKTRACE=1 "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
+ -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
+ then
+ failed+=( "${t}" )
+ eerror "rust_src_test: ${t} failed"
+ fi
+ done
+
+ if [[ ${#failed[@]} -ne 0 ]]; then
+ eerror "rust_src_test: failure summary: ${failed[@]}"
+ die "aborting due to test failures"
+ fi
+}
+
+src_install() {
+ DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+
+ # bug #689562, #689160
+ rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
+ rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+ newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
+
+ local symlinks=(
+ cargo
+ rustc
+ rustdoc
+ rust-gdb
+ rust-gdbgui
+ rust-lldb
+ )
+
+ use clippy && symlinks+=( clippy-driver cargo-clippy )
+ use miri && symlinks+=( miri cargo-miri )
+ use profiler && symlinks+=( rust-demangler )
+ use rustfmt && symlinks+=( rustfmt cargo-fmt )
+ use rust-analyzer && symlinks+=( rust-analyzer )
+
+ einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
+ local i
+ for i in "${symlinks[@]}"; do
+ # we need realpath on /usr/bin/* symlink return version-appended binary path.
+ # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
+ # need to fix eselect-rust to remove this hack.
+ local ver_i="${i}-${PV}"
+ if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+ einfo "Installing ${i} symlink"
+ ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+ else
+ ewarn "${i} symlink requested, but source file not found"
+ ewarn "please report this"
+ fi
+ dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+ done
+
+ # symlinks to switch components to active rust in eselect
+ dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
+ dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
+ dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
+ dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
+ dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+
+ newenvd - "50${P}" <<-_EOF_
+ LDPATH="${EPREFIX}/usr/lib/rust/lib"
+ MANPATH="${EPREFIX}/usr/lib/rust/man"
+ _EOF_
+
+ rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/bin"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+
+ # note: eselect-rust adds EROOT to all paths below
+ cat <<-_EOF_ > "${T}/provider-${P}"
+ /usr/bin/cargo
+ /usr/bin/rustdoc
+ /usr/bin/rust-gdb
+ /usr/bin/rust-gdbgui
+ /usr/bin/rust-lldb
+ /usr/lib/rustlib
+ /usr/lib/rust/lib
+ /usr/lib/rust/libexec
+ /usr/lib/rust/man
+ /usr/share/doc/rust
+ _EOF_
+
+ if use clippy; then
+ echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+ fi
+ if use miri; then
+ echo /usr/bin/miri >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
+ fi
+ if use profiler; then
+ echo /usr/bin/rust-demangler >> "${T}/provider-${P}"
+ fi
+ if use rustfmt; then
+ echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+ fi
+ if use rust-analyzer; then
+ echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+ fi
+
+ insinto /etc/env.d/rust
+ doins "${T}/provider-${P}"
+
+ if use dist; then
+ insinto "/usr/lib/${PN}/${PV}/dist"
+ doins -r "${S}/build/dist/."
+ fi
+}
+
+pkg_postinst() {
+ eselect rust update
+
+ if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+ elog "Rust installs a helper script for calling GDB and LLDB,"
+ elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+ fi
+
+ if has_version app-editors/emacs; then
+ elog "install app-emacs/rust-mode to get emacs support for rust."
+ fi
+
+ if has_version app-editors/gvim || has_version app-editors/vim; then
+ elog "install app-vim/rust-vim to get vim support for rust."
+ fi
+}
+
+pkg_postrm() {
+ eselect rust cleanup
+}
diff --git a/dev-lang/rust/rust-1.77.1.ebuild b/dev-lang/rust/rust-1.77.1.ebuild
new file mode 100644
index 0000000..c441f51
--- /dev/null
+++ b/dev-lang/rust/rust-1.77.1.ebuild
@@ -0,0 +1,797 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
+ multilib multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
+
+if [[ ${PV} = *beta* ]]; then
+ betaver=${PV//*beta}
+ BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
+ MY_P="rustc-beta"
+ SLOT="beta/${PV}"
+ SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+else
+ ABI_VER="$(ver_cut 1-2)"
+ SLOT="stable/${ABI_VER}"
+ MY_P="rustc-${PV}"
+ SRC="${MY_P}-src.tar.xz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="https://www.rust-lang.org/"
+
+SRC_URI="
+ https://static.rust-lang.org/dist/${SRC}
+ verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
+ !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
+"
+
+# keep in sync with llvm ebuild of the same version as bundled one.
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY DirectX Hexagon Lanai
+ LoongArch M68k Mips MSP430 NVPTX PowerPC RISCV Sparc SPIRV SystemZ VE
+ WebAssembly X86 XCore Xtensa )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind lto miri nightly parallel-compiler profiler rustfmt rust-analyzer rust-src system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
+
+# Please keep the LLVM dependency block separate. Since LLVM is slotted,
+# we need to *really* make sure we're not pulling more than one slot
+# simultaneously.
+
+# How to use it:
+# List all the working slots in LLVM_VALID_SLOTS, newest first.
+LLVM_VALID_SLOTS=( 17 )
+LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
+
+# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
+# (-) usedep needed because we may build with older llvm without that target
+LLVM_DEPEND="|| ( "
+for _s in ${LLVM_VALID_SLOTS[@]}; do
+ LLVM_DEPEND+=" ( "
+ for _x in ${ALL_LLVM_TARGETS[@]}; do
+ LLVM_DEPEND+="
+ ${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )
+ wasm? ( sys-devel/lld:${_s} )"
+ done
+ LLVM_DEPEND+=" )"
+done
+unset _s _x
+LLVM_DEPEND+=" )
+ <sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+"
+
+# to bootstrap we need at least exactly previous version, or same.
+# most of the time previous versions fail to bootstrap with newer
+# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
+# but it fails to bootstrap with 1.48.x
+# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.json
+RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
+RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
+BOOTSTRAP_DEPEND="||
+ (
+ =dev-lang/rust-"${RUST_DEP_PREV}"
+ =dev-lang/rust-bin-"${RUST_DEP_PREV}"
+ =dev-lang/rust-"${RUST_DEP_CURR}"
+ =dev-lang/rust-bin-"${RUST_DEP_CURR}"
+ )
+"
+
+BDEPEND="${PYTHON_DEPS}
+ app-eselect/eselect-rust
+ || (
+ >=sys-devel/gcc-4.7
+ >=sys-devel/clang-3.5
+ )
+ system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
+ !system-llvm? (
+ >=dev-build/cmake-3.13.4
+ app-alternatives/ninja
+ )
+ test? ( dev-debug/gdb )
+ verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+DEPEND="
+ >=app-arch/xz-utils-5.2
+ net-misc/curl:=[http2,ssl]
+ sys-libs/zlib:=
+ dev-libs/openssl:0=
+ system-llvm? (
+ ${LLVM_DEPEND}
+ llvm-libunwind? ( sys-libs/llvm-libunwind:= )
+ )
+ !system-llvm? (
+ !llvm-libunwind? (
+ elibc_musl? ( sys-libs/libunwind:= )
+ )
+ )
+"
+
+RDEPEND="${DEPEND}
+ app-eselect/eselect-rust
+ sys-apps/lsb-release
+"
+
+REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
+ miri? ( nightly )
+ parallel-compiler? ( nightly )
+ rust-analyzer? ( rust-src )
+ test? ( ${ALL_LLVM_TARGETS[*]} )
+ wasm? ( llvm_targets_WebAssembly )
+ x86? ( cpu_flags_x86_sse2 )
+"
+
+# we don't use cmake.eclass, but can get a warning
+CMAKE_WARN_UNUSED_CLI=no
+
+QA_FLAGS_IGNORED="
+ usr/lib/${PN}/${PV}/bin/.*
+ usr/lib/${PN}/${PV}/libexec/.*
+ usr/lib/${PN}/${PV}/lib/lib.*.so
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_SONAME="
+ usr/lib/${PN}/${PV}/lib/lib.*.so.*
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+"
+
+QA_PRESTRIPPED="
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
+ usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+"
+
+# An rmeta file is custom binary format that contains the metadata for the crate.
+# rmeta files do not support linking, since they do not contain compiled object files.
+# so we can safely silence the warning for this QA check.
+QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+# causes double bootstrap
+RESTRICT="test"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
+
+PATCHES=(
+ "${FILESDIR}"/1.75.0-musl-dynamic-linking.patch
+ "${FILESDIR}"/1.74.1-cross-compile-libz.patch
+ #"${FILESDIR}"/1.72.0-bump-libc-deps-to-0.2.146.patch # pending refresh
+ "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch
+ "${FILESDIR}"/1.67.0-doc-wasm.patch
+ "${FILESDIR}"/1.76.0-loong-code-model.patch # remove for >=1.78.0
+)
+
+S="${WORKDIR}/${MY_P}-src"
+
+clear_vendor_checksums() {
+ sed -i 's/\("files":{\)[^}]*/\1/' "vendor/${1}/.cargo-checksum.json" || die
+}
+
+eapply_crate() {
+ pushd "${1:?}" > /dev/null || die
+ local patch="${2:?}"
+ eapply "${patch}"
+ "${EPREFIX}"/bin/sh "${FILESDIR}"/rehash-crate.sh "${patch}" || die
+ popd > /dev/null || die
+}
+
+toml_usex() {
+ usex "${1}" true false
+}
+
+bootstrap_rust_version_check() {
+ # never call from pkg_pretend. eselect-rust may be not installed yet.
+ [[ ${MERGE_TYPE} == binary ]] && return
+ local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
+ local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
+ local rustc_version=( $(eselect --brief --root="${BROOT}" rust show 2>/dev/null) )
+ rustc_version=${rustc_version[0]#rust-bin-}
+ rustc_version=${rustc_version#rust-}
+
+ [[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
+
+ if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
+ eerror "Rust >=${rustc_wanted} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too old"
+ elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
+ eerror "Rust <${rustc_toonew} is required"
+ eerror "please run 'eselect rust' and set correct rust version"
+ die "selected rust version is too new"
+ else
+ einfo "Using rust ${rustc_version} to build"
+ fi
+}
+
+pre_build_checks() {
+ local M=8192
+ # multiply requirements by 1.3 if we are doing x86-multilib
+ if use amd64; then
+ M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
+ fi
+ M=$(( $(usex clippy 128 0) + ${M} ))
+ M=$(( $(usex miri 128 0) + ${M} ))
+ M=$(( $(usex rustfmt 256 0) + ${M} ))
+ # add 2G if we compile llvm and 256M per llvm_target
+ if ! use system-llvm; then
+ M=$(( 2048 + ${M} ))
+ local ltarget
+ for ltarget in ${ALL_LLVM_TARGETS[@]}; do
+ M=$(( $(usex ${ltarget} 256 0) + ${M} ))
+ done
+ fi
+ M=$(( $(usex wasm 256 0) + ${M} ))
+ M=$(( $(usex debug 2 1) * ${M} ))
+ eshopts_push -s extglob
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ M=$(( 15 * ${M} / 10 ))
+ fi
+ eshopts_pop
+ M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
+ M=$(( $(usex doc 256 0) + ${M} ))
+ CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
+}
+
+llvm_check_deps() {
+ has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
+}
+
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+ local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+ HAVE_LIBCXX
+#endif
+'
+ local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+ [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+pkg_setup() {
+ pre_build_checks
+ python-any-r1_pkg_setup
+
+ export LIBGIT2_NO_PKG_CONFIG=1 #749381
+ if tc-is-cross-compiler; then
+ export PKG_CONFIG_ALLOW_CROSS=1
+ export PKG_CONFIG_PATH="${ROOT}/usr/$(get_libdir)/pkgconfig"
+ export OPENSSL_INCLUDE_DIR="${ROOT}/usr/include"
+ export OPENSSL_LIB_DIR="${ROOT}/usr/$(get_libdir)"
+
+ use system-bootstrap || die "USE=system-bootstrap is required when cross-compiling"
+ use system-llvm && die "USE=system-llvm not allowed when cross-compiling"
+ local cross_llvm_target="$(llvm_tuple_to_target "${CBUILD}")"
+ use "llvm_targets_${cross_llvm_target}" || \
+ die "Must enable LLVM_TARGETS=${cross_llvm_target} matching CBUILD=${CBUILD} when cross-compiling"
+ fi
+
+ use system-bootstrap && bootstrap_rust_version_check
+
+ if use system-llvm; then
+ llvm_pkg_setup
+
+ local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ export LLVM_LINK_SHARED=1
+ export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
+ fi
+}
+
+esetup_unwind_hack() {
+ # https://bugs.gentoo.org/870280
+ # this is a hack needed to bootstrap with libgcc_s linked tarball on llvm-libunwind system.
+ # it should trigger for internal bootstrap or system-bootstrap with rust-bin.
+ # the whole idea is for stage0 to bootstrap with fake libgcc_s.
+ # final stage will receive -L${T}/lib but not -lgcc_s args, producing clean compiler.
+ local fakelib="${T}/fakelib"
+ mkdir -p "${fakelib}" || die
+ # we need both symlinks, one for cargo runtime, other for linker.
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so.1" || die
+ ln -s "${ESYSROOT}/usr/lib/libunwind.so" "${fakelib}/libgcc_s.so" || die
+ export LD_LIBRARY_PATH="${fakelib}"
+ export RUSTFLAGS+=" -L${fakelib}"
+ # this is a literally magic variable that gets through cargo cache, without it some
+ # crates ignore RUSTFLAGS.
+ # this variable can not contain leading space.
+ export MAGIC_EXTRA_RUSTFLAGS+="${MAGIC_EXTRA_RUSTFLAGS:+ }-L${fakelib}"
+}
+
+src_prepare() {
+ eapply_crate vendor/openssl-sys-0.9.92 "${FILESDIR}"/1.72.0-libressl-openssl-sys.patch
+ eapply_crate vendor/openssl-sys "${FILESDIR}"/1.77.1-libressl-openssl-sys.patch
+
+ # Clear vendor checksums for crates that we patched to bump libc.
+ # NOTE: refresh this on each bump.
+ #for i in addr2line-0.20.0 bstr cranelift-jit crossbeam-channel elasticlunr-rs handlebars icu_locid libffi \
+ # terminal_size tracing-tree; do
+ # clear_vendor_checksums "${i}"
+ #done
+
+ if ! use system-bootstrap; then
+ has_version sys-devel/gcc || esetup_unwind_hack
+ local rust_stage0_root="${WORKDIR}"/rust-stage0
+ local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi "${CBUILD}")"
+
+ "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
+ --without=rust-docs-json-preview,rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
+ fi
+
+ default
+}
+
+src_configure() {
+ filter-lto # https://bugs.gentoo.org/862109 https://bugs.gentoo.org/866231
+
+ local rust_target="" rust_targets="" arch_cflags
+
+ # Collect rust target names to compile standard libs for all ABIs.
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_targets+=",\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
+ done
+ if use wasm; then
+ rust_targets+=",\"wasm32-unknown-unknown\""
+ if use system-llvm; then
+ # un-hardcode rust-lld linker for this target
+ # https://bugs.gentoo.org/715348
+ sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/base/wasm.rs || die
+ fi
+ fi
+ rust_targets="${rust_targets#,}"
+
+ # cargo and rustdoc are mandatory and should always be included
+ local tools='"cargo","rustdoc"'
+ use clippy && tools+=',"clippy"'
+ use miri && tools+=',"miri"'
+ use profiler && tools+=',"rust-demangler"'
+ use rustfmt && tools+=',"rustfmt"'
+ use rust-analyzer && tools+=',"rust-analyzer","rust-analyzer-proc-macro-srv"'
+ use rust-src && tools+=',"src"'
+
+ local rust_stage0_root
+ if use system-bootstrap; then
+ local printsysroot
+ printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
+ rust_stage0_root="${printsysroot}"
+ else
+ rust_stage0_root="${WORKDIR}"/rust-stage0
+ fi
+ # in case of prefix it will be already prefixed, as --print sysroot returns full path
+ [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
+
+ rust_target="$(rust_abi)"
+ rust_build="$(rust_abi "${CBUILD}")"
+ rust_host="$(rust_abi "${CHOST}")"
+
+ local cm_btype="$(usex debug DEBUG RELEASE)"
+ cat <<- _EOF_ > "${S}"/config.toml
+ changelog-seen = 2
+ [llvm]
+ download-ci-llvm = false
+ optimize = $(toml_usex !debug)
+ release-debuginfo = $(toml_usex debug)
+ assertions = $(toml_usex debug)
+ ninja = true
+ targets = "${LLVM_TARGETS// /;}"
+ experimental-targets = ""
+ link-shared = $(toml_usex system-llvm)
+ $(if is_libcxx_linked; then
+ # https://bugs.gentoo.org/732632
+ echo "use-libcxx = true"
+ echo "static-libstdcpp = false"
+ fi)
+ $(case "${rust_target}" in
+ i586-*-linux-*)
+ # https://github.com/rust-lang/rust/issues/93059
+ echo 'cflags = "-fcf-protection=none"'
+ echo 'cxxflags = "-fcf-protection=none"'
+ echo 'ldflags = "-fcf-protection=none"'
+ ;;
+ *)
+ ;;
+ esac)
+ enable-warnings = false
+ [llvm.build-config]
+ CMAKE_VERBOSE_MAKEFILE = "ON"
+ $(if ! tc-is-cross-compiler; then
+ # When cross-compiling, LLVM is compiled twice, once for host and
+ # once for target. Unfortunately, this build configuration applies
+ # to both, which means any flags applicable to one target but not
+ # the other will break. Conditionally disable respecting user
+ # flags when cross-compiling.
+ echo "CMAKE_C_FLAGS_${cm_btype} = \"${CFLAGS}\""
+ echo "CMAKE_CXX_FLAGS_${cm_btype} = \"${CXXFLAGS}\""
+ echo "CMAKE_EXE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_MODULE_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_SHARED_LINKER_FLAGS_${cm_btype} = \"${LDFLAGS}\""
+ echo "CMAKE_STATIC_LINKER_FLAGS_${cm_btype} = \"${ARFLAGS}\""
+ fi)
+ [build]
+ build-stage = 2
+ test-stage = 2
+ build = "${rust_build}"
+ host = ["${rust_host}"]
+ target = [${rust_targets}]
+ cargo = "${rust_stage0_root}/bin/cargo"
+ rustc = "${rust_stage0_root}/bin/rustc"
+ rustfmt = "${rust_stage0_root}/bin/rustfmt"
+ docs = $(toml_usex doc)
+ compiler-docs = false
+ submodules = false
+ python = "${EPYTHON}"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [${tools}]
+ verbose = 2
+ sanitizers = false
+ profiler = $(toml_usex profiler)
+ cargo-native-static = false
+ [install]
+ prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+ sysconfdir = "etc"
+ docdir = "share/doc/rust"
+ bindir = "bin"
+ libdir = "lib"
+ mandir = "share/man"
+ [rust]
+ # https://github.com/rust-lang/rust/issues/54872
+ codegen-units-std = 1
+ optimize = true
+ debug = $(toml_usex debug)
+ debug-assertions = $(toml_usex debug)
+ debug-assertions-std = $(toml_usex debug)
+ debuginfo-level = $(usex debug 2 0)
+ debuginfo-level-rustc = $(usex debug 2 0)
+ debuginfo-level-std = $(usex debug 2 0)
+ debuginfo-level-tools = $(usex debug 2 0)
+ debuginfo-level-tests = 0
+ backtrace = true
+ incremental = false
+ $(if ! tc-is-cross-compiler; then
+ echo "default-linker = \"$(tc-getCC)\""
+ fi)
+ parallel-compiler = $(toml_usex parallel-compiler)
+ channel = "$(usex nightly nightly stable)"
+ description = "gentoo"
+ rpath = false
+ verbose-tests = true
+ optimize-tests = $(toml_usex !debug)
+ codegen-tests = true
+ dist-src = false
+ remap-debuginfo = true
+ lld = $(usex system-llvm false $(toml_usex wasm))
+ # only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
+ # https://github.com/rust-lang/rust/issues/74976
+ # https://github.com/rust-lang/rust/issues/76526
+ deny-warnings = $(usex wasm $(usex doc false true) true)
+ backtrace-on-ice = true
+ jemalloc = false
+ # See https://github.com/rust-lang/rust/issues/121124
+ lto = "$(usex lto thin off)"
+ [dist]
+ src-tarball = false
+ compression-formats = ["xz"]
+ compression-profile = "balanced"
+ _EOF_
+
+ for v in $(multilib_get_enabled_abi_pairs); do
+ rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+ arch_cflags="$(get_abi_CFLAGS ${v##*.})"
+
+ export CFLAGS_${rust_target//-/_}="${arch_cflags}"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${rust_target}]
+ ar = "$(tc-getAR)"
+ cc = "$(tc-getCC)"
+ cxx = "$(tc-getCXX)"
+ linker = "$(tc-getCC)"
+ ranlib = "$(tc-getRANLIB)"
+ llvm-libunwind = "$(usex llvm-libunwind $(usex system-llvm system in-tree) no)"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ # by default librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
+ # but we patch it and set to false here as well
+ if use elibc_musl; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ crt-static = false
+ _EOF_
+ fi
+ done
+ if use wasm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.wasm32-unknown-unknown]
+ linker = "$(usex system-llvm lld rust-lld)"
+ # wasm target does not have profiler_builtins https://bugs.gentoo.org/848483
+ profiler = false
+ _EOF_
+ fi
+
+ if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
+ # experimental cross support
+ # discussion: https://bugs.gentoo.org/679878
+ # TODO: c*flags, clang, system-llvm, cargo.eclass target support
+ # it would be much better if we could split out stdlib
+ # complilation to separate ebuild and abuse CATEGORY to
+ # just install to /usr/lib/rustlib/<target>
+
+ # extra targets defined as a bash array
+ # spec format: <LLVM target>:<rust-target>:<CTARGET>
+ # best place would be /etc/portage/env/dev-lang/rust
+ # Example:
+ # RUST_CROSS_TARGETS=(
+ # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
+ # )
+ # no extra hand holding is done, no target transformations, all
+ # values are passed as-is with just basic checks, so it's up to user to supply correct values
+ # valid rust targets can be obtained with
+ # rustc --print target-list
+ # matching cross toolchain has to be installed
+ # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
+ # only gcc toolchains installed with crossdev are checked for now.
+
+ # BUG: we can't pass host flags to cross compiler, so just filter for now
+ # BUG: this should be more fine-grained.
+ filter-flags '-mcpu=*' '-march=*' '-mtune=*'
+
+ local cross_target_spec
+ for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
+ # extracts first element form <LLVM target>:<rust-target>:<CTARGET>
+ local cross_llvm_target="${cross_target_spec%%:*}"
+ # extracts toolchain triples, <rust-target>:<CTARGET>
+ local cross_triples="${cross_target_spec#*:}"
+ # extracts first element after before : separator
+ local cross_rust_target="${cross_triples%%:*}"
+ # extracts last element after : separator
+ local cross_toolchain="${cross_triples##*:}"
+ use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
+ command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
+
+ cat <<- _EOF_ >> "${S}"/config.toml
+ [target.${cross_rust_target}]
+ ar = "${cross_toolchain}-ar"
+ cc = "${cross_toolchain}-gcc"
+ cxx = "${cross_toolchain}-g++"
+ linker = "${cross_toolchain}-gcc"
+ ranlib = "${cross_toolchain}-ranlib"
+ _EOF_
+ if use system-llvm; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
+ _EOF_
+ fi
+ if [[ "${cross_toolchain}" == *-musl* ]]; then
+ cat <<- _EOF_ >> "${S}"/config.toml
+ musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
+ _EOF_
+ fi
+
+ # append cross target to "normal" target list
+ # example 'target = ["powerpc64le-unknown-linux-gnu"]'
+ # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
+
+ rust_targets="${rust_targets},\"${cross_rust_target}\""
+ sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
+
+ ewarn
+ ewarn "Enabled ${cross_rust_target} rust target"
+ ewarn "Using ${cross_toolchain} cross toolchain"
+ ewarn
+ if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
+ ewarn "'sys-devel/binutils[multitarget]' is not installed"
+ ewarn "'strip' will be unable to strip cross libraries"
+ ewarn "cross targets will be installed with full debug information"
+ ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
+ ewarn
+ ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
+ ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
+ ewarn
+ fi
+ done
+ fi # I_KNOW_WHAT_I_AM_DOING_CROSS
+
+ einfo "Rust configured with the following flags:"
+ echo
+ echo RUSTFLAGS="\"${RUSTFLAGS}\""
+ echo RUSTFLAGS_BOOTSTRAP="\"${RUSTFLAGS_BOOTSTRAP}\""
+ echo RUSTFLAGS_NOT_BOOTSTRAP="\"${RUSTFLAGS_NOT_BOOTSTRAP}\""
+ echo MAGIC_EXTRA_RUSTFLAGS="\"${MAGIC_EXTRA_RUSTFLAGS}\""
+ env | grep "CARGO_TARGET_.*_RUSTFLAGS="
+ env | grep "CFLAGS_.*"
+ echo
+ einfo "config.toml contents:"
+ cat "${S}"/config.toml || die
+ echo
+}
+
+src_compile() {
+ RUST_BACKTRACE=1 "${EPYTHON}" ./x.py build -vvv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+}
+
+src_test() {
+ # https://rustc-dev-guide.rust-lang.org/tests/intro.html
+
+ # those are basic and codegen tests.
+ local tests=(
+ codegen
+ codegen-units
+ compile-fail
+ incremental
+ mir-opt
+ pretty
+ run-make
+ )
+
+ # fails if llvm is not built with ALL targets.
+ # and known to fail with system llvm sometimes.
+ use system-llvm || tests+=( assembly )
+
+ # fragile/expensive/less important tests
+ # or tests that require extra builds
+ # TODO: instead of skipping, just make some nonfatal.
+ if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
+ tests+=(
+ rustdoc
+ rustdoc-js
+ rustdoc-js-std
+ rustdoc-ui
+ run-make-fulldeps
+ ui
+ ui-fulldeps
+ )
+ fi
+
+ local i failed=()
+ einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
+ for i in "${tests[@]}"; do
+ local t="src/test/${i}"
+ einfo "rust_src_test: running ${t}"
+ if ! RUST_BACKTRACE=1 "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
+ -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
+ then
+ failed+=( "${t}" )
+ eerror "rust_src_test: ${t} failed"
+ fi
+ done
+
+ if [[ ${#failed[@]} -ne 0 ]]; then
+ eerror "rust_src_test: failure summary: ${failed[@]}"
+ die "aborting due to test failures"
+ fi
+}
+
+src_install() {
+ DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
+
+ # bug #689562, #689160
+ rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
+ rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+ newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
+
+ local symlinks=(
+ cargo
+ rustc
+ rustdoc
+ rust-gdb
+ rust-gdbgui
+ rust-lldb
+ )
+
+ use clippy && symlinks+=( clippy-driver cargo-clippy )
+ use miri && symlinks+=( miri cargo-miri )
+ use profiler && symlinks+=( rust-demangler )
+ use rustfmt && symlinks+=( rustfmt cargo-fmt )
+ use rust-analyzer && symlinks+=( rust-analyzer )
+
+ einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
+ local i
+ for i in "${symlinks[@]}"; do
+ # we need realpath on /usr/bin/* symlink return version-appended binary path.
+ # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
+ # need to fix eselect-rust to remove this hack.
+ local ver_i="${i}-${PV}"
+ if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+ einfo "Installing ${i} symlink"
+ ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+ else
+ ewarn "${i} symlink requested, but source file not found"
+ ewarn "please report this"
+ fi
+ dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+ done
+
+ # symlinks to switch components to active rust in eselect
+ dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
+ dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
+ dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
+ dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
+ dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+
+ newenvd - "50${P}" <<-_EOF_
+ LDPATH="${EPREFIX}/usr/lib/rust/lib"
+ MANPATH="${EPREFIX}/usr/lib/rust/man"
+ _EOF_
+
+ rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/bin"/*.old || die
+ rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+
+ # note: eselect-rust adds EROOT to all paths below
+ cat <<-_EOF_ > "${T}/provider-${P}"
+ /usr/bin/cargo
+ /usr/bin/rustdoc
+ /usr/bin/rust-gdb
+ /usr/bin/rust-gdbgui
+ /usr/bin/rust-lldb
+ /usr/lib/rustlib
+ /usr/lib/rust/lib
+ /usr/lib/rust/libexec
+ /usr/lib/rust/man
+ /usr/share/doc/rust
+ _EOF_
+
+ if use clippy; then
+ echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+ fi
+ if use miri; then
+ echo /usr/bin/miri >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
+ fi
+ if use profiler; then
+ echo /usr/bin/rust-demangler >> "${T}/provider-${P}"
+ fi
+ if use rustfmt; then
+ echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+ echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+ fi
+ if use rust-analyzer; then
+ echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+ fi
+
+ insinto /etc/env.d/rust
+ doins "${T}/provider-${P}"
+
+ if use dist; then
+ insinto "/usr/lib/${PN}/${PV}/dist"
+ doins -r "${S}/build/dist/."
+ fi
+}
+
+pkg_postinst() {
+ eselect rust update
+
+ if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+ elog "Rust installs a helper script for calling GDB and LLDB,"
+ elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+ fi
+
+ if has_version app-editors/emacs; then
+ elog "install app-emacs/rust-mode to get emacs support for rust."
+ fi
+
+ if has_version app-editors/gvim || has_version app-editors/vim; then
+ elog "install app-vim/rust-vim to get vim support for rust."
+ fi
+}
+
+pkg_postrm() {
+ eselect rust cleanup
+}
diff --git a/dev-libs/libressl/Manifest b/dev-libs/libressl/Manifest
new file mode 100644
index 0000000..ac00a00
--- /dev/null
+++ b/dev-libs/libressl/Manifest
@@ -0,0 +1,8 @@
+DIST libressl-3.8.3.tar.gz 4475058 BLAKE2B f29ca56e6a717c09efd2510c97ef38a4f037b38352c3b02badad9db841c636628cbebdd9a1f69e9138fee038764326559939b0221bf335aaf03b415f4fe92d66 SHA512 b8107fc809d5a095a49cebe3192a9b609441dfaa86c7bee472c34c177854d1d8ca983eb071828593f98e0c161f75176dabeefe6067ba417b2ecbaea5aa20645f
+DIST libressl-3.8.3.tar.gz.asc 833 BLAKE2B 752c161854cbeeb3ff3e6d921728f723d4ae1dd391cf41a266fee3bb1575664b2608481db26706fb239469888ae0885194cfa727c59c4c0339d3962155594aa9 SHA512 a2a9e5e0cf6387674c7af9ca07531eee294e3c1c90862082af6d7aafc1953b1bb8ff79172ac2c6e2b9113c462622a7e4feb2a28824721288cb30d9b6ab21fa8a
+DIST libressl-3.8.4.tar.gz 4467303 BLAKE2B 7ae939e012e1a8d98814e28caec86d5f36f7e01250f6201f6d46aa5a236a8fc0619b6bbe24d6ff70eb65eae767e9d43f26a714df317a1fd2b2dea0c0177ba50d SHA512 b8986a9e2c0a1f912770d2e55ed39b3ca0c072b8c98ecf2d22a3d36768c36b6f4588698dd248d8b585db1bd0a74f8995cc09a0ca3e707e680d87d4fa169f8941
+DIST libressl-3.8.4.tar.gz.asc 833 BLAKE2B 8c22b3a48db6d7155fae869ed44c14afaf34b5c6c421c3d5f8d6408192ae35576967f03213d31ad5e9e482bd088984faf0d69c7a03642f4cf0a177cf9d618789 SHA512 0f2b3147b1fc1dd58c3214905c43cdac94677fae51a0dc4775e3e17004d4e76b34a86126e2728a62d8845af8696860cb06b846f543a1a02a17912288d436b527
+DIST libressl-3.9.0.tar.gz 4360845 BLAKE2B 25ae0c4b8cad0fdfcc25d128cad1a8f9c45c9624c07a3d89cd134eeaa30c2359660ed0b31931fb6c0e70c1b6751a4c944189b9f836dea687b5b7875da54014d4 SHA512 66c595ff2f72310ff5bbea8f733c84067b7fea90612bcead3588f98da409d36fa0f9fbc3b59d1e91037714464b2288d3196e7ac80efe87268af961276e9aa3aa
+DIST libressl-3.9.0.tar.gz.asc 833 BLAKE2B 077409f154ed81a07a48cc9269dd5206c9f7fffa57f5a0f504dee7aa758de33f492846ac217a5e63d4177498df1bde5061279cae5643b7d08e43667e97485ac8 SHA512 be810ed9f463b039ad9b2f425e9769a707bcce40c7d38379da1cc099be5ea70091dfaf358b5ae5b17a0da7ab9b43eed5dd274a7b8af0ceb40f73ea4240289491
+DIST libressl-3.9.1.tar.gz 4352796 BLAKE2B f757741a75bbd5ac7da6378165d8f4f63d0a0116f7a67dc65b6fb9b60519ca46007bfd9c74a0ecc17e340575da3c1e30fe9e2750f255ea1ada07fc720420ba33 SHA512 15426f8830761c84bdffa22d5db5a25aba16214c49197c231ca3b7ef0ca5bca473994df78a1fc758c302b06a9bf095255adac90eebe9f1767528c6b65b2ce0a1
+DIST libressl-3.9.1.tar.gz.asc 833 BLAKE2B ea81a791bbf48d0472f4966bd2aa38121bfc3fd2328134efd225ade92a3d3c71c7038b30e44fa227ca0906dc9ce0ead2cfd7d9b85a4072e50846c31711eb6900 SHA512 51b6dedac840f9b5bbe6f349ac17c0633bdaccd13a4dc8ee0e6c37ac19f9e1e479ebbe248ff7cf72566c2224a4523d98a8e53780bcea816f9d2b99b99e7cb1d2
diff --git a/dev-libs/libressl/files/libressl-2.8.3-solaris10.patch b/dev-libs/libressl/files/libressl-2.8.3-solaris10.patch
new file mode 100644
index 0000000..20a0af0
--- /dev/null
+++ b/dev-libs/libressl/files/libressl-2.8.3-solaris10.patch
@@ -0,0 +1,69 @@
+From libressl Thu Jul 21 09:25:08 2016
+From: schily () schily ! net (Joerg Schilling)
+Date: Thu, 21 Jul 2016 09:25:08 +0000
+To: libressl
+Subject: Non-portable code in ./crypto/compat/getentropy_solaris.c
+Message-Id: <579094f4.Ca9M384ri4oiBOIa%schily () schily ! net>
+X-MARC-Message: https://marc.info/?l=libressl&m=146910737815443
+
+Hi,
+
+the code works only on Solaris based on OpenSolaris-ON from February 18 2010 or
+later.
+
+Many people however still use Solaris 10.
+
+BTW: there is an official portable ELF way based on the AUX vector to do the same
+but this was unfortunately not made a public libc interface, so it would need to
+be incorporated into your code:
+
+https://sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/src/lib/libc/port/gen/getauxv.c
+
+___getauxptr(AT_PHDR) returns the address of &phdr[0]
+___getauxval(AT_PHENT) returns sizeof(phdr[0])
+___getauxval(AT_PHNUM) returns # phdr entries
+
+
+Here is a patch to disable the non-portable code getting the code to compile at
+all:
+
+
+
+--- a/crypto/compat/getentropy_solaris.c
++++ b/crypto/compat/getentropy_solaris.c
+@@ -72,7 +72,9 @@
+ static int getentropy_urandom(void *buf, size_t len, const char *path,
+ int devfscheck);
+ static int getentropy_fallback(void *buf, size_t len);
++#ifdef ElfW
+ static int getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data);
++#endif
+
+ int
+ getentropy(void *buf, size_t len)
+@@ -244,6 +246,7 @@
+ #endif
+ };
+
++#ifdef ElfW
+ static int
+ getentropy_phdr(struct dl_phdr_info *info, size_t size, void *data)
+ {
+@@ -252,6 +255,7 @@
+ SHA512_Update(ctx, &info->dlpi_addr, sizeof (info->dlpi_addr));
+ return (0);
+ }
++#endif
+
+ static int
+ getentropy_fallback(void *buf, size_t len)
+@@ -290,7 +294,9 @@
+ cnt += (int)tv.tv_usec;
+ }
+
++#ifdef ElfW
+ dl_iterate_phdr(getentropy_phdr, &ctx);
++#endif
+
+ for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); ii++)
+ HX(clock_gettime(cl[ii], &ts) == -1, ts);
diff --git a/dev-libs/libressl/files/libressl-3.7.2-genrsa-rand.patch b/dev-libs/libressl/files/libressl-3.7.2-genrsa-rand.patch
new file mode 100644
index 0000000..66fe21a
--- /dev/null
+++ b/dev-libs/libressl/files/libressl-3.7.2-genrsa-rand.patch
@@ -0,0 +1,26 @@
+Gentoo's ssl-cert.eclass uses 'openssl genrsa -rand'.
+
+Upstream Issue: https://github.com/libressl/portable/issues/839
+
+--- a/apps/openssl/genrsa.c.orig
++++ b/apps/openssl/genrsa.c
+@@ -90,6 +90,7 @@ static struct {
+ unsigned long f4;
+ char *outfile;
+ char *passargout;
++ char *rand_dummy;
+ } cfg;
+
+ static int
+@@ -251,6 +252,11 @@ static const struct option genrsa_option
+ .desc = "Output file passphrase source",
+ .type = OPTION_ARG,
+ .opt.arg = &cfg.passargout,
++ },
++ {
++ .name = "rand",
++ .type = OPTION_ARG,
++ .opt.arg = &cfg.rand_dummy,
+ },
+ { NULL },
+ };
diff --git a/dev-libs/libressl/libressl-3.8.3.ebuild b/dev-libs/libressl/libressl-3.8.3.ebuild
new file mode 100644
index 0000000..13e5b8f
--- /dev/null
+++ b/dev-libs/libressl/libressl-3.8.3.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libressl.asc
+inherit autotools multilib-minimal verify-sig
+
+DESCRIPTION="Free version of the SSL/TLS protocol forked from OpenSSL"
+HOMEPAGE="https://www.libressl.org/"
+SRC_URI="
+ https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz
+ verify-sig? ( https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz.asc )
+"
+
+LICENSE="ISC openssl"
+# Reflects ABI of libcrypto.so and libssl.so. Since these can differ,
+# we'll try to use the max of either. However, if either change between
+# versions, we have to change the subslot to trigger rebuild of consumers.
+SLOT="0/55"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~s390 ~sparc x86 ~amd64-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="+asm netcat static-libs test"
+RESTRICT="!test? ( test )"
+
+PDEPEND="app-misc/ca-certificates"
+BDEPEND="verify-sig? ( sec-keys/openpgp-keys-libressl )"
+RDEPEND="netcat? (
+ !net-analyzer/netcat
+ !net-analyzer/nmap[symlink]
+ !net-analyzer/openbsd-netcat
+)"
+
+MULTILIB_WRAPPED_HEADERS=( /usr/include/openssl/opensslconf.h )
+
+# LibreSSL checks for libc features during configure
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __va_copy
+ b64_ntop
+)
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.8.3-solaris10.patch
+ # Gentoo's ssl-cert.eclass uses 'openssl genrsa -rand'
+ # which LibreSSL doesn't support.
+ # https://github.com/libressl/portable/issues/839
+ "${FILESDIR}"/${PN}-3.7.2-genrsa-rand.patch
+)
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+multilib_src_configure() {
+ local ECONF_SOURCE="${S}"
+ local args=(
+ $(use_enable asm)
+ $(use_enable static-libs static)
+ $(use_enable netcat nc)
+ $(use_enable test tests)
+ )
+ econf "${args[@]}"
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ find "${D}" -name '*.la' -exec rm -f {} + || die
+}
diff --git a/dev-libs/libressl/libressl-3.8.4.ebuild b/dev-libs/libressl/libressl-3.8.4.ebuild
new file mode 100644
index 0000000..13e5b8f
--- /dev/null
+++ b/dev-libs/libressl/libressl-3.8.4.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libressl.asc
+inherit autotools multilib-minimal verify-sig
+
+DESCRIPTION="Free version of the SSL/TLS protocol forked from OpenSSL"
+HOMEPAGE="https://www.libressl.org/"
+SRC_URI="
+ https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz
+ verify-sig? ( https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz.asc )
+"
+
+LICENSE="ISC openssl"
+# Reflects ABI of libcrypto.so and libssl.so. Since these can differ,
+# we'll try to use the max of either. However, if either change between
+# versions, we have to change the subslot to trigger rebuild of consumers.
+SLOT="0/55"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~s390 ~sparc x86 ~amd64-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="+asm netcat static-libs test"
+RESTRICT="!test? ( test )"
+
+PDEPEND="app-misc/ca-certificates"
+BDEPEND="verify-sig? ( sec-keys/openpgp-keys-libressl )"
+RDEPEND="netcat? (
+ !net-analyzer/netcat
+ !net-analyzer/nmap[symlink]
+ !net-analyzer/openbsd-netcat
+)"
+
+MULTILIB_WRAPPED_HEADERS=( /usr/include/openssl/opensslconf.h )
+
+# LibreSSL checks for libc features during configure
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __va_copy
+ b64_ntop
+)
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.8.3-solaris10.patch
+ # Gentoo's ssl-cert.eclass uses 'openssl genrsa -rand'
+ # which LibreSSL doesn't support.
+ # https://github.com/libressl/portable/issues/839
+ "${FILESDIR}"/${PN}-3.7.2-genrsa-rand.patch
+)
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+multilib_src_configure() {
+ local ECONF_SOURCE="${S}"
+ local args=(
+ $(use_enable asm)
+ $(use_enable static-libs static)
+ $(use_enable netcat nc)
+ $(use_enable test tests)
+ )
+ econf "${args[@]}"
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ find "${D}" -name '*.la' -exec rm -f {} + || die
+}
diff --git a/dev-libs/libressl/libressl-3.9.0.ebuild b/dev-libs/libressl/libressl-3.9.0.ebuild
new file mode 100644
index 0000000..08cd5bc
--- /dev/null
+++ b/dev-libs/libressl/libressl-3.9.0.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libressl.asc
+inherit autotools multilib-minimal verify-sig
+
+DESCRIPTION="Free version of the SSL/TLS protocol forked from OpenSSL"
+HOMEPAGE="https://www.libressl.org/"
+SRC_URI="
+ https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz
+ verify-sig? ( https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz.asc )
+"
+
+LICENSE="ISC openssl"
+# Reflects ABI of libcrypto.so and libssl.so. Since these can differ,
+# we'll try to use the max of either. However, if either change between
+# versions, we have to change the subslot to trigger rebuild of consumers.
+SLOT="0/56"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86 ~amd64-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="+asm netcat static-libs test"
+RESTRICT="!test? ( test )"
+
+PDEPEND="app-misc/ca-certificates"
+BDEPEND="verify-sig? ( sec-keys/openpgp-keys-libressl )"
+RDEPEND="netcat? (
+ !net-analyzer/netcat
+ !net-analyzer/nmap[symlink]
+ !net-analyzer/openbsd-netcat
+)"
+
+MULTILIB_WRAPPED_HEADERS=( /usr/include/openssl/opensslconf.h )
+
+# LibreSSL checks for libc features during configure
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __va_copy
+ b64_ntop
+)
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.8.3-solaris10.patch
+ # Gentoo's ssl-cert.eclass uses 'openssl genrsa -rand'
+ # which LibreSSL doesn't support.
+ # https://github.com/libressl/portable/issues/839
+ "${FILESDIR}"/${PN}-3.7.2-genrsa-rand.patch
+)
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+multilib_src_configure() {
+ local ECONF_SOURCE="${S}"
+ local args=(
+ $(use_enable asm)
+ $(use_enable static-libs static)
+ $(use_enable netcat nc)
+ $(use_enable test tests)
+ )
+ econf "${args[@]}"
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ find "${D}" -name '*.la' -exec rm -f {} + || die
+}
diff --git a/dev-libs/libressl/libressl-3.9.1.ebuild b/dev-libs/libressl/libressl-3.9.1.ebuild
new file mode 100644
index 0000000..6eff98f
--- /dev/null
+++ b/dev-libs/libressl/libressl-3.9.1.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libressl.asc
+inherit autotools multilib-minimal verify-sig
+
+DESCRIPTION="Free version of the SSL/TLS protocol forked from OpenSSL"
+HOMEPAGE="https://www.libressl.org/"
+SRC_URI="
+ https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz
+ verify-sig? ( https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${P}.tar.gz.asc )
+"
+
+LICENSE="ISC openssl"
+# Reflects ABI of libcrypto.so and libssl.so. Since these can differ,
+# we'll try to use the max of either. However, if either change between
+# versions, we have to change the subslot to trigger rebuild of consumers.
+SLOT="0/56"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~s390 ~sparc x86 ~amd64-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="+asm netcat static-libs test"
+RESTRICT="!test? ( test )"
+
+PDEPEND="app-misc/ca-certificates"
+BDEPEND="verify-sig? ( sec-keys/openpgp-keys-libressl )"
+RDEPEND="netcat? (
+ !net-analyzer/netcat
+ !net-analyzer/nmap[symlink]
+ !net-analyzer/openbsd-netcat
+)"
+
+MULTILIB_WRAPPED_HEADERS=( /usr/include/openssl/opensslconf.h )
+
+# LibreSSL checks for libc features during configure
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __va_copy
+ b64_ntop
+)
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.8.3-solaris10.patch
+ # Gentoo's ssl-cert.eclass uses 'openssl genrsa -rand'
+ # which LibreSSL doesn't support.
+ # https://github.com/libressl/portable/issues/839
+ "${FILESDIR}"/${PN}-3.7.2-genrsa-rand.patch
+)
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+multilib_src_configure() {
+ local ECONF_SOURCE="${S}"
+ local args=(
+ $(use_enable asm)
+ $(use_enable static-libs static)
+ $(use_enable netcat nc)
+ $(use_enable test tests)
+ )
+ econf "${args[@]}"
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ find "${D}" -name '*.la' -exec rm -f {} + || die
+}
diff --git a/dev-libs/libressl/metadata.xml b/dev-libs/libressl/metadata.xml
new file mode 100644
index 0000000..f497ca7
--- /dev/null
+++ b/dev-libs/libressl/metadata.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>libressl@gentoo.org</email>
+ </maintainer>
+ <longdescription lang="en">
+ LibreSSL is a version of the TLS/crypto stack forked from OpenSSL in
+ 2014, with goals of modernizing the codebase, improving security, and
+ applying best practice development processes.
+ </longdescription>
+ <use>
+ <flag name="asm">Enables assembly</flag>
+ <flag name="netcat">Enable installing TLS-enabled nc(1)</flag>
+ </use>
+ <upstream>
+ <changelog>http://www.libressl.org/releases.html</changelog>
+ <bugs-to>
+ https://github.com/libressl-portable/portable/issues
+ </bugs-to>
+ <remote-id type="github">libressl-portable/portable</remote-id>
+ </upstream>
+ <slots>
+ <slot name="0">
+ Pin source packages to SLOT 0, as binary compatibility slots are expected to come and go.
+ </slot>
+ <subslots>
+ Reflect ABI of libcrypto.so and libssl.so only, NOT libtls.so.
+ </subslots>
+ </slots>
+</pkgmetadata>
diff --git a/dev-libs/libretls/libretls-3.3.2.ebuild b/dev-libs/libretls/libretls-3.3.2.ebuild
new file mode 100644
index 0000000..d30927d
--- /dev/null
+++ b/dev-libs/libretls/libretls-3.3.2.ebuild
@@ -0,0 +1,17 @@
+# Copyright 2020-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit multilib-minimal
+
+DESCRIPTION="dummy package for dev-libs/libressl"
+HOMEPAGE="https://wiki.gentoo.org/wiki/Project:LibreSSL"
+LICENSE="metapackage"
+
+SLOT="0"
+KEYWORDS="amd64 arm ~arm64 ~hppa ~ia64 ~mips ppc ppc64 ~s390 sparc x86"
+
+RDEPEND="dev-libs/libressl:${SLOT}[${MULTILIB_USEDEP}]"
+
+S="${WORKDIR}"
diff --git a/dev-libs/libretls/metadata.xml b/dev-libs/libretls/metadata.xml
new file mode 100644
index 0000000..1385ffc
--- /dev/null
+++ b/dev-libs/libretls/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>libressl@gentoo.org</email>
+ </maintainer>
+ <slots>
+ <subslots>
+ Reflect ABI of dev-libs/libressl libtls.so.
+ </subslots>
+ </slots>
+</pkgmetadata>
+
diff --git a/dev-libs/libtpms/Manifest b/dev-libs/libtpms/Manifest
new file mode 100644
index 0000000..b253048
--- /dev/null
+++ b/dev-libs/libtpms/Manifest
@@ -0,0 +1 @@
+DIST libtpms-0.9.6.tar.gz 1264338 BLAKE2B 7b127ef370a48214814bb9ad0e8461ed0af21f32ab84f243945980c5e36ba5e374b4de7a83bf9c67c29264609063d48eae2dae83832daed70170bb1ed39eafea SHA512 35f26e4849eb98cd73461aff439c19f77bbbcde9b7661402e3d419354c4dcddd057349c4f7178573f1ceea2e95326498eb9afea3bd48064bbff534fc7f6939c3
diff --git a/dev-libs/libtpms/files/407.patch b/dev-libs/libtpms/files/407.patch
new file mode 100644
index 0000000..2c7aecf
--- /dev/null
+++ b/dev-libs/libtpms/files/407.patch
@@ -0,0 +1,27 @@
+From 96cf3dede02cbf58134115603209d863fc82a06c Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Wed, 13 Mar 2024 10:01:49 -0700
+Subject: [PATCH] tpm_crypto: add missing openssl includes
+
+This fixes the build with LibreSSL 3.9.0 where many implicit
+declarations for BN_, EVP_ and RSA_ functions occur which were
+implicitly included before.
+
+Signed-off-by: orbea <orbea@riseup.net>
+---
+ src/tpm12/tpm_crypto.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/tpm12/tpm_crypto.c b/src/tpm12/tpm_crypto.c
+index bcbaa7fc2..628e27cc2 100644
+--- a/src/tpm12/tpm_crypto.c
++++ b/src/tpm12/tpm_crypto.c
+@@ -48,6 +48,8 @@
+ #include <openssl/rand.h>
+ #include <openssl/sha.h>
+ #include <openssl/engine.h>
++#include <openssl/evp.h>
++#include <openssl/rsa.h>
+
+ #include "tpm_cryptoh.h"
+ #include "tpm_debug.h"
diff --git a/dev-libs/libtpms/files/libtpms-0.9.0-Remove-WError.patch b/dev-libs/libtpms/files/libtpms-0.9.0-Remove-WError.patch
new file mode 100644
index 0000000..14fe4c5
--- /dev/null
+++ b/dev-libs/libtpms/files/libtpms-0.9.0-Remove-WError.patch
@@ -0,0 +1,13 @@
+diff --git a/configure.ac b/configure.ac
+index 5f995a8..957c461 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -321,7 +321,7 @@ if test "x$enable_hardening" != "xno"; then
+ AC_SUBST([HARDENING_LDFLAGS])
+ fi
+
+-AM_CFLAGS="$CFLAGS $COVERAGE_CFLAGS -Wall -Werror -Wreturn-type -Wsign-compare -Wno-self-assign -Wmissing-prototypes"
++AM_CFLAGS="$CFLAGS $COVERAGE_CFLAGS -Wall -Wreturn-type -Wsign-compare -Wno-self-assign -Wmissing-prototypes"
+ AM_CFLAGS="$AM_CFLAGS"
+ AM_LDFLAGS="$LDFLAGS $COVERAGE_LDFLAGS"
+
diff --git a/dev-libs/libtpms/files/libtpms-0.9.5-slibtool.patch b/dev-libs/libtpms/files/libtpms-0.9.5-slibtool.patch
new file mode 100644
index 0000000..7e83434
--- /dev/null
+++ b/dev-libs/libtpms/files/libtpms-0.9.5-slibtool.patch
@@ -0,0 +1,52 @@
+Bug: https://bugs.gentoo.org/858671
+Upstream-PR: https://github.com/stefanberger/libtpms/pull/344
+Upstream-Commit: https://github.com/stefanberger/libtpms/commit/0c2bc32a21e2c7218faa8cd6d5cf31b13835e6d5
+
+From 343f1b21b36fe98daf31c355ebc12902ba7e162a Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Fri, 15 Jul 2022 17:02:43 -0700
+Subject: [PATCH] tests: Fix the build with slibtool
+
+When building the tests with `make check` and slibtool the tests will
+then all fail to load libtpms.so.0.
+
+ $ ./base64decode
+ /tmp/libtpms/tests/.libs/base64decode: error while loading shared libraries: libtpms.so.0: cannot open shared object file: No such file or directory
+
+This happens because they are linked with -ltpms rather than the
+libtpms.la file which has unexpected results with slibtool. GNU libtool
+does some magic to make this work while slibtool fails to link the
+dependency.
+
+The correct way to link internal dependencies is directly with the
+libtool archive (.la) files where the -lfoo linker flags should be only
+used with external dependencies. Additionally -no-undefined is added to
+the LDFLAGS to ensure there aren't undefined references in the future.
+
+Note:
+
+* This doesn't happen if libtpms is installed to the system and the tests
+ find the already installs libtpms rather than the newly built library.
+
+* GNU libtool silently ignores -no-undefined, but slibtool will respect
+ it.
+
+Signed-off-by: orbea <orbea@riseup.net>
+---
+ tests/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index eb23c59a4..d3d831938 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -10,7 +10,8 @@ TESTS_ENVIRONMENT = \
+ abs_top_srcdir=`cd '$(top_srcdir)'; pwd`
+
+ AM_CFLAGS = -I$(top_srcdir)/include $(SANITIZERS)
+-AM_LDFLAGS = -ltpms -L$(top_builddir)/src/.libs $(SANITIZERS)
++AM_LDFLAGS = -no-undefined $(SANITIZERS)
++LDADD = $(top_builddir)/src/libtpms.la
+
+ check_PROGRAMS = \
+ base64decode
diff --git a/dev-libs/libtpms/files/libtpms-0.9.6-libressl.patch b/dev-libs/libtpms/files/libtpms-0.9.6-libressl.patch
new file mode 100644
index 0000000..8b7041c
--- /dev/null
+++ b/dev-libs/libtpms/files/libtpms-0.9.6-libressl.patch
@@ -0,0 +1,29 @@
+https://github.com/stefanberger/libtpms/pull/407
+
+From 96cf3dede02cbf58134115603209d863fc82a06c Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Wed, 13 Mar 2024 10:01:49 -0700
+Subject: [PATCH] tpm_crypto: add missing openssl includes
+
+This fixes the build with LibreSSL 3.9.0 where many implicit
+declarations for BN_, EVP_ and RSA_ functions occur which were
+implicitly included before.
+
+Signed-off-by: orbea <orbea@riseup.net>
+---
+ src/tpm12/tpm_crypto.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/tpm12/tpm_crypto.c b/src/tpm12/tpm_crypto.c
+index bcbaa7fc2..628e27cc2 100644
+--- a/src/tpm12/tpm_crypto.c
++++ b/src/tpm12/tpm_crypto.c
+@@ -48,6 +48,8 @@
+ #include <openssl/rand.h>
+ #include <openssl/sha.h>
+ #include <openssl/engine.h>
++#include <openssl/evp.h>
++#include <openssl/rsa.h>
+
+ #include "tpm_cryptoh.h"
+ #include "tpm_debug.h"
diff --git a/dev-libs/libtpms/libtpms-0.9.6.ebuild b/dev-libs/libtpms/libtpms-0.9.6.ebuild
new file mode 100644
index 0000000..10f0bf4
--- /dev/null
+++ b/dev-libs/libtpms/libtpms-0.9.6.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Library providing software emultion of a TPM"
+HOMEPAGE="https://github.com/stefanberger/libtpms"
+SRC_URI="https://github.com/stefanberger/libtpms/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ~ppc ppc64 ~riscv x86"
+
+DEPEND="dev-libs/openssl:="
+RDEPEND="${DEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.9.0-Remove-WError.patch"
+ "${FILESDIR}/${PN}-0.9.5-slibtool.patch" # 858671
+ "${FILESDIR}/${PN}-0.9.6-libressl.patch"
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ econf \
+ --with-openssl
+}
+
+src_install() {
+ default
+ find "${ED}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ${REPLACING_VERSIONS} ]] && ver_test ${REPLACING_VERSIONS} -lt 0.8.0; then
+ elog "Versions of libtpms prior to 0.8.0 generate weaker than expected TPM 2.0 RSA"
+ elog "keys due to a flawed key creation algorithm. Because fixing this would render"
+ elog "existing sealed data inaccessible, to use the corrected algorithm, the old"
+ elog "TPM state file must be deleted and a new TPM state file created. Data still"
+ elog "sealed using the old state file will be permanently inaccessible. For the"
+ elog "details see https://github.com/stefanberger/libtpms/issues/183"
+ fi
+}
diff --git a/dev-libs/libtpms/metadata.xml b/dev-libs/libtpms/metadata.xml
new file mode 100644
index 0000000..655ec18
--- /dev/null
+++ b/dev-libs/libtpms/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>salah.coronya@gmail.com</email>
+ <name>Christopher Byrne</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">stefanberger/libtpms</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-libs/openssl/metadata.xml b/dev-libs/openssl/metadata.xml
new file mode 100644
index 0000000..4fef241
--- /dev/null
+++ b/dev-libs/openssl/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>libressl@gentoo.org</email>
+ </maintainer>
+ <slots>
+ <subslots>
+ Reflect ABI of dev-libs/libressl libcrypto.so and libssl.so only, NOT libtls.so.
+ </subslots>
+ </slots>
+ <use>
+ <flag name="asm">Enables assembly</flag>
+ <flag name="sslv3">Support for the SSLv3 protocol</flag>
+ </use>
+</pkgmetadata>
+
diff --git a/dev-libs/openssl/openssl-3.8.1.ebuild b/dev-libs/openssl/openssl-3.8.1.ebuild
new file mode 100644
index 0000000..1ce6412
--- /dev/null
+++ b/dev-libs/openssl/openssl-3.8.1.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multilib-minimal
+
+DESCRIPTION="dummy package for dev-libs/libressl"
+HOMEPAGE="https://wiki.gentoo.org/wiki/Project:LibreSSL"
+LICENSE="metapackage"
+
+SLOT="0/55" # .so version of libssl/libcrypto
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~s390 ~sparc x86 ~amd64-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="+asm sslv3 static-libs test"
+REQUIRED_USE="!sslv3"
+RESTRICT="!test? ( test )"
+
+DEPEND="dev-libs/libressl:${SLOT}[asm=,static-libs=,test=,${MULTILIB_USEDEP}]"
+
+S="${WORKDIR}"
diff --git a/dev-libs/openssl/openssl-3.9.0.ebuild b/dev-libs/openssl/openssl-3.9.0.ebuild
new file mode 100644
index 0000000..8e732e5
--- /dev/null
+++ b/dev-libs/openssl/openssl-3.9.0.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multilib-minimal
+
+DESCRIPTION="dummy package for dev-libs/libressl"
+HOMEPAGE="https://wiki.gentoo.org/wiki/Project:LibreSSL"
+LICENSE="metapackage"
+
+SLOT="0/56" # .so version of libssl/libcrypto
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~s390 ~sparc x86 ~amd64-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="+asm sslv3 static-libs test"
+REQUIRED_USE="!sslv3"
+RESTRICT="!test? ( test )"
+
+DEPEND="dev-libs/libressl:${SLOT}[asm=,static-libs=,test=,${MULTILIB_USEDEP}]"
+
+S="${WORKDIR}"
diff --git a/dev-libs/softhsm/Manifest b/dev-libs/softhsm/Manifest
new file mode 100644
index 0000000..ecf0dc9
--- /dev/null
+++ b/dev-libs/softhsm/Manifest
@@ -0,0 +1 @@
+DIST softhsm-2.6.1.tar.gz 1066766 BLAKE2B 0295c5f40235c8abd8879a8c6f7fbe8e8d686ee03355006e9c90c0f2f7135eaf6794a3d39febda1b1ed6e5d48dcacb1e14dae85fb0efb884d0d719bfc6624b92 SHA512 e77137096ff2ac2f5396971efbaa2007188855a8f723cb511182c6c5e5a353b3f98297442758e77a18c3a378c0ca3fce8abe090977f0f4f8d526de204fd523fb
diff --git a/dev-libs/softhsm/metadata.xml b/dev-libs/softhsm/metadata.xml
new file mode 100644
index 0000000..73e6a5d
--- /dev/null
+++ b/dev-libs/softhsm/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <use>
+ <flag name="gost">Enable gost algorithm</flag>
+ <flag name="migration-tool">Build db migration tool</flag>
+ </use>
+</pkgmetadata>
diff --git a/dev-libs/softhsm/softhsm-2.6.1-r2.ebuild b/dev-libs/softhsm/softhsm-2.6.1-r2.ebuild
new file mode 100644
index 0000000..82506bb
--- /dev/null
+++ b/dev-libs/softhsm/softhsm-2.6.1-r2.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DESCRIPTION="A software PKCS#11 implementation"
+HOMEPAGE="https://www.opendnssec.org/"
+SRC_URI="https://www.opendnssec.org/files/source/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="2"
+KEYWORDS="~alpha amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="gost migration-tool test"
+
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ migration-tool? ( dev-db/sqlite:3= )
+ dev-libs/botan
+ !~dev-libs/softhsm-2.0.0:0
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ sys-devel/gcc:=[cxx]
+ virtual/pkgconfig
+ test? ( dev-util/cppunit )
+"
+
+DOCS=( NEWS README.md )
+
+src_configure() {
+ # Uses the botan crypto backend for libressl
+ econf \
+ --disable-static \
+ --with-crypto-backend=botan \
+ --disable-p11-kit \
+ --localstatedir="${EPREFIX}/var" \
+ --enable-ecc \
+ $(use_enable gost) \
+ $(use_with migration-tool migrate)
+}
+
+src_install() {
+ default
+
+ find "${ED}" -name '*.la' -delete || die
+
+ keepdir /var/lib/softhsm/tokens
+}
diff --git a/dev-libs/xmlsec/Manifest b/dev-libs/xmlsec/Manifest
new file mode 100644
index 0000000..70f3200
--- /dev/null
+++ b/dev-libs/xmlsec/Manifest
@@ -0,0 +1 @@
+DIST xmlsec1-1.2.37.tar.gz 2009175 BLAKE2B 19f43ba6bf6eb49428b9c5563baecbab21476f326cceee13785ae16769afa258f100732831c0f3f7d160543bd075cdcfdc5cbf11b7406637ee6c2f0e27c07f30 SHA512 99220cb28a346ffac0023f9f177d6a7be3ddcea04bea434b7dc926c1f0aaa5564d75f74f92896ac100179c04d77e001f688ddf46fed4e0a0b4f20b7b87c24900
diff --git a/dev-libs/xmlsec/files/xmlsec-1.2.37-libressl.patch b/dev-libs/xmlsec/files/xmlsec-1.2.37-libressl.patch
new file mode 100644
index 0000000..acdb535
--- /dev/null
+++ b/dev-libs/xmlsec/files/xmlsec-1.2.37-libressl.patch
@@ -0,0 +1,40 @@
+https://github.com/lsh123/xmlsec/pull/456
+https://github.com/lsh123/xmlsec/commit/c5469cfc8443c57a25a8783f0bd669f71e29bb04
+https://github.com/lsh123/xmlsec/pull/654
+https://github.com/lsh123/xmlsec/commit/dfdf981f3522e4059170b504fb6fd40b37c9d70f
+
+From c5469cfc8443c57a25a8783f0bd669f71e29bb04 Mon Sep 17 00:00:00 2001
+From: lsh123 <aleksey@aleksey.com>
+Date: Mon, 12 Dec 2022 10:34:56 -0500
+Subject: [PATCH] fix libressl (#456)
+
+---
+ src/openssl/openssl_compat.h | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+From d113d1e6355c4841fd03c6aa797d33bde1d064f3 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Mon, 29 May 2023 07:46:58 -0700
+Subject: [PATCH] openssl_compat.h: Update LibreSSL UI_null() compat
+
+LibreSSL added UI_null() in 3.7.1.
+---
+ src/openssl/openssl_compat.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/openssl/openssl_compat.h
++++ b/src/openssl/openssl_compat.h
+@@ -123,6 +123,13 @@ static inline int xmlSecOpenSSLCompatRand(unsigned char *buf, xmlSecSize size) {
+ * LibreSSL 2.7 compatibility (implements most of OpenSSL 1.1 API)
+ *
+ *****************************************************************************/
++#if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER < 0x3070200fL)
++
++/* Needed for Engine initialization */
++#define UI_null() NULL
++
++#endif /* defined(LIBRESSL_VERSION_NUMBER) */
++
+ #if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER < 0x30500000L) && defined(XMLSEC_OPENSSL_API_110)
+ /* EVP_CIPHER_CTX stuff */
+ #define EVP_CIPHER_CTX_encrypting(x) ((x)->encrypt)
diff --git a/dev-libs/xmlsec/files/xmlsec-1.3.0-optimisation.patch b/dev-libs/xmlsec/files/xmlsec-1.3.0-optimisation.patch
new file mode 100644
index 0000000..2cd0401
--- /dev/null
+++ b/dev-libs/xmlsec/files/xmlsec-1.3.0-optimisation.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -2482,7 +2482,7 @@ AC_ARG_ENABLE([pedantic], [AS_HELP_STRING([--enable-pedantic],[enable pedantic c
+ if test "z$enable_pedantic" = "zno" ; then
+ AC_MSG_RESULT([disabled])
+ else
+- CFLAGS="$CFLAGS -O -std=c99 -pedantic -pedantic-errors -W -Wall -Wextra"
++ CFLAGS="$CFLAGS -std=c99 -pedantic -W -Wall -Wextra"
+ CFLAGS="$CFLAGS -fno-inline -Wnull-dereference -Wdouble-promotion"
+ CFLAGS="$CFLAGS -Wformat=2 -Wformat-security -Wformat-nonliteral"
+ CFLAGS="$CFLAGS -Wconversion -Wunused -Wshadow -Wpointer-arith -Wcast-align"
diff --git a/dev-libs/xmlsec/metadata.xml b/dev-libs/xmlsec/metadata.xml
new file mode 100644
index 0000000..0f981c3
--- /dev/null
+++ b/dev-libs/xmlsec/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <use>
+ <flag name="gcrypt">Install xmlsec-gcrypt library</flag>
+ <flag name="gnutls">Install xmlsec-gnutls library</flag>
+ <flag name="http">Allow fetching over HTTP via libxml2.</flag>
+ <flag name="nss">Install xmlsec-nss library</flag>
+ <flag name="openssl">Install xmlsec-openssl library</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">lsh123/xmlsec</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-libs/xmlsec/xmlsec-1.2.37.ebuild b/dev-libs/xmlsec/xmlsec-1.2.37.ebuild
new file mode 100644
index 0000000..42695ac
--- /dev/null
+++ b/dev-libs/xmlsec/xmlsec-1.2.37.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Command line tool for signing, verifying, encrypting and decrypting XML"
+HOMEPAGE="https://www.aleksey.com/xmlsec"
+SRC_URI="https://www.aleksey.com/xmlsec/download/${PN}1-${PV}.tar.gz"
+S="${WORKDIR}/${PN}1-${PV}"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~sparc x86"
+IUSE="doc gcrypt gnutls nss +openssl static-libs test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="|| ( gcrypt gnutls nss openssl )
+ gnutls? ( gcrypt )"
+
+RDEPEND=">=dev-libs/libxml2-2.7.4[ftp(+)]
+ >=dev-libs/libxslt-1.0.20
+ dev-libs/libltdl
+ gcrypt? ( >=dev-libs/libgcrypt-1.4.0:= )
+ gnutls? ( >=net-libs/gnutls-2.8.0:= )
+ nss? (
+ >=dev-libs/nspr-4.4.1
+ >=dev-libs/nss-3.9
+ )
+ openssl? (
+ dev-libs/openssl:=
+ )"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig
+ test? (
+ nss? (
+ >=dev-libs/nss-3.9[utils]
+ )
+ )"
+
+PATCHES=( "${FILESDIR}"/${PN}-1.2.37-libressl.patch )
+
+src_configure() {
+ # Bash because of bug #721128
+ CONFIG_SHELL="${BROOT}"/bin/bash econf \
+ $(use_enable doc docs) \
+ $(use_enable static-libs static) \
+ $(use_with gcrypt) \
+ $(use_with gnutls) \
+ $(use_with nss nspr) \
+ $(use_with nss) \
+ $(use_with openssl) \
+ --enable-mans \
+ --enable-pkgconfig
+}
+
+src_test() {
+ # See https://github.com/lsh123/xmlsec/issues/280 for TZ=UTC
+ TZ=UTC SHELL="${BROOT}"/bin/bash emake TMPFOLDER="${T}" check
+}
+
+src_install() {
+ default
+
+ find "${ED}" -name '*.la' -delete || die
+}
diff --git a/dev-perl/Net-SSLeay/Manifest b/dev-perl/Net-SSLeay/Manifest
new file mode 100644
index 0000000..5b509c1
--- /dev/null
+++ b/dev-perl/Net-SSLeay/Manifest
@@ -0,0 +1,2 @@
+DIST Net-SSLeay-1.92.tar.gz 555930 BLAKE2B 04d97860817b013a9680e0ef29b0004ddb98da2db859761a45612c4d25b6edd16bf92645293d1108d83352bce18665721c6df05455426b32a95a42b464119a3d SHA512 e9d9161ebeb7be90f4c7a0ea98f1034892ce6d33aa72872683177b19daa1f4c5819f85ea9a052a076ec8d7c21705f6c344aef64680bc881bf3218d38e8b7b173
+DIST Net-SSLeay-1.94.tar.gz 663948 BLAKE2B 97cef98bf3794ec992817e5ad91f8403ded95e29184512d9f23b5cbbd765912d2e7f8e835366b40aae9682dd13947cd79e2d9dcca2d10cd78e3c7869b1e197db SHA512 f1461667269f3da56ff7e1724b5511b95c34582250f8336e9f93d30f3b30d4a5360eb27622b9730bba11df75e00d717c7f0cea2120d20206723db136a8509375
diff --git a/dev-perl/Net-SSLeay/Net-SSLeay-1.920.0-r1.ebuild b/dev-perl/Net-SSLeay/Net-SSLeay-1.920.0-r1.ebuild
new file mode 100644
index 0000000..8d1b393
--- /dev/null
+++ b/dev-perl/Net-SSLeay/Net-SSLeay-1.920.0-r1.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DIST_AUTHOR=CHRISN
+DIST_VERSION=1.92
+DIST_EXAMPLES=("examples/*")
+inherit perl-module
+
+DESCRIPTION="Perl extension for using OpenSSL"
+
+LICENSE="Artistic-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="minimal examples"
+
+RDEPEND="
+ dev-libs/openssl:=
+ virtual/perl-MIME-Base64
+"
+DEPEND="${RDEPEND}"
+BDEPEND="${RDEPEND}
+ virtual/perl-ExtUtils-MakeMaker
+ virtual/perl-File-Spec
+ test? (
+ !minimal? (
+ dev-perl/Test-Exception
+ dev-perl/Test-Warn
+ dev-perl/Test-NoWarnings
+ )
+ virtual/perl-Test-Simple
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.88-fix-network-tests.patch"
+ "${FILESDIR}/${PN}-1.92-libressl.patch" #903001
+ "${FILESDIR}/${PN}-1.92-libressl-3.9.0.patch"
+)
+
+PERL_RM_FILES=(
+ # Hateful author tests
+ 't/local/01_pod.t'
+ 't/local/02_pod_coverage.t'
+ 't/local/kwalitee.t'
+)
+
+src_configure() {
+ if use test && has network ${DIST_TEST_OVERRIDE:-${DIST_TEST:-do parallel}}; then
+ export NETWORK_TESTS=yes
+ else
+ use test && einfo "Network tests will be skipped without DIST_TEST_OVERRIDE=~network"
+ export NETWORK_TESTS=no
+ fi
+ export LIBDIR=$(get_libdir)
+ export OPENSSL_PREFIX="${ESYSROOT}/usr"
+ perl-module_src_configure
+}
+
+src_compile() {
+ mymake=(
+ OPTIMIZE="${CFLAGS}"
+ OPENSSL_PREFIX="${ESYSROOT}"/usr
+ )
+ perl-module_src_compile
+}
diff --git a/dev-perl/Net-SSLeay/Net-SSLeay-1.940.0.ebuild b/dev-perl/Net-SSLeay/Net-SSLeay-1.940.0.ebuild
new file mode 100644
index 0000000..a2ad5d1
--- /dev/null
+++ b/dev-perl/Net-SSLeay/Net-SSLeay-1.940.0.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DIST_AUTHOR=CHRISN
+DIST_VERSION=1.94
+DIST_EXAMPLES=("examples/*")
+inherit perl-module
+
+DESCRIPTION="Perl extension for using OpenSSL"
+
+LICENSE="Artistic-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="minimal examples"
+
+RDEPEND="
+ dev-libs/openssl:=
+ virtual/perl-MIME-Base64
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ ${RDEPEND}
+ virtual/perl-ExtUtils-MakeMaker
+ virtual/perl-File-Spec
+ test? (
+ !minimal? (
+ dev-perl/Test-Exception
+ dev-perl/Test-Warn
+ dev-perl/Test-NoWarnings
+ )
+ virtual/perl-Test-Simple
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.88-fix-network-tests.patch"
+ "${FILESDIR}/${PN}-1.94-libressl.patch" #903001
+)
+
+PERL_RM_FILES=(
+ # Author tests
+ 't/local/01_pod.t'
+ 't/local/02_pod_coverage.t'
+ 't/local/kwalitee.t'
+)
+
+src_configure() {
+ if use test && has network ${DIST_TEST_OVERRIDE:-${DIST_TEST:-do parallel}}; then
+ export NETWORK_TESTS=yes
+ else
+ use test && einfo "Network tests will be skipped without DIST_TEST_OVERRIDE=~network"
+ export NETWORK_TESTS=no
+ fi
+ export LIBDIR=$(get_libdir)
+ export OPENSSL_PREFIX="${ESYSROOT}/usr"
+ perl-module_src_configure
+}
+
+src_compile() {
+ mymake=(
+ OPTIMIZE="${CFLAGS}"
+ OPENSSL_PREFIX="${ESYSROOT}"/usr
+ )
+ perl-module_src_compile
+}
diff --git a/dev-perl/Net-SSLeay/files/Net-SSLeay-1.88-fix-network-tests.patch b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.88-fix-network-tests.patch
new file mode 100644
index 0000000..a98c4c8
--- /dev/null
+++ b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.88-fix-network-tests.patch
@@ -0,0 +1,17 @@
+diff --git a/Makefile.PL b/Makefile.PL
+index 31d9c74..91ac2b4 100644
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -12,11 +12,7 @@ use Symbol qw(gensym);
+ # the Net-SSLeay loadable object on Windows
+ my $win_link_statically = 0;
+
+-my $tests = prompt(
+- "Do you want to run external tests?\n".
+- "These tests *will* *fail* if you do not have network connectivity.",
+- 'n',
+-) =~ /^y/i ? 't/*/*.t t/*/*/*.t' : 't/local/*.t t/handle/local/*.t';
++my $tests = ( 'yes' eq ( $ENV{NETWORK_TESTS} || '' ) ) ? 't/*/*.t t/*/*/*.t' : 't/local/*.t t/handle/local/*.t';
+
+ my %eumm_args = (
+ NAME => 'Net::SSLeay',
diff --git a/dev-perl/Net-SSLeay/files/Net-SSLeay-1.90-libressl.patch b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.90-libressl.patch
new file mode 100644
index 0000000..5a253bc
--- /dev/null
+++ b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.90-libressl.patch
@@ -0,0 +1,150 @@
+https://github.com/radiator-software/p5-net-ssleay/pull/285
+https://github.com/radiator-software/p5-net-ssleay/commit/b5143eaec1a59ee948e8d2bace246bbb2440f397
+https://github.com/radiator-software/p5-net-ssleay/pull/360
+https://github.com/radiator-software/p5-net-ssleay/commit/4a886e06c1cac80e7fb3f8d52146a27ce557ba8c
+https://github.com/radiator-software/p5-net-ssleay/pull/362
+https://github.com/radiator-software/p5-net-ssleay/commit/88c3bbc45399c8ef2c8879aada8bfa91d8bc6c10
+https://github.com/radiator-software/p5-net-ssleay/pull/363
+https://github.com/radiator-software/p5-net-ssleay/commit/3dd2f101b8e15a59f66e22525b8d001d5ad6ce7d
+
+From b5143eaec1a59ee948e8d2bace246bbb2440f397 Mon Sep 17 00:00:00 2001
+From: Alexander Bluhm <alexander.bluhm@gmx.net>
+Date: Wed, 1 Sep 2021 13:06:04 +0200
+Subject: [PATCH] Use SSL_SESSION_get_master_key() for LibreSSL. (#285)
+
+Since version 2.7 LibreSSL implements SSL_SESSION_get_master_key().
+Use this instead of accessing internal struct fields.
+---
+ SSLeay.xs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+From 4a886e06c1cac80e7fb3f8d52146a27ce557ba8c Mon Sep 17 00:00:00 2001
+From: Alexander Bluhm <alexander.bluhm@gmx.net>
+Date: Wed, 19 Jan 2022 14:56:22 +0100
+Subject: [PATCH] Use X509_get0_tbs_sigalg() for LibreSSL. (#360)
+
+* Use X509_get0_tbs_sigalg() for LibreSSL.
+
+LibreSSL 3.5.0 has removed access to internal data structures. Use
+X509_get0_tbs_sigalg() like in OpenSSL 1.1.
+
+* Start Changes for the next release.
+
+Co-authored-by: Heikki Vatiainen <hvn@radiatorsoftware.com>
+---
+ Changes | 5 +++++
+ SSLeay.xs | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+From 88c3bbc45399c8ef2c8879aada8bfa91d8bc6c10 Mon Sep 17 00:00:00 2001
+From: Alexander Bluhm <alexander.bluhm@gmx.net>
+Date: Wed, 19 Jan 2022 20:38:57 +0100
+Subject: [PATCH] Use OCSP_SINGLERESP_get0_id() for LibreSSL. (#362)
+
+LibreSSL 3.5.0 has removed access to internal ocsp data structures.
+Use OCSP_SINGLERESP_get0_id() like in OpenSSL 1.1.
+---
+ SSLeay.xs | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+From 3dd2f101b8e15a59f66e22525b8d001d5ad6ce7d Mon Sep 17 00:00:00 2001
+From: Alexander Bluhm <alexander.bluhm@gmx.net>
+Date: Thu, 20 Jan 2022 19:15:27 +0100
+Subject: [PATCH] Implement RSA_get_key_parameters() for newer LibreSSL. (#363)
+
+LibreSSL 3.5.0 has removed access to internal rsa data structures.
+Use RSA_get0... functions to provide RSA_get_key_parameters().
+---
+ SSLeay.xs | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/SSLeay.xs b/SSLeay.xs
+index 02b81e7..bffd72d 100644
+--- a/SSLeay.xs
++++ b/SSLeay.xs
+@@ -1759,7 +1759,7 @@ X509 * find_issuer(X509 *cert,X509_STORE *store, STACK_OF(X509) *chain) {
+ return issuer;
+ }
+
+-SV* bn2sv(BIGNUM* p_bn)
++SV* bn2sv(const BIGNUM* p_bn)
+ {
+ return p_bn != NULL
+ ? sv_2mortal(newSViv((IV) BN_dup(p_bn)))
+@@ -6006,8 +6006,28 @@ RSA_generate_key(bits,e,perl_cb=&PL_sv_undef,perl_data=&PL_sv_undef)
+ void
+ RSA_get_key_parameters(rsa)
+ RSA * rsa
++PREINIT:
++#if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
++ const BIGNUM *n, *e, *d;
++ const BIGNUM *p, *q;
++ const BIGNUM *dmp1, *dmq1, *iqmp;
++#endif
+ PPCODE:
+ {
++#if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
++ RSA_get0_key(rsa, &n, &e, &d);
++ RSA_get0_factors(rsa, &p, &q);
++ RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp);
++ /* Caution: returned list consists of SV pointers to BIGNUMs, which would need to be blessed as Crypt::OpenSSL::Bignum for further use */
++ XPUSHs(bn2sv(n));
++ XPUSHs(bn2sv(e));
++ XPUSHs(bn2sv(d));
++ XPUSHs(bn2sv(p));
++ XPUSHs(bn2sv(q));
++ XPUSHs(bn2sv(dmp1));
++ XPUSHs(bn2sv(dmq1));
++ XPUSHs(bn2sv(iqmp));
++#else
+ /* Caution: returned list consists of SV pointers to BIGNUMs, which would need to be blessed as Crypt::OpenSSL::Bignum for further use */
+ XPUSHs(bn2sv(rsa->n));
+ XPUSHs(bn2sv(rsa->e));
+@@ -6017,9 +6037,10 @@ PPCODE:
+ XPUSHs(bn2sv(rsa->dmp1));
+ XPUSHs(bn2sv(rsa->dmq1));
+ XPUSHs(bn2sv(rsa->iqmp));
++#endif
+ }
+
+-#endif
++#endif /* OpenSSL < 1.1 or LibreSSL */
+
+ void
+ RSA_free(r)
+@@ -6172,7 +6193,7 @@ SSL_total_renegotiations(ssl)
+ OUTPUT:
+ RETVAL
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x2070000fL)
+ void
+ SSL_SESSION_get_master_key(s)
+ SSL_SESSION * s
+@@ -6920,7 +6941,7 @@ ASN1_OBJECT *
+ P_X509_get_signature_alg(x)
+ X509 * x
+ CODE:
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+ RETVAL = (X509_get0_tbs_sigalg(x)->algorithm);
+ #else
+ RETVAL = (x->cert_info->signature->algorithm);
+@@ -7412,7 +7433,7 @@ OCSP_response_results(rsp,...)
+ if (!idsv) {
+ /* getall: create new SV with OCSP_CERTID */
+ unsigned char *pi,*pc;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+ int len = i2d_OCSP_CERTID(OCSP_SINGLERESP_get0_id(sir),NULL);
+ #else
+ int len = i2d_OCSP_CERTID(sir->certId,NULL);
+@@ -7421,7 +7442,7 @@ OCSP_response_results(rsp,...)
+ Newx(pc,len,unsigned char);
+ if (!pc) croak("out of memory");
+ pi = pc;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+ i2d_OCSP_CERTID(OCSP_SINGLERESP_get0_id(sir),&pi);
+ #else
+ i2d_OCSP_CERTID(sir->certId,&pi);
diff --git a/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.8.0.patch b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.8.0.patch
new file mode 100644
index 0000000..d02333e
--- /dev/null
+++ b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.8.0.patch
@@ -0,0 +1,34 @@
+https://github.com/radiator-software/p5-net-ssleay/pull/434
+
+From 79a06ce5f9a77d8c65d51035f8edb6043864f342 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Mon, 29 May 2023 10:16:33 -0700
+Subject: [PATCH] SSLeay.xs: Disable Policy Tree API for LibreSSL 3.8 and later
+
+This is taken from the OpenBSD ports tree.
+
+https://github.com/openbsd/ports/commit/f6567f938c9bd51bfd99f8426eba6a1590cc6384
+---
+ SSLeay.xs | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/SSLeay.xs b/SSLeay.xs
+index 102e89f..ae870c0 100644
+--- a/SSLeay.xs
++++ b/SSLeay.xs
+@@ -7157,6 +7157,7 @@ X509_VERIFY_PARAM_get0_peername(param)
+
+ #endif /* OpenSSL 1.0.2-beta2, LibreSSL 2.7.0 */
+
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER < 0x3080000fL) /* LibreSSL < 3.8.0 */
+ void
+ X509_policy_tree_free(tree)
+ X509_POLICY_TREE *tree
+@@ -7199,6 +7200,7 @@ const X509_POLICY_NODE *
+ X509_policy_node_get0_parent(node)
+ const X509_POLICY_NODE *node
+
++#endif /* !(LibreSSL >= 3.7.0) */
+ #endif
+
+ ASN1_OBJECT *
diff --git a/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.9.0.patch b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.9.0.patch
new file mode 100644
index 0000000..4699989
--- /dev/null
+++ b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl-3.9.0.patch
@@ -0,0 +1,44 @@
+#1 EVP_add_digest() was removed.
+#2, #3 X509_ALGOR has an accessor, don't reach into it, so it can be made opaque.
+
+Index: SSLeay.xs
+--- a/SSLeay.xs.orig
++++ b/SSLeay.xs
+@@ -6451,10 +6451,14 @@ int EVP_add_digest(EVP_MD *digest)
+
+ #else
+
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER < 0x3090000fL)
++
+ int EVP_add_digest(const EVP_MD *digest)
+
+ #endif
+
++#endif
++
+ #ifndef OPENSSL_NO_SHA
+
+ const EVP_MD *EVP_sha1()
+@@ -6944,7 +6948,9 @@ P_X509_get_signature_alg(x)
+ X509 * x
+ CODE:
+ #if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+- RETVAL = (X509_get0_tbs_sigalg(x)->algorithm);
++ const ASN1_OBJECT * obj;
++ X509_ALGOR_get0(&obj, NULL, NULL, X509_get0_tbs_sigalg(x));
++ RETVAL = (ASN1_OBJECT *)obj;
+ #else
+ RETVAL = (x->cert_info->signature->algorithm);
+ #endif
+@@ -6959,8 +6965,10 @@ P_X509_get_pubkey_alg(x)
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ {
+ X509_ALGOR * algor;
++ const ASN1_OBJECT * obj;
+ X509_PUBKEY_get0_param(0, 0, 0, &algor, X509_get_X509_PUBKEY(x));
+- RETVAL = (algor->algorithm);
++ X509_ALGOR_get0(&obj, NULL, NULL, algor);
++ RETVAL = ((ASN1_OBJECT *)obj);
+ }
+ #else
+ RETVAL = (x->cert_info->key->algor->algorithm);
diff --git a/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl.patch b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl.patch
new file mode 100644
index 0000000..f3e1b4a
--- /dev/null
+++ b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.92-libressl.patch
@@ -0,0 +1,158 @@
+https://bugs.gentoo.org/903001
+https://github.com/radiator-software/p5-net-ssleay/pull/360
+https://github.com/radiator-software/p5-net-ssleay/commit/4a886e06c1cac80e7fb3f8d52146a27ce557ba8c
+https://github.com/radiator-software/p5-net-ssleay/pull/362
+https://github.com/radiator-software/p5-net-ssleay/commit/88c3bbc45399c8ef2c8879aada8bfa91d8bc6c10
+https://github.com/radiator-software/p5-net-ssleay/pull/363
+https://github.com/radiator-software/p5-net-ssleay/commit/3dd2f101b8e15a59f66e22525b8d001d5ad6ce7d
+https://github.com/radiator-software/p5-net-ssleay/pull/434
+https://github.com/radiator-software/p5-net-ssleay/pull/435
+https://github.com/radiator-software/p5-net-ssleay/commit/fe9e49d220fa424c55fc436303b24f5bddae0b8d
+
+From 4a886e06c1cac80e7fb3f8d52146a27ce557ba8c Mon Sep 17 00:00:00 2001
+From: Alexander Bluhm <alexander.bluhm@gmx.net>
+Date: Wed, 19 Jan 2022 14:56:22 +0100
+Subject: [PATCH] Use X509_get0_tbs_sigalg() for LibreSSL. (#360)
+
+* Use X509_get0_tbs_sigalg() for LibreSSL.
+
+LibreSSL 3.5.0 has removed access to internal data structures. Use
+X509_get0_tbs_sigalg() like in OpenSSL 1.1.
+
+* Start Changes for the next release.
+
+Co-authored-by: Heikki Vatiainen <hvn@radiatorsoftware.com>
+---
+ Changes | 5 +++++
+ SSLeay.xs | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+From 88c3bbc45399c8ef2c8879aada8bfa91d8bc6c10 Mon Sep 17 00:00:00 2001
+From: Alexander Bluhm <alexander.bluhm@gmx.net>
+Date: Wed, 19 Jan 2022 20:38:57 +0100
+Subject: [PATCH] Use OCSP_SINGLERESP_get0_id() for LibreSSL. (#362)
+
+LibreSSL 3.5.0 has removed access to internal ocsp data structures.
+Use OCSP_SINGLERESP_get0_id() like in OpenSSL 1.1.
+---
+ SSLeay.xs | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+From 3dd2f101b8e15a59f66e22525b8d001d5ad6ce7d Mon Sep 17 00:00:00 2001
+From: Alexander Bluhm <alexander.bluhm@gmx.net>
+Date: Thu, 20 Jan 2022 19:15:27 +0100
+Subject: [PATCH] Implement RSA_get_key_parameters() for newer LibreSSL. (#363)
+
+LibreSSL 3.5.0 has removed access to internal rsa data structures.
+Use RSA_get0... functions to provide RSA_get_key_parameters().
+---
+ SSLeay.xs | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+From fe9e49d220fa424c55fc436303b24f5bddae0b8d Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Mon, 29 May 2023 10:16:33 -0700
+Subject: [PATCH] SSLeay.xs: Disable Policy Tree API for LibreSSL 3.8 and later
+
+This is taken from the OpenBSD ports tree.
+
+https://github.com/openbsd/ports/commit/f6567f938c9bd51bfd99f8426eba6a1590cc6384
+---
+ SSLeay.xs | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/SSLeay.xs
++++ b/SSLeay.xs
+@@ -1914,7 +1914,7 @@ X509 * find_issuer(X509 *cert,X509_STORE *store, STACK_OF(X509) *chain) {
+ return issuer;
+ }
+
+-SV* bn2sv(BIGNUM* p_bn)
++SV* bn2sv(const BIGNUM* p_bn)
+ {
+ return p_bn != NULL
+ ? sv_2mortal(newSViv((IV) BN_dup(p_bn)))
+@@ -6283,8 +6283,28 @@ RSA_generate_key(bits,e,perl_cb=&PL_sv_undef,perl_data=&PL_sv_undef)
+ void
+ RSA_get_key_parameters(rsa)
+ RSA * rsa
++PREINIT:
++#if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
++ const BIGNUM *n, *e, *d;
++ const BIGNUM *p, *q;
++ const BIGNUM *dmp1, *dmq1, *iqmp;
++#endif
+ PPCODE:
+ {
++#if defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
++ RSA_get0_key(rsa, &n, &e, &d);
++ RSA_get0_factors(rsa, &p, &q);
++ RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp);
++ /* Caution: returned list consists of SV pointers to BIGNUMs, which would need to be blessed as Crypt::OpenSSL::Bignum for further use */
++ XPUSHs(bn2sv(n));
++ XPUSHs(bn2sv(e));
++ XPUSHs(bn2sv(d));
++ XPUSHs(bn2sv(p));
++ XPUSHs(bn2sv(q));
++ XPUSHs(bn2sv(dmp1));
++ XPUSHs(bn2sv(dmq1));
++ XPUSHs(bn2sv(iqmp));
++#else
+ /* Caution: returned list consists of SV pointers to BIGNUMs, which would need to be blessed as Crypt::OpenSSL::Bignum for further use */
+ XPUSHs(bn2sv(rsa->n));
+ XPUSHs(bn2sv(rsa->e));
+@@ -6294,9 +6314,10 @@ PPCODE:
+ XPUSHs(bn2sv(rsa->dmp1));
+ XPUSHs(bn2sv(rsa->dmq1));
+ XPUSHs(bn2sv(rsa->iqmp));
++#endif
+ }
+
+-#endif
++#endif /* OpenSSL < 1.1 or LibreSSL */
+
+ void
+ RSA_free(r)
+@@ -7010,6 +7031,7 @@ X509_VERIFY_PARAM_get0_peername(param)
+
+ #endif /* OpenSSL 1.0.2-beta2, LibreSSL 2.7.0 */
+
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER < 0x3080000fL) /* LibreSSL < 3.8.0 */
+ void
+ X509_policy_tree_free(tree)
+ X509_POLICY_TREE *tree
+@@ -7052,6 +7074,7 @@ const X509_POLICY_NODE *
+ X509_policy_node_get0_parent(node)
+ const X509_POLICY_NODE *node
+
++#endif /* !(LibreSSL >= 3.7.0) */
+ #endif
+
+ ASN1_OBJECT *
+@@ -7197,7 +7220,7 @@ ASN1_OBJECT *
+ P_X509_get_signature_alg(x)
+ X509 * x
+ CODE:
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+ RETVAL = (X509_get0_tbs_sigalg(x)->algorithm);
+ #else
+ RETVAL = (x->cert_info->signature->algorithm);
+@@ -7690,7 +7713,7 @@ OCSP_response_results(rsp,...)
+ if (!idsv) {
+ /* getall: create new SV with OCSP_CERTID */
+ unsigned char *pi,*pc;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+ int len = i2d_OCSP_CERTID((OCSP_CERTID *)OCSP_SINGLERESP_get0_id(sir),NULL);
+ #else
+ int len = i2d_OCSP_CERTID(sir->certId,NULL);
+@@ -7699,7 +7722,7 @@ OCSP_response_results(rsp,...)
+ Newx(pc,len,unsigned char);
+ if (!pc) croak("out of memory");
+ pi = pc;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)
++#if (OPENSSL_VERSION_NUMBER >= 0x10100003L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+ i2d_OCSP_CERTID((OCSP_CERTID *)OCSP_SINGLERESP_get0_id(sir),&pi);
+ #else
+ i2d_OCSP_CERTID(sir->certId,&pi);
diff --git a/dev-perl/Net-SSLeay/files/Net-SSLeay-1.94-libressl.patch b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.94-libressl.patch
new file mode 100644
index 0000000..1eae0b7
--- /dev/null
+++ b/dev-perl/Net-SSLeay/files/Net-SSLeay-1.94-libressl.patch
@@ -0,0 +1,42 @@
+#1 EVP_add_digest() was removed.
+#2, #3 X509_ALGOR has an accessor, don't reach into it, so it can be made opaque.
+
+Index: SSLeay.xs
+--- a/SSLeay.xs.orig
++++ b/SSLeay.xs
+@@ -7493,8 +7493,12 @@ SSL_CTX_set_tlsext_ticket_getkey_cb(ctx,callback=&PL_s
+
+ #endif
+
++#if !defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER < 0x3090000fL)
++
+ int EVP_add_digest(const EVP_MD *digest)
+
++#endif
++
+ #ifndef OPENSSL_NO_SHA
+
+ const EVP_MD *EVP_sha1()
+@@ -7973,7 +7977,9 @@ P_X509_get_signature_alg(x)
+ X509 * x
+ CODE:
+ #if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3050000fL)
+- RETVAL = (X509_get0_tbs_sigalg(x)->algorithm);
++ const ASN1_OBJECT * obj;
++ X509_ALGOR_get0(&obj, NULL, NULL, X509_get0_tbs_sigalg(x));
++ RETVAL = (ASN1_OBJECT *)obj;
+ #else
+ RETVAL = (x->cert_info->signature->algorithm);
+ #endif
+@@ -7988,8 +7994,10 @@ P_X509_get_pubkey_alg(x)
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ {
+ X509_ALGOR * algor;
++ const ASN1_OBJECT * obj;
+ X509_PUBKEY_get0_param(0, 0, 0, &algor, X509_get_X509_PUBKEY(x));
+- RETVAL = (algor->algorithm);
++ X509_ALGOR_get0(&obj, NULL, NULL, algor);
++ RETVAL = ((ASN1_OBJECT *)obj);
+ }
+ #else
+ RETVAL = (x->cert_info->key->algor->algorithm);
diff --git a/dev-perl/Net-SSLeay/metadata.xml b/dev-perl/Net-SSLeay/metadata.xml
new file mode 100644
index 0000000..963e912
--- /dev/null
+++ b/dev-perl/Net-SSLeay/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>perl@gentoo.org</email>
+ <name>Gentoo Perl Project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpan">Net-SSLeay</remote-id>
+ <remote-id type="cpan-module">Net::SSLeay</remote-id>
+ <remote-id type="cpan-module">Net::SSLeay::Handle</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-python/cryptography/Manifest b/dev-python/cryptography/Manifest
new file mode 100644
index 0000000..8207fd6
--- /dev/null
+++ b/dev-python/cryptography/Manifest
@@ -0,0 +1,113 @@
+DIST Inflector-0.11.4.crate 17438 BLAKE2B eaf0c7f983b3186e9bc89353021a10592f2877e46585bd50b96db9b087343d1199c7b6cf3fa53cd274fb6d33de025a904b8aa31a7ac9599ae3689ecdbcec34cd SHA512 f1f6463e033b6d3c16c51dc1e1a3f5569954308b95b59058294b7f9310919bbda797e99e6a07529071bb83f0688867a243997d33795a7136b0af73977004296e
+DIST aliasable-0.1.3.crate 6169 BLAKE2B c23840c7f1df86109e004aa1929d7355bd815c69ce8c5a316c9e2810851b7faf91c7480924d67cf83520e94b86dc0cc1b90b0dcc84b446a15ba5cccc1bae95ca SHA512 a60e4280335638b36a72e51514843229fdd0cc89cb670fcf159f882a687c04ecbddcc52a1dcc3cbe8647e5308af3939037934a157facdddcc4834dcd3cb16dc8
+DIST asn1-0.15.2.crate 34002 BLAKE2B 9b6bb21474474747b15c6df8895a68560e511a29795768a58d22142efaa70cdfee808c5edfd4b32ac2ea196f6e0f1e89595a8faf501a32d7c4743feea8f10375 SHA512 3584849573a6d29400565edea5254b5efc16d4b521d3f6d80602ffb6880a6be1fe2ced4eecf8422107d7d9c3c12c2d6cfa4ec4dcae20cb80f9b6b83ba8760f29
+DIST asn1-0.15.5.crate 34375 BLAKE2B c794bc89b21ed3543082873d065a22f72a1d3f422217bce2980b44ffab1584ecf7ee23808346794c1dd9eb1f413332b8a5fee5f2ba8d626f6200e6a0492b39ea SHA512 28ab871b4e011a91da38db4900b1fd907ef894b0eabc98d354f9288ae1564a3122b19748dcd49879a3e294d9e7dfe3b4b2b49ed0b0eeb723aac4567b2c0481bf
+DIST asn1_derive-0.15.2.crate 6096 BLAKE2B 99a0f922363634472b774b7139366ba658d14b6868dd64cbe5f796e461c660e9746f9e883c50d0f4fc3914c975496e775c1698069b47ee986cdd87aec7daf6aa SHA512 3ea2585f9cacd5bf903e225614fc13f76fecd7e4bb00191e634a2ec838ab726c55056c95a00cb5d268b430d100570a3095c808b089af4ab8871a6055468cc20d
+DIST asn1_derive-0.15.5.crate 6095 BLAKE2B 0b8b14796253b7ef29e0baada2ffaf363e69686bd8fa5760ed7cbba5299fb2c4cc1944e66cf559b0e136b0e8c436d63f823f143bf8d200c36ce36e3e9e6fe87a SHA512 6649cda49844db520b49a31cad671743842f22188cd1104eee29d1e59db2474c821bad8b00bcfb5491ff7117aff6e6c11e05186c17b02e63088c1d09f623b5dc
+DIST autocfg-1.1.0.crate 13272 BLAKE2B 7724055c337d562103f191f4e36cab469e578f0c51cc24d33624dea155d108a07578703766341fd6a4cc1ef52acda406e7dba1650d59115f18261281e5b40203 SHA512 df972c09abbdc0b6cb6bb55b1e29c7fed706ece38a62613d9e275bac46a19574a7f96f0152cccb0239efea04ee90083a146b58b15307696c4c81878cd12de28f
+DIST base64-0.13.1.crate 61002 BLAKE2B 3b3a5b26e2ef18e9b4f1ede72b1bd160a1494751878e8441d463f8a514e6cb9ac859231536989e19fb1261fd864617fe31440df1b5855a0ec625521fc6fcef91 SHA512 1eb76aff9a84057f2ccb7082e9c57b015c2d71a28173089b02e7aacd09a7d311bedf0a943529611ada29f8d7b536d7ae4de256d98eee8450003a3a9a652bda4b
+DIST base64-0.21.7.crate 82576 BLAKE2B 25cc8761c14220981ff4ed332058f6179948080cbfa2b225ec1d1602e4af14cd470c969e8b7049117e6fc51a5a24e06b1d27bab844486ecb76409d12e0581d5d SHA512 c6986d88dd9aa081d914f35b4174be4ba874848657ac4b5e63b9b45af765d973289c548ccb5a01584edfc0d8d79ff5be25b51365295d6e7a311bd7f0ae3c0cb9
+DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
+DIST bitflags-2.4.1.crate 37043 BLAKE2B f61c45b142265e9c2944c7054e01704de47510735e9ee5351cd02b98676cc4eb42d68b1fc4849ad5f54654617a74f20cb533b4207c2fe76516b724ba9318b414 SHA512 d3fd7abc95acc1cb5bf16d6acc12dbb8eadd250f069268df13c2e8dc3d5f5c15a929cd17ca931c77393b64dce0516ef8674c469789ed32d78e315b5faada062b
+DIST bitflags-2.4.2.crate 42602 BLAKE2B 768d4ca52aca73d8acf2f494a66957ed2603eefd5a04332ed0880d230c2cc6ef3bfdc0792fa6f288a0eb132913dbb256793e580bc34f4a40e8200e1fbafe97a9 SHA512 ef4c20e6e78a2ecee97e17189b7100a504d8176c7c15d7f17d62157a116d66f83f8b2bba472a4acf02cd3edbd94b20a7047af918c3f3b371e2e04f7474be0214
+DIST cc-1.0.79.crate 62624 BLAKE2B b3cbed3bd6fcac1c6ea258ec96cd107f859947a35dc89c3dc8f314741b0f668e61518f896ec32ce10c9a7eb20dd350bc177a71810d53ebea59fda062ed9d27db SHA512 cbf0a25f3a23fc540e9d638fabc23f761f1c240ebb4814e761e90437d71fc559cd155768ab9e78fc192220d8a605c66c3af342ed736b719181656170b98d7bf5
+DIST cc-1.0.83.crate 68343 BLAKE2B 33245b33fa845ea2f36da36e3830ec835f937e4319865b357ee9d5ea29a0f9f8392eadb38bf1d95e3c15ed201e561acaa87aedcef744f8db3dabff87a96c7f02 SHA512 742a248c3a7547bb220a0b9c97b67a831fab9b4ac21daa08c85a3966b9fe576088def33e16132fcabec9a2828a6fc437088bb045bfc98b2cea829df6742565a7
+DIST cfg-if-1.0.0.crate 7934 BLAKE2B e99a5589c11d79d77a4537b34ce0a45d37b981c123b79b807cea836c89fc3926d693458893baca2882448d3d44e3f64e06141f6d916b748daa10b8cc1ae16d1b SHA512 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
+DIST cryptography-41.0.7.tar.gz 630892 BLAKE2B a2786c999b8a3fa9e413a330eeaf1076574b8f49a91a91887a7976e7260aa4bd6c25354ff4656917c9e729cd12fc457ff708d904449d03b665965f775f8b7aaf SHA512 c678da6dfc02d84ca9a26bc42844da8ba356f5dc839fefa0b63636c99107b18415b5970d721b72075fc0f8aefc3785dbf143327ceb7f4ebd075df41291b63219
+DIST cryptography-42.0.0.tar.gz 671860 BLAKE2B 40452225cac2937603000a496fd95ea0734a6d055c44a4d385aff22cf943133e5a06c1efd4e401f4b43b56eb4c87af33b8b99d1aebd84e6768217887fd12a3bb SHA512 96a9eab6b23ed8a0789742e824429646ac6a038047dcc3ec092955b1308843d1686b012f7e12c64d8c40308049be98bbdb1af233e83c60b388a30035e50bb58d
+DIST cryptography-42.0.1.tar.gz 672364 BLAKE2B 5e83c2dff17dc1ae03ca339766c91b28205694d73c9f2a08a169c4e41d63262a7f0180e0f4b92afd2a59d3226576b761c901341bdd4f2568111cfd9e6ffd3063 SHA512 978f21bb14dd15ab559af4c85cbc5c98b2ad047bedc980307d7fc91816ee50ace4b1259dac083eb03f03ce12db1eaae171405e33348ac3affd58c140b986dfbd
+DIST cryptography-42.0.2.tar.gz 672761 BLAKE2B 9c97305adebb88127cc6e2e44affee6c9703638abb1b09e34da424a617aa9eaddd8498a2452711af998dbe7818a6148392be78106104d01f2106d8de2b65ac97 SHA512 100f604884cfe5335369d48eeb1d28ccd822f13ddd13c007f4a265c887362bda2b88646328ca570c9969897bd838df6c1f6b7fe4abaf36e82cdb93358694b12c
+DIST cryptography-42.0.3.tar.gz 669589 BLAKE2B 328c297a989f96d10e92c92d5b84e147512498be7ad205b2f36fcdb6234b4c77ac7f20f3ba8f74d05a573e2eacc68e315a97fbc429b87b5da625d4cf359773bd SHA512 d3733d08afea1cb3ad5a01f241ea7f58aaf38334cd25e2b7f64686ffd697f20ec30133931af7fe6a439ba0cb365d63ea6ec0512c627b768891f9e82c15dc0cdd
+DIST cryptography-42.0.4.tar.gz 670311 BLAKE2B 9dc906048bf3be1b457a528cebf8d947ef9088ac5bdcae18b43359412c793fa25fe66a1032d118d0a64924e20065e449977ace3027e508cb383381dd175119ce SHA512 e949672bbe5347c994e1217767c45b4a302830074ed404b65fdad5166f415c4d4c597c1b928eba3a61b338438a178c32302e001ffd6a2c34bbb51ba79ae2e938
+DIST cryptography-42.0.5.tar.gz 671025 BLAKE2B 0eb4b6722ffcbd8b1107afeff23ad72de8199b82923e82412176601aeda8eaf0fe53485ad0fb504be0e5d1898a4006d4bc2ecf5a406f818a69120df382d2ee87 SHA512 5524fd230b55580a2c647a0a78197a783e201fdfa8b3177b72c6d7b689afd76a689e4fe3593120d3adb7ee5cc4adf9211e8deedc8fab355e9ed70076db09f68b
+DIST cryptography_vectors-41.0.7.tar.gz 35288159 BLAKE2B ef2e82f42bb4964a256e875bf3b7bcca549df11839893ac3b8d909d05308360bb0696774fd89bd8951bf4f13aaf752a7700bfde78e68cce450ffaf5117182958 SHA512 05a96cc8d1e3653e62c6822f202f6c25157b2a11bcc42fa8a9462ac1844c295147ed5f49315f0b297c689e244cf13d02948ff5e57c21a487f0210f87518c913f
+DIST cryptography_vectors-42.0.0.tar.gz 35277565 BLAKE2B a770b13244633dc155f21c9179440d4f5d393c71801e44e374e38c183055b842f127090160fab6ba44748e68b2004c0d128980b89b1ae760e6148ba4784fecce SHA512 2d7a633ddf6b81bc3098a54dc61b801e7ea8117424d02db2b9baeb2a2a6da734e07b64f24f924fbf1ae45d65ce2f34db8cc76b1bfaed9dab00a69ef0332245e1
+DIST cryptography_vectors-42.0.1.tar.gz 35277715 BLAKE2B a1996ddd91eb5986c6ea72a3a163506ac60522eb459ce36b90ade44045d662ecbc6e2c2875a0437371885968524c43829e02bcbc094e6a1cb5ade5b743114cb4 SHA512 b7d4503f182e29d1d33bcd5ad2f4327a8deb3e11c640c843eab3b870780b7285323fa044f98dd052101e4926b2bbbbecdf5de00858df8fbedc25e7c69912b335
+DIST cryptography_vectors-42.0.2.tar.gz 35277730 BLAKE2B 63e2d1b707b66e13f8aecefeebe1474118f05fcc017635b4fe91bfbd73ac43db2923375a75e0725eb35fb37d4facc2e2dadef771c84563d08d13e85fd90c0dfe SHA512 8ebc90e26b1398c5315061f621c3364e0b1759ccedcc566e6420e730f7df65763741e2cb26a87f4004964f4fb57703be2009fc5443266e0bfd9b5620ced9d04d
+DIST cryptography_vectors-42.0.3.tar.gz 35277759 BLAKE2B 4474fca84de99b025a8aa8c7414f5ead4c2c7e8098b80689229c133a8422b1aff034bcb54fcd840d9090230649ce26b52c10c1d4fb35e3ad7ec888952c809fb7 SHA512 35d0220b564c384458c0844c66d80f49af763e728ca59658964ebefcf0433197a72be0a896ce6007b183b761c49200a7b6bba3b84bc13390336ca2875e04f7f4
+DIST cryptography_vectors-42.0.4.tar.gz 35277611 BLAKE2B 84c998730505b5ac355b548cdd25dde876e43fc7fcb11feb5714ab9e21314d1a1fb519ba46ca5986e3f3522434a96a7803e7dcb6f303a61bb1fa2f8bab341ad1 SHA512 a1f324a43b0041733bb18f9e0b371ae7aab0786a0d5166ccde622946d5ee68c143a5b92a4c50bd8649b5b71962399994ec506250cdf6e691cd259d93f9910662
+DIST cryptography_vectors-42.0.5.tar.gz 35277812 BLAKE2B 3511f90a90816dbf48fb588e24e432844b51f9b969f03bf9f01e7cba55a8b7fc1aebf66409e137ccee14279535b366c54e1b3af6af026812cdfe92c3137106ec SHA512 38af39f8cb869af630d4b75d7a62ba9778fd59ceee2858504655d9065a82d2365644c9ab301c90f3ebd9f32f2e04867650b6d392c1f2b6880e3bb0c216e6a419
+DIST foreign-types-0.3.2.crate 7504 BLAKE2B 520818b702d990d296ecd31a8646850202509ccfa18edd0e1b260289619a6c351e758f317ec0824bd76eccb209b6f087057c25f1bd01a47897715013dd834867 SHA512 bf27b8243ed482c202d120383374f19ff09422535e24b9c1aebccc66529bf300ca17b8bbc76d67f98ac092e614497afe3add9dc68aa69c93074df05762f91232
+DIST foreign-types-shared-0.1.1.crate 5672 BLAKE2B d2e42e04b6657e7a69fe0bd20c672176629c743e49a55fd007bb30e289710b70045d445ae9cae0eeaa747ee708c90e8abd9b5fc39bad8ec0666befe1b696d4f1 SHA512 bafdb2143e136fb0818e2ffd90b5c862b7181647d6568947d4e4531012bbf7a57b597221ec7056c1b562dfc0c3b5dead26d1a4111ebc15e7863737a873518a4a
+DIST heck-0.4.1.crate 11567 BLAKE2B 520aeea740cfa30b0cca12f73594ffa655f32959673b1c9caaca1ea0162e455546ae3033881394c0ba0516bcd5c9a997da02162e1585522d665813b9096eabd9 SHA512 8c80e959d2f10a2893f9a71994720f90747742bb5b61fc0a539eed3ea5679b140c48fd7f7690d7122cd6af5f7f20a19d412e3569fe741c6d31f6b2ce1e0b80e8
+DIST indoc-1.0.9.crate 13475 BLAKE2B a9696788574e56dd125c3371169fd59d6947d188f76e2669b21c0304692efd6709cd048920f7822e92c6a5620fb178e0e85c7776118cef8ccee0f58398e14abf SHA512 db8aef4a7bb606452dc8ed45aa29a255c7a135357a0bd586fb4429c5f56a1aa2ca9400d6fac39956aeb486a15d25cf5d1b9524967867f2c651d9d563e3e85be8
+DIST indoc-2.0.4.crate 14311 BLAKE2B 8d604e20825ae64530014081c627abe4ecec6447e1e214408743aca79ed217531baad4bd7021137ae6628555d769a248f06acc556cc3254d2626074aab110a44 SHA512 ef1b8d19d89d848c1133f2865247e0ce23cbe5552454805910ed0478ac4acb11b11629aa4a5ce8756d0ed5cbc0644abedeac0246f433166c68f47cf58cf4487a
+DIST libc-0.2.144.crate 682092 BLAKE2B 1f699cb880a65baf9210527789abb35fe8be9565828d061e12b5c76330e21babab67b21e9a44be6a706f643f3c8b98503a3b40482183188b49f33f96a2489a68 SHA512 576da68e3845a7149f64bee425529ffec4bbb8df0272790182e49c8bad5b9744de21ffb5c1206753b57b7fe45af02c6c429e16522b72a77e5262482d64df5692
+DIST libc-0.2.152.crate 740278 BLAKE2B 8eecde477063207d77b6894d6f9194c8dd10e55b69585e3d66296eaa0b9d3f6e2d033e667207182bf4c3cf31f6d38820c9187b2006f4b5ebee898adafb4b2751 SHA512 1722f6f52077efab90026aae3d10306f8c38ebba95366593c3c1adf707fae121ab450064ad9e8be5a667caf6af0b90fad4d1ca1009db0f2220093c44e33c4b5c
+DIST lock_api-0.4.11.crate 27487 BLAKE2B 87116cf908f7f1f9c300cedded989df305f855883e3df5a482de2c76814c48739582d3079d76a2bdd14a6999204b7fd31dcd8fd06d1dc7f9418f0e2f70a1450e SHA512 9946adf313a5c67a0dd87a1b679b7d9d16a86149fb95974d3f28aa57a9a1a3932e4a5ee1d332097559329c5e3b2295be2e4b655b115d9f75269f33a758b17fb3
+DIST lock_api-0.4.9.crate 25685 BLAKE2B 8adf5c3cccebdf6aff6ec977f230cd2a208b0b188ef57deacbbc6019431f0ede1a760b2384ba3cb49c96b8a589dc56c0f46a6359b3e62277e7ae1a1c3f586fa3 SHA512 9215381d9bb6b80d217c73a900db43df043b3e939b5bd7a292a02e9ab911cf0eacd8f883d35bdf72b3a0e78df8f1bc3e843ca4c775294c7a7a03091dc1a74990
+DIST memoffset-0.8.0.crate 8912 BLAKE2B 19ad3abed21fc39461b0382b15a8cc312378aba36f042b1e5335012115d31b350a4e3bc720f1eea300d7d19b9b317f75a28d4ccd78ff3b31defd9e4b3147899c SHA512 47adcae0848ff967035e10543ea599c7af9c5bad387023eb4dc77c9e8d875994ec8139b9941b3ecc4fc17214d80944a47a3be174a45b334661914a5a7382dfbe
+DIST memoffset-0.9.0.crate 9033 BLAKE2B 19090c1af8b8cf54a2cf7593748aff4d3dc685ec7080aa476139c1721ef71555495e1bc513b1efaddc7e7702f83e0e1c2a8f71ff40009d266539484c9297e0ed SHA512 2f04f9b6fed31e94388c18162ad275897a835df7b9ac827f4df0f4b0ecf71064ef247f7ad11dbc27d7a6d448984a0f29d1c000e3c8d5fa6e121fa9571770ec55
+DIST once_cell-1.17.2.crate 33335 BLAKE2B 8f1bf825fd618fa1070c3497264085bd354c9b470aab08663179cf2eacd1778b6dde0c54247aa5c8091be97c40d3da20e56dd92981318a0c0ce85d41c3a740d0 SHA512 8a00338f5aabe766fe5cd741cafd8c2ff544d60d081e5706b0965db6c86e00cc7b5fa0f73d8aa54cd1f4506a0858de589ceb4bd32afa7046dd3a1fbcf52b69d7
+DIST once_cell-1.19.0.crate 33046 BLAKE2B c14b374eaf4ac0f60acc2e02f7bba270a0e8e0a6978d749cd3cb0ab3eb26907e4fbea70dd5132982f90290381ed18ff8a87fd530f1415fabffac864f157ea380 SHA512 4154876afd34a699ee650d1a8a1c5ee5a25f0ebd9388b8bef2564e33629fae68f113d7507488c68abbe7ea1acf9bbc41813cbbf3ef3e464e3f3b9cc7a51d870c
+DIST openssl-0.10.60.crate 265736 BLAKE2B a5a2386470baa5bfecfd9bf32a9965babf1c222e6e35d8652846ac342f75dc6ff022d8344350adcbd42d3313cde3831664fa9e65affb8e3825d58d4a8f5b7418 SHA512 4341098b55136862b2206091e740801c165c42f30404e4224c9d5cf3e68b5b6b26f5c4c383495a4b5b6baef232fa698f80136b0c3e86dbc9d411d3bde0d59616
+DIST openssl-0.10.63.crate 270890 BLAKE2B 0571a214347f823c9079c1f6d204c62469235ced63cbfdb8494427aed8069f45bbb26b81d1edbddb3602c0bffd54d1ca96204aef8cb85aec041edf45d89889db SHA512 47baa5f2e34b622dff0cd475dbbf6772adf48abbcec5be1cbcafe2beb9060ae46a3d873896ee4b5d864da0b132f0efd956596c49f2afc650a44cff6af001aa56
+DIST openssl-macros-0.1.1.crate 5601 BLAKE2B 69dc1c1f3b7bc4f934cae0dce64c3efa501162e5279efd6af3b74f7a7716c04b6996b306b310f1c045cfa2eff2895314a47ecbb020a817e461c6d77d0bc11e92 SHA512 57e75c84f78fb83f884eeaedb0dd135ecb40192dad2facd908e6a575c9b65b38a2c93bca4630e09ea5a82c77d8bc8364cb2f5778cbfe9d8f484cafe3346b883c
+DIST openssl-sys-0.9.96.crate 67743 BLAKE2B 0336ef48841d263c7c5883f0e2c3b7224c5561c521fc15d692b56fadac50681d18ecabbea8b0d5adcdad20f3d3ba60fa29950f04ed1ed35fa3b7b4816f556af8 SHA512 b5f0290fde2198e314b8e0d3fddfe0fd6d5ea88024cd1f2a70d99a0b78905568a82e63818cd58bae7f362d663e47202e6fba8cf4fc83354dc0253d78a9dafd76
+DIST openssl-sys-0.9.99.crate 68158 BLAKE2B 59995535bc24f0ca67ea204193aee4114f88538bbd74ade7c22bc2ea1b0d7e41a79118b6d22917bd1e305a43c16f8aea095c635d27a56fc0481a2baa3092dfa3 SHA512 b91197583135c22d34814e6382dc4ad4be9c3905c979addee8688dbc52ce627815e719b9d0b365195335d4d665eaa79a406f89e4c19cef73988938d51fe2f4ee
+DIST ouroboros-0.15.6.crate 11257 BLAKE2B f7f8758a7456e4561279fbc88d0bf994bf97e93f9d42d2a3476d959d40a85d2d8f7910e36f96824cb0316193d42efeab608767ada00bde6803bf193405f51233 SHA512 ba777f29b26b1a934d7bcf5f456e2e6485dabfe7b8a25160b34feea438e1e7649fb45cb62d83cb1ba9262564b7b877d84f9c9419d877669b65869bed2df9c02c
+DIST ouroboros_macro-0.15.6.crate 20751 BLAKE2B 79f78d819a5db2ba58dcdf3cd06d95570a71ba51b9ea6b55f19a975dd5aca5f3774697ae7ff009d42734add9e37e7b7380eabcabd31d14c37e09b029c32c24f2 SHA512 c79a7b9598a6048d392899707c3d0b942ed3a695803cf74620352f857341b04816fa1172bca6a5a5262a335e47c8a26786e67a3341f456fbefc335d056296bef
+DIST parking_lot-0.12.1.crate 40967 BLAKE2B 940a112a066e3cbd15e2f6df89bfff37e4ece2194118618a96fa14871813c91798f93181ab0f768d3e1f3d60805508f216724013afb7e3da95678d0d951a42d4 SHA512 07327d3b737a913508dffb66023766348ce7f9d555c224a099cabb05baefd16a28e15fec638e3a148a5169dbd980c4541b0f8820ae9d06dfe0704482838fbd5c
+DIST parking_lot_core-0.9.7.crate 32412 BLAKE2B fec3ed2cf28e6d5090aae6a7c0ad583acf3ce6e54e881b78a9cb6721ca1e7040d46c044d405852728e74baff6ff1feaee7a89a64c69d20531f29942dfaafcc72 SHA512 1f232f1a87ba9377621244ba49378663f3113da7192a399fdb70be971ff5e5ca0d0601e1210a3fd8ab75ef464dc8505e719f81902e3448cce5e7848ef4bdbef0
+DIST parking_lot_core-0.9.9.crate 32445 BLAKE2B 811d8de671bf6e0911cf0df7dcaee4fb03a3b223173a3bb8cee65a28724eeb7bac87f62aa7b1df5ea3fc93af3cee3ef30b83d06c6773d6b856a7e6fa5fa197ea SHA512 7f0df70f9f1ca8d3da0b9dcc96e49daf05d95c3a995289266b5333f68818d686d32b0c733dfe3a0f62da78fa45caa843a963923b2d0c80899c33413dc749c032
+DIST pem-1.1.1.crate 11352 BLAKE2B 2f21e56ab3e1c55aeab08a2d60b3e83b9b9520ed611de394141d65beaebb42b80505983b442edfb49902147b6e8672dbdda2c51faba07487cb37f2f1000c8676 SHA512 a61105cf968db35c0136e2da5575f1f2eefeb1849e15152d6d6bbaeedec8aaa6ed7e6fd86892a4094bfae2495065b090263b760ebf4ccbe131f536963d985bd2
+DIST pem-3.0.3.crate 13035 BLAKE2B a9a5b7f9860ad9ee7b355e54c7e885126790e5298715234cc8247ceef8b997311bd1f916d113358cdfb22cbaa3fdae2ed4e3ee139bb1eb969185dbf468148c86 SHA512 7bc100eb0494ef2a86fcc4ba67c328d0cd791718f0c4eb67e66ac998d13e5624dfb6a1919862f684052bf61c7169c5065bde23b30640fe56651cf377fa573b30
+DIST pkg-config-0.3.27.crate 18838 BLAKE2B 1295eb4f08751b3663cb2c7c2753f29bf2ccd80f4e5856909fe10b6f006c37fb9672c9518b9b416546469faa18821512673a66543c0bd1e848bddabc456d0a90 SHA512 41e9b8d4fce6b8244c2ac8566318a001b481bd42a182f1a832c81ce93c6a023e18af03aa3500b134c30195219d35080433bdba69b2594e9665081debfbb4533a
+DIST pkg-config-0.3.29.crate 20563 BLAKE2B ed0559b0073890911fb47742743b2586123bf9e9b594aa0d5b2c419c6768cd37e25b546c21077ea6cc02823a679b302aeaaca6c7fcaf9aeec615dd08f53a1f6f SHA512 bac7dafc0e10bef40e427c1fc0271d1a26acb2f5b1cf7cc7a128f4d4f1f3110529e45057b71cea7b0f6ddff26945fe08962285ddeb22b54639e44a2e43af698f
+DIST portable-atomic-1.6.0.crate 140689 BLAKE2B c91d06e04a87c9a207233d8a850859aa1f5cc43dda8aed34511c3fe9641c27412796539ed045a58e649d2a0c7d71100b6b2d78a0c662fc061fd961a652ae8722 SHA512 b27cf57655a2f1e2d6ea7b45d80b4f9920a836e462f132c50dc1e4d314e162444309de1baecf45dad2defc7a5b99759165e54da9fe759b24092f8cb8755c515c
+DIST proc-macro-error-1.0.4.crate 25293 BLAKE2B ef918c5efaf2545ab38787c8d0c07315af00431139e4dff66346bf798e3a429f91d12a79776c150412fdda0b158a72badd5e1044ac4d6917f8482d4b5a7110b7 SHA512 8a47bc9d3e24e9561d1e384d8f5a633284c2cf9b5e6733c5f9d1dbfe1870ccc8e2152482852e50b551cecb68e009148585b910ffb0508a7b4875598eaf8657db
+DIST proc-macro-error-attr-1.0.4.crate 7971 BLAKE2B 98e2925881c2be186e22c2c439697e91d43f807eb61a5d13e3b0b4321ed50a74f3d699942c04b89b6fea0f156bb5d19ebcf22f9cd4b98a7e6917c437600ed823 SHA512 2606afa9ec78d7dad4500c98d3a5ecbd02c6b53ab829c742bed7f57b322a95238ab4e01cf268746815f1424fd9b02eddfa30e72f98c66106f57765f3d3116495
+DIST proc-macro2-1.0.64.crate 44848 BLAKE2B 4422122d9299eff3bfbb4507c4a117fef7c0906cab5a680933d482b7f9b49480bcb9c8172b412e70bf87dd0737b8532e90c310bf083f144292cc72190059ba3b SHA512 884fd14ff23c19420692e35a38f88bb6a766a09da105759cd958c315b9360a2c49cfe61ceaa3122307d44040195ec9dffb12b6d0ce224fbac5d3701621a12b04
+DIST proc-macro2-1.0.78.crate 47158 BLAKE2B c56a24fce3faca9e04db7965cab552d2a976c3764df0a84179b5a89d1230ab355c777a82b4c982e3945414f1f0478473a88821dd176c32d6de394d73a26adb9a SHA512 11956fe03a2e77a925cdff2c3c8bc8804dffab4fa1de963a128fa23f4189976fd2e2102bd346b92c33524beae320b71dadaa5213695a3ec638404196e14fa769
+DIST pyo3-0.18.3.crate 420236 BLAKE2B bc00a825a67ed3590b31d3ea6bd77f6c4c927c0355d9d03ce64ca44e36ae3e29ab4d891bf2d94ca074b3bf858e077c516dc64e4620f875fe1e8fbffb5c9db1ec SHA512 39f044a19a42a5e2f46049431fbe3fe10c14d12a4741cc789b42de7cbf448bcbded7fe38a0f124d994ff9bcd3d95a19305dbfdc7462331fda3e6686cc4289be5
+DIST pyo3-0.20.2.crate 434326 BLAKE2B 3114fd6f3fb8ae7d1b35c9d2ac5ba6a49c5ac911ee3a5b941c5063263ca7cce47fa4b4f7ec34cbfe3083f3d1303fd7f061639fba833a04fedb9d5098f5784028 SHA512 cc5151a116179157046ec92677e5a72318b4cdb13a7d7e3bb83778739b5758040e5020f667dd83554a66b758581a08f5de05eb38e7b339813cec85e0712e6355
+DIST pyo3-0.20.3.crate 434673 BLAKE2B 1dcb881fd1fe5c76e9b4951f4d95fcd1daa1845c226a4ab1db4283cabe67bda822ff03e3cc85d797fe4665a1614229e7406dea65ec5e99ce4aac96b973a7f55d SHA512 77cce558fa60bbd8d9981ff5e62fdfa9bac94bd650b287fbf14ac93ef1c326c8ae7fda82d744e3582df03cab8adf490e0f2752fabd9ae3de044e7d80984e0350
+DIST pyo3-build-config-0.18.3.crate 29137 BLAKE2B 5fa645b64f50a078f38cc10a27ed52bd7e7aadd8a069c05ec2963f0b7c869b94d29eddda97cc31d200cf749ab8e2cd9cd1ea00e75620287e9187745ae0e100a5 SHA512 7ccad5f245e84895e147389f05270f32d12f81aba46bcd0dc184b8d62af2ea579efc50383502efda40601c981c4dbcf911aa7d8192364caa2e177ad939062cdb
+DIST pyo3-build-config-0.20.2.crate 30029 BLAKE2B 846eb95d1417a658763417a2750dca1c55201105a3978d61b1db5e3962680ede188f8285dd7deec778ea9860d43e40513b88f5a54f0b1881b08416760bdbbedf SHA512 9dbc669ec69d38716c3909fa8f3b6c5be13c717b20bfd5dd11edab59b8eb35247d7996acd260fec88f92eb3e71248c86e9b40c1a700827889e2990bba20ecddf
+DIST pyo3-build-config-0.20.3.crate 30060 BLAKE2B ef122b0b7d840d5362928bac76e1299b333775ec5c49a3bf23a19eccec074917931356bbf719c6d700999941bb6a396948ee7f8761e685c8e9251af07ba0cadc SHA512 70685415bba443787dabb9c61ca3702aefbcacb0705471b496b4f01efe34291735321d91243355b4be9aed8b243e393c09fb65556f1b926ac7f22f64560bd927
+DIST pyo3-ffi-0.18.3.crate 64474 BLAKE2B 32bedfb4c7d88e539e958af0dd48af311934a817282a01f860af7cd824fa1e3825c505463b78cda57541bea8ccbbedacdc0f67bef686e6775fab3787c26c6d2c SHA512 55240c7824ad1e5c69e05a31ec03e2064290c89c4c98f06c3ebc38c311a10b1690571c977a103790ddcc9623ac42fbf525fb028e910baedb9acafe39fd6e4a82
+DIST pyo3-ffi-0.20.2.crate 64601 BLAKE2B cf1141ad34a13dcb46de0d1e15dda192ca41a7441bfc92a9295861876dcc690d1d5d6d39dafa51cd70c4627353efa91563eaefee8c39f655d12818003f9524da SHA512 ee6386b6fdb80689d104f9cd5229f02e1893d00a52be710bd36882c47305abbe24ef2f3cdef8200fddc0bb97e29001fa3a2fd9d3d2673ecd9a104a070420d01e
+DIST pyo3-ffi-0.20.3.crate 65024 BLAKE2B 33e79a02c7ab85f4767e02a39d8553ddc015c80d13bea674885ad8a18d89bd90f866cc39d81ecbf56270ebe87d29bca48f635c4e73ec99df02ce425f1427cb31 SHA512 3d1ced58e243be7cee4a3ca831dc08a1631fcd511c707dd3bada87d7662807dea2d88393d76e56ff19a6d1c2804d93b5b6b7b5efd36b9c275d66fa1bb1bfc384
+DIST pyo3-macros-0.18.3.crate 7175 BLAKE2B 424cda4d0d75c7d4df6aeab0a475fc744039c9a663215c633e62762083930eb6736348f431b6f00d11a093961433fb13fb4c9da8a18268d1904e933157255646 SHA512 2b643ec3451267e836076bd79d110826fa0a2407955543c8a6a46b0dd16c477eb3ad919d51b7beca90eca2938a59577b32e1e67169df67429fac4cfaae5bf5ab
+DIST pyo3-macros-0.20.2.crate 7925 BLAKE2B 00fc60becfa39bf452786d8a612247785f1737cc3e627700d0d144ab2efaadfb34ce8a8f46e932382a1ea99caebfe1946fbc517b5c26fadb0822ecaa8b2e9df0 SHA512 dd9ea9acda95dfc53689a4c26d8c2139f8a90a05ab06737037f19b8bccd5e52b0da5f297a29194b958f5f8b59cbb566b5f409b3f17a863eddf855ecb755d2719
+DIST pyo3-macros-0.20.3.crate 7920 BLAKE2B 0510accf51cd83390cbb7b6ba4ec9f4610e3dbb7448d1213994013487ae81bb087df1ba0076a3862e5ecfd172b7846f9439a2d86950a93b016aae565ced4f03b SHA512 454f3c0c054aa131ffe955e4be1af061005b9c81b4d80702827e19b983224c118dfea474da515d5fc2c79cfd3fa21204ed4af2d9e81427123e0a78bd246a23f8
+DIST pyo3-macros-backend-0.18.3.crate 48922 BLAKE2B 4937f6d9459c6651f85fd520e4783c051f28932192d02aba5711fbf0294ed617f5b0b35ebbac74f3e6048a3fd3b75028518ebadf1277eefaa501015a91269c77 SHA512 1e607e4925486e1a48748ef3163666910a06f9a4f4a2fd7eb6a6af87ea37b5b7edb9d3ab4958e6fe907a55c5f4bcb702a251d836dc3b57c4ab1c5d9248b8cd35
+DIST pyo3-macros-backend-0.20.2.crate 49710 BLAKE2B 711b18984e61219555df4b62667f7f376951c6cb47e6dd947fc24618b923c4f4f790eb1aba1901abea4761632cdb58cfa81cce91f33586da3022e6c7d126bc9f SHA512 c6ca2a2cdae8630fba3f8e4122e81b60ef2ef0905ad2a3fbcfae134456d5ca9e73690b61590e391f3b9d82c24725809f18544c5dfa0b36ffdb1914844fe65d3a
+DIST pyo3-macros-backend-0.20.3.crate 49797 BLAKE2B 59c55d482577ce105db3e19a1db794eaab8221d7de01197716b75d5d2602e0f27c86aaae527eae7098eafad311144550bd597efe8cd6560c82dc435021f3428f SHA512 e177ee0d6a538a555fbe9108e3e2c20102622b2c9b9696ae309189e5c4d068efad2132afd4a97d734ebabb4d7146980a26cb68dc05d5eb88f338be2ad0cd651f
+DIST quote-1.0.28.crate 28382 BLAKE2B 9fb16c3bb2a7fec3d8138ffec1f58277061f4a643c9051e1f6525f9e347ed9de41a3797eb3140a6dd828526eb4114c1f7ca562151dc933f338d64b175ed35d9f SHA512 846d718153f78cbae6dc714caa9413a5d5964bcc5e032f5c6c5356c62c33bf22635955ebdff0dede69ba1c9657387e65d61de7c537f6f56f8060721dfa52d735
+DIST quote-1.0.35.crate 28136 BLAKE2B 81424245e1e2b94459df68bb3a9a866c6a364102b5e1d010ede9c5f8278f8406d7b651957d091c5914e936b494b0f6e9a6a1dd8b7d35cd7d7100f86dee4ec12e SHA512 f5314fb6af17cf36c228e1970c569c29ec248954a450a5f90ba9e2896d04f74904c9cec5a1f74325f2489295a94491eee4ce8fb461e22cd4b34e53f1f881efd2
+DIST redox_syscall-0.2.16.crate 24012 BLAKE2B 9497a52044458b1435ea16e86ee072e379b6b11ee31602ea72d6b6072a4a99426f409c2e58108a4e9c36dc193fa49c83951e71f4fd4e158eafff18c594dc01ad SHA512 63b5d876baaf99f5cf737679bc6ac7a9e3d8a41aa93f5c59416ce7e3841e2513bff678773553cfe62fb452707f82acc384ea63aec932a31bf94679cd1caddd27
+DIST redox_syscall-0.4.1.crate 24858 BLAKE2B c3301137a0b84e03b09d28dfa377ab3bea74d574a08cee21d35713b278d8b5b30ca2a1d73a0981baeb4644cbb88c86c8eb15ab3bb2692e38b93e6b35fab4e0da SHA512 073ed9d96090cf46eab9877742277a013c62d8da86d9caf2310b4fa868af306511936553579e01309f27067d344226cc8dc5e3aef01d9b900da2febd33848f8d
+DIST scopeguard-1.1.0.crate 11470 BLAKE2B f774eb90b7d3ffb2efba47518e9d1dead4017ab4b38a4bd74914daa84a5af4bf9eb63da0496e3924499d79cd0439c37447aeda4a21226f95645bddcd6becfabe SHA512 368fa5726df8f42b599993681579a9ffd0196480ee3cd0f9f671e8493f3bedd1e1779bdf2beb329e77e0005fa09b816e3385f309490c0f2781568db275d4d17d
+DIST scopeguard-1.2.0.crate 11619 BLAKE2B 8b7e9ed6cefef9ee55407fb9690d57a2a98bb93e5105aeebdb475a52485e9e185255249e1dce8f83cd80534e7402d485aac3efa7e8493b13135de27550cd4bc4 SHA512 6247719a15fe1e4e2d179127b9a934bd2f99367724f41175ed9522f58824b6bc69b35002eae66b35880375ff61d77ac43ddaa78cbde7160a35183a1da32d3fbb
+DIST self_cell-1.0.3.crate 15147 BLAKE2B 9b53b0568dc4ce0c7372565eef14e593aa25e262d7501da6e4b8cd7807f5385977f9bd3563ed39a6fd4e07c824847d0c09a2a750024a800229c7a57ce5e8e325 SHA512 89a990f8a59cdbb99930ebbf9bb6566b77f03f1f551e49b207c865e7205541fd9f0342d284aca5f3d054a24520fd438b6c53baf48c43fa28dfbe8d79fe8c7e00
+DIST smallvec-1.10.0.crate 31564 BLAKE2B e3e46a0781d3a7892a739b001592d462d0704f010363984c439e3fe4f75aecb9720648aa1e9bcc56bb3be848dd40cee578212439f78f07a807c9441c3c3e0147 SHA512 a09110184582dcc01d7a0d3fa8f74c17bf726935126d3654667b8e9c4bc43ad16ccfd8fa94feae7d9b31913aa7ee030fe5936e4b44a36302b6ce5fe37372a7ae
+DIST smallvec-1.13.1.crate 34952 BLAKE2B e0dcf1d26883564cd4f5d20a588562404e193075b1ae011f7f7542009a9466e5df3ade7768e1a8feb8806774b2cee5f15d31779928f83714e7d4b6ed46af9ab9 SHA512 1259ef947400470b8c9e74c5582dbc1a49753aa46420883c1f7d66f320f67bebe733a15a23cd57ba461020fad4ff337a5b298de82754602a78f5e6cec969652d
+DIST syn-1.0.109.crate 237611 BLAKE2B e827445d00c79a8eeb91eacde472f1987addd6ce9e1df95d7abf6446a77ff4173a8006845f3ae71c1da47193cfb72e0ead9a6d6bad2573be12c17e90735d9ad9 SHA512 12816b9e8cf984024b2fbce9f0ae14cf94d4d2c06f08cc54fb793ce78770bb4cc1288eb7df0ba5e8e937756e1e8e295c53fe07a0c5dde1ea8ddba03b6203b37d
+DIST syn-2.0.18.crate 240648 BLAKE2B 1e16f0936faf2656ee74cf9c75bdaec19589a4309d68b0cab37438061cfa29c66a1dcd624ad9247d63c85b3c1fdd8a484a65509d672cc6471f3c93f3ecce30d2 SHA512 2642eb35d52022c6d21bb893843beb9b737a267f620e1f5a6c9096d434fd1fab05fe007c8d8b6f1fe00a25007d6f55dbd4ec620b9f5c1154659bf34c246334dd
+DIST syn-2.0.48.crate 250566 BLAKE2B e46b0863af76c3116c84d01b654a9820b7edc51f75c9c5301a7967d12284f78da602409f34fc40524728350dc6b998a4d738f08b8868f95236b3e5d24c460580 SHA512 926c0ad55cc743df20f9166b6d71fd44421aeb1f073fd86b6ddb53e13cd508b539c0360ce64b07b65597bb14639c8f33acf7e60951e1e9128624517aa3aee325
+DIST target-lexicon-0.12.13.crate 25424 BLAKE2B 5fcac231c270a59b6589adb79c90cd3bb15ce024e3c5fa3fd267b3226e5514ce77387c57c86ca765b43ee593a55ec99fdc8fbfd464dc01afaa91ad10337b6278 SHA512 323331857bd3db9877a6c7304392e39d378439462ae4f6d6939c02d28914ecddec52696c94ceebfe8a0e7e93ce25c900099bb3922d7783643162e55c7a8769b7
+DIST target-lexicon-0.12.7.crate 24402 BLAKE2B 3715b15649566b9f26fe02aad818325a43b54512008e4ea9fcda9ea15a87b8f4baf4ffd7343fc12456c97d8a6b1e121158c4cb61997de0e2d24d1bce93d86850 SHA512 0f3cdbd7515141315934b6ca61c5666f3bf60e259711f68ed3c33468e2bd400cedf824db7158a80fa07e78cc7ac2a0a1eed2df199352176148e9df34b06511a2
+DIST unicode-ident-1.0.12.crate 42168 BLAKE2B 4cede03c08758ccd6bf53a0d0057d7542dfdd0c93d342e89f3b90460be85518a9fd24958d8b1da2b5a09b5ddbee8a4263982194158e171c2bba3e394d88d6dac SHA512 bc1824e1e4452a40732fc69874d7e1a66f7803717a314790dcf48867eba34bc9441331ef031e386912e52c385645c25b6ed39d4f149973b5b97371b1b96b1920
+DIST unicode-ident-1.0.9.crate 41978 BLAKE2B 4e78cefb4e7d7f173f1826a5ab6c8ffde386fea67cf3227bd22e6a6e65d3348dc53c9438e6bde9af06fb5e04b0beac866209d2426e7f04cd10b2435db85df7e3 SHA512 4d8cffe699c6f15ee82ab5f5a73421a6bb8b1a476237aefefa6e932c45c30683a4fb015f138bce99d7cb27a27fb7972909c828e77daef091da84ec162315625a
+DIST unindent-0.1.11.crate 7700 BLAKE2B d4d1dde410c4194acb51f74f374cf11fa872e49fad8f5f24b596d72476403e5e312fedf7b0bcb1027384d53c8de565368d63c30eaf70a6e6cd958b82e5288ca3 SHA512 f800d6c37fe72477908c91457a738a73d2b8085bb5ae303d6d954405d6ccd98833b5da16a12c3ad1ab75d32a68dedc706dfaacc0fcbb95571dd829cdc03a356a
+DIST unindent-0.2.3.crate 7306 BLAKE2B a57407b117e99c230750c7d4a2a0899586c8271e4ba88ecb409c976905c014f42885372c234a75fbfbedf71dbed779f95f735975d150adacdcb61152a49db4c2 SHA512 2f1eb420ea3653b00d3e5fa0c2c105da8fd8a37cb3e699373c168604b799fccd5f0faf0cddce4212d119c2afb0c86b41efc3a50752b83ff7beda2bd84d360505
+DIST vcpkg-0.2.15.crate 228735 BLAKE2B 6b6bacd9a7fa38919241f45a97f58cae957e58d3aac99df208a26aa718e4f1644f4ccefa31b09151e5c1952288e0e5837c363918b98c7f55079a948a952c1c50 SHA512 7322a21e8811b2fe4e79e09dc321458068ecdf1953f05d36233f3278ecc0b1dfc64194db7010dd46fcf692285f42475beb090c6c6cac0c8f9fe0eb5c770e3172
+DIST version_check-0.9.4.crate 14895 BLAKE2B fa1fa4008af165bfc1fdbe560488afd9d232cfafee94104fbcc4cbc52f234849bff9ddfa88109a1ac682f6d9c1d86b0459893d223f64e65adc08966aaf93dc89 SHA512 b172dc9a3759a4a683ffc39b9a40b03b9974b626a088217de87090466cef695226557c226cf3e469b2b25ee7297b7eb0d7719878cab42457f80146a81943c0c8
+DIST windows-sys-0.45.0.crate 2568659 BLAKE2B 6f2d634d121a9bf41e2887e277a73f33aee69b04c7fcfc6ff973d21902787997f1e186f530e9226cddc003ffc3f85a179c069c8a8688de459f617df92d33f94f SHA512 f239346c0141b95aa76e0771e2f4e38b9a592f3cd92c6001de353637cd65cd73b94cbf9917a4eaa9b0c0b2e6e2af920b9cf6b3fccb52770df5160254cffc1c47
+DIST windows-targets-0.42.2.crate 5492 BLAKE2B 42fc4a7d3e287fe2a70637e890304b49737776596f4a94a6d216668247092135e84322bd04caddd19c83b7700b0f27278e600ce8ed326957fabc21bffcae89b0 SHA512 84fbaffcad9a80beca77506aac26d0c5cb75aa0f21a5a70bcd3f6a16e71e8753ae00d3b89da9262c99756624163dcc0d6074fa9f99dfaae0dc098018209025f9
+DIST windows-targets-0.48.5.crate 6904 BLAKE2B 7396bb210f37bd51da86f39fca3425c8f6610721d5c4e94f9fafa0a8a8046303b3fcc6979146bcfaa32f4406d242a0455f6cbb220f84c6ff84650e755acf5223 SHA512 e079eeef255a046be7f8e6a31c14f7b230254ebcf05eed2944827bb3d2a0dc30940d87593cf544d5e7ef35f6312b99430efcfb01421d91b02bb9c4bef7d98709
+DIST windows_aarch64_gnullvm-0.42.2.crate 364071 BLAKE2B 97c4e3b2a2dd3f936f9bfcdad23639c9c4c499eed220aec361d26d6013d798efa118e6b298f9cf841ac149d2ae5d58ca653731718450fcf2910bb5f6fa39159f SHA512 75cd7eb1def8ce9d0ff3d7468d2b1cc31cc76c08f981a2460c3d1eb09cff7100d7442863a3591621c1f5f3b3f4badf0b5c95285b6ed583e37283a8403f1095f1
+DIST windows_aarch64_gnullvm-0.48.5.crate 418492 BLAKE2B 5c6f7d73ad05740f0bac304ed1ef9b2ea63b0d6ca8f875552ae299a0b73b1557e8fe996f1c2b69be9f2df350c9288690f49ee62239a2896991364331d6c55462 SHA512 20158d31454488f6053d3ad7b97d7fc6eae6cf37e4ba0e50c28bd29b368505eed64199ae31104d5f97b66846be54e5ed25c0ad31ea850819205c573a31ac0996
+DIST windows_aarch64_msvc-0.42.2.crate 666981 BLAKE2B 9f3cc5592cdede08bcdc1e7c455325279e3b763d96942695e10dccf1dfc37a81c749b69a7d6de883d4c0fa6e8a0d2f578fe2a8d6c42ad8ef6282590bf8fc87b7 SHA512 d2dafa8c94d01c1b65ca1bd631d31f2ef842f1db7accb132ff78c3f8483221b991afd3391563e03dcec42bbc9cbdc0ebdab47b991d25af85b5ba2ac1bbf8db63
+DIST windows_aarch64_msvc-0.48.5.crate 798483 BLAKE2B 60c466d6536426425a34b5ca20da97c8127ebeb4fb9b1363911165bada484f8913fcd50e90410b5661e0c27dbfe8f4eeaa62fb17d1f3566bfc82b6255e11619b SHA512 223f016c6f1a44dbc5c8a8428b39438f75380ea06951b7c26ed0877b19d79410c6fde5e4c7f2c839b6e76159131f39a1230e0e3a208dfc425ba9117e3665c4ff
+DIST windows_i686_gnu-0.42.2.crate 736236 BLAKE2B 4ef0496462afc73d9d72af7e5da1e6d3506a92f8172930e88ae64ab97596ffd31c4f97fb969e9b677e30159c27f00a8e756deb006b630fb98ce83f03c8b762e2 SHA512 ad09d650a05cb91cb6b40f59025c023a4c286bc1194586697c506016df2b9b0d5b02606b81687bc634795a0d9a9b8a73e486599328ae09c853e8e5ba662fc59c
+DIST windows_i686_gnu-0.48.5.crate 844891 BLAKE2B fdc37cd74a4982056bf22fdb7b84e1c55dc838f3cb19ff3648730a77e673ef4ecc0380b3e4277bb8df2fcfa25f57b69014713d9e3ed27c28e19b25b3ea2ab774 SHA512 931ba5c1e4eb8ae73248e00d9611298d1c4b4b0dae719fdeb9243930cd420a103a7bc2738e0a4887c42c8f25728d6c5d64ad141dc092bc3f1d0f35dbe37d303a
+DIST windows_i686_msvc-0.42.2.crate 724951 BLAKE2B b084286cd4927efd2889b149abf8a9fe9d3d777130db9e592982660dbf9a96a0f5e723ca121465787aa11877d2d29a5a7d7cf066cdc8fa7e90d7ca7dcb7677f1 SHA512 c1706fc36d4b157c020744a11b3eb5d7dfbf05a0b56775bc717e94b7fd725816b20154fdbcd69ac08dbfb8b8bbfa74fab72d7a9c10399aad6a1cc54cf597e804
+DIST windows_i686_msvc-0.48.5.crate 864300 BLAKE2B 3d3ea8be55e2d6ced0eeda18abe1dffb925a1a78f456d683e4450d9f2fd287ad2e8494d65b2b770c677a12b3a60d10f0435e16c61880e3867c3657fd44892442 SHA512 70e2fb4fdb006a4cbd43ab2c7e940b277a15fb1790dfa2d1fc1f1fd18bead4886f6dc046e44326603e4894d988578917b8932aba5d9a6a4cc8424911cad9dc7e
+DIST windows_x86_64_gnu-0.42.2.crate 699373 BLAKE2B 01c70809d564b16b268656e47295e99c992d8f9839fac8a51338a0e7c3b9cdcd0429c456ca8c1c139a8c687ed7ed6c43a82250889d881aadaa65bd037223e0a6 SHA512 5767af3c86e717f93137a89d442230e6b60a649057edb3ab104b1f82c0bcd64fe089dcdf2f4fd486a799bece1ddb5f0449641536b678211945e749ae24f35c1f
+DIST windows_x86_64_gnu-0.48.5.crate 801619 BLAKE2B aa7e7e6a6ff9f9553ada3a0a39a9aa798e9d995a8eef36e0b6fdb2a0db93ddecee5548970575271fe43aec74797a420d0ee231d503b5bad1bd999059261e0e33 SHA512 1d6056fae430b3d042bdff3c6217c76be4b8b9f5dada9bad06beaac2db7d7ab9b0a82e44f498ec88e61afa73e99f56d84d445dc3847732b9ce5d947e08485f74
+DIST windows_x86_64_gnullvm-0.42.2.crate 364068 BLAKE2B 64bc53e98eb3fc649c9b43a6e734de4e65088e41edacabd49f7afcc5dc6e1065c563ecfc682747dda05978dea2dba4f45c16fcc18c3b00684c3d93681e5a7deb SHA512 d39a8bc948110fe612d3f8d6628b3f0d56620df11d8a49e0fabb6c90389ad407582b3af10e4eab46c79b3d11d2e10753d73d9e55963fbeac085f41e9749bdba3
+DIST windows_x86_64_gnullvm-0.48.5.crate 418486 BLAKE2B 12a2199d434617c1df1a839e9f435620ad64b40c579f6d0c3677553ad7a48e5765d12c266b04946402e15c92cff2e4ac4979ce2130750ef426e2672119680284 SHA512 c016d5b5e73832b61ff67929d92fa8c16e154656294357266ad29ce1f44db4ca2d2935dba31a6b571187dc838b1d22f1e3b41fefffd1d719a338439adf1646aa
+DIST windows_x86_64_msvc-0.42.2.crate 666936 BLAKE2B bc3a456e7f8bc272f8978ec69506ec9d89f97b7582ebbe05d8bd57bdf8156ef62d0d2dc6137a97e81d54059d70db97a24af9a038adff357f5dfd28805d6193b5 SHA512 53a35f438903fceb59e36bd2ac331773fb8e6c8c5a6d984e79021761f91b3b4a23efe49d219667a4d0d23dcdbf906da9c24e74fb1cff93395b5c55ff524e3788
+DIST windows_x86_64_msvc-0.48.5.crate 798412 BLAKE2B 8abc0721e2fb337fe17c91d278947d36122d9045b839ba0cf3e690202d242265b676f23cc301da5f9d98c56ca4ecb76f7d6f072ee71bf986a1deca87020b90e5 SHA512 fa1c5cd14ca2ff0082e2504cf59d317dc4dc6f7138d35c12f95d4476a9c13d8b7f5537d0ee251eee7c99411ad31b22263171b7fbd391daa5d3ea3488ceaa61a0
diff --git a/dev-python/cryptography/cryptography-41.0.7.ebuild b/dev-python/cryptography/cryptography-41.0.7.ebuild
new file mode 100644
index 0000000..a04f604
--- /dev/null
+++ b/dev-python/cryptography/cryptography-41.0.7.ebuild
@@ -0,0 +1,157 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=yes
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+CRATES="
+ Inflector@0.11.4
+ aliasable@0.1.3
+ asn1@0.15.2
+ asn1_derive@0.15.2
+ autocfg@1.1.0
+ base64@0.13.1
+ bitflags@1.3.2
+ bitflags@2.4.1
+ cc@1.0.79
+ cfg-if@1.0.0
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ indoc@1.0.9
+ libc@0.2.144
+ lock_api@0.4.9
+ memoffset@0.8.0
+ once_cell@1.17.2
+ openssl-macros@0.1.1
+ openssl-sys@0.9.96
+ openssl@0.10.60
+ ouroboros@0.15.6
+ ouroboros_macro@0.15.6
+ parking_lot@0.12.1
+ parking_lot_core@0.9.7
+ pem@1.1.1
+ pkg-config@0.3.27
+ proc-macro-error-attr@1.0.4
+ proc-macro-error@1.0.4
+ proc-macro2@1.0.64
+ pyo3-build-config@0.18.3
+ pyo3-ffi@0.18.3
+ pyo3-macros-backend@0.18.3
+ pyo3-macros@0.18.3
+ pyo3@0.18.3
+ quote@1.0.28
+ redox_syscall@0.2.16
+ scopeguard@1.1.0
+ smallvec@1.10.0
+ syn@1.0.109
+ syn@2.0.18
+ target-lexicon@0.12.7
+ unicode-ident@1.0.9
+ unindent@0.1.11
+ vcpkg@0.2.15
+ version_check@0.9.4
+ windows-sys@0.45.0
+ windows-targets@0.42.2
+ windows_aarch64_gnullvm@0.42.2
+ windows_aarch64_msvc@0.42.2
+ windows_i686_gnu@0.42.2
+ windows_i686_msvc@0.42.2
+ windows_x86_64_gnu@0.42.2
+ windows_x86_64_gnullvm@0.42.2
+ windows_x86_64_msvc@0.42.2
+"
+
+inherit cargo distutils-r1 flag-o-matic multiprocessing pypi
+
+VEC_P=cryptography_vectors-$(ver_cut 1-3)
+DESCRIPTION="Library providing cryptographic recipes and primitives"
+HOMEPAGE="
+ https://github.com/pyca/cryptography/
+ https://pypi.org/project/cryptography/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+ test? (
+ $(pypi_sdist_url cryptography_vectors "$(ver_cut 1-3)")
+ )
+"
+
+LICENSE="|| ( Apache-2.0 BSD ) PSF-2"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD-2 BSD MIT
+ Unicode-DFS-2016
+"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~s390 sparc x86"
+
+RDEPEND="
+ >=dev-libs/openssl-1.0.2o-r6:0=
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.8:=[${PYTHON_USEDEP}]
+ ' 'python*')
+"
+DEPEND="
+ ${RDEPEND}
+"
+# XXX: Drop explicit >=virtual/rust-1.56.0 dep once that's the minimum in cargo.eclass
+# and replace it with ${RUST_DEPEND}
+BDEPEND="
+ dev-python/setuptools-rust[${PYTHON_USEDEP}]
+ >=virtual/rust-1.56.0
+ test? (
+ >=dev-python/hypothesis-1.11.4[${PYTHON_USEDEP}]
+ dev-python/iso8601[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cryptography/hazmat/bindings/_rust.*.so"
+
+distutils_enable_tests pytest
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.96 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-42.0.5-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ sed -i -e 's:--benchmark-disable::' pyproject.toml || die
+
+ # work around availability macros not supported in GCC (yet)
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ local darwinok=0
+ if [[ ${CHOST##*-darwin} -ge 16 ]] ; then
+ darwinok=1
+ fi
+ sed -i -e 's/__builtin_available(macOS 10\.12, \*)/'"${darwinok}"'/' \
+ src/_cffi_src/openssl/src/osrandom_engine.c || die
+ fi
+}
+
+python_configure_all() {
+ filter-lto # bug #903908
+}
+
+python_test() {
+ local -x PYTHONPATH="${PYTHONPATH}:${WORKDIR}/cryptography_vectors-${PV}"
+ local EPYTEST_IGNORE=(
+ tests/bench
+ )
+ epytest -n "$(makeopts_jobs)"
+}
diff --git a/dev-python/cryptography/cryptography-42.0.0.ebuild b/dev-python/cryptography/cryptography-42.0.0.ebuild
new file mode 100644
index 0000000..f0c630f
--- /dev/null
+++ b/dev-python/cryptography/cryptography-42.0.0.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=yes
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+CRATES="
+ asn1@0.15.5
+ asn1_derive@0.15.5
+ autocfg@1.1.0
+ base64@0.21.7
+ bitflags@1.3.2
+ bitflags@2.4.2
+ cc@1.0.83
+ cfg-if@1.0.0
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ heck@0.4.1
+ indoc@2.0.4
+ libc@0.2.152
+ lock_api@0.4.11
+ memoffset@0.9.0
+ once_cell@1.19.0
+ openssl-macros@0.1.1
+ openssl-sys@0.9.99
+ openssl@0.10.63
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ pem@3.0.3
+ pkg-config@0.3.29
+ proc-macro2@1.0.78
+ pyo3-build-config@0.20.2
+ pyo3-ffi@0.20.2
+ pyo3-macros-backend@0.20.2
+ pyo3-macros@0.20.2
+ pyo3@0.20.2
+ quote@1.0.35
+ redox_syscall@0.4.1
+ scopeguard@1.2.0
+ self_cell@1.0.3
+ smallvec@1.13.1
+ syn@2.0.48
+ target-lexicon@0.12.13
+ unicode-ident@1.0.12
+ unindent@0.2.3
+ vcpkg@0.2.15
+ windows-targets@0.48.5
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_msvc@0.48.5
+ windows_i686_gnu@0.48.5
+ windows_i686_msvc@0.48.5
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_msvc@0.48.5
+"
+
+inherit cargo distutils-r1 flag-o-matic multiprocessing pypi
+
+VEC_P=cryptography_vectors-$(ver_cut 1-3)
+DESCRIPTION="Library providing cryptographic recipes and primitives"
+HOMEPAGE="
+ https://github.com/pyca/cryptography/
+ https://pypi.org/project/cryptography/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+ test? (
+ $(pypi_sdist_url cryptography_vectors "$(ver_cut 1-3)")
+ )
+"
+
+LICENSE="|| ( Apache-2.0 BSD ) PSF-2"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD MIT Unicode-DFS-2016
+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-libs/openssl-1.0.2o-r6:0=
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.8:=[${PYTHON_USEDEP}]
+ ' 'python*')
+"
+DEPEND="
+ ${RDEPEND}
+"
+# XXX: Drop explicit >=virtual/rust-1.56.0 dep once that's the minimum in cargo.eclass
+# and replace it with ${RUST_DEPEND}
+BDEPEND="
+ >=dev-python/setuptools-rust-1.7.0[${PYTHON_USEDEP}]
+ >=virtual/rust-1.56.0
+ test? (
+ dev-python/certifi[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-1.11.4[${PYTHON_USEDEP}]
+ dev-python/iso8601[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cryptography/hazmat/bindings/_rust.*.so"
+
+distutils_enable_tests pytest
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.99 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-42.0.5-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ sed -i -e 's:--benchmark-disable::' pyproject.toml || die
+
+ # work around availability macros not supported in GCC (yet)
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ local darwinok=0
+ if [[ ${CHOST##*-darwin} -ge 16 ]] ; then
+ darwinok=1
+ fi
+ sed -i -e 's/__builtin_available(macOS 10\.12, \*)/'"${darwinok}"'/' \
+ src/_cffi_src/openssl/src/osrandom_engine.c || die
+ fi
+}
+
+python_configure_all() {
+ filter-lto # bug #903908
+}
+
+python_test() {
+ local -x PYTHONPATH="${PYTHONPATH}:${WORKDIR}/cryptography_vectors-${PV}"
+ local EPYTEST_IGNORE=(
+ tests/bench
+ )
+ epytest -n "$(makeopts_jobs)"
+}
diff --git a/dev-python/cryptography/cryptography-42.0.1.ebuild b/dev-python/cryptography/cryptography-42.0.1.ebuild
new file mode 100644
index 0000000..f0c630f
--- /dev/null
+++ b/dev-python/cryptography/cryptography-42.0.1.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=yes
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+CRATES="
+ asn1@0.15.5
+ asn1_derive@0.15.5
+ autocfg@1.1.0
+ base64@0.21.7
+ bitflags@1.3.2
+ bitflags@2.4.2
+ cc@1.0.83
+ cfg-if@1.0.0
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ heck@0.4.1
+ indoc@2.0.4
+ libc@0.2.152
+ lock_api@0.4.11
+ memoffset@0.9.0
+ once_cell@1.19.0
+ openssl-macros@0.1.1
+ openssl-sys@0.9.99
+ openssl@0.10.63
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ pem@3.0.3
+ pkg-config@0.3.29
+ proc-macro2@1.0.78
+ pyo3-build-config@0.20.2
+ pyo3-ffi@0.20.2
+ pyo3-macros-backend@0.20.2
+ pyo3-macros@0.20.2
+ pyo3@0.20.2
+ quote@1.0.35
+ redox_syscall@0.4.1
+ scopeguard@1.2.0
+ self_cell@1.0.3
+ smallvec@1.13.1
+ syn@2.0.48
+ target-lexicon@0.12.13
+ unicode-ident@1.0.12
+ unindent@0.2.3
+ vcpkg@0.2.15
+ windows-targets@0.48.5
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_msvc@0.48.5
+ windows_i686_gnu@0.48.5
+ windows_i686_msvc@0.48.5
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_msvc@0.48.5
+"
+
+inherit cargo distutils-r1 flag-o-matic multiprocessing pypi
+
+VEC_P=cryptography_vectors-$(ver_cut 1-3)
+DESCRIPTION="Library providing cryptographic recipes and primitives"
+HOMEPAGE="
+ https://github.com/pyca/cryptography/
+ https://pypi.org/project/cryptography/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+ test? (
+ $(pypi_sdist_url cryptography_vectors "$(ver_cut 1-3)")
+ )
+"
+
+LICENSE="|| ( Apache-2.0 BSD ) PSF-2"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD MIT Unicode-DFS-2016
+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-libs/openssl-1.0.2o-r6:0=
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.8:=[${PYTHON_USEDEP}]
+ ' 'python*')
+"
+DEPEND="
+ ${RDEPEND}
+"
+# XXX: Drop explicit >=virtual/rust-1.56.0 dep once that's the minimum in cargo.eclass
+# and replace it with ${RUST_DEPEND}
+BDEPEND="
+ >=dev-python/setuptools-rust-1.7.0[${PYTHON_USEDEP}]
+ >=virtual/rust-1.56.0
+ test? (
+ dev-python/certifi[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-1.11.4[${PYTHON_USEDEP}]
+ dev-python/iso8601[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cryptography/hazmat/bindings/_rust.*.so"
+
+distutils_enable_tests pytest
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.99 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-42.0.5-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ sed -i -e 's:--benchmark-disable::' pyproject.toml || die
+
+ # work around availability macros not supported in GCC (yet)
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ local darwinok=0
+ if [[ ${CHOST##*-darwin} -ge 16 ]] ; then
+ darwinok=1
+ fi
+ sed -i -e 's/__builtin_available(macOS 10\.12, \*)/'"${darwinok}"'/' \
+ src/_cffi_src/openssl/src/osrandom_engine.c || die
+ fi
+}
+
+python_configure_all() {
+ filter-lto # bug #903908
+}
+
+python_test() {
+ local -x PYTHONPATH="${PYTHONPATH}:${WORKDIR}/cryptography_vectors-${PV}"
+ local EPYTEST_IGNORE=(
+ tests/bench
+ )
+ epytest -n "$(makeopts_jobs)"
+}
diff --git a/dev-python/cryptography/cryptography-42.0.2.ebuild b/dev-python/cryptography/cryptography-42.0.2.ebuild
new file mode 100644
index 0000000..f0c630f
--- /dev/null
+++ b/dev-python/cryptography/cryptography-42.0.2.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=yes
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+CRATES="
+ asn1@0.15.5
+ asn1_derive@0.15.5
+ autocfg@1.1.0
+ base64@0.21.7
+ bitflags@1.3.2
+ bitflags@2.4.2
+ cc@1.0.83
+ cfg-if@1.0.0
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ heck@0.4.1
+ indoc@2.0.4
+ libc@0.2.152
+ lock_api@0.4.11
+ memoffset@0.9.0
+ once_cell@1.19.0
+ openssl-macros@0.1.1
+ openssl-sys@0.9.99
+ openssl@0.10.63
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ pem@3.0.3
+ pkg-config@0.3.29
+ proc-macro2@1.0.78
+ pyo3-build-config@0.20.2
+ pyo3-ffi@0.20.2
+ pyo3-macros-backend@0.20.2
+ pyo3-macros@0.20.2
+ pyo3@0.20.2
+ quote@1.0.35
+ redox_syscall@0.4.1
+ scopeguard@1.2.0
+ self_cell@1.0.3
+ smallvec@1.13.1
+ syn@2.0.48
+ target-lexicon@0.12.13
+ unicode-ident@1.0.12
+ unindent@0.2.3
+ vcpkg@0.2.15
+ windows-targets@0.48.5
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_msvc@0.48.5
+ windows_i686_gnu@0.48.5
+ windows_i686_msvc@0.48.5
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_msvc@0.48.5
+"
+
+inherit cargo distutils-r1 flag-o-matic multiprocessing pypi
+
+VEC_P=cryptography_vectors-$(ver_cut 1-3)
+DESCRIPTION="Library providing cryptographic recipes and primitives"
+HOMEPAGE="
+ https://github.com/pyca/cryptography/
+ https://pypi.org/project/cryptography/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+ test? (
+ $(pypi_sdist_url cryptography_vectors "$(ver_cut 1-3)")
+ )
+"
+
+LICENSE="|| ( Apache-2.0 BSD ) PSF-2"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD MIT Unicode-DFS-2016
+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-libs/openssl-1.0.2o-r6:0=
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.8:=[${PYTHON_USEDEP}]
+ ' 'python*')
+"
+DEPEND="
+ ${RDEPEND}
+"
+# XXX: Drop explicit >=virtual/rust-1.56.0 dep once that's the minimum in cargo.eclass
+# and replace it with ${RUST_DEPEND}
+BDEPEND="
+ >=dev-python/setuptools-rust-1.7.0[${PYTHON_USEDEP}]
+ >=virtual/rust-1.56.0
+ test? (
+ dev-python/certifi[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-1.11.4[${PYTHON_USEDEP}]
+ dev-python/iso8601[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cryptography/hazmat/bindings/_rust.*.so"
+
+distutils_enable_tests pytest
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.99 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-42.0.5-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ sed -i -e 's:--benchmark-disable::' pyproject.toml || die
+
+ # work around availability macros not supported in GCC (yet)
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ local darwinok=0
+ if [[ ${CHOST##*-darwin} -ge 16 ]] ; then
+ darwinok=1
+ fi
+ sed -i -e 's/__builtin_available(macOS 10\.12, \*)/'"${darwinok}"'/' \
+ src/_cffi_src/openssl/src/osrandom_engine.c || die
+ fi
+}
+
+python_configure_all() {
+ filter-lto # bug #903908
+}
+
+python_test() {
+ local -x PYTHONPATH="${PYTHONPATH}:${WORKDIR}/cryptography_vectors-${PV}"
+ local EPYTEST_IGNORE=(
+ tests/bench
+ )
+ epytest -n "$(makeopts_jobs)"
+}
diff --git a/dev-python/cryptography/cryptography-42.0.3.ebuild b/dev-python/cryptography/cryptography-42.0.3.ebuild
new file mode 100644
index 0000000..f0c630f
--- /dev/null
+++ b/dev-python/cryptography/cryptography-42.0.3.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=yes
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+CRATES="
+ asn1@0.15.5
+ asn1_derive@0.15.5
+ autocfg@1.1.0
+ base64@0.21.7
+ bitflags@1.3.2
+ bitflags@2.4.2
+ cc@1.0.83
+ cfg-if@1.0.0
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ heck@0.4.1
+ indoc@2.0.4
+ libc@0.2.152
+ lock_api@0.4.11
+ memoffset@0.9.0
+ once_cell@1.19.0
+ openssl-macros@0.1.1
+ openssl-sys@0.9.99
+ openssl@0.10.63
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ pem@3.0.3
+ pkg-config@0.3.29
+ proc-macro2@1.0.78
+ pyo3-build-config@0.20.2
+ pyo3-ffi@0.20.2
+ pyo3-macros-backend@0.20.2
+ pyo3-macros@0.20.2
+ pyo3@0.20.2
+ quote@1.0.35
+ redox_syscall@0.4.1
+ scopeguard@1.2.0
+ self_cell@1.0.3
+ smallvec@1.13.1
+ syn@2.0.48
+ target-lexicon@0.12.13
+ unicode-ident@1.0.12
+ unindent@0.2.3
+ vcpkg@0.2.15
+ windows-targets@0.48.5
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_msvc@0.48.5
+ windows_i686_gnu@0.48.5
+ windows_i686_msvc@0.48.5
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_msvc@0.48.5
+"
+
+inherit cargo distutils-r1 flag-o-matic multiprocessing pypi
+
+VEC_P=cryptography_vectors-$(ver_cut 1-3)
+DESCRIPTION="Library providing cryptographic recipes and primitives"
+HOMEPAGE="
+ https://github.com/pyca/cryptography/
+ https://pypi.org/project/cryptography/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+ test? (
+ $(pypi_sdist_url cryptography_vectors "$(ver_cut 1-3)")
+ )
+"
+
+LICENSE="|| ( Apache-2.0 BSD ) PSF-2"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD MIT Unicode-DFS-2016
+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-libs/openssl-1.0.2o-r6:0=
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.8:=[${PYTHON_USEDEP}]
+ ' 'python*')
+"
+DEPEND="
+ ${RDEPEND}
+"
+# XXX: Drop explicit >=virtual/rust-1.56.0 dep once that's the minimum in cargo.eclass
+# and replace it with ${RUST_DEPEND}
+BDEPEND="
+ >=dev-python/setuptools-rust-1.7.0[${PYTHON_USEDEP}]
+ >=virtual/rust-1.56.0
+ test? (
+ dev-python/certifi[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-1.11.4[${PYTHON_USEDEP}]
+ dev-python/iso8601[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cryptography/hazmat/bindings/_rust.*.so"
+
+distutils_enable_tests pytest
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.99 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-42.0.5-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ sed -i -e 's:--benchmark-disable::' pyproject.toml || die
+
+ # work around availability macros not supported in GCC (yet)
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ local darwinok=0
+ if [[ ${CHOST##*-darwin} -ge 16 ]] ; then
+ darwinok=1
+ fi
+ sed -i -e 's/__builtin_available(macOS 10\.12, \*)/'"${darwinok}"'/' \
+ src/_cffi_src/openssl/src/osrandom_engine.c || die
+ fi
+}
+
+python_configure_all() {
+ filter-lto # bug #903908
+}
+
+python_test() {
+ local -x PYTHONPATH="${PYTHONPATH}:${WORKDIR}/cryptography_vectors-${PV}"
+ local EPYTEST_IGNORE=(
+ tests/bench
+ )
+ epytest -n "$(makeopts_jobs)"
+}
diff --git a/dev-python/cryptography/cryptography-42.0.4.ebuild b/dev-python/cryptography/cryptography-42.0.4.ebuild
new file mode 100644
index 0000000..316ccaf
--- /dev/null
+++ b/dev-python/cryptography/cryptography-42.0.4.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=yes
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+CRATES="
+ asn1@0.15.5
+ asn1_derive@0.15.5
+ autocfg@1.1.0
+ base64@0.21.7
+ bitflags@1.3.2
+ bitflags@2.4.2
+ cc@1.0.83
+ cfg-if@1.0.0
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ heck@0.4.1
+ indoc@2.0.4
+ libc@0.2.152
+ lock_api@0.4.11
+ memoffset@0.9.0
+ once_cell@1.19.0
+ openssl-macros@0.1.1
+ openssl-sys@0.9.99
+ openssl@0.10.63
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ pem@3.0.3
+ pkg-config@0.3.29
+ proc-macro2@1.0.78
+ pyo3-build-config@0.20.2
+ pyo3-ffi@0.20.2
+ pyo3-macros-backend@0.20.2
+ pyo3-macros@0.20.2
+ pyo3@0.20.2
+ quote@1.0.35
+ redox_syscall@0.4.1
+ scopeguard@1.2.0
+ self_cell@1.0.3
+ smallvec@1.13.1
+ syn@2.0.48
+ target-lexicon@0.12.13
+ unicode-ident@1.0.12
+ unindent@0.2.3
+ vcpkg@0.2.15
+ windows-targets@0.48.5
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_msvc@0.48.5
+ windows_i686_gnu@0.48.5
+ windows_i686_msvc@0.48.5
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_msvc@0.48.5
+"
+
+inherit cargo distutils-r1 flag-o-matic multiprocessing pypi
+
+VEC_P=cryptography_vectors-$(ver_cut 1-3)
+DESCRIPTION="Library providing cryptographic recipes and primitives"
+HOMEPAGE="
+ https://github.com/pyca/cryptography/
+ https://pypi.org/project/cryptography/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+ test? (
+ $(pypi_sdist_url cryptography_vectors "$(ver_cut 1-3)")
+ )
+"
+
+LICENSE="|| ( Apache-2.0 BSD ) PSF-2"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD MIT Unicode-DFS-2016
+"
+SLOT="0"
+KEYWORDS="amd64 ~arm ~arm64 ~loong ~ppc ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ >=dev-libs/openssl-1.0.2o-r6:0=
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.8:=[${PYTHON_USEDEP}]
+ ' 'python*')
+"
+DEPEND="
+ ${RDEPEND}
+"
+# XXX: Drop explicit >=virtual/rust-1.56.0 dep once that's the minimum in cargo.eclass
+# and replace it with ${RUST_DEPEND}
+BDEPEND="
+ >=dev-python/setuptools-rust-1.7.0[${PYTHON_USEDEP}]
+ >=virtual/rust-1.56.0
+ test? (
+ dev-python/certifi[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-1.11.4[${PYTHON_USEDEP}]
+ dev-python/iso8601[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cryptography/hazmat/bindings/_rust.*.so"
+
+distutils_enable_tests pytest
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.99 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-42.0.5-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ sed -i -e 's:--benchmark-disable::' pyproject.toml || die
+
+ # work around availability macros not supported in GCC (yet)
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ local darwinok=0
+ if [[ ${CHOST##*-darwin} -ge 16 ]] ; then
+ darwinok=1
+ fi
+ sed -i -e 's/__builtin_available(macOS 10\.12, \*)/'"${darwinok}"'/' \
+ src/_cffi_src/openssl/src/osrandom_engine.c || die
+ fi
+}
+
+python_configure_all() {
+ filter-lto # bug #903908
+}
+
+python_test() {
+ local -x PYTHONPATH="${PYTHONPATH}:${WORKDIR}/cryptography_vectors-${PV}"
+ local EPYTEST_IGNORE=(
+ tests/bench
+ )
+ epytest -n "$(makeopts_jobs)"
+}
diff --git a/dev-python/cryptography/cryptography-42.0.5.ebuild b/dev-python/cryptography/cryptography-42.0.5.ebuild
new file mode 100644
index 0000000..37f1782
--- /dev/null
+++ b/dev-python/cryptography/cryptography-42.0.5.ebuild
@@ -0,0 +1,151 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=yes
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} pypy3 )
+PYTHON_REQ_USE="threads(+)"
+
+CRATES="
+ asn1@0.15.5
+ asn1_derive@0.15.5
+ autocfg@1.1.0
+ base64@0.21.7
+ bitflags@1.3.2
+ bitflags@2.4.2
+ cc@1.0.83
+ cfg-if@1.0.0
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ heck@0.4.1
+ indoc@2.0.4
+ libc@0.2.152
+ lock_api@0.4.11
+ memoffset@0.9.0
+ once_cell@1.19.0
+ openssl-macros@0.1.1
+ openssl-sys@0.9.99
+ openssl@0.10.63
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ pem@3.0.3
+ pkg-config@0.3.29
+ portable-atomic@1.6.0
+ proc-macro2@1.0.78
+ pyo3-build-config@0.20.3
+ pyo3-ffi@0.20.3
+ pyo3-macros-backend@0.20.3
+ pyo3-macros@0.20.3
+ pyo3@0.20.3
+ quote@1.0.35
+ redox_syscall@0.4.1
+ scopeguard@1.2.0
+ self_cell@1.0.3
+ smallvec@1.13.1
+ syn@2.0.48
+ target-lexicon@0.12.13
+ unicode-ident@1.0.12
+ unindent@0.2.3
+ vcpkg@0.2.15
+ windows-targets@0.48.5
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_msvc@0.48.5
+ windows_i686_gnu@0.48.5
+ windows_i686_msvc@0.48.5
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_msvc@0.48.5
+"
+
+inherit cargo distutils-r1 flag-o-matic multiprocessing pypi
+
+VEC_P=cryptography_vectors-$(ver_cut 1-3)
+DESCRIPTION="Library providing cryptographic recipes and primitives"
+HOMEPAGE="
+ https://github.com/pyca/cryptography/
+ https://pypi.org/project/cryptography/
+"
+SRC_URI+="
+ ${CARGO_CRATE_URIS}
+ test? (
+ $(pypi_sdist_url cryptography_vectors "$(ver_cut 1-3)")
+ )
+"
+
+LICENSE="|| ( Apache-2.0 BSD ) PSF-2"
+# Dependent crate licenses
+LICENSE+="
+ Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD MIT Unicode-DFS-2016
+"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv ~s390 sparc ~x86"
+
+RDEPEND="
+ >=dev-libs/openssl-1.0.2o-r6:0=
+ $(python_gen_cond_dep '
+ >=dev-python/cffi-1.8:=[${PYTHON_USEDEP}]
+ ' 'python*')
+"
+DEPEND="
+ ${RDEPEND}
+"
+# XXX: Drop explicit >=virtual/rust-1.56.0 dep once that's the minimum in cargo.eclass
+# and replace it with ${RUST_DEPEND}
+BDEPEND="
+ >=dev-python/setuptools-rust-1.7.0[${PYTHON_USEDEP}]
+ >=virtual/rust-1.56.0
+ test? (
+ dev-python/certifi[${PYTHON_USEDEP}]
+ >=dev-python/hypothesis-1.11.4[${PYTHON_USEDEP}]
+ dev-python/iso8601[${PYTHON_USEDEP}]
+ dev-python/pretend[${PYTHON_USEDEP}]
+ dev-python/pyasn1-modules[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-xdist[${PYTHON_USEDEP}]
+ dev-python/pytz[${PYTHON_USEDEP}]
+ )
+"
+
+# Files built without CFLAGS/LDFLAGS, acceptable for rust
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/cryptography/hazmat/bindings/_rust.*.so"
+
+distutils_enable_tests pytest
+
+src_unpack() {
+ cargo_src_unpack
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.99 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-42.0.5-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ sed -i -e 's:--benchmark-disable::' pyproject.toml || die
+
+ # work around availability macros not supported in GCC (yet)
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ local darwinok=0
+ if [[ ${CHOST##*-darwin} -ge 16 ]] ; then
+ darwinok=1
+ fi
+ sed -i -e 's/__builtin_available(macOS 10\.12, \*)/'"${darwinok}"'/' \
+ src/_cffi_src/openssl/src/osrandom_engine.c || die
+ fi
+}
+
+python_configure_all() {
+ filter-lto # bug #903908
+}
+
+python_test() {
+ local -x PYTHONPATH="${PYTHONPATH}:${WORKDIR}/cryptography_vectors-${PV}"
+ local EPYTEST_IGNORE=(
+ tests/bench
+ )
+ epytest -n "$(makeopts_jobs)"
+}
diff --git a/dev-python/cryptography/files/cryptography-42.0.5-libressl-openssl-sys.patch b/dev-python/cryptography/files/cryptography-42.0.5-libressl-openssl-sys.patch
new file mode 100644
index 0000000..c3ba287
--- /dev/null
+++ b/dev-python/cryptography/files/cryptography-42.0.5-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -293,6 +293,7 @@
+ (3, 8, 0) => ('3', '8', '0'),
+ (3, 8, 1) => ('3', '8', '1'),
+ (3, 8, _) => ('3', '8', 'x'),
++ (_, _, _) => ('x', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-python/cryptography/metadata.xml b/dev-python/cryptography/metadata.xml
new file mode 100644
index 0000000..e334e10
--- /dev/null
+++ b/dev-python/cryptography/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>python@gentoo.org</email>
+ <name>Python</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:cryptography_project:cryptography</remote-id>
+ <remote-id type="pypi">cryptography</remote-id>
+ <remote-id type="github">pyca/cryptography</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-python/m2crypto/Manifest b/dev-python/m2crypto/Manifest
new file mode 100644
index 0000000..3574714
--- /dev/null
+++ b/dev-python/m2crypto/Manifest
@@ -0,0 +1 @@
+DIST M2Crypto-0.41.0.tar.gz 1151680 BLAKE2B 6c5294294fd62ca69eec8222324ce8a1012c999aab241eba2e5b0085c0d7b598fd62f26e106bea95bfad3199abb2db9876547f521b34f45930b00540a6ecc24a SHA512 50ca5e32ae999b9ecdc7f3bbd35221b4a7523ef29e54eb4bc266457723117718955f99b9e7ac42a4cb982f0e22a94e5c852d6886d7dfb157d040ad86c17660fb
diff --git a/dev-python/m2crypto/files/m2crypto-libressl-0.38.0.patch b/dev-python/m2crypto/files/m2crypto-libressl-0.38.0.patch
new file mode 100644
index 0000000..e125fc6
--- /dev/null
+++ b/dev-python/m2crypto/files/m2crypto-libressl-0.38.0.patch
@@ -0,0 +1,185 @@
+$OpenBSD: patch-src_M2Crypto_BIO_py,v 1.1 2021/07/24 20:02:04 sthen Exp $
+
+Partially revert https://gitlab.com/m2crypto/m2crypto/commit/738cd0bf3dc2ee619f598290d5bf4c2190987f16:
+
+ * Fix BIO.File ... return type of BIO.readline() and close properly.
+ That is, flush BIO.File() before closing and close also underlying
+ system file.
+
+For Python 2 this results in:
+
+python2 -c "import M2Crypto; M2Crypto.BIO.openfile('/etc/ssl/cert.pem')"
+Traceback (most recent call last):
+ File "<string>", line 1, in <module>
+ File "/usr/local/lib/python2.7/site-packages/M2Crypto/BIO.py", line 284, in openfile
+ return File(f)
+ File "/usr/local/lib/python2.7/site-packages/M2Crypto/BIO.py", line 239, in __init__
+ pyfile.flush()
+IOError: [Errno 9] Bad file descriptor
+
+https://gitlab.com/m2crypto/m2crypto/issues/211
+
+Index: src/M2Crypto/BIO.py
+--- a/src/M2Crypto/BIO.py.orig
++++ b/src/M2Crypto/BIO.py
+@@ -235,8 +235,9 @@ class File(BIO):
+ #
+ # https://docs.python.org/3.3/c-api/file.html
+ #
+- pyfile.flush()
+- self.fname = pyfile.name
++ if six.PY3:
++ pyfile.flush()
++ self.fname = pyfile.name
+ self.pyfile = pyfile
+ # Be wary of https://github.com/openssl/openssl/pull/1925
+ # BIO_new_fd is NEVER to be used before OpenSSL 1.1.1
+@@ -246,7 +247,8 @@ class File(BIO):
+ self.bio = m2.bio_new_pyfile(pyfile, m2.bio_noclose)
+
+ self.close_pyfile = close_pyfile
+- self.closed = False
++ if six.PY3:
++ self.closed = False
+
+ def flush(self):
+ # type: () -> None
+@@ -255,8 +257,9 @@ class File(BIO):
+
+ def close(self):
+ # type: () -> None
+- self.flush()
+- super(File, self).close()
++ if six.PY3:
++ self.flush()
++ super(File, self).close()
+ if self.close_pyfile:
+ self.pyfile.close()
+
+$OpenBSD: patch-src_SWIG__lib11_compat_i,v 1.2 2021/10/07 22:32:54 tb Exp $
+
+Provide CRYPTO_zalloc to fix build with LibreSSL
+
+Index: src/SWIG/_lib11_compat.i
+--- a/src/SWIG/_lib11_compat.i.orig
++++ b/src/SWIG/_lib11_compat.i
+@@ -8,7 +8,7 @@
+ */
+
+ %{
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L
++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #include <string.h>
+ #include <openssl/engine.h>
+@@ -24,6 +24,8 @@ static void *CRYPTO_zalloc(size_t num, const char *fil
+ return ret;
+ }
+
++#endif
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ #include <openssl/bn.h>
+
+ #ifndef BN_F_BN_GENCB_NEW
+$OpenBSD: patch-src_SWIG__lib_i,v 1.2 2021/10/07 22:32:54 tb Exp $
+
+Fix build with LibreSSL
+
+Index: src/SWIG/_lib.i
+--- a/src/SWIG/_lib.i.orig
++++ b/src/SWIG/_lib.i
+@@ -21,7 +21,7 @@
+
+ %{
+ /* OpenSSL 1.0.2 copmatbility shim */
+-#if OPENSSL_VERSION_NUMBER < 0x10002000L
++#if OPENSSL_VERSION_NUMBER < 0x10002000L || defined(LIBRESSL_VERSION_NUMBER)
+ typedef void (*OPENSSL_sk_freefunc)(void *);
+ typedef void *(*OPENSSL_sk_copyfunc)(const void *);
+ typedef struct stack_st OPENSSL_STACK;
+$OpenBSD: patch-src_SWIG__threads_i,v 1.1 2021/07/24 20:02:04 sthen Exp $
+
+Fix build with LibreSSL
+
+Index: src/SWIG/_threads.i
+--- a/src/SWIG/_threads.i.orig
++++ b/src/SWIG/_threads.i
+@@ -5,7 +5,7 @@
+ #include <pythread.h>
+ #include <openssl/crypto.h>
+
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ #define CRYPTO_num_locks() (CRYPTO_NUM_LOCKS)
+ static PyThread_type_lock lock_cs[CRYPTO_num_locks()];
+ static long lock_count[CRYPTO_num_locks()];
+@@ -13,7 +13,7 @@ static int thread_mode = 0;
+ #endif
+
+ void threading_locking_callback(int mode, int type, const char *file, int line) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ if (mode & CRYPTO_LOCK) {
+ PyThread_acquire_lock(lock_cs[type], WAIT_LOCK);
+ lock_count[type]++;
+@@ -25,7 +25,7 @@ void threading_locking_callback(int mode, int type, co
+ }
+
+ unsigned long threading_id_callback(void) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ return (unsigned long)PyThread_get_thread_ident();
+ #else
+ return (unsigned long)0;
+@@ -35,7 +35,7 @@ unsigned long threading_id_callback(void) {
+
+ %inline %{
+ void threading_init(void) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ int i;
+ if (!thread_mode) {
+ for (i=0; i<CRYPTO_num_locks(); i++) {
+@@ -50,7 +50,7 @@ void threading_init(void) {
+ }
+
+ void threading_cleanup(void) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ int i;
+ if (thread_mode) {
+ CRYPTO_set_locking_callback(NULL);
+$OpenBSD: patch-SWIG__bio_i,v 1.4 2018/04/25 16:51:05 jasper Exp $
+
+BIO_meth_new() and BIO_meth_free() are non-static in LibreSSL
+
+Index: SWIG/_bio.i
+--- a/src/SWIG/_bio.i.orig
++++ a/src/SWIG/_bio.i
+@@ -293,8 +293,12 @@ int bio_should_write(BIO* a) {
+ }
+
+ /* Macros for things not defined before 1.1.0 */
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+-static BIO_METHOD *
++#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3050000fL)
++
++#if !defined(LIBRESSL_VERSION_NUMBER)
++static
++#endif
++BIO_METHOD *
+ BIO_meth_new( int type, const char *name )
+ {
+ BIO_METHOD *method = malloc( sizeof(BIO_METHOD) );
+@@ -306,7 +310,10 @@ BIO_meth_new( int type, const char *name )
+ return method;
+ }
+
+-static void
++#if !defined(LIBRESSL_VERSION_NUMBER)
++static
++#endif
++void
+ BIO_meth_free( BIO_METHOD *meth )
+ {
+ if ( meth == NULL ) {
diff --git a/dev-python/m2crypto/m2crypto-0.41.0.ebuild b/dev-python/m2crypto/m2crypto-0.41.0.ebuild
new file mode 100644
index 0000000..3870a7f
--- /dev/null
+++ b/dev-python/m2crypto/m2crypto-0.41.0.ebuild
@@ -0,0 +1,75 @@
+# Copyright 2018-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} )
+PYPI_NO_NORMALIZE=1
+PYPI_PN="M2Crypto"
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 toolchain-funcs pypi
+
+DESCRIPTION="A Python crypto and SSL toolkit"
+HOMEPAGE="
+ https://gitlab.com/m2crypto/m2crypto/
+ https://pypi.org/project/M2Crypto/
+"
+
+# openssl via src/SWIG/_lib11_compat.i
+LICENSE="MIT openssl"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~x64-macos"
+IUSE="abi_mips_n32 abi_mips_n64 abi_mips_o32"
+
+DEPEND="
+ dev-libs/openssl:=
+"
+RDEPEND="
+ ${DEPEND}
+"
+BDEPEND="
+ >=dev-lang/swig-2.0.9
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-libressl-0.38.0.patch
+)
+
+swig_define() {
+ local x
+ for x; do
+ if tc-cpp-is-true "defined(${x})"; then
+ SWIG_FEATURES+=" -D${x}"
+ fi
+ done
+}
+
+src_prepare() {
+ # relies on very exact clock behavior which apparently fails
+ # with inconvenient CONFIG_HZ*
+ sed -e 's:test_server_simple_timeouts:_&:' \
+ -i tests/test_ssl.py || die
+ distutils-r1_src_prepare
+}
+
+python_compile() {
+ # setup.py looks at platform.machine() to determine swig options.
+ # For exotic ABIs, we need to give swig a hint.
+ local -x SWIG_FEATURES=
+
+ # https://bugs.gentoo.org/617946
+ swig_define __ILP32__
+
+ # https://bugs.gentoo.org/674112
+ swig_define __ARM_PCS_VFP
+
+ distutils-r1_python_compile
+}
+
+python_test() {
+ "${EPYTHON}" -m unittest -b -v tests.alltests.suite ||
+ die "Tests failed for ${EPYTHON}"
+}
diff --git a/dev-python/m2crypto/metadata.xml b/dev-python/m2crypto/metadata.xml
new file mode 100644
index 0000000..8458196
--- /dev/null
+++ b/dev-python/m2crypto/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>python@gentoo.org</email>
+ <name>Python</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="pypi">M2Crypto</remote-id>
+ <remote-id type="gitlab">m2crypto/m2crypto</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-qt/qtbase/Manifest b/dev-qt/qtbase/Manifest
new file mode 100644
index 0000000..339951b
--- /dev/null
+++ b/dev-qt/qtbase/Manifest
@@ -0,0 +1 @@
+DIST qtbase-everywhere-src-6.7.0.tar.xz 49314276 BLAKE2B f4ec35fd3c15d56a28e1608dec927eaf34d84c2250405d921adadc16d90ec148f4983024dcf9be1832de91381d18e33fd7578d60d8654469e23530a210618e11 SHA512 72896cc5a677361779f49d60dbdfc33a21d77bd479e0586b0beb03eee2016d613aee56e798143a489431a07a5e7a7db4c7c046105a11b63dd178768f3a7f195a
diff --git a/dev-qt/qtbase/files/qtbase-6.5.2-hppa-forkfd-grow-stack.patch b/dev-qt/qtbase/files/qtbase-6.5.2-hppa-forkfd-grow-stack.patch
new file mode 100644
index 0000000..ccada9f
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.5.2-hppa-forkfd-grow-stack.patch
@@ -0,0 +1,28 @@
+Patch taken from Debian[1], largely broken on HPPA without and several
+tests give segmentation faults[2].
+
+Needs upstreaming if someone familiar with HPPA wants to give this
+attention. Note forkfd is essentially maintained in qtbase's repo[3]
+rather than truly third party.
+
+[1] https://bugs.debian.org/1042018
+[2] https://bugs.gentoo.org/914371
+[3] https://code.qt.io/cgit/qt/qtbase.git/tree/src/3rdparty/forkfd
+
+Description: Change how stack grows on HPPA.
+ On HPPA stack grows upwards. This patch introduces this change for
+ this 3rd party code.
+Author: John David Anglin <dave.anglin@bell.net>
+--- a/src/3rdparty/forkfd/forkfd_linux.c
++++ b/src/3rdparty/forkfd/forkfd_linux.c
+@@ -170,5 +170,10 @@
+ *system = 1;
+
++#if defined(__hppa__)
++ /* Stack grows up */
++ pid = clone(childFn, childStack, cloneflags, token, &pidfd, NULL, NULL);
++#else
+ pid = clone(childFn, childStack + sizeof(childStack), cloneflags, token, &pidfd, NULL, NULL);
++#endif
+ if (pid < 0)
+ return pid;
diff --git a/dev-qt/qtbase/files/qtbase-6.5.2-no-symlink-check.patch b/dev-qt/qtbase/files/qtbase-6.5.2-no-symlink-check.patch
new file mode 100644
index 0000000..815fd39
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.5.2-no-symlink-check.patch
@@ -0,0 +1,5 @@
+https://bugs.gentoo.org/914195
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -65 +64,0 @@
+-qt_internal_check_if_path_has_symlinks("${CMAKE_BINARY_DIR}")
diff --git a/dev-qt/qtbase/files/qtbase-6.6.0-libressl.patch b/dev-qt/qtbase/files/qtbase-6.6.0-libressl.patch
new file mode 100644
index 0000000..5531519
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.6.0-libressl.patch
@@ -0,0 +1,353 @@
+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
+@@ -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, const unsigned char *cookie,
+ }
+ #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 *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);
+@@ -804,7 +807,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
+@@ -113,14 +113,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);
+@@ -154,7 +165,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)
+@@ -289,12 +304,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)
+@@ -866,14 +883,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)
+@@ -1056,12 +1084,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
+@@ -46,6 +46,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)
+@@ -205,6 +211,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 *));
+@@ -212,6 +219,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);
+@@ -237,8 +258,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 \
+@@ -423,12 +449,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);
+@@ -536,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)
+@@ -664,8 +704,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
+@@ -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
+@@ -64,7 +64,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;
+@@ -190,7 +194,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;
+@@ -286,7 +294,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/files/qtbase-6.6.1-forkfd-childstack-size.patch b/dev-qt/qtbase/files/qtbase-6.6.1-forkfd-childstack-size.patch
new file mode 100644
index 0000000..3b9df41
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.6.1-forkfd-childstack-size.patch
@@ -0,0 +1,27 @@
+Avoid crash that happens for some users in qsb, qmake, and
+potentially other Qt tools when ran under sandbox leading
+to build failures for qtdeclarative and other packages.
+
+Former fix involved replacing 4096 by SIGSTKSZ but
+bug #918664 shown that this may be insufficient so this
+tries 32k instead.
+
+Update: after https://bugs.gentoo.org/923013 and a fixed
+sandbox been stabilized for some time, it should in theory
+be possible to drop this
+
+https://bugs.gentoo.org/908809
+https://bugs.gentoo.org/908816
+https://bugs.gentoo.org/913493
+https://bugs.gentoo.org/915695
+https://bugs.gentoo.org/918664
+https://codereview.qt-project.org/c/qt/qtbase/+/513140
+--- a/src/3rdparty/forkfd/forkfd_linux.c
++++ b/src/3rdparty/forkfd/forkfd_linux.c
+@@ -158,5 +158,5 @@
+ int system_vforkfd(int flags, pid_t *ppid, int (*childFn)(void *), void *token, int *system)
+ {
+- __attribute__((aligned(64))) char childStack[SIGSTKSZ];
++ __attribute__((aligned(64))) char childStack[32768];
+ pid_t pid;
+ int pidfd;
diff --git a/dev-qt/qtbase/files/qtbase-6.6.3-gcc14-avx512fp16.patch b/dev-qt/qtbase/files/qtbase-6.6.3-gcc14-avx512fp16.patch
new file mode 100644
index 0000000..e7eb9dc
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.6.3-gcc14-avx512fp16.patch
@@ -0,0 +1,15 @@
+Simply disable the broken path rather than worry about it for now.
+
+Likely an easy fix but would rather this be handled upstream and
+reported by someone that is affected and can test.
+
+https://bugs.gentoo.org/926287
+--- a/src/gui/painting/qrgbafloat.h
++++ b/src/gui/painting/qrgbafloat.h
+@@ -20,5 +20,5 @@
+ public:
+ using Type = F;
+-#if defined(__AVX512FP16__) && QFLOAT16_IS_NATIVE
++#if 0
+ // AVX512FP16 has multiplication instructions
+ using FastType = F;
diff --git a/dev-qt/qtbase/files/qtbase-6.6.3-pkgconf-deps.patch b/dev-qt/qtbase/files/qtbase-6.6.3-pkgconf-deps.patch
new file mode 100644
index 0000000..965dade
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.6.3-pkgconf-deps.patch
@@ -0,0 +1,35 @@
+https://bugs.gentoo.org/928299
+https://bugreports.qt.io/browse/QTBUG-124135
+https://codereview.qt-project.org/c/qt/qtbase/+/553372
+From: Alexey Edelev <alexey.edelev@qt.io>
+Date: Fri, 05 Apr 2024 14:50:37 +0200
+Subject: [PATCH] Prefer the versioned targets over the namespaceless one when collecting deps
+
+Change the way we collect dependencies in __qt_internal_walk_libs.
+Prefer the versioned Qt targets over the namespaceless. This fixes the
+generating of the pkg-config configs.
+
+Pick-to: 6.5 6.6 6.7
+Task-number: QTBUG-124135
+Change-Id: I660376e122a99b5bc0874f2bc6ccd4d80c9ad453
+--- a/cmake/QtPublicWalkLibsHelpers.cmake
++++ b/cmake/QtPublicWalkLibsHelpers.cmake
+@@ -184,13 +184,13 @@
+ if(lib_target MATCHES "^::@")
+ continue()
+ elseif(TARGET ${lib_target})
+- if ("${lib_target}" MATCHES "^Qt::(.*)")
+- # If both, Qt::Foo and Foo targets exist, prefer the target name without
++ if(NOT "${lib_target}" MATCHES "^(Qt|${QT_CMAKE_EXPORT_NAMESPACE})::.+")
++ # If both, Qt::Foo and Foo targets exist, prefer the target name with versioned
+ # namespace. Which one is preferred doesn't really matter. This code exists to
+ # avoid ending up with both, Qt::Foo and Foo in our dependencies.
+- set(namespaceless_lib_target "${CMAKE_MATCH_1}")
+- if(TARGET "${namespaceless_lib_target}")
+- set(lib_target ${namespaceless_lib_target})
++ set(versioned_qt_target "${QT_CMAKE_EXPORT_NAMESPACE}::${lib_target}")
++ if(TARGET "${versioned_qt_target}")
++ set(lib_target ${versioned_qt_target})
+ endif()
+ endif()
+ get_target_property(lib_target_type ${lib_target} TYPE)
diff --git a/dev-qt/qtbase/files/qtbase-6.7.0-qspan-ifdef.patch b/dev-qt/qtbase/files/qtbase-6.7.0-qspan-ifdef.patch
new file mode 100644
index 0000000..4c2a37c
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.7.0-qspan-ifdef.patch
@@ -0,0 +1,29 @@
+https://bugreports.qt.io/browse/QTBUG-123937
+From 6810220218cbbf2854ecdedb291f7e4a84b31e54 Mon Sep 17 00:00:00 2001
+From: Albert Astals Cid <aacid@kde.org>
+Date: Wed, 3 Apr 2024 00:47:01 +0200
+Subject: [PATCH] Use ifdef instead of if for __cpp_lib_span
+
+Like the other times it's used in this file
+
+This is causing compilation errors in projects that use -Werror=undef
+
+Fixes: QTBUG-123937
+Change-Id: I0cdd2910755dc9079890011dd8dbc27a6e64793e
+Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
+(cherry picked from commit 699ddcb15b5e981d32ea65d1c1a12f8fa0b06e0d)
+Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
+--- a/src/corelib/tools/qspan.h
++++ b/src/corelib/tools/qspan.h
+@@ -297,7 +297,7 @@ public:
+ : QSpanBase(il.begin(), il.size())
+ {}
+
+-#if __cpp_lib_span
++#ifdef __cpp_lib_span
+ template <typename S, size_t N, if_qualification_conversion<S> = true>
+ Q_IMPLICIT constexpr QSpanBase(std::span<S, N> other) noexcept
+ : QSpanBase(other.data(), other.size())
+--
+2.44.0
+
diff --git a/dev-qt/qtbase/metadata.xml b/dev-qt/qtbase/metadata.xml
new file mode 100644
index 0000000..6156479
--- /dev/null
+++ b/dev-qt/qtbase/metadata.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>qt@gentoo.org</email>
+ <name>Gentoo Qt Project</name>
+ </maintainer>
+ <use>
+ <flag name="X">Build the XCB platform plugin and enable X11 integration</flag>
+ <flag name="concurrent">Build Qt6Concurrent module</flag>
+ <flag name="dbus">Build Qt6DBus module</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="renderdoc">Enable support for capturing graphic's API calls using <pkg>media-gfx/renderdoc</pkg></flag>
+ <flag name="sql">Build Qt6Sql module</flag>
+ <flag name="tslib">Enable support for touchscreen devices via <pkg>x11-libs/tslib</pkg></flag>
+ <flag name="widgets">Build Qt6Widgets module</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://bugreports.qt.io/</bugs-to>
+ <doc>https://doc.qt.io/</doc>
+ <remote-id type="github">qt/qtbase</remote-id>
+ </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.7.0-r1.ebuild b/dev-qt/qtbase/qtbase-6.7.0-r1.ebuild
new file mode 100644
index 0000000..fb2a882
--- /dev/null
+++ b/dev-qt/qtbase/qtbase-6.7.0-r1.ebuild
@@ -0,0 +1,383 @@
+# Copyright 2021-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+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 ~sparc ~x86"
+fi
+
+declare -A QT6_IUSE=(
+ [global]="+ssl +udev zstd"
+ [core]="icu"
+ [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="
+ $(
+ 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 ) )
+"
+
+# 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)
+# dlopen: renderdoc
+RDEPEND="
+ sys-libs/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:= )
+
+ dbus? ( sys-apps/dbus )
+ gui? (
+ media-libs/fontconfig
+ media-libs/freetype: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 )
+ widgets? (
+ cups? ( net-print/cups )
+ gtk? (
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3
+ 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 )
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+ gui? (
+ vulkan? ( dev-util/vulkan-headers )
+ )
+ network? (
+ sctp? ( net-misc/lksctp-tools )
+ )
+ test? (
+ elibc_musl? ( sys-libs/timezone-data )
+ )
+"
+BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
+PDEPEND="
+ nls? ( ~dev-qt/qttranslations-${PV}:6 )
+ wayland? ( ~dev-qt/qtwayland-${PV}:6 )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.6.0-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.6.3-pkgconf-deps.patch
+ "${FILESDIR}"/${PN}-6.7.0-qspan-ifdef.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() {
+ 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_relocatable=OFF #927691
+ $(qt_feature ssl openssl)
+ $(qt_feature ssl openssl_linked)
+ $(qt_feature udev libudev)
+ $(qt_feature zstd)
+
+ # qtcore
+ $(qt_feature icu)
+
+ # 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)
+ )
+
+ 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)
+ -DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
+ ) && 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)
+ )
+
+ if use amd64 || use x86; then
+ # see bug #913400 for explanations
+ local cpufeats=(
+ # list of checked cpu features in configure.cmake
+ avx avx2 avx512{bw,cd,dq,er,f,ifma,pf,vbmi,vbmi2,vl}
+ f16c rdrnd rdseed sse2 sse3 sse4_1 sse4_2 ssse3 vaes
+ )
+ # handle odd ones out not matching -m* and macros (keep same order)
+ local cpuflags=( "${cpufeats[@]}" aes sha )
+ local cpufeats+=( aesni shani )
+
+ local -a intrins
+ IFS=' ' read -ra intrins < <(
+ : "$(test-flags-CXX "${cpuflags[@]/#/-m}")"
+ $(tc-getCXX) -E -P ${_} ${CXXFLAGS} ${CPPFLAGS} - <<-EOF | tail -n 1
+ $(printf '__%s__ ' "${cpuflags[@]^^}")
+ EOF
+ assert
+ )
+
+ # do nothing and leave to qtbase if no macros expanded (test failed?)
+ if [[ \ ${intrins[*]} == *\ [^_\ ]* ]]; then
+ local -i i
+ for ((i=0; i<${#cpufeats[@]}; i++)); do
+ [[ ${intrins[i]} == __* ]] &&
+ mycmakeargs+=( -DQT_FEATURE_${cpufeats[i]}=OFF )
+ done
+ mycmakeargs+=( -DTEST_x86intrin=ON )
+ fi
+ fi
+
+ qt6-build_src_configure
+}
+
+src_test() {
+ local -x TZ=UTC
+ local -x LC_TIME=C
+
+ 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/opengl, we *could* run these but tend to be flaky
+ # when opengl rendering is involved (even if software-only)
+ tst_qopengl{,config,widget,window}
+ tst_qgraphicsview
+ tst_qx11info
+ # fails with network sandbox
+ tst_qdnslookup
+ # fails with sandbox
+ tst_qsharedmemory
+ # typical to lack SCTP support on non-generic kernels
+ tst_qsctpsocket
+ # randomly fails without -j1, and not worth it over this (bug #916181)
+ tst_qfiledialog{,2}
+ # may randomly hang+timeout, perhaps related to -j as well
+ tst_qtimer
+ # 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_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
+ tst_qprocess
+ ')
+ # fails due to hppa's NaN handling, needs looking into (bug #914371)
+ $(usev hppa '
+ tst_qcborvalue
+ tst_qnumeric
+ ')
+ # bug #914033
+ $(usev sparc '
+ tst_qbuffer
+ tst_qprocess
+ tst_qtconcurrentiteratekernel
+ ')
+ # 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
+ 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*
+ "${delete_bins[@]/#/${D}${QT6_BINDIR}/}"
+ )
+ # using -f given not tracking which tests may be skipped or not
+ rm -rf -- "${delete[@]}" || die
+ fi
+}
diff --git a/dev-qt/qtnetwork/Manifest b/dev-qt/qtnetwork/Manifest
index f458c94..945cf51 100644
--- a/dev-qt/qtnetwork/Manifest
+++ b/dev-qt/qtnetwork/Manifest
@@ -1,2 +1,3 @@
-DIST qtbase-everywhere-src-5.14.2.tar.xz 49865752 BLAKE2B ed8eb18dfc79e9983248655eb62e8305ef8b79f96c7880c88533250fef8f0d187cf576082d41df08314711b4c007b94686486abd77bf9bc201336caa02ced300 SHA512 8c83e06d58b56e9f288e83d6c3dd4ad6cc9f1eb1a32c7b44fb912fda34ed7255766fd9fa60cd740ee001df7d6172f25df05f1f95e986c3e793fbcd9bf4f18de9
-DIST qtbase-everywhere-src-5.15.0.tar.xz 49931940 BLAKE2B f6675ddb8c6fcfe4d12f92b0c93d09ec160e65bb214694550c82c1ba1acea41c86064910cf76267815bd860b071a322bbbad19e994be52f0bf1450a73d09a1bf SHA512 c584d69e49f4959d9b8541f820f5ff1e6d1599697ad16976b47cbaaa902fc83e1ca4ae57d56d13574e42e5f602d4420245ad7fcfc13e224e10d4bbad6a537d1a
+DIST qtbase-5.15-gentoo-patchset-5.tar.xz 9116 BLAKE2B b6318fc7c3ccdbfe85d56797ffaa3b275ce3f324731caca5efb497494837ca00c020494e9f811c0d5e9a460a4d70f16291c637409e7ad72325a36bc55e113c8c SHA512 f0343bf475a86f3f73b98b166ee48b1c5c9200aac9212ad977befe05679d0c351167618b16ae958e6403f33eecdc465b26a0df5d0b83d5d57a8c85ddb8a41c9b
+DIST qtbase-5.15.13-gentoo-kde-1.tar.xz 331952 BLAKE2B 6fb7314f03e99d8d2f5e8486ea805164f7e42a14c29a46519bae200364ad3798d26fd09bbd9381030b816f0a68c45d98581a76b80ca3fff8ae4c0121c77fc6ae SHA512 2c049f451eaa4a5087bb39283a66e7bbef89b9e3235ae930c48a405aeaaa999e863857c5074de6ad282708c756b8acab40fbb68f2a4a8b45ef7ade72b12bb98d
+DIST qtbase-everywhere-opensource-src-5.15.13.tar.xz 50862768 BLAKE2B d96d4d6b11aae3c471d5f24ed1030004394dfb89d399d5cddc868f39d0a4851a75ed0d59fdc79ef354c21a354eae0f23df1cfb8c30290d5c080b5fad507ce29a SHA512 565632646b04eed525530a50f1228dd1aa3b8f1318485fa7cf6ad96eabdc2208ed1522b3fc174bd4797b7d51edff18ea1f91a82dd701379407b880f1dd0d16ef
diff --git a/dev-qt/qtnetwork/files/qtnetwork-5.12.1-libressl.patch b/dev-qt/qtnetwork/files/qtnetwork-5.12.1-libressl.patch
deleted file mode 100644
index bd86269..0000000
--- a/dev-qt/qtnetwork/files/qtnetwork-5.12.1-libressl.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-diff --git a/src/network/configure.json b/src/network/configure.json
-index f3e18662aa..8990763756 100644
---- a/src/network/configure.json
-+++ b/src/network/configure.json
-@@ -165,7 +165,7 @@
- "test": {
- "include": "openssl/opensslv.h",
- "tail": [
-- "#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L",
-+ "#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)",
- "# error OpenSSL >= 1.1 is required",
- "#endif"
- ]
-diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
-index 35cca9f01a..03afdc5945 100644
---- a/src/network/ssl/qsslcontext_openssl.cpp
-+++ b/src/network/ssl/qsslcontext_openssl.cpp
-@@ -249,7 +249,7 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext)
- if (sslContext->sslConfiguration.backendConfiguration().isEmpty())
- return;
-
--#if OPENSSL_VERSION_NUMBER >= 0x10002000L
-+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
- if (QSslSocket::sslLibraryVersionNumber() >= 0x10002000L) {
- QSharedPointer<SSL_CONF_CTX> cctx(q_SSL_CONF_CTX_new(), &q_SSL_CONF_CTX_free);
- if (cctx) {
-diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp
-index 299df6b685..670314d7e5 100644
---- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
-+++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
-@@ -216,8 +216,13 @@ DEFINEFUNC3(void *, ASN1_dup, i2d_of_void *a, a, d2i_of_void *b, b, char *c, c,
- #endif
- DEFINEFUNC2(BIO *, BIO_new_file, const char *filename, filename, const char *mode, mode, return nullptr, return)
- DEFINEFUNC(void, ERR_clear_error, DUMMYARG, DUMMYARG, return, DUMMYARG)
-+#ifdef LIBRESSL_VERSION_NUMBER
-+DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return nullptr, return)
-+DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return nullptr, return)
-+#else
- DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return nullptr, return)
- DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return nullptr, return)
-+#endif
- DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
- DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
- DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
-@@ -443,7 +448,7 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return -
- DEFINEFUNC2(int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *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)
--#if OPENSSL_VERSION_NUMBER >= 0x10002000L
-+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(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);
-@@ -1246,7 +1251,7 @@ bool q_resolveOpenSslSymbols()
- RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey)
- RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
- RESOLVEFUNC(SSL_CTX_get_cert_store);
--#if OPENSSL_VERSION_NUMBER >= 0x10002000L
-+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
- RESOLVEFUNC(SSL_CONF_CTX_new);
- RESOLVEFUNC(SSL_CONF_CTX_free);
- RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx);
-diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h
-index bfdfbf0efc..ad2bd4056b 100644
---- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
-+++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
-@@ -359,7 +359,7 @@ int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
- int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *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);
--#if OPENSSL_VERSION_NUMBER >= 0x10002000L
-+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(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);
-diff --git a/src/network/ssl/qsslsocket_opensslpre11_symbols_p.h b/src/network/ssl/qsslsocket_opensslpre11_symbols_p.h
-index b7bac5d2a2..9a1a89b0e4 100644
---- a/src/network/ssl/qsslsocket_opensslpre11_symbols_p.h
-+++ b/src/network/ssl/qsslsocket_opensslpre11_symbols_p.h
-@@ -78,8 +78,13 @@
- unsigned char * q_ASN1_STRING_data(ASN1_STRING *a);
- BIO *q_BIO_new_file(const char *filename, const char *mode);
- void q_ERR_clear_error();
-+#ifdef LIBRESSL_VERSION_NUMBER
-+Q_AUTOTEST_EXPORT BIO *q_BIO_new(const BIO_METHOD *a);
-+Q_AUTOTEST_EXPORT const BIO_METHOD *q_BIO_s_mem();
-+#else
- Q_AUTOTEST_EXPORT BIO *q_BIO_new(BIO_METHOD *a);
- Q_AUTOTEST_EXPORT BIO_METHOD *q_BIO_s_mem();
-+#endif
- int q_CRYPTO_num_locks();
- void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int));
- void q_CRYPTO_set_id_callback(unsigned long (*a)());
diff --git a/dev-qt/qtnetwork/files/qtnetwork-5.12.4-libressl.patch b/dev-qt/qtnetwork/files/qtnetwork-5.12.4-libressl.patch
deleted file mode 100644
index b200efa..0000000
--- a/dev-qt/qtnetwork/files/qtnetwork-5.12.4-libressl.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
-index c8bc6e06..76324ea5 100644
---- a/src/network/ssl/qsslsocket_openssl.cpp
-+++ b/src/network/ssl/qsslsocket_openssl.cpp
-@@ -460,7 +460,7 @@ bool QSslSocketBackendPrivate::initSslContext()
- q_SSL_set_psk_server_callback(ssl, &q_ssl_psk_server_callback);
- }
- #endif
--#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) {
-
diff --git a/dev-qt/qtnetwork/files/qtnetwork-5.15.10-ssl-upgr-default-DH-params.patch b/dev-qt/qtnetwork/files/qtnetwork-5.15.10-ssl-upgr-default-DH-params.patch
new file mode 100644
index 0000000..94f1325
--- /dev/null
+++ b/dev-qt/qtnetwork/files/qtnetwork-5.15.10-ssl-upgr-default-DH-params.patch
@@ -0,0 +1,101 @@
+From 05406c3f5f516d3148254c8294e8883c28a2c95a Mon Sep 17 00:00:00 2001
+From: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+Date: Wed, 21 Jun 2023 13:30:35 +0200
+Subject: [PATCH] SSL: upgrade the default DH parameters
+
+We have been using as default DH parameters the 1024-bit MODP group.
+This is now considered insecure, and applications should use the
+2048-bit at a minimum [1]. This commit therefore replaces the parameters
+with the 2048-bit MODP group from [2].
+
+To double check the data, use openssl asn1parse to verify that the prime
+matches. For instance:
+
+1) put the encoded string in a `encoded.txt` file (c&p from the source,
+ removing the double quotes)
+2) put the hexadecimal value of the 2048-bit group in a `reference.txt`
+ file (c&p from [2])
+3) compare the output of openssl asn1parse with the reference. For
+ instance like this:
+
+ $ diff <(openssl asn1parse < encoded.txt | grep -m 1 INTEGER | perl -pe 's/.*://; s/\n//') <(perl -0777 -pe 's/\s//g' reference.txt) && echo OK
+ OK
+
+[1] https://datatracker.ietf.org/doc/html/rfc8247#section-2.4
+[2] https://datatracker.ietf.org/doc/html/rfc3526#section-3
+
+[ChangeLog][QtNetwork][QSslDiffieHellmanParameters] The default
+Diffie-Hellman parameters are now using the 2048-bit MODP group from
+RFC 3526.
+
+Pick-to: 6.6 6.5 6.2 5.15
+Change-Id: I47133cd78ba0e954b8f93a3da09fa2c760c9f7a8
+Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
+(cherry picked from commit 3ec24e329c9ef6802786a37f30ddd8982e903480)
+---
+ src/network/ssl/qsslconfiguration.cpp | 12 ++++++++++--
+ src/network/ssl/qssldiffiehellmanparameters.cpp | 13 +++++++------
+ 2 files changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp
+index f5ce02807f..84a9187334 100644
+--- a/src/network/ssl/qsslconfiguration.cpp
++++ b/src/network/ssl/qsslconfiguration.cpp
+@@ -929,7 +929,11 @@ void QSslConfiguration::setPreSharedKeyIdentityHint(const QByteArray &hint)
+ Retrieves the current set of Diffie-Hellman parameters.
+
+ If no Diffie-Hellman parameters have been set, the QSslConfiguration object
+- defaults to using the 1024-bit MODP group from RFC 2409.
++ defaults to using the 2048-bit MODP group from RFC 3526.
++
++ \note The default parameters may change in future Qt versions.
++ Please check the documentation of the \e{exact Qt version} that you
++ are using in order to know what defaults that version uses.
+ */
+ QSslDiffieHellmanParameters QSslConfiguration::diffieHellmanParameters() const
+ {
+@@ -943,7 +947,11 @@ QSslDiffieHellmanParameters QSslConfiguration::diffieHellmanParameters() const
+ a server to \a dhparams.
+
+ If no Diffie-Hellman parameters have been set, the QSslConfiguration object
+- defaults to using the 1024-bit MODP group from RFC 2409.
++ defaults to using the 2048-bit MODP group from RFC 3526.
++
++ \note The default parameters may change in future Qt versions.
++ Please check the documentation of the \e{exact Qt version} that you
++ are using in order to know what defaults that version uses.
+ */
+ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams)
+ {
+diff --git a/src/network/ssl/qssldiffiehellmanparameters.cpp b/src/network/ssl/qssldiffiehellmanparameters.cpp
+index 7807afaa30..7c2505a0be 100644
+--- a/src/network/ssl/qssldiffiehellmanparameters.cpp
++++ b/src/network/ssl/qssldiffiehellmanparameters.cpp
+@@ -68,17 +68,18 @@
+
+ QT_BEGIN_NAMESPACE
+
+-// The 1024-bit MODP group from RFC 2459 (Second Oakley Group)
++// The 2048-bit MODP group from RFC 3526
+ Q_AUTOTEST_EXPORT const char *qssl_dhparams_default_base64 =
+- "MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR"
+- "Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL"
+- "/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC";
++ "MIIBCAKCAQEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmO"
++ "NATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr"
++ "+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYc"
++ "YvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aei"
++ "j7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////wIBAg==";
+
+ /*!
+ Returns the default QSslDiffieHellmanParameters used by QSslSocket.
+
+- This is currently the 1024-bit MODP group from RFC 2459, also
+- known as the Second Oakley Group.
++ This is currently the 2048-bit MODP group from RFC 3526.
+ */
+ QSslDiffieHellmanParameters QSslDiffieHellmanParameters::defaultParameters()
+ {
+--
+2.41.0
+
diff --git a/dev-qt/qtnetwork/files/qtnetwork-5.15.0-libressl.patch b/dev-qt/qtnetwork/files/qtnetwork-5.15.7-libressl.patch
index d0a4796..c2ab857 100644
--- a/dev-qt/qtnetwork/files/qtnetwork-5.15.0-libressl.patch
+++ b/dev-qt/qtnetwork/files/qtnetwork-5.15.7-libressl.patch
@@ -1,67 +1,70 @@
-From 4774fcd31a49f6f193bf10990601ad494fab2013 Mon Sep 17 00:00:00 2001
+From 282db75a652b230c83b3d99954b7a3fc2f6ae64c Mon Sep 17 00:00:00 2001
From: Stefan Strogin <steils@gentoo.org>
-Date: Wed, 5 Feb 2020 03:49:35 +0200
-Subject: [PATCH] QSslSocket - add LibreSSL support
+Date: Wed, 30 Nov 2022 10:58:50 -0800
+Subject: [PATCH] QSslSocket: add LibreSSL support
Upstream-Status: Inappropriate
[Upstream is not willing to accept any patches for LibreSSL support]
-Signed-off-by: Stefan Strogin <steils@gentoo.org>
----
- src/network/ssl/qsslcertificate_openssl.cpp | 2 +-
- src/network/ssl/qsslcontext_openssl.cpp | 17 +++++++-
- src/network/ssl/qsslcontext_openssl_p.h | 7 +++
- src/network/ssl/qsslsocket_openssl.cpp | 2 +-
- .../ssl/qsslsocket_openssl_symbols.cpp | 25 +++++++++++
- .../ssl/qsslsocket_openssl_symbols_p.h | 43 +++++++++++++++++++
- 6 files changed, 93 insertions(+), 3 deletions(-)
diff --git a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp
-index 6f1fb26a..eba5a729 100644
+index d1794d4d..1f1aa5ed 100644
--- a/src/network/ssl/qsslcertificate_openssl.cpp
+++ b/src/network/ssl/qsslcertificate_openssl.cpp
-@@ -658,7 +658,7 @@ static QMultiMap<QByteArray, QString> _q_mapFromX509Name(X509_NAME *name)
+@@ -727,7 +727,7 @@ static QMultiMap<QByteArray, QString> _q_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 QT_CONFIG(opensslv11)
-+#if QT_CONFIG(opensslv11) && !defined(LIBRESSL_VERSION_NUMBER)
++#if QT_CONFIG(opensslv11) && (!defined(LIBRESSL_VERSION_NUMBER) || (LIBRESSL_VERSION_NUMBER >= 0x3090000fL))
q_CRYPTO_free(data, nullptr, 0);
#else
q_CRYPTO_free(data);
diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
-index 0aa8a4f4..f161af8a 100644
+index c992da9d..f659255a 100644
--- a/src/network/ssl/qsslcontext_openssl.cpp
+++ b/src/network/ssl/qsslcontext_openssl.cpp
-@@ -397,16 +397,28 @@ init_context:
- maxVersion = DTLS1_VERSION;
- break;
- case QSsl::DtlsV1_0OrLater:
-+#ifdef DTLS_MAX_VERSION
- minVersion = DTLS1_VERSION;
- maxVersion = DTLS_MAX_VERSION;
-+#else
-+ Q_UNREACHABLE();
-+#endif // DTLS_MAX_VERSION
- break;
- case QSsl::DtlsV1_2:
-+#ifdef DTLS1_2_VERSION
- minVersion = DTLS1_2_VERSION;
- maxVersion = DTLS1_2_VERSION;
-+#else
-+ Q_UNREACHABLE();
-+#endif // DTLS1_2_VERSION
- break;
- case QSsl::DtlsV1_2OrLater:
-+#if defined(DTLS1_2_VERSION) && defined(DTLS_MAX_VERSION)
- minVersion = DTLS1_2_VERSION;
- maxVersion = DTLS_MAX_VERSION;
-+#else
-+ Q_UNREACHABLE();
-+#endif // DTLS1_2_VERSION && DTLS_MAX_VERSION
- break;
- case QSsl::TlsV1_3OrLater:
- #ifdef TLS1_3_VERSION
-@@ -696,6 +708,7 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext)
+@@ -77,9 +77,9 @@ extern "C" int q_verify_cookie_callback(SSL *ssl, const unsigned char *cookie,
+ }
+ #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_NUMBER
+
+ // Defined in qsslsocket.cpp
+ QList<QSslCipher> q_getDefaultDtlsCiphers();
+@@ -351,9 +351,11 @@ init_context:
+ 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)
+@@ -627,14 +629,14 @@ init_context:
+ q_X509Callback);
+ }
+
+-#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:
+@@ -722,6 +724,7 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext)
}
#endif // ocsp
@@ -69,7 +72,7 @@ index 0aa8a4f4..f161af8a 100644
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);
-@@ -742,7 +755,9 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext)
+@@ -768,7 +771,9 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext)
sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_finish() failed"));
sslContext->errorCode = QSslError::UnspecifiedError;
}
@@ -98,32 +101,18 @@ index 70cb97aa..01a61cf5 100644
#ifndef QT_NO_SSL
class QSslContextPrivate;
-diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
-index 4be27aff..1f33911e 100644
---- a/src/network/ssl/qsslsocket_openssl.cpp
-+++ b/src/network/ssl/qsslsocket_openssl.cpp
-@@ -598,7 +598,7 @@ bool QSslSocketBackendPrivate::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) {
diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp
-index 71a268ae..8a43035b 100644
+index d9742fd6..fac28b5c 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
+++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
-@@ -147,6 +147,7 @@ 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)
- DEFINEFUNC(int, EVP_PKEY_base_id, EVP_PKEY *a, a, return NID_undef, return)
+@@ -150,16 +150,27 @@ 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)
DEFINEFUNC(int, RSA_bits, RSA *a, a, return 0, return)
-+#ifndef LIBRESSL_VERSION_NUMBER
DEFINEFUNC(int, DSA_bits, DSA *a, a, return 0, 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)
-@@ -154,6 +155,14 @@ DEFINEFUNC(OPENSSL_STACK *, OPENSSL_sk_new_null, DUMMYARG, DUMMYARG, return null
+ 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)
@@ -136,13 +125,19 @@ index 71a268ae..8a43035b 100644
+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(unsigned long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, unsigned long op, op, return 0, return)
+ DEFINEFUNC2(qssloptions, SSL_CTX_set_options, SSL_CTX *ctx, ctx, qssloptions op, op, return 0, 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
-@@ -179,7 +188,11 @@ DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE *a, a, X509_STORE_CTX_ver
+ 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)
+@@ -185,7 +196,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)
-+#ifndef LIBRESSL_VERSION_NUMBER
++#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)
@@ -150,17 +145,7 @@ index 71a268ae..8a43035b 100644
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)
-@@ -219,7 +232,9 @@ DEFINEFUNC5(int, OCSP_id_get0_info, ASN1_OCTET_STRING **piNameHash, piNameHash,
- 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)
-+#ifndef LIBRESSL_VERSION_NUMBER
- 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)
-@@ -351,12 +366,14 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return -
+@@ -358,12 +373,14 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return -
DEFINEFUNC2(int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *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)
@@ -175,42 +160,7 @@ index 71a268ae..8a43035b 100644
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)
-@@ -833,12 +850,14 @@ bool q_resolveOpenSslSymbols()
- RESOLVEFUNC(EVP_PKEY_up_ref)
- RESOLVEFUNC(EVP_PKEY_base_id)
- RESOLVEFUNC(RSA_bits)
-+#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)
-+#endif
- RESOLVEFUNC(DH_get0_pqg)
- RESOLVEFUNC(SSL_CTX_set_options)
-
-@@ -880,7 +899,9 @@ bool q_resolveOpenSslSymbols()
-
- RESOLVEFUNC(SSL_SESSION_get_ticket_lifetime_hint)
- RESOLVEFUNC(DH_bits)
-+#ifndef LIBRESSL_VERSION_NUMBER
- RESOLVEFUNC(DSA_bits)
-+#endif
-
- #if QT_CONFIG(dtls)
- RESOLVEFUNC(DTLSv1_listen)
-@@ -910,7 +931,9 @@ bool q_resolveOpenSslSymbols()
- RESOLVEFUNC(OCSP_check_validity)
- RESOLVEFUNC(OCSP_cert_to_id)
- RESOLVEFUNC(OCSP_id_get0_info)
-+#ifndef LIBRESSL_VERSION_NUMBER
- RESOLVEFUNC(OCSP_resp_get0_certs)
-+#endif
- RESOLVEFUNC(OCSP_basic_sign)
- RESOLVEFUNC(OCSP_response_create)
- RESOLVEFUNC(i2d_OCSP_RESPONSE)
-@@ -1040,12 +1063,14 @@ bool q_resolveOpenSslSymbols()
+@@ -1089,12 +1106,14 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey)
RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
RESOLVEFUNC(SSL_CTX_get_cert_store);
@@ -226,7 +176,7 @@ index 71a268ae..8a43035b 100644
RESOLVEFUNC(SSL_clear)
RESOLVEFUNC(SSL_connect)
diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h
-index f35e0ba2..30097317 100644
+index 27aeffa1..32a21221 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -80,6 +80,13 @@ QT_BEGIN_NAMESPACE
@@ -243,20 +193,10 @@ index f35e0ba2..30097317 100644
#if !defined QT_LINKED_OPENSSL
// **************** Shared declarations ******************
// ret func(arg)
-@@ -230,17 +237,38 @@ const unsigned char * q_ASN1_STRING_get0_data(const ASN1_STRING *x);
- Q_AUTOTEST_EXPORT BIO *q_BIO_new(const BIO_METHOD *a);
- Q_AUTOTEST_EXPORT const BIO_METHOD *q_BIO_s_mem();
-
-+#ifndef LIBRESSL_VERSION_NUMBER
- int q_DSA_bits(DSA *a);
-+#else
-+#define q_DSA_bits(dsa) q_BN_num_bits((dsa)->p)
-+#endif
- int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
- Q_AUTOTEST_EXPORT int q_EVP_PKEY_up_ref(EVP_PKEY *a);
- int q_EVP_PKEY_base_id(EVP_PKEY *a);
+@@ -238,12 +245,28 @@ EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
+ void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
+ int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
int q_RSA_bits(RSA *a);
-+
+#ifndef LIBRESSL_VERSION_NUMBER
Q_AUTOTEST_EXPORT int q_OPENSSL_sk_num(OPENSSL_STACK *a);
Q_AUTOTEST_EXPORT void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *));
@@ -280,35 +220,9 @@ index f35e0ba2..30097317 100644
+#endif // LIBRESSL_VERSION_NUMBER
+
int q_SSL_session_reused(SSL *a);
- unsigned long q_SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op);
+ qssloptions q_SSL_CTX_set_options(SSL_CTX *ctx, qssloptions op);
int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
-@@ -266,8 +294,13 @@ int q_DH_bits(DH *dh);
- # 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(type, st) ((int (*)(const STACK_OF(type) *))q_OPENSSL_sk_num)(st)
- #define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_OPENSSL_sk_value)(st, i)
-+#else
-+#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 \
-@@ -276,7 +309,11 @@ int q_DH_bits(DH *dh);
- | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
-
- int q_OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
-+#ifndef LIBRESSL_VERSION_NUMBER
- void q_CRYPTO_free(void *str, const char *file, int line);
-+#else
-+void q_CRYPTO_free(void *a);
-+#endif
-
- long q_OpenSSL_version_num();
- const char *q_OpenSSL_version(int type);
-@@ -494,12 +531,14 @@ int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
+@@ -497,12 +520,14 @@ int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *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);
@@ -319,22 +233,21 @@ index f35e0ba2..30097317 100644
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
++#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);
-@@ -715,7 +754,11 @@ int q_OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, ASN1_GENERALIZEDTIME *n
- int q_OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, ASN1_OCTET_STRING **pikeyHash,
- ASN1_INTEGER **pserial, OCSP_CERTID *cid);
+@@ -743,8 +768,13 @@ int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
-+#ifndef LIBRESSL_VERSION_NUMBER
- const STACK_OF(X509) *q_OCSP_resp_get0_certs(const OCSP_BASICRESP *bs);
-+#else
-+#define q_OCSP_resp_get0_certs(bs) ((bs)->certs)
-+#endif
- Q_AUTOTEST_EXPORT OCSP_CERTID *q_OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer);
- Q_AUTOTEST_EXPORT void q_OCSP_CERTID_free(OCSP_CERTID *cid);
- int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
---
-2.25.0
-
+ 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 // LIBRESSL_VERSION_NUMBER
++void q_CRYPTO_free(void *a);
++#define q_OPENSSL_free(addr) q_CRYPTO_free(addr)
++#endif // LIBRESSL_VERSION_NUMBER
+
+ int q_SSL_CTX_get_security_level(const SSL_CTX *ctx);
+ void q_SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
diff --git a/dev-qt/qtnetwork/metadata.xml b/dev-qt/qtnetwork/metadata.xml
index 19a09a6..dfe9a54 100644
--- a/dev-qt/qtnetwork/metadata.xml
+++ b/dev-qt/qtnetwork/metadata.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>qt@gentoo.org</email>
<name>Gentoo Qt Project</name>
</maintainer>
<use>
- <flag name="bindist">Disable EC support via <pkg>dev-libs/openssl</pkg></flag>
- <flag name="connman">Enable <pkg>net-misc/connman</pkg>-based bearer plugin</flag>
<flag name="gssapi">Enable support for GSSAPI (<pkg>virtual/krb5</pkg>)</flag>
<flag name="libproxy">Use <pkg>net-libs/libproxy</pkg> for automatic
HTTP/SOCKS proxy configuration</flag>
- <flag name="networkmanager">Enable <pkg>net-misc/networkmanager</pkg>-based
- bearer plugin</flag>
</use>
<upstream>
<bugs-to>https://bugreports.qt.io/</bugs-to>
diff --git a/dev-qt/qtnetwork/qtnetwork-5.14.2.ebuild b/dev-qt/qtnetwork/qtnetwork-5.14.2.ebuild
deleted file mode 100644
index b470bcd..0000000
--- a/dev-qt/qtnetwork/qtnetwork-5.14.2.ebuild
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-QT5_MODULE="qtbase"
-inherit qt5-build
-
-DESCRIPTION="Network abstraction library for the Qt5 framework"
-
-if [[ ${QT5_BUILD_TYPE} == release ]]; then
- KEYWORDS="amd64 arm arm64 ~hppa ppc ppc64 ~sparc x86"
-fi
-
-IUSE="bindist connman gssapi libproxy libressl networkmanager sctp +ssl"
-
-DEPEND="
- ~dev-qt/qtcore-${PV}:5=
- sys-libs/zlib:=
- connman? ( ~dev-qt/qtdbus-${PV} )
- gssapi? ( virtual/krb5 )
- libproxy? ( net-libs/libproxy )
- networkmanager? ( ~dev-qt/qtdbus-${PV} )
- sctp? ( kernel_linux? ( net-misc/lksctp-tools ) )
- ssl? (
- !libressl? ( dev-libs/openssl:0=[bindist=] )
- libressl? ( dev-libs/libressl:0= )
- )
-"
-RDEPEND="${DEPEND}
- connman? ( net-misc/connman )
- networkmanager? ( net-misc/networkmanager )
-"
-
-PATCHES=(
- "${FILESDIR}"/${PN}-5.12.1-libressl.patch
- "${FILESDIR}"/${PN}-5.12.4-libressl.patch
-)
-
-QT5_TARGET_SUBDIRS=(
- src/network
- src/plugins/bearer/generic
-)
-
-QT5_GENTOO_CONFIG=(
- libproxy:libproxy:
- ssl::SSL
- ssl::OPENSSL
- ssl:openssl-linked:LINKED_OPENSSL
-)
-
-QT5_GENTOO_PRIVATE_CONFIG=(
- :network
-)
-
-pkg_setup() {
- use connman && QT5_TARGET_SUBDIRS+=(src/plugins/bearer/connman)
- use networkmanager && QT5_TARGET_SUBDIRS+=(src/plugins/bearer/networkmanager)
-}
-
-src_configure() {
- local myconf=(
- $(usex connman -dbus-linked '')
- $(usex gssapi -feature-gssapi -no-feature-gssapi)
- $(qt_use libproxy)
- $(usex networkmanager -dbus-linked '')
- $(qt_use sctp)
- $(usex ssl -openssl-linked '')
- )
- qt5-build_src_configure
-}
diff --git a/dev-qt/qtnetwork/qtnetwork-5.15.0.ebuild b/dev-qt/qtnetwork/qtnetwork-5.15.0.ebuild
deleted file mode 100644
index c203b98..0000000
--- a/dev-qt/qtnetwork/qtnetwork-5.15.0.ebuild
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-QT5_MODULE="qtbase"
-inherit qt5-build
-
-DESCRIPTION="Network abstraction library for the Qt5 framework"
-
-if [[ ${QT5_BUILD_TYPE} == release ]]; then
- KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~sparc ~x86"
-fi
-
-IUSE="bindist connman gssapi libproxy libressl networkmanager sctp +ssl"
-
-DEPEND="
- ~dev-qt/qtcore-${PV}:5=
- sys-libs/zlib:=
- connman? ( ~dev-qt/qtdbus-${PV} )
- gssapi? ( virtual/krb5 )
- libproxy? ( net-libs/libproxy )
- networkmanager? ( ~dev-qt/qtdbus-${PV} )
- sctp? ( kernel_linux? ( net-misc/lksctp-tools ) )
- ssl? (
- !libressl? ( dev-libs/openssl:0=[bindist=] )
- libressl? ( dev-libs/libressl:0= )
- )
-"
-RDEPEND="${DEPEND}
- connman? ( net-misc/connman )
- networkmanager? ( net-misc/networkmanager )
-"
-
-PATCHES=( "${FILESDIR}"/${PN}-5.15.0-libressl.patch )
-
-QT5_TARGET_SUBDIRS=(
- src/network
- src/plugins/bearer/generic
-)
-
-QT5_GENTOO_CONFIG=(
- libproxy:libproxy:
- ssl::SSL
- ssl::OPENSSL
- ssl:openssl-linked:LINKED_OPENSSL
-)
-
-QT5_GENTOO_PRIVATE_CONFIG=(
- :network
-)
-
-pkg_setup() {
- use connman && QT5_TARGET_SUBDIRS+=(src/plugins/bearer/connman)
- use networkmanager && QT5_TARGET_SUBDIRS+=(src/plugins/bearer/networkmanager)
-}
-
-src_configure() {
- local myconf=(
- $(usex connman -dbus-linked '')
- $(usex gssapi -feature-gssapi -no-feature-gssapi)
- $(qt_use libproxy)
- $(usex networkmanager -dbus-linked '')
- $(qt_use sctp)
- $(usex ssl -openssl-linked '')
- )
- qt5-build_src_configure
-}
diff --git a/dev-qt/qtnetwork/qtnetwork-5.15.13.ebuild b/dev-qt/qtnetwork/qtnetwork-5.15.13.ebuild
new file mode 100644
index 0000000..d4da090
--- /dev/null
+++ b/dev-qt/qtnetwork/qtnetwork-5.15.13.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} != *9999* ]]; then
+ QT5_KDEPATCHSET_REV=1
+ KEYWORDS="amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~sparc x86"
+fi
+
+QT5_MODULE="qtbase"
+inherit qt5-build
+
+DESCRIPTION="Network abstraction library for the Qt5 framework"
+
+IUSE="gssapi libproxy sctp +ssl"
+
+DEPEND="
+ =dev-qt/qtcore-${QT5_PV}*:5=
+ sys-libs/zlib:=
+ gssapi? ( virtual/krb5 )
+ libproxy? ( net-libs/libproxy )
+ sctp? ( kernel_linux? ( net-misc/lksctp-tools ) )
+ ssl? ( >=dev-libs/openssl-1.1.1:0= )
+"
+RDEPEND="${DEPEND}"
+
+QT5_TARGET_SUBDIRS=(
+ src/network
+ src/plugins/bearer/generic
+)
+
+QT5_GENTOO_CONFIG=(
+ libproxy:libproxy:
+ ssl::SSL
+ ssl::OPENSSL
+ ssl:openssl-linked:LINKED_OPENSSL
+)
+
+QT5_GENTOO_PRIVATE_CONFIG=(
+ :network
+)
+
+PATCHES=(
+ "${FILESDIR}/${PN}-5.15.7-libressl.patch" #562050
+)
+
+src_configure() {
+ local myconf=(
+ $(qt_use gssapi feature-gssapi)
+ $(qt_use libproxy)
+ $(qt_use sctp)
+ $(usev ssl -openssl-linked)
+ -no-dtls # Required for libressl
+ )
+ qt5-build_src_configure
+}
+
+src_install() {
+ qt5-build_src_install
+
+ # workaround for bug 652650
+ if use ssl; then
+ sed -e "/^#define QT_LINKED_OPENSSL/s/$/ true/" \
+ -i "${D}${QT5_HEADERDIR}"/Gentoo/${PN}-qconfig.h || die
+ fi
+}
diff --git a/dev-util/cargo-audit/Manifest b/dev-util/cargo-audit/Manifest
new file mode 100644
index 0000000..3aa518f
--- /dev/null
+++ b/dev-util/cargo-audit/Manifest
@@ -0,0 +1,270 @@
+DIST abscissa_core-0.6.0.crate 30041 BLAKE2B 5f3dbe484ff17990deebb71aa745ae9dba1d33665a7da9a68064f002884d0886c6b1a8578dda5630b8317e3e57fbf731c7dd0b69395b2199dfafeb3da90ecaea SHA512 72d5ec5cd45a5f2a50f8de659a6de3665dfd256586a49ae2c3b8e5ce8e8216d18fdd7864e365caf2ebb124e1d0d13b54943eb46cc81f9589570c9c09fd7d3423
+DIST abscissa_derive-0.6.0.crate 4812 BLAKE2B f638d515bbe1b8b8fb84c508864c7a473533a3a872b192642c4f6f0efa2a957c565e343a226596f03fdd7eaf6c6329a09825c833092325b1aec9d01c4f00aa5c SHA512 648573cf467a087e43668f21e44d84155e2bd2824300f4359a1d725a1a1ef822f4bcc2911747931d60c0f3878147a44b87a3fe36424dc8d8c78358649e6350c6
+DIST addr2line-0.19.0.crate 33210 BLAKE2B a6b393dcddfa0f858297efb6b261d3a23f118be45a3211ee15f6c58808f241dbcf5282f4a86be579360513f23ac4035819e923f2587b7499110af42e9ac3ab88 SHA512 18da72e412bb89028e2ccb838192330535e45300f6fd8edc7d1d64397792a3db12418aa24a3312730c5414e2a1b1d65e6b9d5691ba234c9142b5d885523a5e94
+DIST adler-1.0.2.crate 12778 BLAKE2B a1dc17786adae945ac09d3525e609ed944e6465690787bbb831a1b9d53793cba1989793d0a5606d5d23ee20d36457923d451b1b3530c9ec7072a487aa3e55bbd SHA512 7ab190d31890fc05b0b55d8e2c6527a505e06793d5496be0b3831e0513412f9ba97f8148f6f68ed0770fa9cd980a5092d885e058becf1d5506b7c74b82674aa1
+DIST aho-corasick-1.0.1.crate 167320 BLAKE2B f148004140d4f705e93f448020b97c434b93fea6ae34fd74b1f394b076c2727a87f5ec54542a0f52822d716c10ada3c68ae8f50a46c455fc6e828b10b5650ecc SHA512 7cea5b2305b90aebc54f78446cfc91f275b1be8489d2d80c3baa9ff8b913f9b2296adbdf4aefb0d8fce8f57812963fb9450b200d133a9d61e100cef324068070
+DIST android_system_properties-0.1.5.crate 5243 BLAKE2B 86f68ec3bdabf8c6ec47881d794970f08a9eefc7417fc8a2bf4fe9faf9bdd2a2024a94adb0cbf96673409f5fbbd4d0111a1ac371339e7a90a277b6cd5003524e SHA512 b09f51339f9772c0e2e4241b36cf51573c6b96b19ffc1fbbc94b1c1d1d2fdfe8eac3134af54174a675ab05d18ef4f6bcb2c7fcc20114bbeef6e17e3692202191
+DIST anyhow-1.0.70.crate 43803 BLAKE2B 574da0e447592c12051deef171850b00ac2347dd336f71915dd21f45cc03439fbcdbaffe261097d53cc11fa0db75b1e3b21ba667f26c08db7125b1c6264973de SHA512 6fd1338e4cbe915cb01fcc5e05e7e0c051868701eeb27f03577a7cfdd59057493922b36e2308f7050608a851112d4d24cff2826456160ac8930fe961640e809b
+DIST arc-swap-1.6.0.crate 67342 BLAKE2B 6afd6570c3cef4ae722d4168c3320be1343c4f6043892e5e5b52879b8210a896e083d720797b41a41db04a08eefdcfbacbfdee1a7f2180e9755c868d6fded872 SHA512 5e09cef9fa12d1204db24f3397158a3f45d12dd0fa61eadd691bba120a43fdaa916ab09997e7a63d61a3fb7dada4e3266181f4ef413850c4bc5e59d2c6c5b9df
+DIST askama-0.11.1.crate 8182 BLAKE2B 5cfa6a0cf5679e271c1d35500b5ae40eb4fe1f955f4356d913ae38d7dc6fa9137ff6e250b7f0ff2a3aadb747d4abc8456a6990c99908e602521ba28014d81ca9 SHA512 d75507a43d2ab12b046854e33308eeabbac6825282588554a678742a71f2521a33637b89d3b24088643d18e84cefa538031264c587896e6e1eb16cc15c93afb7
+DIST askama_derive-0.11.2.crate 7097 BLAKE2B 395811d68825531552ac9bedc30c1d59e15ade43b3818576212456974799c0713df8eb099970affed54397c800f62310d5f6f201bc2275f5168cd805f2330257 SHA512 c9b4c2b444c9c9f9054403b25a62e0415d87f0c8a0cd1ac9fc1cdd341c94c15eb91249006e59504a34a18703dd3b9bc5a4012804a4ce3d9401126b66c3632e65
+DIST askama_escape-0.10.3.crate 8875 BLAKE2B 6bb88f18aa0bd05a36e7bf5cfcaed3138ddb96ed366e7da9b9a64c4e0345fba384cfa3e9bfab3674c1697a7722bd59a9428438b78d44bcac78740d4c53c3d3e8 SHA512 1978add567021fac7f086b6091c97de81919877726455828164642c55607d5b5f6f01c0187f8a8a3371c9b3a1ef41f4c3c9e14d9068826c38ee8a6efe2eeb5a2
+DIST askama_shared-0.12.2.crate 38015 BLAKE2B 7f1f461abc5e1a6c692b254b939309be986435d8c7fe1adb8f3590478e0b0bfcd9c98b68f1f5cd72ea5b72afdc17f79927cbcc86500502965d5e2a8ff41236cc SHA512 05d9bbd47ed09700ea2ee32b5b27801c7b8ea3953a186ede54570a68e2541dcc07f49858cf55ff61c86e129c5d84ff1d92d555514064fd43b5fa2160bc24bb32
+DIST atom_syndication-0.12.1.crate 25450 BLAKE2B 919a6ee37e25e46b598b4e722f4a9dc0fc9322768642ea2770afa4e5ffc9d4e53c9c830b981ccdd74f7a9ca9ae7333e7aa33b7cdfa9edd17685ef8a588279750 SHA512 6c11444280988ad16c12cafe7ef44f662844a2f105d03340ee5792193f2795f2361a6385000fe0acbe58541394d87101cc19c90761576188e84653ef8b27f4a2
+DIST atty-0.2.14.crate 5470 BLAKE2B 2db856a9e898a430258f059aeaf7c844a153293e8856d90ac81f7d91a888c89198768ad5cb09303c23241fe85c560a55148fa56a303651a82b0edb895616bfab SHA512 d7b6c4b9a0f898d91ddbc41a5ee45bbf45d1d269508c8cc87ee3e3990500e41e0ec387afb1f3bc7db55bedac396dd86c6509f4bf9e5148d809c3802edcc5e1d9
+DIST auditable-extract-0.3.2.crate 2576 BLAKE2B cff86a005edbc36bd48eb95a1b8da39d72d0d6d249fd7d7ed11f5de3e9e77872661a5c5f5b8b223f56fad2e59aab4281a1f2e59e3a29c746635d6d7c4f5fdbcd SHA512 2f5747934d3ff600194cbdf4b6c614026a7ea3df56acce5634be7ff5a6f7859c96555619f3d2631e53d505e8ad289a753978982034654d868a64d8a6acbeee44
+DIST auditable-info-0.7.0.crate 4854 BLAKE2B 46d16f545908d9df489a5d7766c4bf1c8dff70a7e9197ac1337fa6b34bacd1cd8e37ea1287136d239001897f2f52c508bd992864cf48718f4a206dfea711a528 SHA512 226e8eb2229f3d8bf8c0eff37ef328df130e3ddc079d6efd58d463ba09188e10b68c2c252885644cfde7b8969b0c71ef089eb20c522d3e74f6e64b59ea531ea8
+DIST auditable-serde-0.6.0.crate 11802 BLAKE2B a136bf7fcf15380f1bcc2c38e895c615ce7bb5c1343c2e35679aeab97b4e0d03f7effe4f2fee7dd96b999bdd42028a2292d2dfb07dcca21dfe4035d5fe7357f6 SHA512 53ffc0ba4a4d03dd31592e3c6e16c462520446cd7c40b40ce0fee4444d1e301ea80031d87bb11e076628ee2bfe478fbe6c14ac2d0fa5b66bb03434d90cd0a257
+DIST autocfg-1.1.0.crate 13272 BLAKE2B 7724055c337d562103f191f4e36cab469e578f0c51cc24d33624dea155d108a07578703766341fd6a4cc1ef52acda406e7dba1650d59115f18261281e5b40203 SHA512 df972c09abbdc0b6cb6bb55b1e29c7fed706ece38a62613d9e275bac46a19574a7f96f0152cccb0239efea04ee90083a146b58b15307696c4c81878cd12de28f
+DIST backtrace-0.3.67.crate 78564 BLAKE2B 8c77d3d182c7e1ec3840fd6c7f4214322e473ba79a71b2d11d98696f8ae4440350f3c84a891b2ec79fffde107fb2ebb99fffca202d6ed235d3abd68215a1089b SHA512 8603a3b63f4f08be315176908134243680bf1a4b0e6cb26ed81f5fc1060279126ca0ef28f209a10289e1a85214b35db6b496affd71ad21524094f3ee3acd31b6
+DIST base64-0.13.1.crate 61002 BLAKE2B 3b3a5b26e2ef18e9b4f1ede72b1bd160a1494751878e8441d463f8a514e6cb9ac859231536989e19fb1261fd864617fe31440df1b5855a0ec625521fc6fcef91 SHA512 1eb76aff9a84057f2ccb7082e9c57b015c2d71a28173089b02e7aacd09a7d311bedf0a943529611ada29f8d7b536d7ae4de256d98eee8450003a3a9a652bda4b
+DIST binfarce-0.2.1.crate 22233 BLAKE2B efd2411f045241eae60fa76cfc29116485832807394b3a8c0a76b43e840448a2911fec9e4de412e06844a5b8098f77f7af1a5a944f7312ee74ece779c190d4ad SHA512 ffbffaa1f45d62f13537a4402ba7a3b20432c80c652c337be7dcc9df253e143585d531a7406de77ca0f08a4cb7889b85b5a82901765d952c5604ecf4e09ddb91
+DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
+DIST block-buffer-0.10.4.crate 10538 BLAKE2B d819c4f9c4be85868e8b105fb7e479d2e58d3ed85c3339bd677a3e111f85cb1ff624a54d7802ab79a6e1d9221115f66388568340480fe83eae1cb448f19f5b11 SHA512 b7d436d8e627e16e6ddc300ee8f706a6cef28ff6f09eff848eedee46f84bdcd03601303c92ab8996042e55922866a59259948177c0a4496eed723523e77f6fdb
+DIST bumpalo-3.12.1.crate 81653 BLAKE2B 26ca1df07c8f55a4362e844bb80cabf1efb6627ed0f489f280178e03d0c8bb600303529c05e5c2a9bab79115510eddddf446f4baa717352babd68b6a3200b7bb SHA512 1f57591bddd5d4c856d5ad1ae71f9306d8c37681a72172b6be35b4d6fffa7f30b086d88b37d8f512e2256cb7d37dc992ee83bd071e4ff84182e5e226dc92e4bd
+DIST byteorder-1.4.3.crate 22512 BLAKE2B d39c546ba7346df315297fc53da4bfc77ecb1f38567ddb788549ee31cae2719a8bc0b7d1f1705abb3cff033aa57af004987d90748f5a31765273b3223a011c0d SHA512 8c8000eb8ecf40351c9ce36a3a8acd7a02f81786d1b11aab85adfeffa0f2267ed74df29b2ca5d1d38128484d1d3cad2b673aa0d0441dcd0620dfd3934bb888fa
+DIST bytes-1.4.0.crate 58080 BLAKE2B 99a9d343424e04649bd209bf2a6c3a089a6cc9fdb799968f8c3a711189328e4499df2e09cc6a2a8ce05d2cc668149b364cf30cb3b09e96e21d50a39519c2f49f SHA512 502c63b9fdcd36ed28ede55a63cd359dc7b28658ecd43020511d17d48d7c34e45aa8ff7e4b17770f12197451040c2b724fe68d2aa3ab4f81c9171d052f2aa000
+DIST camino-1.1.4.crate 32290 BLAKE2B 92180b753e799513ecf4dd29c8635fdce56b246ddc172b41d54e06b21b0eebf72325a3f8120ceb32dc0697498a21058193dd1df99e9c1913fdec92253677c422 SHA512 87e260ceae0c155790756101db8d282bb6ca990579ea31b12668d2d4025f93c680fd9c62a45dc454f76109ee8a331d0a862f0653fc53e3f34fa9229588f9960d
+DIST canonical-path-2.0.2.crate 5536 BLAKE2B 63de79c5f5ce832c6c4db05c812a9f2dacd939e73140137ecd20d57d3cf08b4c8ed87e04691681cf4284669a0321f9eee7b7bc01b95e18b25ed229932601404a SHA512 8d7bc999da230d3ebc8b6434c0cb2aced6ff2a77bef7225a060af79b9ab169bbf8720c9efe76e5fc2fb8af82a859b9e79b79e17c3c11bce523b4baafdf522877
+DIST cargo-audit-0.17.6.tar.gz 981150 BLAKE2B eda1d94a0819e34bb743c8c909ee27a8cd3988ad0e5731d61446c956e97d4158f385374f0c7280c04a587b7ae757f3a17158653407d851fed1073c69dc2d5a40 SHA512 effbcf5662e834911e9bac4041846bc5c2eedd9f7d7ef17cab2423831f11472a2075f6ed1511900fac706c6087f5a161bd4d7ac929fdad1791b7f39d293edd57
+DIST cargo-edit-9-0.9.3.crate 64196 BLAKE2B 48627ff64f79a7cac347f1cb6965ba878f1b8ebdc8446c3a1d1b330413745e3c6a445a855f10adac44f5887c1b0d7732d46ff39071e170e538c70e637515e4be SHA512 961c0b3d98dae9c94d56d6148b95a732b595680e310d3e841266e67b295041319425f7ac7b74daae53a7e801e1b902c39971d8ba878ee3b6c80133c958fa979b
+DIST cargo-platform-0.1.2.crate 11645 BLAKE2B 7770acb90e299f71c60bbadceaf894a3100916b7f7458f9c949b683b39157d3e1ec17d850f16dfb04017b01d7734d41872d48cf9f4e1ea7414439cd7031c2330 SHA512 c716bf3a4e0942160dbf7be114d1621e1fccc23511e7b0a2b99852b99a851910bfcf8640c2d0d0a03d5a324e1a59fb5d4264ca81bca24e3f1a1ca653bdf2956f
+DIST cargo_metadata-0.14.2.crate 17469 BLAKE2B 4e64bff7710c51d95944faac60b4881b5a43d5edd07ef87c8f4b9826e63dd708719cab27542fdf82cfe869d8781c1a6918a050aa0de71086316bd2f480aad947 SHA512 16e6bb3ddcfd4c6d48ba3415780518428f771c393ffe10ce15e1f3c026a6f3bf40ea9f25214049841b1d7d51f2208ed032961a75cb641c5afc52e02cb84d3262
+DIST cc-1.0.79.crate 62624 BLAKE2B b3cbed3bd6fcac1c6ea258ec96cd107f859947a35dc89c3dc8f314741b0f668e61518f896ec32ce10c9a7eb20dd350bc177a71810d53ebea59fda062ed9d27db SHA512 cbf0a25f3a23fc540e9d638fabc23f761f1c240ebb4814e761e90437d71fc559cd155768ab9e78fc192220d8a605c66c3af342ed736b719181656170b98d7bf5
+DIST cfg-if-1.0.0.crate 7934 BLAKE2B e99a5589c11d79d77a4537b34ce0a45d37b981c123b79b807cea836c89fc3926d693458893baca2882448d3d44e3f64e06141f6d916b748daa10b8cc1ae16d1b SHA512 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
+DIST chrono-0.4.24.crate 191330 BLAKE2B 492a5f1a458db9d6eaf244ac6ee750fee5b4e2586b7c675f87f2515143080774f13f9c163bcfc84b08ec70b90c7fab2ffa438f9b2b8b4ec1e691fbf9a104ad50 SHA512 1a9121870aa4d76448a1b118a2e135a145a55c7784c4f5a4f25732f8597b8655f32cbce174bdd65c2dc7b17dcc3a608454d0e3dc29b86338e42a839f8be1e4fd
+DIST clap-3.2.24.crate 219389 BLAKE2B fcd17461cab1a72262b4ccb08fd3a8082c997f24f41814a3ed930c6d6c615d1c8ae0b94dd8143eb9171aeaf5026424e9142e964ea3972c7e87902b909986c237 SHA512 a61a67ea6d4877d7933563464770476b4ff00b78d1419cb6706e0b158454790c8af9ea70ae2011e6f72e86dacedb07811f62ba2a68ecd1f4d318cdb7428eba73
+DIST clap_derive-3.2.24.crate 28184 BLAKE2B 9fc8649aee1b600da4723a26355031cb69113732df5dac3c59b52f3ed295a697cad9556548f6a3704a29a048760c9f629a54a7018c492c3be827db98f0c305ba SHA512 74fd56e48146732b40af23230a831dd49ced426c80198e18d527d76e038fdf4a28463b82e4173d1955d704fa8ac1fe09e1ad49e790011d2764561f2761831a51
+DIST clap_lex-0.2.4.crate 9652 BLAKE2B 5120b508dedf52507068c0c369a45ddfbe0369e5c05b65bc5a78c422b2a4bf488f9ef1e0bed4e335450f2c08b80148eb5f7efed678039b5a94b5bd666385939f SHA512 6c05e5fd850befd45be9005af7252385f2304aa28a107413bbe329d97aea835f7acfd0bd169c99f69f466ab93d6e1c35d73a4e48343457a06fe2d6be5bedde0f
+DIST codespan-reporting-0.11.1.crate 48963 BLAKE2B 39deb717a853ffbe3585e20a67fd7a75b62e2d796a66b5004876501fd7476acde9f126804f2ef6220ebab66821a3ccf058d544d689a2705eae44285f34b510cb SHA512 0869789f5c50d3523d3ee16a8fe64756498a13704efbe82bb0845eaa87c7b6b1d075b3b6b80567cd9fce6cb09c5179e9c07e485fd17ce56c8139ade0f8bc6844
+DIST color-eyre-0.6.2.crate 635042 BLAKE2B ab35f335a29d5698322b44d144f307ae5968e56622dfa89c6d438071026c9bdd79f2033c8849acb3aef86d3590561386e02c7571b079abc4e928bc966fcbc233 SHA512 b7e83c8fc196d0c163b64d0165e10c70f15ff7e64fa8b1547f45d696f45f8a8ce7140e04901c4fa4caf15d868334253db64be2bd201ee964eb4dd5f494549435
+DIST combine-4.6.6.crate 132428 BLAKE2B fb52e724a52f1a551255591fedc134178080ea5efc0c488efbc369e6272f7f2b87dd7d0ce63361754d8ff0cf1b0a59bbc7b0396c50c53210f3e2c28ac965e0e6 SHA512 ff9ef9329de2cfc103271a25ad1fcb7e478f3328843bd8a65653e80b74112728ad4a33326a58ed7ef8cf39eec7c3b797fc287295ba149ee0dccb1de9721b5819
+DIST comrak-0.18.0.crate 118506 BLAKE2B c6c360acad3a2adf4f8c83c0982fe8867b6e7d15cb70f42077181b8f3b4eb7de592c6b55981cad9995897aabccdfee4a3391b8e3628f22c31e9c29e37ba1f0f0 SHA512 e79af88940302295654deb3d3bbca950e82be15d2660c5f4d208d9538323742e4e9da5f81ab90539534a76426bb80802698cff9f397dce0203d0ec2aee40d42b
+DIST concolor-control-0.0.7.crate 6314 BLAKE2B 1de3c19cdd66536ba2ce1949fe6ce75961df75407669c0716e0698b0c2135f423d19804af001eb40d78a7fb42cbad142d80df579e761fe7418bf23b68de18c48 SHA512 2f7739d21fb989a369314898fccd32fb6eb5cd7876a1e8770fb5b106e72d104536c4a626b41f7de2f255efbc92dc47d40030b2764f3395e8d11a924b28acdb1a
+DIST concolor-query-0.0.4.crate 3095 BLAKE2B 215e1a03d5136631715da2ea01e6f0c041b9ba58e8b09077d6e6391ee91a504cc02099093f9027da12672d9300359e2873ab418eebd68dc426a31ab781fd4c32 SHA512 1ab671533353028e49af78a113512ca3980a49817660a0c75e0f3d2da64880da4c0659cdc13e96de7474214411f4b2dbacca7b12e05fef0e63fe5fac25508e4e
+DIST core-foundation-0.9.3.crate 27059 BLAKE2B d94fec51b1b1055c285609f4bba45c5169a8cc775e251eac7fbf0da7ef894e1be9ca9f4236b82b67be0610bdf811366e0c6fd3cdb671a1e83c49717e2c5b2d03 SHA512 de07967c4f5e2d2e730b6f21984c228dad2cb2f55187f13074a2200f4ce9f906763ee818267a9c67ea560229db7363473b230670a6dbd224fc335f32ba03d072
+DIST core-foundation-sys-0.8.4.crate 17725 BLAKE2B 8afe47838dc91c8848c0d6a96a604149e5f0762228dbc10c17b85e4e9cd2c3928712bd0b28e1071f5fd6fd76d4ef972cb86c6c929246fb6e84577776933a8ac7 SHA512 15da472316d6decc213e4e5f08ecd22a108ebefe427b890741de4f9199614f19123e64329da76de5e8b4c9ff74ffc31738fd929acc1460fc757b4aa1fd3fdbb6
+DIST cpufeatures-0.2.7.crate 11563 BLAKE2B 917f8ce2675519b4d5d89fe09b02e147f00a915d195158a690b292376bcc2937dee8f76778506556ecde0187c74ca8c046973f44e1f34e4c8bb6809d2d4347b7 SHA512 46988efd895b88751200dd9693a1040f698c8b2ecd5d3d4ae1d8055e719aff262afea764083dabf1d8202a51e7e16b4f51adcffc8a2424c841b58840b6669490
+DIST crates-index-0.19.8.crate 22701 BLAKE2B e0e2eba2251cb1b819d3fc787db010689a056491d3667d7fa21150a2c517edeebc6d0e5a5162e6aa3209d7cf7c135415d66c3082a3d191b3bcdd1568a818f09e SHA512 81ca418f0ce6e08614c36550525221ff5b8193a084adc5dbfcddc46008df59720c4e5a3e77c6518a162cfbabfbfcfa079039a7e6e52d707fd75af03d094d2993
+DIST crossbeam-channel-0.5.8.crate 90455 BLAKE2B 017132056f1b40e55fbc7a09b75509d72b0a6123a0e5ea5d6104fe822f73b3ccce670d711d3b84b5ce743dcab5f10445297a6701b71213b77c0d56e2c3fd7160 SHA512 47677d6fe63050c51393e4a0537a3c65d7055c9eae118ebe60c5d716b4f47f23c2b1947b1e1b66bfb34a57c4db3a44631d323e996dd545565fe4f58c25863ff4
+DIST crossbeam-deque-0.8.3.crate 21746 BLAKE2B c24025c65d7c1c98e442af95491749dd4f777af0509636ed66886dcf656359ec50dc2a5e26327559c6659f6b355d2b0b992dafa691a36571c99637cb47372d0f SHA512 f3201c9afef7d2d119702696f7e5e7997a104b8f7d67c7adebd1cbed84d3a3415636ff674f1ccdfd95d0dc162384e46c6138c8203ede69577b0d5359a4b44672
+DIST crossbeam-epoch-0.9.14.crate 48524 BLAKE2B 439eec7e5e0364af0fe0a34ffc9354ae289798ffa7480bc656d4a610101e1ef2d5f484d84f82c87f961bd622434c36adfb7a87f7fbd2c71077b732cc7cc765ad SHA512 543cb60cff7c0823733f6ace191b137a04025a2b40fe4fea5eb273772009627fb705aecf742bc59e01367d4c15a14aca73aa2caf7f4b509f4b25947e14fd1e19
+DIST crossbeam-utils-0.8.15.crate 42326 BLAKE2B 23e6bd2a6535c6fccf7b7d17487fdd4095c92a3f3ae383a72dd6d90c1c49c2ec8d96dc01a94c7127b2681bfaef843585b3ae8665ecbc43b2e7db8434e31c6c8b SHA512 adb9ce1886396bc637299cb8122d102bcc9e561f25d67ef73e98c9ed8a8b13b78bc0f5bbacab19d015e1a7690bc0201f08b3d8e82393ec347e7f2933eb622533
+DIST crypto-common-0.1.6.crate 8760 BLAKE2B f2422bfb89c15d47a8f91c8f6695e05eb56990a922e3cdf3d426044736f9932324c0d899a151a6df4d6683e6a6b21659c657d3988734014c02cd854bb4b924e7 SHA512 471dbc43f517089d2cfe0868e29510c6ca579875b3bb5d013c70796db969b609b6c4bb35c9a07b9a2917012dc5708b717d48e317a20038adbe7e7039bf3ada6f
+DIST cxx-1.0.94.crate 196058 BLAKE2B f504685292650a076c3689540cbb5906721fcba1cda0391e855d75b9b1270249805986b501291d91c947c124ba8affa1659e43e040bb264d3ab3aa23b98d9718 SHA512 fb66c3d53dfa1fdfe8fa31ffb6ffe0f53fc87d5f56038b5d2f588fc56668f96954e75db1fc7304d183ebae2735f0c7297b396936d588242556f40557854f22be
+DIST cxx-build-1.0.94.crate 84842 BLAKE2B 39b8a11b925244410ac2dca3be5a27576ea67f5386588e768d9ac1041336170834c7c2d0cd0a61b3e6eadea4d6364e98bf4dca64204126ef815235a17f1edef3 SHA512 4e2b7ccb8ca2ba35d14fda222595528d3e7abf6b4bf5b8e23f19f9668377103808151ddf63bc1c5f725fa362dc3f33a827b026edab176cc99a36e0f890c13adf
+DIST cxxbridge-flags-1.0.94.crate 5253 BLAKE2B f7746ca703e95f8b6197655aae08b88509132b89d035c62420e3d0cc4857687171063e2da69a787938188dc5e40fccd2b50713ed929f3f097efbc5b5956b5263 SHA512 9d577cf6bd2afa2301e8c227f201c138a379457624833c3cad4e75c7ed046544b363ac4bd0f7a1a2142ab1c9d879b56ccfd681a3962be917099db5ee4c63fb02
+DIST cxxbridge-macro-1.0.94.crate 59873 BLAKE2B 9a29a2818cdd6047b49002c10542e2d04702ceb41823a12e27b151bcc524a05377390c65164e53062630d7ad9f849ec71070118de5eb348c98072e301dbd1416 SHA512 59120f8d0f498539a16921d18e0e53a745f4ee58f4ed40465b13722188d28975820adc3c632a4592c6813771056fe084674daee6c56940e50f6e9c492c4fd90d
+DIST darling-0.14.4.crate 25168 BLAKE2B bc48b27823a1a85a01a5daea47d87c2ac4b3ea48079249606aec912a4f417b72516004f17765e38f06048543708b758bf68afa63dc5e7415906de7940f02726d SHA512 1f236976cd291502229a49c2317fbcad94df54e2d7fbedebd9ac3173f9e51620ce8f2e37c78e86a63db8d9cd089e3eaedb990e58cc97847baa2cbaae58526aa6
+DIST darling_core-0.14.4.crate 57485 BLAKE2B 3d284d6a5100f45228aef5e42f9de63b6cfe2b5d42f1224bb19ff5d262b0c293931ee99f3aaf1f0eb24e55bb7e04ae790389d73c624c5f00f17a280a4a496ebc SHA512 6df7e911a543e9cadd0810cd8bf6563e2f000b52bab875f7a34d229bb6c4fb7beb6ebbc4fb0e12b97f23616280a20f306210abdfd1dd094c53da35f97be27b96
+DIST darling_macro-0.14.4.crate 1896 BLAKE2B e537b384c4c05103a962ff03be3da6c6c31d1c0cc25dedf5df1522c524e744446274a1696093d6f4479c0b6ddf02d27941fe959f517ede4b203bff3e20eeb294 SHA512 819fb85d8e324f4848669d32b2eecb2c2945a9891fa098eb9ca61d84588d26f0e0d1c7c482956935c7188e9c6feea0db5ae4c81bfe3d014f74fcebde80a204cf
+DIST derive_builder-0.12.0.crate 35456 BLAKE2B c190003a65fa22faaa977bd22beaaddccde90aa9817d28e0940da27c71b50d1b77435029eeddb552c0451303340edae41d857678316b5e1deb36a233929b0943 SHA512 3ba06c1d53f69ffca5a56edcd1173e9b5d67b9a5b00025c36fef04fa06a3046188ed503e1c0c8d56b26411b5199c3a152f284965f13ad8b346b6750ca9e00f0f
+DIST derive_builder_core-0.12.0.crate 31438 BLAKE2B dba84c7354018e509171767aacacb2be8e3ff566799ff693e2c4473b29f4ff93e2e785a0ac68c6b5ec4daa2f6c98c0da693b574d39184e038053589ac43b6c8e SHA512 f2e3cd5afd603273a1785fcef32b8cafbc89c422bc7754c46a9dade42f7351e3d6fcd00a5717e2617618f1bf71d5ce94abe043b19b4b6092d484955f1578d7fe
+DIST derive_builder_macro-0.12.0.crate 6288 BLAKE2B ee0046658aca482c8d6141d4b12c9529277236a98119a5c776f4e759ba63e16b5d25045e25a9b1f008ce257663504e26cb90c2e7417edb69c2cad38f123f93f3 SHA512 cb4a71f49c66ff91dc5a459053102e1aab7956d6003998270ac9bc94c2259b824a77689f209ff0104261ff829e54dd0900ec76c2cc1b8d3c52092961ffd072e8
+DIST deunicode-0.4.3.crate 109535 BLAKE2B e71874d5983659ce8324cc671a5b7ed86a960a9618ec4d1085d052f8e4b2c9ac92997cd425d7969abcc35c6905f1d54ef371452c899319a39d245a5b36e156c8 SHA512 f3b9ca2055cd64d2f3035799f809976a0909e59b38ebec62b56e9037f32582f5cc99b72b1774dfbcc72e4d978570946cec46eb034fe71145c67e2241b9f84cd5
+DIST digest-0.10.6.crate 19527 BLAKE2B 402009105a6ac055be062769dd4f162aabb977b9afe29f451eeb3e6b5dd1a579c371c5ec996b9c1bdba3b4ded83830ed2e1934a0505480bffba1e0d16775a8f7 SHA512 21d3c1dc64e640300c51e8a009af464d6e3cd2b10aa67c87a038165c11409d6e5faad1967236724a9a4cab8fdd88826cac1db4798245fd53ac2ff1a9b2b68b76
+DIST diligent-date-parser-0.1.4.crate 8019 BLAKE2B 9455de0f3bc8928809740947942be1f287099767e058b8ee5886234a11a29e09a1590eb8f6cb7afeae3126404ad28231f9d6dc313ee81d1ba850eab65ceb375c SHA512 2040e7f1f0b33ee0404627387cb4a897937a949be82ab11aecb6daaacfe3784bc68ecb561d4ec1bd31d210a028e435ff3bc4ae791c3d6a46d4cd2094b2c908b7
+DIST dirs-next-2.0.0.crate 11689 BLAKE2B f5022bc51dd50bad4ad0fd05b159a4117aca47afbea66dc42c8306ca58f3a550165afbcf9f5f721ef5ad8d357eaff305c6f6e42789354a910d5f1d05d3b7b7c6 SHA512 6ccb732da8ccf7bf35952c22a3b0caa8238319feb0a6cd3b0957e6be12548a2ce507c69cb6d3cbd2adfb37e13e6521c6229da5999edb0e47a292a41c3ea1a766
+DIST dirs-sys-next-0.1.2.crate 10681 BLAKE2B 71431533dbfd6016cc309c14a842ac8d43577abe768e69bd2caaf7d19d743f3ca95b9b0be1747077282089c64485f3d4e24bec8e56d4d883f25e494d328fbf3a SHA512 b3c40a8e93d4f9f4a890718076e14779aedd67a79da61b466788268c1eaea19aa493f043a7e410f5023a23d5509e639a6fc6681fbee30e252a601091cfffa2d5
+DIST dunce-1.0.4.crate 8034 BLAKE2B e1e7ffbcf1e3632036c03303ab46fc37b2b0a991598790b2dc65d7a61341a78bf555230ccded8fbb87d6288282af3ed2a8641212a0f1fab929bf99298e878b6b SHA512 f57d9c53c177bac8e10a4b56ae421c604085aef0f264b8d6871abb7e1ff713b55f396c5c5f24422763319c504c6ea6a774416af1c2ba23ba7b67b2282f6731f8
+DIST either-1.8.1.crate 16027 BLAKE2B 2fad54b5f20bb8540fff5959ca7b2f9021c814ee610895d770f7081b12ebe2c93ce754c462df9d81824d479ca75e07f4a9e398c07a655f4abe2740b9c9de9c62 SHA512 5e4da301a605e0bc1ee3a269fe449aef044df05b5e833940c7f79bed61bbff4fc248e9c82b45dab92b2688d578ada000b271aaf67f2f4f7c82b35f05663cfe7e
+DIST encoding_rs-0.8.32.crate 1370046 BLAKE2B ca9c15eb521434daef94de5eecefb487e2b4053ac002f0fa24e3ad101b89fd4a19cbc05b2e52a85599a45d50869a5671dca0786254138b7a5e9d5dddd2be712e SHA512 8a695aedf388dc90b039277fb8a88cd0fe157002554ef478b820e962b6fb19f3fecd5940d0720cc820d07c77e64f7415271a119c87b72c740e6e370ee8cc418a
+DIST entities-1.0.1.crate 24795 BLAKE2B a439872225eb6d453684dde8aee707289434c35823c91e588fea3fa5b94eac75f0456ad24f96795f377d26a7bbce475ea755a3425da03f64327bc44f7dc129eb SHA512 12796a00fba3bfdbfeed6984dce0b175630809f92817e620fcadc3c1eeed9fe9a260ee64560d8e1dbcac2297a06091507a1ef19e940bfe55c437477950bb3a0d
+DIST env_proxy-0.4.1.crate 11256 BLAKE2B a8e3e4f8366a9a578da09903c1b1e9ba2c4e37700ec5600814c8a1dbff740a20dd6147bc1fbeed385137ce734477c734ba370fd6a824c64d571da374554370e5 SHA512 333232b0217eab986b4616061b1419e24fa95b55d6f58cbd3e6a8a280b1f8b6587ce5ae30cfad570e7cebb2327352c18b6a8ab27007dd870073308127d2cfe00
+DIST errno-0.3.1.crate 10348 BLAKE2B 72831d0b69f95884a69918249cc0e814eb5eade3205331bec6d2021f8b01a42c4c9b494f2717033d65a4c5230c8490b6ce250d349c1e8e177b20e7e84a860020 SHA512 00d64157d066f1e7601c522c0f4e777eb662ca5cce64682f616de0734857765c343396f7161ac2908c3db0c474995ae157bfe9d8a9880743724d9bd428dfdf54
+DIST errno-dragonfly-0.1.2.crate 1810 BLAKE2B 781fc26dce5c33d83b9a1fd9be2b2ce9ac2559aaa858957ba6777e143b1e44cdfee48e1b47e3c91a95075a51921d1a421d0b45eb3d8de827cf4dd0ad744a7d8c SHA512 f853f1e1b8dd0f359a8f9a0399b3384c1103cd090d96e2b2204f91a40d40a9eb99383d4aa6a11e5470c51557afacf452d4be2049600d4235d27f59870fa3b916
+DIST eyre-0.6.8.crate 41587 BLAKE2B 3ffaf2e55b55212ef60b440b4ceb9a4500e91d59ecbf7f477ba0b6ae601a73db95956adeef0279483fed6514335826f21c3538efb14ee8c30277cfbb1693b705 SHA512 0a54e2ce9d58e80596ab7d55f0f913fe3d9bad6cdc5f56b9aa4683732e2d409e288a579e89b300e35a822f56017524b2ebbc0e60860b9dd6e479080f7cb14324
+DIST fastrand-1.9.0.crate 11910 BLAKE2B 570c66ec1d4ace08b9790299759e3b6f0394aca52c4ec2e02258229c198846cba7c0627807548bac3ef1f86c7e512c4bd105f1e18e35ac0ea6934f76a6838e1f SHA512 321567b5fad8552c0efc4393b1e77d1bce288b0a88c475d432f79e91b3457ee6eb5db9e4d65ac6381b9990c9916f4651b6a76250df44d51ea3e25bd8184bdc52
+DIST fixedbitset-0.4.2.crate 15954 BLAKE2B 91270883db5ad0e999ebbca1123d8729d3040eb936034ab8da3cda72a830e45fcb977b3fe3c2b94e870c1fbc366ee8602357bb77e8b9a40cc41a04afad1b266b SHA512 57c5d756b0a202b2506270f0d5e890f7617a1e0c015b6059ea23fab49cf7af47fd06927eb56feb03b37cb2b6c467e326b3f0da1e32cfcb6339cf11a130a3ccab
+DIST fnv-1.0.7.crate 11266 BLAKE2B 81da85889c91b6567e0f555e37dd915f1bd919719d1ca10c31a6861d7aec29a49ae9c1e8bc500791bf9d6b8dbb318c096d04872c5872a4b1f7d45fbd8e12842d SHA512 2195a4b34a78e2dd9838caf0ee556bf87cbb4a8ef5505aac663b614eb59dcfc0c40f432463ede41ecca57bfe7711f72673d39a85fe03d426f1324097d5628334
+DIST foreign-types-0.3.2.crate 7504 BLAKE2B 520818b702d990d296ecd31a8646850202509ccfa18edd0e1b260289619a6c351e758f317ec0824bd76eccb209b6f087057c25f1bd01a47897715013dd834867 SHA512 bf27b8243ed482c202d120383374f19ff09422535e24b9c1aebccc66529bf300ca17b8bbc76d67f98ac092e614497afe3add9dc68aa69c93074df05762f91232
+DIST foreign-types-shared-0.1.1.crate 5672 BLAKE2B d2e42e04b6657e7a69fe0bd20c672176629c743e49a55fd007bb30e289710b70045d445ae9cae0eeaa747ee708c90e8abd9b5fc39bad8ec0666befe1b696d4f1 SHA512 bafdb2143e136fb0818e2ffd90b5c862b7181647d6568947d4e4531012bbf7a57b597221ec7056c1b562dfc0c3b5dead26d1a4111ebc15e7863737a873518a4a
+DIST form_urlencoded-1.1.0.crate 8734 BLAKE2B eaca73d73d16242f3fa3e38e23531c67c01404697bc7b7eb7c64fa04167dcb403a41818487fc46c5d9118842818472d549a2f5fcef5e4d962461e1c103d895d1 SHA512 9e245495dbf235b147e4216b313f2e6a96357d2782a66d71c08c2902c6a065701ca8ecdbb6b2035983a83c44cf36c921b5c71d63af0e02dd39bf5f8347117e11
+DIST fs-err-2.9.0.crate 17662 BLAKE2B 9919c253ff98280eb3ae8d700ba3f878e2ffacec1d3ea69f0445921dd4084c67f3309cddfc2c4e9ba42cc9f64e201fc88313f517185e47f62c3f3023bed62e96 SHA512 b0fe36a1158a1267a10f6ca66f987448c2fe05dbc26af67cf92e2fff5af210312494823c201156f1029e3d81ec4b075a63a51770e153dad3867fdc6ee1d29126
+DIST generic-array-0.14.7.crate 15950 BLAKE2B e74c785e3127095625951da192a018281ea9976aaeb11019f9088c3f27748c5fed1ef25d577150864486dc48b5138d6892e42f99979339f711a66fc70756c82b SHA512 363a7b04e4102f9ca63d429721c1ada6272be6bf0a2e97da681faf76381f73f0e3acb86623b9ce2dae441de9fda704088391779b9769ec02b3c8c9f9f35f897d
+DIST getrandom-0.2.9.crate 34457 BLAKE2B ccf7232ece1047000140ed6bb9a1afa784be87b5cf83e2f58dff77abcd79e34120b45336cb05e47fbfde36407957fe9da8b04971092ec05f67b321fde9142d29 SHA512 48e341125223945d1c02c4dfc54df303ae27d3ceca0d5a30b42065f5e40da600cb2010bb59e88af6b990d54b5eb4bf83ae5bbd27e13e56363f5f68be03ea9082
+DIST gimli-0.27.2.crate 721636 BLAKE2B 61a202545529618b44035450c696b52559d5aa8af091dccc613d62b21733dadde0da467d40595aab71f4532d1fc2f2a6b3744e0aefe89f244e54b9eebf422d99 SHA512 1c0bf53754db2503033c17988e1cfa824af4e01f43c874b02fa61a475467185b13657c7ddf891e06f5984db3ef6b1e37586b184443716dbe45db1aa8bd082ba2
+DIST git2-0.16.1.crate 199956 BLAKE2B bf187855d683b13ec8ec0e103f6536fc2d8321d2a023eebca907a15f0bba760f833cce4a4b0958804675aeae1ee9d2dc0270edf02c66cc2d7231980ba7ab15d1 SHA512 4963798b6d9fc087a4394515b0f6da0a9e01fcbc220dc3d1880a277ea0487083ac05c0bc3a52a537885eb065a9b2209658a199835457b38c94e45395ad8d6252
+DIST gumdrop-0.8.1.crate 17522 BLAKE2B 62f299718cd4445d736d036276f6f695031d61b52d001d411dc3847b98a8046be4818bc1bfaed94170afa65da52dccb55f049c2f3db917e666063ed69f9820b5 SHA512 167a5cdb73f8edb8c912f9de1bbdbcba24be03a74d449cceef384f46a581cc9f635585fd783427120408e9c6096dfdb0a7722e664186490a315729df708f0299
+DIST gumdrop_derive-0.8.1.crate 11657 BLAKE2B 90c23e6ab1dc7bc481a38ed7d8fad32bdf6ab70486e454fd0707c371d214fc5939a9a8b2569ab91e8ead14efd10fac56c18203fb8d98a02d64d1a1000a0941d1 SHA512 8a42c1d0ef8b921b91c1710fbebbe9d3ce109cc9556444e729d781d0ac932043cbb931651b47c502ef63e45ff7453c6660929d8b4d81f85d7fba20efe7be8fe3
+DIST hashbrown-0.12.3.crate 102968 BLAKE2B 492072f27eaec45abd2c5d7405c614c0c6a8221425e901bb6174bfa1688ee524408a618650126d6c683b7285b9bf0a21dcdbff7347e4d8f97bf7111defa1b7e5 SHA512 b3700fcd659a21a6b9b3777c18b37a83bf25542b4e8f2b963779a122f5d22e1742c064cfc03e649583e7dd5c6e90ca8407f8c51a0e8755f6a108682853022f76
+DIST heck-0.4.1.crate 11567 BLAKE2B 520aeea740cfa30b0cca12f73594ffa655f32959673b1c9caaca1ea0162e455546ae3033881394c0ba0516bcd5c9a997da02162e1585522d665813b9096eabd9 SHA512 8c80e959d2f10a2893f9a71994720f90747742bb5b61fc0a539eed3ea5679b140c48fd7f7690d7122cd6af5f7f20a19d412e3569fe741c6d31f6b2ce1e0b80e8
+DIST hermit-abi-0.1.19.crate 9979 BLAKE2B 801e8052b85341cca388ada9db4b06bb1bd7b64474185b2ad06c0256b9e597639bd3dd4ba0053ea010f922e53969a4ab47b90d451fd9b94c8f2324055d151ea1 SHA512 1c877fcd562b15d2de9c151fd6c5f3ea4bf48abcb799e6139a180ffad5d64b632f0000d5707bbd92ff23a0e5f349157b9e0f5be8b50f03680b0fa47315dbb78a
+DIST hermit-abi-0.2.6.crate 13027 BLAKE2B 4df5306639511a5f69594e903f8ce62482cbbfbfe272a91a12f407483dbac4e87c2d7e5668cc06ca5c0fc149ca93a3152fe6ad4bb3b96cacf56a22cb635e5b7f SHA512 bad8442bb822a9c99f6536db16523c80f5139af6a139bcc359c03725c59ff935816e2ecc5c491dc362ac75ab2dff41ab1e9dd29431f5e9a109b60eb9b7a8dc28
+DIST hermit-abi-0.3.1.crate 13793 BLAKE2B ece7865a09f566a95bfba5f1fba380bf12836c3761fc6d5a3d5543d3e50ca0eac81bb567d50b5643849cf1a752aa651a0db4c053c60faa8f1c74fe2f12819d71 SHA512 a55fe9230e4e8fef63284befff74108f206e76067257439d334d33068875368902dc690926a1feea15611f14123073867d7e9cd21397bc484cef849d6e1dfbf9
+DIST hex-0.4.3.crate 13299 BLAKE2B deab49bf3d97f6fd7c0a0855b50232422443b226362bc7a4a19e57c2e662fff2cb046d4c5bd7618ddd523045f3d8c78754508f862f9a8ca29ca9247da6d6ec79 SHA512 fd8ff33b68eea2d6f2c6b02a6d82a2807cbcdc209ca5a76e3e3e5d006917ee151f236b6d18e2646cc9a9674bcdda1d6ce6ee363a89cadd99bef00d0eea9989e6
+DIST home-0.5.5.crate 8557 BLAKE2B b14225f6e967ccd37fa734f50991a50065047f3814c4e526f3b4605ceb9206d4d12e189b4033ab85792ffea34a30f2b0267b10b9b0ed88df52c37f6ae1ecea4d SHA512 4ba97149d8f70e9b6eefc930292c7e62fab6ad03d5e4e6bf93d40209d3a65e40932c6f3d14ca579ed19ba33195977c60fc52b3d3788629fc760f41ce90fa1e58
+DIST humansize-1.1.1.crate 9131 BLAKE2B 9a9717af2c61c724f1eb224eb351c7819cbc5a8f7d53e57a1ab37ff12f886095c321099a4d269e48a90475c1243c6366ead7b19e4d5b698cfbe5c9e2357cd562 SHA512 90b25500014d7ff541b6feb496ebb25ffbf0bbdfc3ea80ce3b3a1597d08c2cea9b967c674e261d3c8c3587d3481da8d899cc5e3fb05b22c55f90e178508ebeff
+DIST humantime-2.1.0.crate 16749 BLAKE2B e2ae8325b037fb175b9200cc5c1944ce579056c6662cce307beb6701894552362a25e371aad65f8fb9384945b48815ca74bb8b544a32e0a5845b7edd30b918c9 SHA512 3bf29ddd1391d82897c22baa0ff3ed58ef6d6959859f1f8ed54d324caba5b6fb4422e56790511ce82f902cd11467f93c8ab7fc7b0e0bdb719308a4d0a446ae0c
+DIST humantime-serde-1.1.1.crate 7886 BLAKE2B 4c66a483276e0cc5f4bd82fd49cfa0ee40c8ceda753919cfb7a8c794d098e9e4e851643fbc42a209d6ab00c5c62d9edc81c3bb1f6da218a09eafc96da9b566f6 SHA512 0bd72554e700f89506d2d1c8191832aed0065ea02aacb99e27139a60c883d3dbabb1fc3d60f499f5aeb20bd155fdcf21dc671aec1ca68d4041bf98ddf324248d
+DIST iana-time-zone-0.1.56.crate 19517 BLAKE2B 88a83a65b2e17afff6491953c1ec508168e3cb0d720992c7958aa98ffec263d3b32f4ad07664703b1e429d96faa211a50c557d5a1398a849c45ab9df796f8e4c SHA512 d1bc3ccc17c6d3abc44f8662a15b5c84f5381f90dceb5e14a826595706178ba0f8cbf7cfa86d3b7e967a51ef75a27cb868fda7a3531be9bd6e77e813580131e8
+DIST iana-time-zone-haiku-0.1.1.crate 7200 BLAKE2B 9e748694423cadd6edebc1daef2aa4126904f5597202874d68066a15580cade77f48f1e6f2a77e17c7de0fae5204ef1262ad5b6f30bd95f4faec77748aa2ae0a SHA512 daa7570aaf5a07c990b07fdc2153b63d947598ed35aa9c35c4773772a6c67997143b120a18ff4c7c13474d296e81a92975ebf5b9aa9d204c1820e9629cb2e369
+DIST ident_case-1.0.1.crate 3492 BLAKE2B bc79ebeefbb7e3ed1139e3f41d8d20fb175786bb123bdb9c1a92ea70effb4a0e5e798f24b068cd66a1bf20d53eea4bf24de495b5568c2d649ea804389a1327ab SHA512 81003a43f18da5997d644319274502e2066af9f9fd1400afda7cf2986b3ae0b7355b932302723cd3bda2d46b264340434d9279dea58425bad13785698d5808a9
+DIST idna-0.3.0.crate 271128 BLAKE2B cf8a2c43760f03e94953c6692423a12f28fe763aabea8785b93cd247b3aedd2aeef2cd99978a027186290016ed924db39d19fe7d397da1ab570be9646bbb630a SHA512 9b7cee27811ee52ed9bb39fe82f724742eef2e5370642b6c756bd134c8cbc20bb6faa9f296053672dba8a66f7356a08b2ca99f176407b173e2d566d85d066441
+DIST indenter-0.3.3.crate 6587 BLAKE2B dc4a73eb90bf05ec939634d3f1543f57c8b612e44e0fb3b38329ed2b9bdedcaedce84eb3f542f71c726b00c7cd273c3c390f827da170b5ba361cf669de4d1d3f SHA512 6585964939ee84739cdd19576faef467703415777e159ab2ff8b0f2a371fb2cd6c7a83dff4df954e9bea35844a43b72d93131dd4d23d328e9f365950ad831a71
+DIST indexmap-1.9.3.crate 54653 BLAKE2B 7bc1768589e74020dc15d3dd064009edaaef39b7aeb682d0ca8e49944e3f020b9c04d64feb102e88b22feb40863479dfaf4722d6a77b5d19e7ca553f4bf64c1b SHA512 2aa8069eb07a814c8fa3e11296c9f032ef60963520d7786ad20cca5cb7e73b8f76d97722a994d65295bb713020aadce5008cd3df5e99d8bd968ef1979f910a37
+DIST instant-0.1.12.crate 6128 BLAKE2B 728923f757c1ee4e4a7afb90e460eed81392068961240a538e5c6468e15a0b6491f590fb5f6cc46e6d78901ca232351f65abb9f2f230d8f4983c5e58c4011902 SHA512 fae494c00111c51c840f9dd6a10febe403e27ebb933dd16633a213e9c20f2bc11adeb431c71f8a6713bf88f270a010941e15d83df294e658791934f83a5d2407
+DIST io-lifetimes-1.0.10.crate 37294 BLAKE2B 9b8836c4bf30e6d102fd9973ac66f067c3ff8bc2806e55f26368ebdc9854f2e9cc6eecc8014f9a0b22a968a6eea8be243fcb7a641d2d0dfc747ee08a6a1450bb SHA512 4b2cde9522780a408c5d4e6406286bc5dd3a0de1a99675129e9856e5d889498a127fd5dd7c937a7542135abc2213b60bfb6258b7871b8709dcdd79d60455bea9
+DIST itertools-0.10.5.crate 115354 BLAKE2B f24734bdfedf1dba48554e39b43669efcd4a43656eeb2c511096060daeaf049e1ad3eab232e757057750ce94aabad9fc8a0cf29a997edc6c4b167301c3443391 SHA512 d03c3cfba9841776913bbb6daad0c8945830c155f32ae4b48872e0f937c75a443f0ac9a0355f43b359ff75232f38b15f4f6d446b4be30b00b4209cf66ef770c3
+DIST itoa-1.0.6.crate 10410 BLAKE2B 8b1dc9ae9d55a006bb2abe3b0282e5e77397814b692a87b9becdc2bb74deabf5db09e3d5a2f604964cbff046148025988a5d916480e0402b2b80646fbed32875 SHA512 e1fb82fe16e1248141d48de9e05e7abed0c6fef58f2ff8b77b52aca5f16f3600c46707ff4c7a0f0307047610f29775bda74948d6d1efceb74b37cdd22e1fcf31
+DIST jobserver-0.1.26.crate 22645 BLAKE2B 44bcc15330268ea29650e58605c7f21c35108eb64b790c005968955238e948d27b3d12e6bb06bfc0eb4a3fe5f9e5322bc0657200212bf87e08d9e043e008a5a8 SHA512 ad3ebb693018928daf399e918ce35ed0d4e643cfb5c78bde04697e41dc8adf2861023ea1cf2c5033a3026048ca0ebeb7f2f57a966ba8e420558e42dde8d494f7
+DIST js-sys-0.3.61.crate 80158 BLAKE2B 07980db627a1f4f385586ad0609b5daf30d590931d2ca0c123f2d84f6c97be0ea935aaae3ccd082440c7e7da1adb4eccfd054a3598d99351fafdfa748f567b5b SHA512 f97bb546af2111fe072a23cbdc71e4fbfd39fbfc6be37132b306853d5737175d4c9c0c4661096012f7fce3612f81509e62a97df8bcb21d7cc796a8084e5b2e16
+DIST kstring-1.0.6.crate 20728 BLAKE2B 28d5fc4553d44658bcc0eb06e79ac08aa3b2e86971e354ea50e51f349d8e5e74edda491c5c3cfadf9111dbcd19ecc42d73a44f7f3fe0590225342f8f4517ff84 SHA512 e1920ab6da39e414e0f89e0728a1993a516d201149a922e58a326c5392891919746891a61847f0c56b67d9ef5d3bc346cb00b2da1325191dff7d9661a5a12ba4
+DIST lazy_static-1.4.0.crate 10443 BLAKE2B 25b2e61bbac48f0dcbc79c81d7bf01f2403d8269ecb6be3ea6147bd00f7a588df15a91f44dfc18ada19b21faa71de4637c7d493a8628cbecd0e547d74e616a23 SHA512 e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
+DIST libc-0.2.142.crate 679343 BLAKE2B 4168a8c3766bbc4f5adbd4babd84757cb81bb3c8cc806b8b5c1381a88ddccbb8bf55ae84f2879ab26adda09a3d44d21e2708dc9bce5d4868663fad8dd0f0e086 SHA512 8eb465fea8bfa865aa592185ea2dd89a6d89252b0e44fb7398ae82c9fa031d501fc3a1c37e50d1971be528c6e1a4ca416da224ba82e5a8766ec598464593afdd
+DIST libgit2-sys-0.14.2+1.5.1.crate 1742257 BLAKE2B 028e6bf6980d7a54b76c918fcd499684869f14cb160e821d6657e59925d142655dae6e018c9f29389de304ef6109197fd71e6e6752d0d0a53152f2c4820ea1a3 SHA512 eb9602706036ea62ecbc08250f297119a1c51ea09ea86ae8630dc6d0521b74db96d8eccc4106343572eb70d9a156415c017c6a91fb5529100fbed091ff8e7921
+DIST libssh2-sys-0.2.23.crate 493516 BLAKE2B 00c0c1396f3d6723ad750112e7af8c8ac098af7b3d11e3fafbb4dc3b90c0defeb8184e007de3c740bf1111e12a53b71c355d697c4567deb3a30ebe3fee2e0caa SHA512 9617fb1d5826dacce23658b42e3eb3f8427b33db1b5a4424081e148bd90a3f776aa50ef66183c93ae19086d64321fc10b19b1a496c3feb12a669c7313cdf39cf
+DIST libz-sys-1.1.8.crate 2481844 BLAKE2B e890a3850aed5348afe7558168c7571564687d6a7d3567a4d53ffdf79444d38c4d70d35891e16f496f31169bf73b669534f5fc584f9ec520b518dda05e80b882 SHA512 0766ab72cc1414160ccefe4812e6204cbed1341607e5d17607f24fd4ff81dca68d8f2cf43e1d27f332a508d602bff0ad340c4c647a5d5f85acc120c19cfb4100
+DIST link-cplusplus-1.0.8.crate 7674 BLAKE2B cbb93184d9deadd4912f6e03dfb7bb9d37f01b6d8d47dc9744724c848f297adb9cafb1599c2bbaffbff336f883e9a24c3cb4f11745ec4716a9a2c8cfa05f6305 SHA512 690afe063eb9726faa03443bfd01789a559aa10ded4bb3714ef7b13095005c817ad019fcc62b5f7b286c974a81e387ca3342d238e60ed7ab237c3628383a661e
+DIST linux-raw-sys-0.3.4.crate 1007150 BLAKE2B c13475f95b539992e3675b9c59a46f649501ef19a7c83342c4b6195d4444d34c3861d677f40720fe17a362469c9065bbfa5c0fc884c48da45edfe35bc26cdc10 SHA512 fa058a39be583baf32f0425e7f3ed2a2f51dced89af7f9864ac3f172c1dd5708f75f5a4ca4e124c9b4fb78025417a4c119234c5493a59ebf76c05314594f1a84
+DIST log-0.4.17.crate 38028 BLAKE2B b46be3719fc0a53e50b1f342762e188587e9f1ceb692c72473ce2663edfb8253742d30024e68c1444780ab7fc0e2d5b0601b8ea7228dc3405a9342a57548e605 SHA512 2477d88db42b1d92c30708d88823212e236f613b3465e85eb425f83f8d16fadfaf0352f06c2999a1852102edd2f6ffb10ecb539d8a3b6c48f552a25622ccffa2
+DIST matchers-0.1.0.crate 6948 BLAKE2B ec3a5d01d2fedbb4dbf5bb185afbb9401410463a61f51674e0df6a571db352b2bbabfb99cdbdcfb4e511ae783165bf0258f5163f240a229b9087f9edbd0df41a SHA512 84214c1a84952d85631aa1ab5115df7cda223ac64e2acf055b6129ba1aa26ddc87615a8b51ca890ce3fee0419053fa7fe1599ae128f1d211b58c07b0c4af3b19
+DIST memchr-2.5.0.crate 65812 BLAKE2B 57966413a1f933dcb2d2d4ccb29c247070f65a83299b2a9f5aa83f5a48a5c5f1c4c7c632fa63bd19f9508e9291e7258db2f16e2813a56fd84e0856f70f1e67ab SHA512 444a163b484c233e78c0e2e4d51f01ce2da93d7d29f516a95e4b0866b20bdfd3f34137653abed53eb70387991ee3e2b5937d8d4360a85bbcb50a93005a75defa
+DIST memoffset-0.8.0.crate 8912 BLAKE2B 19ad3abed21fc39461b0382b15a8cc312378aba36f042b1e5335012115d31b350a4e3bc720f1eea300d7d19b9b317f75a28d4ccd78ff3b31defd9e4b3147899c SHA512 47adcae0848ff967035e10543ea599c7af9c5bad387023eb4dc77c9e8d875994ec8139b9941b3ecc4fc17214d80944a47a3be174a45b334661914a5a7382dfbe
+DIST mime-0.3.17.crate 15712 BLAKE2B abb892b75b40657d356b6b53b9a45b2c822a05873453e919f2bbfeed9e5c06104f24db9cef2716f302198020870eaf96b2c62aff55cc11d8ca4f4f614d7c8e17 SHA512 e6d2ca92bb58fc747c1bb65a7f9023e5dbf4b94966003a72e4913bcaaeccdd6752725cdbd5081e0fd69d9e8f364d79664fcbe70061737d5c39e5b3e3a154a0d1
+DIST mime_guess-2.0.4.crate 26399 BLAKE2B 667f9b8009bac2e1d8b835ae8825afaaa2ea6eddd4cebbf18de8f8fcde9318eacaeeb08066bdd611883bef5f8a53fa2506b57dffff543c3a57316e07b525f7f5 SHA512 acfbbfdc5bd725edde43e4915858b8d016e90a5b483664f0bcd5e8d2b0b3684bf0f6020aea147b5bf429f218a7af8080761cea4c5c04b68fa66fd6a676376908
+DIST minimal-lexical-0.2.1.crate 94841 BLAKE2B e6b8919b80d938d0b98d60d4f5f29ce43d77ebfcf8b18bde08909141915c6ef4f0d07a543538d4f3ba8527a9f55926d4a8e83473248469d087e80b274d701d61 SHA512 385fab51884bdcc7b0f2728a219ab164d0dc8efe42160b918f2c09f79ecf853fb12bda006d11e649f097bae1499dcd41ddf2a8784ee7d178cf2c28059e46078c
+DIST miniz_oxide-0.6.2.crate 54536 BLAKE2B 8127ebec5a2cee1c2101d9533da573e01ef1a0fcb169bb0fb1419973ddd2e6953d8dfe85f9509a5d1226643ad290f0ee1479fc68f1788ade7ddf9633d90bfe1e SHA512 250782e214572acdd11df87c2788cd5f78e8388d9b285d0a850918219678e262e8b9905cc88728f5b70d13920ef9d19c43d243dad8fbcc18f8c8462662ce1419
+DIST native-tls-0.2.11.crate 29008 BLAKE2B 594511c364e639e309f32f37ae20ecfc5ddeeb39c3f7180c5f3f2cf304d8c323b977af933ffe70cce696a5a63e17c5fa7ddb119d46fc3db819a28e31a388640b SHA512 7e77959932f2859757f1aeb37b78fdd459b7b6fd02424f4b7399525b94c21d1f499a718775503b8f3dfe3b4b740e1cfbee77052a2ebd0994468addb3fa665e6c
+DIST never-0.1.0.crate 2176 BLAKE2B 084ac97a94d0cbb2e6d12553d2a24d5b8fdab7fbe5414628d2becf6566cf5819f1eb00fcb78a57d7293f31b667091162b4139752e8a1c462983ba92d740a9a87 SHA512 58940993cc8abafc1a89e34068777997f5aef493c46c5f3093bac70595a20a2c81b20ee1a0e5f917a90050219cd21b80df81634e4e5929a2ffe2bf1491b41885
+DIST nom-7.1.3.crate 117570 BLAKE2B 5643b67990b7305e101b16b8cd27c447e162a7adc6d0dfac00920b0cb50fea98c9d4edca63c34f6845cba05f8d0acb407cf3045cf64a4cb28e53c8b6bc9090cf SHA512 1ffce08dde299bc0e0367ad59c7b6a83e23decfa11115ee076ab91ec53cdd9ef37e4c2103c96eff23a7b6b8b5c3f67c83ce1917928c7d4c6462083bdfa0c9cad
+DIST nu-ansi-term-0.46.0.crate 24311 BLAKE2B d2e678e0eab5ad48534e686b1a4af344996d1b07a0fa40839072df3061bd7e5bc9341363403ea3ef8d19c7725ba3b7a8ed540c63e2209123b1b93f69418288b6 SHA512 b4f37786dc85e0596e2b7b261a5a9fe0265bf1651c39efb358dd649b926b12c3093f307b98bf0c4df3899f0a7cb1854f2596bd5c3e22fbbef42f912ab2eb5043
+DIST num-integer-0.1.45.crate 22529 BLAKE2B 4da3e801f71ba8f92c692497e200bfc8d32183c94eaad91260683b09f4697c03175fec7cff5a9ff3782d5db5d514d74f22f7a61a102c0f0d2e67a7a4b4f29222 SHA512 731bdc09c3af7f9d8b171041f2957aa60facef93b06886000d8ba60d410aabbbee358d700bf31b2588b2e077464f290f24a0b712df7bb7f12972675b6c9bd735
+DIST num-traits-0.2.15.crate 49262 BLAKE2B 942ab170b2acce1cb40e6847f766bf810a79edd293d34f3a27864f464c16fe2b99fb13171ba429cc6d584248de879434beaadf1b231a4001b0e8389ed6c1be04 SHA512 5228498af0f15daeac3c9210f3e6e71cfaaeb30beea81dd37f8eb06b9592c8bf3226a47597cd8592ad4c513964a9a40f1ab2c33102ef3dfe3800d22c8d4528e8
+DIST num_cpus-1.15.0.crate 15680 BLAKE2B a4d98b29ad534de9bc262f58f615ec06bde5d5a2f5252f09b5a0a6ecb06a9daf9709ad9045eb08f7cb744d8a838854b9095aa73918e06624a84efbc11a9a5c1d SHA512 fd4772868def9460a6ee17ef6fc00b0bc74115eec891bb3fdb07ba5b5fe4057a2ac69eb31ba8beddbd3189c7be4545888e5724879f3a89132fbc9b32aa7bb10f
+DIST object-0.30.3.crate 258901 BLAKE2B 73e190fcbf7c47950ac036306ca8e6e03bd1772466cd580fc51e246868cc69c4e49c712601759533ea650c806a8363d0d77582e1363ce2b5f92d4b7439fde91b SHA512 61414475d3fcc7c4c3ad8c1316f6ada7801e28590d98bd425fa246f091d464de4eff7eba7cd74904517dee95ae0673e3d581400adb971306955a0aefa814172c
+DIST once_cell-1.17.1.crate 32856 BLAKE2B 8bde2aaaf9ef45d1f6b8458686179f1fe9295ee8faea269e9b49779583ce26ab9dafe988c3584e841a9e5d05e28430ca967ef3b25e755f48f0120d9c99cdb7bc SHA512 1302d51801e38bfee23e74c0046f1ecb1d3c27309b5fe11c2b6c99553b357db502ce1718695602f9d8b10429e8ff03f91c016d5d604957083728293824c05904
+DIST openssl-0.10.52.crate 257165 BLAKE2B b4accd62f52caa549b3d89109ed3a1e8a9916d30c63f4f0b7574b64855d0fe5a009648ba423de389778bf2c9f11171bb31389a3fb15fc26e548d886f271f6fef SHA512 92ba2341c5cfa42ccd1e537ff222e560fe3246eba35523575f6d3d6891aff6a88a07ee8836e2d192f6b1ef32dbb4385d5ba67777e6ce72b9c04800476e92aa11
+DIST openssl-macros-0.1.1.crate 5601 BLAKE2B 69dc1c1f3b7bc4f934cae0dce64c3efa501162e5279efd6af3b74f7a7716c04b6996b306b310f1c045cfa2eff2895314a47ecbb020a817e461c6d77d0bc11e92 SHA512 57e75c84f78fb83f884eeaedb0dd135ecb40192dad2facd908e6a575c9b65b38a2c93bca4630e09ea5a82c77d8bc8364cb2f5778cbfe9d8f484cafe3346b883c
+DIST openssl-probe-0.1.5.crate 7227 BLAKE2B d1fd6a9498b3ab7f25b228f19043067604bf20790530fd0ab6fe3d4d3bc27f13e6e94d1e7ef49314c3663477d8916b8790b90427f74976143b54b95350895165 SHA512 7e560314150709a34520472698060c4f29689d4e608dc4dde146140aa690350d3603279c693367deeb0f21ab34ef61956143a3447827a2b7a3d578b9ccd6552c
+DIST openssl-src-111.25.3+1.1.1t.crate 5112603 BLAKE2B 0e25c69d84b400307073faee901d9f7a17692a607d571e5bcf21702bf6fc5489c0895768d4a9accdfcbd312a576d87b678c7b21c628aac92253e70565b71419c SHA512 76fa700677687087308e8db6234fc7e37bd3fdab1a7f963da1fa79cf9d3eb4d2b4fd7d45a78c9d0d1adf13a94facbfd4e9f8b65e410d2a1a62acb502ac0cda0f
+DIST openssl-sys-0.9.87.crate 65702 BLAKE2B 578cab5b9bb3cb4dde866f3492aa3ca36fef7eb5d367ca46f3f93f388121ce131cd85b0b59a703e9bf989a7b891784fb54270027acc00f217356b3d2d9a60bd6 SHA512 b2f8fdd679aac50b2f830db32ca09e203c7d40a6bc0d83dcf66efe641a38a65e86d8ba9881b4fb073069fa54a7ff206e24d28b29788a2cce0c60e5e1e3d3ac39
+DIST os_str_bytes-6.5.0.crate 23166 BLAKE2B 60f5beced502b7bcf165dd2bca2989f9039fc22cda80bbb09d2ed0eb115831c6e0f80292e656f4bf9c0b0635ad10210c88c1b23bcbb59b8d2729b6cda473ecd7 SHA512 cde7779ba24304256cc57de78208af4d26bc91dae7fbb9c85e3f67c3e35cb6268caf3fc9eef530a8d3cbdc951ec3534223f3559d2a013561912231ebdb1801b2
+DIST overload-0.1.1.crate 24439 BLAKE2B acb2dfa6c6c22ea95cf58079f6ec56a2bb5e297a055ce717d40633b789b0d005be2bfd6616448cac61bd032e74aa6eed212f1677461907cea2f7f7cf536c157f SHA512 f79bc3321f45df5e3d0e5fa9c4e60524e4e28dd3729a09956766738adcf99ca42c187a01d48701ebe23d39aee00a19d4a07da798edc781b942e866b339613532
+DIST owo-colors-3.5.0.crate 30310 BLAKE2B 6fa9d00cd72d149748e5280360e1f0b0ad8c78c5678dde6e72daeb7975a182b4d06d835cba1ac307428e0e638456cf219b8d979c24649623bcb7403095cadccc SHA512 1718f03d9f3296ffe3145161e038ebdb8dc40b69c0e2cb80a51866b519cf857b6573aedb7704895401e10cea11ca422a384c3594b8762be29eaa90908e24f7aa
+DIST pathdiff-0.2.1.crate 7142 BLAKE2B 7f9a162c2add4acd69a81171fdb31aa9a67beb4e1be0fe93d76dc46b320729257240fca5d65dee38901f6b6ed1e536e3fff09c93cf3482859e6ba27e7206fc5b SHA512 a646f271ce81d5f6d4a8e0d98a2c802a8796a961cf8fe8177911e7757bdaecd8b156ff22046f1663a9efcd5fef1e6f000e5509d3949dbaeb494126b7e8a546b7
+DIST percent-encoding-2.2.0.crate 10075 BLAKE2B 397e59acc3953868c709244b89a2e0db3304c0b574ecba761026b570a485f2cb5b0b2a0159586d1f342ec395ef02ace536da3bc1c72093e1cf93f8b37b26b0ec SHA512 890a5256d2b4290e12e04a02c3529f3a017faa2b6016a4dd0f08b36509f0b1107eacfcb4702024d6a21ff8852a11f263c1adc096b16ef8d12c45a734c087fe68
+DIST petgraph-0.6.3.crate 185740 BLAKE2B dc3d4a0c29662f761bfc107d9654619a3443b07890e0caea5851a6dfab2f071181ab94c521d641197e159098885363d7ed4e1c9c34333fd1339c7484c2237c4e SHA512 9b624ab93ebd06fcda716b1e79dd82c5594a11c71ea0ad806b6b708fee3f432ee174ac292c5af3bb0c84b411c26564ad11436624a52ac4e74ed40432778c21e8
+DIST pin-project-lite-0.2.9.crate 27713 BLAKE2B d6985b5add432fb6287d1b0c9fb0cc91a195f82c5a748a9ea430e4ba884717ec7b16d730b5ea62de5b2bfead1771da2d115b3776e12e605f70f2538f374a28fa SHA512 cef0b77233adca712db1183f780732ea577cf1b27c2643de221d54c837c75ce749f907e24a967be7474812c7682cba613a3fc5d553a9578a1b80569da0e562e4
+DIST pkg-config-0.3.26.crate 18662 BLAKE2B 2ad92dfdc8ac0414b12a61dd30ea4ac5f142bbb55d0555ecfa3a53e750367e1b11766a693ef11f8cbe5a2ddb978327632458b2bcf75be7aa8f973262033349ee SHA512 509c4d1494cccc20de6a62d9d037c63ff77ebee8d907747c57ba0926d177b08fcac0231ccdda14511b453deb0b76ddd10f8fbdf63ff94257d72a12a889546435
+DIST proc-macro-error-1.0.4.crate 25293 BLAKE2B ef918c5efaf2545ab38787c8d0c07315af00431139e4dff66346bf798e3a429f91d12a79776c150412fdda0b158a72badd5e1044ac4d6917f8482d4b5a7110b7 SHA512 8a47bc9d3e24e9561d1e384d8f5a633284c2cf9b5e6733c5f9d1dbfe1870ccc8e2152482852e50b551cecb68e009148585b910ffb0508a7b4875598eaf8657db
+DIST proc-macro-error-attr-1.0.4.crate 7971 BLAKE2B 98e2925881c2be186e22c2c439697e91d43f807eb61a5d13e3b0b4321ed50a74f3d699942c04b89b6fea0f156bb5d19ebcf22f9cd4b98a7e6917c437600ed823 SHA512 2606afa9ec78d7dad4500c98d3a5ecbd02c6b53ab829c742bed7f57b322a95238ab4e01cf268746815f1424fd9b02eddfa30e72f98c66106f57765f3d3116495
+DIST proc-macro2-1.0.56.crate 44454 BLAKE2B b2a1f28979245a784a4b3a0af8cb04bd01ef3e7aba32c45122fc05a6cceddb1b7303890827f1a2cb99b0b2ae013cd772bffd6e94ea226f0030cde867d6c22aad SHA512 511fd8332eca47ed834736d405e18d53d83642cf528bebb8fd67fa5561e19b0a43c359b3e8020ecd28f9fafdb065c484ca360abc0287a0f97e94d4f779145f03
+DIST quick-xml-0.28.2.crate 156462 BLAKE2B 45fe1846ab93fd16f9afdc60e119918b3c50b7eddddc4ff1ff14c6a767ad0b18624b1ff1a251fbc58f58c50585b875eb73f0aafcf0fe8a8ac3bb58da27c55ac0 SHA512 24913a45e962c144c82f13a6ab4877ab7c91fd51f34becc6412a47dd91e75436590a646f85c346236ed2729d480242b20781ccfdd1d42bc2a510bc883966a0a0
+DIST quote-1.0.26.crate 28397 BLAKE2B b468a5e9350843ea81e540d17c9fcb302b46fbd450e10280c5fff6fd7c98a439df8c3d3d47e551bc6d67ed02052b5b5c65d215d5ff8ee34f045747e75c1ba37e SHA512 6fcfe4d31f601aa60beb858c25df217421b0a184d185eebc7a4cb9fbf97c687992b77bebd8671a9e6193716387c3e926fed9b75a08684eb2d9a5b155fbc321a5
+DIST rayon-1.7.0.crate 169488 BLAKE2B 518f0eda1fcbd1b1b230587ea18cab0023a699e796c819bf35a6492b7edb051137446bfbc49aaab0a68aef8280c970ad14301a9f8f7461d537af119a65b33a38 SHA512 d999c811b701d0aa4e547234bdc20a7df56728e142c4aa882bae081b7b057e8c3a72f4a62fb35535e57501e8c2ba7ff072068b59d6b5374e9ca6bb66cc0984d3
+DIST rayon-core-1.11.0.crate 73118 BLAKE2B 313d65bb6e3a010569b317b32ac91c72e38282f4fcddbcb56ffa97de42d88c0d34f35f76b62e1ad60ee96b596aa681caf2071a8d5dfdca085fb1fbafb07c3ee4 SHA512 00ac782f49d688da90e823980e83b5ccd858f93769e2d801061fdef78728cff37d3a9fa4fd47a5cddb058f28f3289de349f8c8fdd94fa2f8c400d73bc4529800
+DIST redox_syscall-0.2.16.crate 24012 BLAKE2B 9497a52044458b1435ea16e86ee072e379b6b11ee31602ea72d6b6072a4a99426f409c2e58108a4e9c36dc193fa49c83951e71f4fd4e158eafff18c594dc01ad SHA512 63b5d876baaf99f5cf737679bc6ac7a9e3d8a41aa93f5c59416ce7e3841e2513bff678773553cfe62fb452707f82acc384ea63aec932a31bf94679cd1caddd27
+DIST redox_syscall-0.3.5.crate 23404 BLAKE2B 85aa4299d9816666bf576f523da5cdeae87b3c8fbb2af103e82258d23f73303c068a4b6c3ef4117ad67958cb31e41f836a9f59f2ce1bc52c23605e34399afcf1 SHA512 16f8f4766932bb54e4740cfdb4f0802f76246c0bf88c1d76c69c115949b124b625d8c3b85d8947073c2e9544f425aa16c10f71fabe3c03d29e424c47fe4ccdde
+DIST redox_users-0.4.3.crate 15353 BLAKE2B 5e3b4e902566620cee8856c092cac193366ddcd2f5aef787b1d485353a0da11486ae1359dc60f3c87a198cb68f93ef99ac7551cc2315412b93b10ffb10540633 SHA512 0d3366e23cf93e1b0e025a29025eaebfcd1145bd158e2663b94fd952dc2d8a25566819e3a03c4136ca16a6408d37396e2ead0814c3f0c2bb10334dfd0b838fda
+DIST regex-1.8.1.crate 248412 BLAKE2B 4f1355104def09ec8f7a7d604fb08d0a39af36cdbb5160c63329e8c06ef2d2ad1063fc7280c90ba3748e1766b65f52fd6da24e439d5262209a6137bcbe2eda9c SHA512 fe83c2497b786314cbd9ead0d85a39ca87ae92225e444a41ba381fe80aa381a88806e2c20e1c468b8b59503fdf1c2b7e5bf6eaae0ddf9f14a70c1ca2773e8830
+DIST regex-automata-0.1.10.crate 114533 BLAKE2B 0e357229f6825f14339b1d7c40730b83e62bba12115d01ed20313320766e769a653a2fcd2c9d19af51a82c38e9e42c1a31d005e1f44f5b6fbb3ead7c9c74027f SHA512 56d64da361afce82c6cb49e70b99ce1fca3e1969c54bba5f9971db135f8544c65f49feb8827789947b3d1dcefc9c49a7a434a7ffe0d09c5900345a1733723c5f
+DIST regex-syntax-0.6.29.crate 299752 BLAKE2B 2408ebfe5f0dd6578c33f18e8ea9a0a7a84388420c5b67adcaedde477f3f67fb3e39ba9fab1f6892c7ae7fff754c4aca51314601529cabc6a8fc43af38a11f88 SHA512 28a58950d15df1f0ac4ff4185c05b535e8f5bf0b75f79fad24e40e17a02570d1c9bd9cfc919eed8756a1069bc489c5fdccfd04f6b8266c83e3412b7b4bdc262e
+DIST regex-syntax-0.7.1.crate 339705 BLAKE2B 59dcdb9e0f5a2008db491756fb353745bf4dbaba0d3a8a6782960c990065e1870cc120d7a7e220991b78f89053aa63b1a9c326f5ae3526d47679e4ae30ae5e66 SHA512 ff61e4a075550fce3a16e516f8222a489dfe2bdf9431220c98c33b1f9e6b19da7bc1ca6bf34031235d6f1ad06882b63d606874a14d2e27c615701ecc2f4cdd9a
+DIST ring-0.16.20.crate 5082615 BLAKE2B 6011eb7148c2d2ab410e564a06604f4350e07ea030e4d7dcb30574b977f0b0c7e53e09f6e6dbb2d068cdf110262876c48dfaeeef1b691932a056fe149916d934 SHA512 d97d1b08eb796d4c107426ff2c015ab1f221612500c8a57fca8e3f064e8c0f5ae2a5e6071d013313cd9f4be8fed4ba03beae84bd446f56b2b2ca5d483c328191
+DIST rust-embed-6.6.1.crate 901441 BLAKE2B 9f2970f857b0d12c82e0a26473d4393bf85213fd5613253674021eb0a5f4b8571532364373f466cf9aa4cf7aebcec31178b2fd6ccb494632e3d578beb56194fc SHA512 050d74e27952cffe6f54e34b8b166c74870cbe2c16f450224d4c88b9fd9deb381e42927841945c596bb30c771e32adaad0eb0a2cb94f09abeed786c540bdf404
+DIST rust-embed-impl-6.5.0.crate 4737 BLAKE2B 8f0911c560e8b649620476e0d9ff7a4044acc6714c0d32fd5d0e2020acc647544b709dfc18c2b27659d8258979d18cb1fd8a16c35fb8fcfd80e64281f146b869 SHA512 20f9f04adeca4ffed70a9c42d4df149887b2e3418f3b88dcb6f03ff240108d5a313923932f21c47a1ce85cf8ea2b64c806389a185287ec009f7f8eeb349b97a2
+DIST rust-embed-utils-7.5.0.crate 3321 BLAKE2B f2761c85ebae5991a8ff55d7140bd489adeed9d7e163c416bcb63b4a7bb3f706cea927fa894ef80d89aeb3f8f4496ed3f6c024a4b8c8b008c6dd088c7414fcdb SHA512 82183b7d4a5344633cf1baa0d1d48c37942ed34791331573621cb6771c289a7345112284ca5512bda63b4cec330ddfb923a75243f1baed297a7c3315d1bdfa9f
+DIST rustc-demangle-0.1.23.crate 28970 BLAKE2B 611d2e41a8a9799db2f8bcb8fc8fefcda361d055a417d2bfaaf2dedcce9d6f388c69d905a28c65e6691b4d408d7922ccdc97ce524c87c3cccb8467e314bc87b9 SHA512 8cd29800254b1305ad50f1fc008838c52d9659f97a51a68e9f2bd6d0a60126f3ebdd1c79760f96445b3bf998d0773526ddf663b174acca81babdc0b423247247
+DIST rustc-hash-1.1.0.crate 9331 BLAKE2B 16ac56622897f47a06b661fb59a196b08d48e782ab87549c8bd5c6fe92f374c9bfd44dcb36588512bd9b6125c2fd79a12d648aaa308fd9694bcca3a7c1b49ac9 SHA512 84e673ea9b046f7b989d47f2c4505557fbd5de991e6fc9f56a03605d40e0b4ba5427cd566954890153cc033ccbec6c984306634571935bfe0d4cdfbe56f39544
+DIST rustix-0.37.15.crate 315957 BLAKE2B 5408272b771078203261aaad4c3329e3f1eb7631c239beb0bac5d884ad74867629a690fe841d31d79e7b4939abacdd979af26dae7aa91989ca4f9f430624145d SHA512 cad1f85061670cc391226a93a387439f2ea8cde9279297105efe2961dac53d1ca4941ae57b5b1eeda897f19e7ebd12a9f84c243516a1d68205552309dc20efae
+DIST rustls-0.20.8.crate 270142 BLAKE2B 0d9563e302eac78871eb8346c72fde2a05618dc8a966198cb4d607b41930dd54487d9f4d9c8ebbdf943b4593d4cbb75543c3aea9dddc61a06500b4b322aa726f SHA512 4f56494987cd3a56f47dd07d31c7f73d262a4d003cf9cc11e0bce5fa85c87f18124b1c364186501736f0d40a1f193a24d5d73f37a491ff81ca8eff568559e547
+DIST ryu-1.0.13.crate 46823 BLAKE2B c6d661cbff5e7b273da5a6bb704bb1910b897c55d854b05bd417f53853a832791afc351e5a5aeaa94ba99a8fe64c8a930221c52a8784519728da748371a4ae04 SHA512 25f60216d91e68cb47695ce4e966fae674d5b3e4b0cf33e740248c1605fdcf0c963acd278a485c5b4bb0a1c1144002e73173592222af4989df7a4ba402508c13
+DIST same-file-1.0.6.crate 10183 BLAKE2B a320c8343e0b38078ba81c4f0159d886bf47764c74efe0d7cd2b3218426e8341b51e523c00a9e5fbc2ee1057618296bd70b576c68751bd55d6ddb352defaca15 SHA512 3ba35309742c8db63210d9ea78bff4ecd80471d69e6238eb96c7bf0673814f221e2d838fe6311bfc5a0e71b4a7ccba33e07859c0b9cff2171969ff08a4214a7c
+DIST schannel-0.1.21.crate 41719 BLAKE2B 8e3ce88c460b44839a46304c5ce6c02ec518a1f094165ae8589107cd32b79553e1c7aab581cb07fed4ef5935822ae4af8141f63d70e1f898a10e75377b1a057c SHA512 7457d4accd0096c791240aa19970307c6448486a22303e3b20b7fb25c326e50edb8564781e3d81ecb4a7626796ef78233c224f9baccc0de03f0eae2086624880
+DIST scopeguard-1.1.0.crate 11470 BLAKE2B f774eb90b7d3ffb2efba47518e9d1dead4017ab4b38a4bd74914daa84a5af4bf9eb63da0496e3924499d79cd0439c37447aeda4a21226f95645bddcd6becfabe SHA512 368fa5726df8f42b599993681579a9ffd0196480ee3cd0f9f671e8493f3bedd1e1779bdf2beb329e77e0005fa09b816e3385f309490c0f2781568db275d4d17d
+DIST scratch-1.0.5.crate 8013 BLAKE2B 64bad5081da3765fab34b582c679fdb345d592adbdba09071357dd3306eaa55d885a4f282732972b6f856ef9cfbcf73a18e9f5b2591ab05ef9104119299d4159 SHA512 522e24868568e9e3c4c6a9b0af4e1890d5ca6753ea68660e13bdc95b98c30576058dc949d20a5df95a6313378083ca138c7bfbde5c60916a011cf9697180692d
+DIST sct-0.7.0.crate 27502 BLAKE2B 93912044e47473d72d7415e01cbe2545f84d7d087e7a7fb210be7524d44f69daaa58edf487ea6f8e5f06cbe25ec02062b1b55978e7cb4761b8bfd79a32d4fcc7 SHA512 175d2a912e3f35dcb110991a066d7d9b0d47a0febe4e92ab7d92a27c886a7eb9abf203c9080b3e2cbda9bedbc816bd138476363c2a0c7367d3abc7e6bce83046
+DIST secrecy-0.8.0.crate 11916 BLAKE2B 910d2c27d0adf3758dd6315260512d74e11829c68fd9f81242895cd207b9c8cf48f988e129a6875bb361f945c4c9dcd4975d419ee2f5359b3cf3a3d003138630 SHA512 184da6fe91bfc108514ee726cf3b1ef41a2d8ce54587fa3733041a7e406471f28b7f99f6beb503ef8af07d36ab1c819bb8c59502379032bb933d3524abc88e0c
+DIST security-framework-2.8.2.crate 77045 BLAKE2B 8581e0056fc0422aef0122e4948d6244eebdad0935c73ac1b01fe31de19f730325f11446dc3dbf5f1ec4400de099eed1d61caef5b8e318365c4dbf9dabab3be3 SHA512 6abaf2129cff62220f152786a36fd4728c72fb2b55f3f75b396ffdf4344902077c8c0784eaaf07e2a4d9311f833298b46372a968b798dd838ea495668fde1be3
+DIST security-framework-sys-2.8.0.crate 17911 BLAKE2B ed066e2cb8986930bdcf55060fcb5a34f826aa27d51ba4236f8a8e56de8fe3a2b33be8da14c64c0809f46c0dce02a20729e6863af2261a04006ac65a291ddea7 SHA512 5e670f5f5d54f2bc11e05435b975d5d26d990d6f7446613dcd5be88c3cd52baeb702931cfc663fd5018c8c99f4619c23e57f31eea60b15d3a5e7ce01a291886c
+DIST semver-1.0.17.crate 29685 BLAKE2B b9beb685eb9f6cffe557d1185997e1a93d0e50ecd8e9719d9855347f12dd430ed1020df81839b7924a984596437ae7fb2951e7ae44c5540692a7f37b591bee2e SHA512 5199923757e675506d68c252182b10f55955e47054880492e5471a0a0f9ad13ef25d552d2ab9bd68fba37121b8026d9989bf15db67e95265b3aa53d06377fda7
+DIST serde-1.0.160.crate 77010 BLAKE2B 45d2585bd7e5dcd368b72c29046bd595c577826da4aea6d019adaf07d23adc096db7aba952037dfdac9dbf08a1e92ababd44cc784ace557fe2cfe83beca446cf SHA512 b03eb453ac01a483843829952462de4e8f6d0fa4a244d38a6f476a911e2e991a508121265befd108134ae7cce8a7a40c4d217f80f3e025f9a612a0bf80862306
+DIST serde_derive-1.0.160.crate 55081 BLAKE2B 851cbd173bd758d46c9f545f05a17f65f7b0a2cd353cc75a985072e3772ca6d8395b63208d845dfba231d7cb5fcee97ec0df0bd0df010096577d618fad8bffb0 SHA512 14b2a2ad7131efa7ec95d5a6e7633a9d1e991b046c0b00cce9c3681edd73cb53ff477aa52a430d8465aa8b362696244ea80f12ffbf0e6f98e35605fe4c60f407
+DIST serde_json-1.0.96.crate 144652 BLAKE2B 2754e63479aa07507015dcb0f989d6447f5b2c01e5f02cf8a843d90c90c6fd0acd3ecb68d80d76c249efdabe0bd0670649a9e576269928d2276ba00a3153131d SHA512 39779419900e1d395d81e70cff0e7a688564a66124b08e74da54ac30f389c912707f4bf5e29afab6fa106faf4bf4e0b841f42fef125cf7bec185482ff6bbba0e
+DIST serde_spanned-0.6.1.crate 7828 BLAKE2B 78d39bca0850b78f0835167ca7786c0bf356d668389aaaf3ace946e91d9a7db8dcba895e833d87e88502b2ba969cac9aad6c1a053c5ecb37f845ebb3b0bb5b32 SHA512 6271aa2af243021002a10cdbd16cb081bf10ab53a61cace104182eb4f28e0c0d7c447b7dcedb350ce78debf5ed6ce6502cb823ae9177d98c5288310094eb22d9
+DIST sha2-0.10.6.crate 20558 BLAKE2B ceae6f1e28606371f93f5e4fd617b2cb057ed9aa4aa2d81bf4c6af4ca47d639a51f50d0fe4fa77667022c770056d6d711beb4835b2341ae0a8d667f11a4a51a3 SHA512 38dea4c300ea8dee22587ab0af6d66dbde824e1cb071e02e7790bf978efff6bdb6d4076d61c5acb38e86e69261a65811a7bd0182299d53ef053202ee54d2b05c
+DIST sharded-slab-0.1.4.crate 52479 BLAKE2B 766d81761909006ac740cce13e8361734c3c7072cd07c8c8f611f09772e16f11aa93cabdc5273b9446f5da391b26b7e7d619be523488d8b3558c64c18f20d591 SHA512 123a9ddb126d1adf41a30a632604264d66a06bacc497db6373e9dd36164197f8321f2fc826a16247674f0f69d9f6e30aca37810f787693c4a5c2cee8c5887c55
+DIST slug-0.1.4.crate 6640 BLAKE2B 7ea78865af7de57fdfea3f861da655f9f191bd6048c57655da2fa90675a46263a5d4c085ed4c206b5cbe4595b86d79466765138f0167c141c4ce6580de637422 SHA512 2c85dabcca9400c5e2a3b409997403a6acb17357449df4ef9a7b27511c5a979bfcb1a4d80b7e7c36122233ee6d47e59507631dd6ac9e93d1610f54b9b160ee96
+DIST smallvec-1.10.0.crate 31564 BLAKE2B e3e46a0781d3a7892a739b001592d462d0704f010363984c439e3fe4f75aecb9720648aa1e9bcc56bb3be848dd40cee578212439f78f07a807c9441c3c3e0147 SHA512 a09110184582dcc01d7a0d3fa8f74c17bf726935126d3654667b8e9c4bc43ad16ccfd8fa94feae7d9b31913aa7ee030fe5936e4b44a36302b6ce5fe37372a7ae
+DIST smol_str-0.2.0.crate 13467 BLAKE2B b3f598b10aa30bcc58b8eb6b8677ce9d71ed79e81f656ce4a4b808205a53d1ead2def376114f4731fead8a9fe94006f54f8489717b4dabe951237214956bce02 SHA512 a0cc82d782c0fcbf3fec89dd7644bfcbe88a59c715f31e214712dce8baee0294f9200accb3e7a56deb284b746ead7fc716a8534cd8c445fbb3c3269a27f6bc42
+DIST socks-0.3.4.crate 13172 BLAKE2B 02fa5e950aae0ae6fadb11f27c455da2ca3ce5db3b63f27ea720bb748e03652038a599c036941240edba0286b61a35699bef8db07716ada851c1077b0592b7dc SHA512 531ab43f277e2dfc6aaefcb584c5fdf910cba51cc5fee73256ef00dae714ace844251cb53ca090fd3e8258115cebbcf65843476913fadba8535cb44166294eb8
+DIST spin-0.5.2.crate 12004 BLAKE2B d67d9156ca6dbcf4022711cce797cd423a4977115abac4cafaa507aa2e1071b637275637a20934d4d0d6d2bf82c98c74a4506720326d1804952aa0fd5fc4895c SHA512 fc57f7906da2b7a298c5f89215e881e8827b4d9f934dbf138338e0ee30122d8459483be566268fa374b41d63d8dbf65d42e0b322535ba35c827d7edb2176f267
+DIST strsim-0.10.0.crate 11355 BLAKE2B bcb25ad0a7284e24e4f17ebe0ccb621bdc4118e499b50b094d98aa7e8fcc0b96716c9953c3516ce7ea78309d41d424892ded595259696a5bbffdcb07802b5c2f SHA512 78b318532addfcf5c1ccc1e14539e258aab9d3cd893cc45d82342549bde838c177d90f13c560671f8f32929af47d0b467db35e6876bd7697d8b3f9e055aeeac1
+DIST subprocess-0.2.9.crate 46463 BLAKE2B db082824bc0b71a73f134161ad1bfd3a3f922405edc582554a42aad9d6871740b2657e3567b6abc5198f5555ac2ffda1da976cd59b71592c2dbab27c01b685df SHA512 eb9757450737ec76912e7c474923c661c2b7dcfead1b4cd83691902dffafe7fc4edafc4b3f560c5f8f30ee8a8fad18bf089d084af7b453ede7c92d1435526886
+DIST syn-1.0.109.crate 237611 BLAKE2B e827445d00c79a8eeb91eacde472f1987addd6ce9e1df95d7abf6446a77ff4173a8006845f3ae71c1da47193cfb72e0ead9a6d6bad2573be12c17e90735d9ad9 SHA512 12816b9e8cf984024b2fbce9f0ae14cf94d4d2c06f08cc54fb793ce78770bb4cc1288eb7df0ba5e8e937756e1e8e295c53fe07a0c5dde1ea8ddba03b6203b37d
+DIST syn-2.0.15.crate 240785 BLAKE2B ee2a2250e7083770f8fcb5ac0b387a28bab041e56dc9a835bdc366d39830cbd464aec156b47947331864220d78856f74e94c24061bd0c4fc908584efd355bce6 SHA512 19520d13b417ad2cabaf7e31f45271d41f26158607d0ab21e76a04e824133c64f4acba0f8c044c675028832563ed7cc73fd88d519520ef3834008dbb3d04663b
+DIST synstructure-0.12.6.crate 18429 BLAKE2B 7666cd83f82910e036e5b57600dec9a1c2e559453ccc2f1201e2ee4ba64f2ee62cfc1046ded5cae64dd183967b9d71cbfe4b60a88bcb93706eedd0c4ab69be4f SHA512 6ec5dd7ade904fb6d79c2be595886289846e064b8c4100f780d8adfcbb41e6ca67f4b1d682212f4673c2169f889a042049b31161ec3cebc3f399751124f01f9c
+DIST tempfile-3.5.0.crate 31129 BLAKE2B 6d32584819794dbbb1f30970577ca2c82cf79979f94b070327285ae8bca6f8e3ea2402d2034290472f284ce039a3a578bfdfa81a53b5c49b587dbdb40960f6fe SHA512 8e8775a9727e32f6931b3289d2b8aefa5ede7b224ae2e1937da3aff371ef5f6078587f060eb36793e9779249992a97acc39c02c6095c41467929e39ada12c7db
+DIST termcolor-1.2.0.crate 17917 BLAKE2B 5ca7802b0bd29495bcd2deaddcdb4c3ff964073a373eaf39964a24ed91a48c5c33e192d676099e2837064df3149fdd73aba7d241e9aeaad9887bf1bcae9d38f0 SHA512 cf1896523353390b2f90b2a8bf30f47da5fc7c2daa635bd0cd8059bdc73feb243e46e4279562fe45d5726f2840833b1e967c7de19ffc0c853592d9f86c0c1be7
+DIST terminal_size-0.2.6.crate 10585 BLAKE2B 8696b9046c717eec8bf7246346af84a5d0cb740ac6e1335a4d8c20476628f4c0dd7c6106cde33513681466e9701d4b05d73f22a3bd2dfabc4d22045a69d31345 SHA512 95f38bc00f8c5e1a6913bb2a0a7c46d96e02a4f3234af1623ad3d7be41eae677e77f1b5d5d005d1e9d778fcc6c87196f67a51ab37caab5b4d299da79c85d06ed
+DIST textwrap-0.16.0.crate 53722 BLAKE2B 44140aa2dfd5076005749449a56e920418e71e34cb92f1d697eb3f3e7f6fe87b0a3861c8a4050a4a62e03187b6cadc4495e4200bee52ee183541431c73e47209 SHA512 97ae8acece5663e1a6b08b827179e96d5ad0ee67d635888cc3d83454b52cf48fce97eb0eba374ba4747834099c74f43d66d9fec868e84be45369a42c1aaec2c3
+DIST thiserror-1.0.40.crate 18709 BLAKE2B 8057ebcd11546f8b3ae5d760c1dd1764386f3c29dc43bc7a4aef20604970c65356daef137734e80260051d41e39979943bfda496459696b924a95f455159704c SHA512 db1b1fab3aa61dc6bbc672670eb70cee2f838fa713d3a927022900eddde253108d123bded1aa6df8d314e1aa2f8ff37bc72fc9b0803fe3a56447a64290ab2a91
+DIST thiserror-impl-1.0.40.crate 15138 BLAKE2B 7590428b5a97efde6a823440a9c91e1d1835b20df4ad8a700c1eeddd98516f1203605853fc6dc65528c5fd92480d04f9a8412aa7c20a524cb94435b0a0032f1d SHA512 9027f2d4127864c34d2d92ad3b2753a95893d26f5b2dcdec869884a98232c5304db1700a38112ced258e5f3832218cdea3a4bb21223098e1b20d06af1fd7edd2
+DIST thread_local-1.1.7.crate 13585 BLAKE2B f497dbcdfaf7dbc8b4b0dd97f77ba93df15b63303e7894c9032c9822a5b8111e0a21db2fa8cfdce5a503f70959ac9cdf48c840b925bdd850dc15e8436ba72379 SHA512 3772452c2a349fb564d29bb06e13c8ae64807db27c3ee217fa04fd0e9847e94adeea582b82ffc2d9116f31ff478eb088550caf1346c263de49b55fa17b431c31
+DIST tinyvec-1.6.0.crate 45991 BLAKE2B e9699d4d80a78978f0ebfd049f5b33d7f23d401cf4f4439ccb168e8c0e322473ad0ea7e2ff0ff69e9aac3e5c4c9ae5a7102185533bfbf96dbe77b3526e700bc9 SHA512 e5acaf353c58c60ae5556130a934f1048abb79cf6668ae467d308bac44b689d8a9997227ea879f4b5fe50f29cde8761801b088d7149bcd063b973056c381921c
+DIST tinyvec_macros-0.1.1.crate 5865 BLAKE2B 2bf4f68ca11dc19c72232951605a4c809b34ff38ee365ee4f592a3c41360e23c9330cfba961e2692a0ad568fef4aaaac51c40808d491178cf7a0c4b5a1c5d484 SHA512 10008c7b3a3d50c94b9c370015b76ee082f5dfb6dcacf014dc2f2dbe92f903618d10d0202b21f48fcf98a94ae76fb712db55a5e8ad353645d378cf0e6ec74f7e
+DIST toml-0.5.11.crate 54910 BLAKE2B 9ecd5103b33ab47d4be23c897c7095ca381cb79bedcaac4918cddc36fc7cf5d34ab664da52c2273d935f04486e9325241d6b66785d50aac78453c219aab49e1e SHA512 eddb82aeb8fdeb5436579292c6f7a64a90a2c7bb54070beb437bc7890b99795d0505faa8d6451a99e8bcf440f78db8a1b273a697c8ad44275cc4163a9ee49317
+DIST toml-0.7.3.crate 47227 BLAKE2B 8e0709bfe7c26e15b0c5ed4f3f908977242a52cf813e6175195b662792baa91f104da357876b711158d4b55b2426228e278cb9a2057de26d9b167d99208d7d04 SHA512 4f3f7534d07e4f5bc14310c4030b89ae3d42c9e6d7a5d3aefa33ff9bab3d73625367fe9c74fd1ccb8350b7bb3a78f1181654e69736cb7280b89e632c29aa81b5
+DIST toml_datetime-0.6.1.crate 10765 BLAKE2B d31627732a1a70dce5142ecf6dafa2b52e56b7df7d865b64dc477affbb2cdf148fe4acdba84373c4fa1b8bb8de06380e2a105c10fe34e7591683697d78b17c78 SHA512 024fc32f5c3b8efa764bc3fc59af710627513ba2e536f01f227d36661eaee099ed78320ea65b15a15e39c0fc30ff2b44c501f96d5a2618034daeb290524694e0
+DIST toml_edit-0.13.4.crate 104817 BLAKE2B 7a75d97b84012795dea220c457c713d03420432ea76d5dcef8b597793c6ae5216a1cfa13958f50929fcf2850c907b09a84a1f0103ae1e62020c6747e0996bf2c SHA512 7a1c915eb4e916d976882f64f5956c1a1ac2a1842882fd307b2a6044d644b25058be7c559b276b4632238b1d24418ed79c68ea4d7af0a13a47fef45d4338a328
+DIST toml_edit-0.19.8.crate 94457 BLAKE2B 8fb45302a44f48a5a75db4dd6e3c7c2b3e4cbc357d67e247da36fe631ba66ee64a6786c8a2f9d915a260aa15bafe986ea8085f9dbce5e03fce92330c782b8b65 SHA512 467454b0b55514e039e8049bfe41ffbee7677a0c4fed4cacd96cd8d91d14cbbb2ce77ba3f356d486ddd8deee9b9939ebf519dcb087aa3d5413eb709f7f003ff6
+DIST topological-sort-0.2.2.crate 10566 BLAKE2B 4b806d2ac1267104f921c80290dd55227209eea099a30f314a88738f95823221918a5097f4c0e694498e641bce3205c6c6cf5317fe37185de301a2a11bd101b0 SHA512 1334300f1022126138355ce1c4b33f60297765f9dab6888242e78be76b0df9e83560be693eabaaf10f9aea2dfdb90e248b02b0cee89dca495a1e365d9b6e87dc
+DIST tracing-0.1.38.crate 75832 BLAKE2B a137f5c9453d0dea73832cb4d75a7130d4e3aaedb6a7a6e16254fbe02349ac84dedb0c2eff0c480d352cbf3cce7a364c0f33a960dbfac49e6d566ae2088ab9ee SHA512 e73a5b31e767815d623d4cae0dc0bb18fbb7ea8cf0c378151c949c2b7e261fb9203a34acc25493237fa49e9eb8a53d313f61eb865b5ca8d7908e96f6912c76cf
+DIST tracing-attributes-0.1.24.crate 31841 BLAKE2B 8473fcad6bfd2f7df0fc4db41a5f71c4c128f4a0b485d21803aa421119afb3d9d5782515332c8c3349c24324c97449a80041a7f6d185c9dc48650b5b9182d585 SHA512 925bb3840ccb093dea2625802e5ee3a5f4bc3eafe2a8715670b1f14d2f4a01eff0c50f11368507247bcade02748eee8585975d156f5d2c932231c6e2ed89c0f5
+DIST tracing-core-0.1.30.crate 60351 BLAKE2B eadd1ad68830f4fa9972d207fac3b5be6b0f6d3d2ee4299f2fcd6d03313db6850ae0bb278ae618615e0bc2cd83ffbde0928857fe8e01dd9591a9e80114e0ff88 SHA512 9a14edf6338eff6636473f4ea844dfe337e434c14f40e7b9af6d7e6cf25f745f37bbe372bc63c01043667bea2f5b248b8afa8d6aae4cac3dc5193e3383ef1c65
+DIST tracing-log-0.1.3.crate 20549 BLAKE2B 1e2b5f1d96983b0dcf3e61f71132536e21dc19af0d532dcff7cc91db45e60cbdc1f8b5b7a7b2c13214dda4e3becd4f3d62262def1b608a99fa330ccf1d716323 SHA512 440cb8ddd5823cd0d86b68bbbf29f6886d5800f95d0aaa9477f98f188013fd009c2b9bc982b17efd08abd071bc70ca511f988b9db8c21d8e3d323fb67614d289
+DIST tracing-subscriber-0.3.17.crate 191711 BLAKE2B f55c8e8c70ca67f57cb3c8a411519f317b9961620e3f7db3a3933d549cb64a5871624c21231bd6a0974c94ecaee2904d2304ac9fde3aa8463f0fcbf99f94b5f9 SHA512 53a2a760d833f729e042b4f76b56c93ff7c50ddba968dfa9294f24425fe9a3dfc6c3b95a526ebd78df852b48b76c85d2f4f7be9170d75a6eea8734f77218e727
+DIST typed-arena-2.0.2.crate 11848 BLAKE2B 1d2821519c959b8e5f32942fb106f836a9aa753a43058cad6898588f8e0d9abcbe7a94a91ec8d30c62e59833563df48229c6aeec8bf7a396de20895e39571d11 SHA512 33f43488ff63ab763e4330d124e3290ece41e50ab78b6f12dae3a2be4d7f5bdf6ec876ab3b1f8cd81874e335fc41f3a2254994f250d3d6aba682fce557a6a399
+DIST typenum-1.16.0.crate 42477 BLAKE2B acc6dcd4521493c438a8a3d997ab0456fdbff3db66aee9b81ba219714d47522c3ca8fe26f8ce84edfda416ff9a22747caf3ecc9cc4bcd1e7647ac351d5aef407 SHA512 93da3ed62573acbc9d5d31257fb72ae9cfc7d59e4040c1f32d93e8fec94795e1aa20a3bf76ddc64c4b383184306bb2a66e51fd61b64dd4ce46a1bca8238b57b2
+DIST unicase-2.6.0.crate 23478 BLAKE2B 6e580108ac81b1cbee70e5bd331f43b12f266dae4f4f758bb8f5f073bd1af61943ee0de34cc27769525b19da8c24f8dea4941d0f5454594ab0cc8b78071ff053 SHA512 7e76a5f344e32c56cf87223585d87a56c79627b52bba0b29eb6de82de874b2964accededa8e9b5741f57944b6750fba5c61e679a50d4fd5a5646f431e2f4f188
+DIST unicode-bidi-0.3.13.crate 44477 BLAKE2B 90d80e7c57e93aa9aaa83e7c3c1a93bb6e4d51047803e61ed3f7c80361987947b2029a2b679bd301e8a0766ee8ea7f080e9b9b6ebcbb4354e19813a0f7da2abc SHA512 fb094fcfd907d90fa7232432aca0143209446e4c5c73d8a0fe6d2dc44b9dbb5b8b926c59b5e3f9a5a0a36f91c04613509b6e430c9c4adf526e7445e6e8d7a3d9
+DIST unicode-ident-1.0.8.crate 41962 BLAKE2B 3e3394a421460b0cdd56f96e1149b3816651ffd7064f9ec85c12050917d0b271eeee4bc3f6d3f0a3c1596635df3dac54bd610243d34e459743fe29b3b931a237 SHA512 8104999c6fff002c5aa109e2ca75ce3eaf772155d31dff87bcf39e3eb3da58b6cb543717be7b55acdb0cb1a4bd2a3d2e9c9974f7f75b6528668f5ef665ef4088
+DIST unicode-normalization-0.1.22.crate 122604 BLAKE2B 3f3430b279cc0ce1595392c869442ce676ab097154c688779ebcf726e10c497df59be2cd7bb2f84f99499a9df0654760a10ac92224c17d74775aeebe291241e1 SHA512 a5810d5e9cd93dbb80e013997aa9d38e60834619483a6623eb2859ec5d59a5aec3fc4db123dc7f4e2fe9f2b8799cf6af48bdff22d69a00a23707240e8bf3bb3c
+DIST unicode-width-0.1.10.crate 18968 BLAKE2B 6174e307fd3ee290d0a5d1d31233baaa5315cdb73f19b8580718e9f9eb04cfd3aeaeb474af1e50c4b9fecc6fc777937dedc527c9dc9ed14ccf42af099e591f31 SHA512 9836a8d489d18ea1ecfe1957ed6d5da7dce825e138cd1848aef093fa8d2eb83fcf01eabb1a2446df4f5ede4e67316e9e81b5d58b59d4e8c5d67870e8fa5dca3b
+DIST unicode-xid-0.2.4.crate 15352 BLAKE2B 80c327b39f3b8f2cdb5747cde968cfa1efe7b65b6bee9136adc881fa19f66aa5b1010d9d08de55a61b322d665b5b0cb0395e9ac471f6333c40d8dca5d97e123c SHA512 e67bd1258e1961807d9d5fe583a89ab5b82b2a529ecd32cadfc79aa5331380eb4a2db9fd96b74c8eace47f2f29021587d69bcdbf79f7e2650e92a25f7839d03c
+DIST unicode_categories-0.1.1.crate 87298 BLAKE2B f52b83d204b90ce0ec26e0500bc80b0547610f3417616603c4e837fbec0a41a6a715de19f88432f4c15ddb6b2ba55ee75a472fb7e2c888accfc77e1ef1d85fee SHA512 2d15499ee9318ee54910d657339820acfa88183e4f9aa146ac655129d2c4d76d3fd0550b601702ad2ccac4c8647dd2f26528d8003f39181e09b8ef480351a3cb
+DIST untrusted-0.7.1.crate 7924 BLAKE2B e0152791e781a4805120e3437b7e0219db3aa0282af4faaf2cfb15718421ff26abc56021c546f6aebb411f5abd27020273ba0f785e012a4b0089e96c2db4faa6 SHA512 5ebe3266912e4e78fdfdd13f9fcc07e9cf489d19d5e9ff346486f47aa58a0aca35278d561612c49eb3cab5a6759ac974d3b92bfabc399e1bc0808428dc347be0
+DIST ureq-2.6.2.crate 105924 BLAKE2B b055cf00473a6d67d181fe6ffc9d960ee9c1ef4bc346f30466e9d8c129b82abc908344fe61957e6840b1d1cf302df12c94b0c74b49daf0e978173e36899f3c4f SHA512 712922b21d321932b6e4d8602903d92fac93549200cd10d66052f404e7734a5aab2ebfe78e14cc443df3320530454a6585aa8005fc39471cb1aa95e54dcb951c
+DIST url-2.3.1.crate 72777 BLAKE2B 6ca0e537baf373b92269b2531945c1cdf360f1566cae4734dfb96f05a605e5c6c82e3192a1b9dde0ff22b92b87aba2d56e32a1bf17882b4de15efd7cdf52bc76 SHA512 8224010bef067574481e5d84100d944782d52b49db7c396ae2b4dfc145ed58769c15440d97a0fed4d2f9857592a8601417cc5b1bdea959c47a3e7a1f7182ed0d
+DIST valuable-0.1.0.crate 27718 BLAKE2B ef5ded994c9a6dd302bed27f0d757447b0c86dfefa499c1ef0d25c3a6745ce61cfa2c926826534c9f605f9b89b4a19f91f06f94ae7c03f1ddc4c58fab3ae58bb SHA512 a97f65db1f1c5049a276dbb0e45e25c6fc6ce9d27ac1fcd77c945324cd8216ef60344065c79799ca04e338455e4f7422c44078eea32d5fc359dd0211ee7eb387
+DIST vcpkg-0.2.15.crate 228735 BLAKE2B 6b6bacd9a7fa38919241f45a97f58cae957e58d3aac99df208a26aa718e4f1644f4ccefa31b09151e5c1952288e0e5837c363918b98c7f55079a948a952c1c50 SHA512 7322a21e8811b2fe4e79e09dc321458068ecdf1953f05d36233f3278ecc0b1dfc64194db7010dd46fcf692285f42475beb090c6c6cac0c8f9fe0eb5c770e3172
+DIST version_check-0.9.4.crate 14895 BLAKE2B fa1fa4008af165bfc1fdbe560488afd9d232cfafee94104fbcc4cbc52f234849bff9ddfa88109a1ac682f6d9c1d86b0459893d223f64e65adc08966aaf93dc89 SHA512 b172dc9a3759a4a683ffc39b9a40b03b9974b626a088217de87090466cef695226557c226cf3e469b2b25ee7297b7eb0d7719878cab42457f80146a81943c0c8
+DIST wait-timeout-0.2.0.crate 12441 BLAKE2B a99d3f57bc6e784ac06167f98b2dc2841f730dfab4fb9772b15e67707f756d6ba7daeb3e992d32291bed3daa85eaa8a8ddde64db5e1acf1cc4031fc9bdc82212 SHA512 db3b7aa2acfd44e64451042b8ba98eecab77a82aa5c58ed08dadb119ab36dee4e26d62baad7978ed56d5ad03019c96be5021455362290f56043981137bac8066
+DIST walkdir-2.3.3.crate 23125 BLAKE2B 3bd354b9796a31bd4c8f4ca695514101a7837ae2134fa1ffec20df1cc946a67b38c6b50affbc2cb79ffee0934474d8269378dab5ac49a4943ccf8c7aaa51db11 SHA512 2b6e1e27c16e310f636eb1c9ee58435509fb8f7a6c5beba4dd13d87aa1d91599a593bfe720a675d536ce63e217c31e240a57122455d8e18de1282a9e7fc3defe
+DIST wasi-0.11.0+wasi-snapshot-preview1.crate 28131 BLAKE2B fe501889f25d65e2d032f885cc50c4f8bf7dd70fd5cbc438de349838370d8699e9627b0a4fc76030ea9fe6d508f41d0c9928a875fdbc47e73bfb17241cf7b155 SHA512 043500ab28cd9cb779475255da5d109ebab7fccca72b64873dc28d77bc5a157ba8d96b9e8f05223b5b36c7089bb7b4ba87657fc69bac16b78972f897294a865f
+DIST wasm-bindgen-0.2.84.crate 172947 BLAKE2B 90c9b846bcea9d099a394b42f126990db82d1dcbe247f8b63f8c91cdfbb5e2d184d36daedaf8fcee58c34afe89bf9a30454063693d64806ead3427680a87e7af SHA512 20f8c9e4f8d81c66e34d9ca2b266fabaae30da9015d139cd4eba3f314c67c17cb562c6eec5127c41302c11c2f314237add2524a8b9a4d5346b8822a37e467b2d
+DIST wasm-bindgen-backend-0.2.84.crate 26344 BLAKE2B 5686a252082afe128ded295584d972fe4af11a30fe37a80e142d213eb2e4bca567182bfc5addf1571696bd12e68e029148cffaa9af088d1269a1201af72e64d1 SHA512 afb06e21d916cf1af137159ac86924fbee3a958ef73725bdf6bf205e15465857791070c721e0fc0164eb6e37d195bbb6a3f03661c81e1e5a9ab8502bc3704058
+DIST wasm-bindgen-macro-0.2.84.crate 12857 BLAKE2B 23ae9963cc2cf9bc589f5d77c8d3819aeb9d671f0bddd17093b2df096cc800d2130bd2a994b786a5f446e9194947199b3f0cdf1c16f15e7283a4ae319ca849a1 SHA512 23b69ff601c149909d81200bc2902018ec71efad8aec9cd84a0653025aaf852cc86d93e28c5f60144ba6ce5aeff04b90d23761e263e3783d45097316525d6f43
+DIST wasm-bindgen-macro-support-0.2.84.crate 19076 BLAKE2B 4f779d7d0a406f376092ea8193851dbc86e9dbb822464db66a2022274665b03b9bf6552f79263014510cfaf4284847e98e8173263a6565f1af0c29054bd33fff SHA512 f2a8b6e0170dcea0d2f4a50361f036ad6604c499a89f0cf602578d0958d47c193aecebbd98e63310f592b08f8fe53da6c3d7a124b433ee384aa22371d9c963e5
+DIST wasm-bindgen-shared-0.2.84.crate 7219 BLAKE2B 4910158ed884dd9dbb32b1539b0c89a583f98df05cb29654487a26db063c973d44cb086dad4b466f9bc63104e3d4da72fe9feed32618f8243151dfb9ccfaff29 SHA512 fc4bf134a33c71852b91d09fbf1e1801e2b97b5c2756e2680d0c1f8701da30b22b56777d8e806e13602beb040775824966e378f7b9805e131a385e7816ddd010
+DIST web-sys-0.3.61.crate 706333 BLAKE2B f57cb14032e2ea01b5e0ffcef0988ee3e8227c1da7d27ef8799583f64cddb4bcfbbb145f5ea1889006fc9ff61d42b1c02d4b278d67371c9d914827113f5e4128 SHA512 dd8c93a92295a9cd94a4a4cac4a81d9fa41c2c0bc885c1861eae5cc317a0d55e1a9d34b97b91999bf617a071f7f8acc39bb0d4a684b40543519f0cad6b82a25c
+DIST webpki-0.22.0.crate 58663 BLAKE2B 4fff91a8ce3d46a9daa9e39c50755f79574c91faddead2f6c879f6e9bc2189b76c4951cbc36e607e099ab8a870b422e1afcd4bcbecc14e96555c26c8cbefeb84 SHA512 7c2916d47f2232587e3ccaa8fefc8b576addaf84b55166011032e471f91ce54a79d2fca7fcc1144552c254f5baead708fba2b0ce76a1c34286838a8744b0f570
+DIST webpki-roots-0.22.6.crate 242386 BLAKE2B b7c4ca7b372effa1cab48d890e468a272e0bfb7109900c4077906d088e85448c058a6be420eca24ed42bc9c0a0f1922c08c5ae6b0cfd85aa71662a5f7157791a SHA512 00413a8354e2277f50c29851ed49a97f76bacb2017d61b10333981d15bcee13eceef8711e87d2aef1ed4f8a85763c6b1e7e21d61a57e7f689fe4aa6e67f4c140
+DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
+DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
+DIST winapi-util-0.1.5.crate 10164 BLAKE2B fc800aceae5249a858c806c3e969ef2545766099872d856ebee51c883d9acf1122278db9607d50ca53eac351502b700fd2463900932d342240f97f683d517963 SHA512 7baeb661f397c4693dfa001fdc774b323c51a7c55caad40f2de5112a1cefd1d6151e3df41fa4ee193460a5905917c83d2b1de5fa10b4bd014ad96690af95c0fd
+DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
+DIST windows-0.48.0.crate 11864177 BLAKE2B 39c0e4f058f68a829ee08721818a0b04287af20dfe6e03a125b75566b4c8a58b56557d685600f1f9c215811154f9782f12368d42848445d54dcf9bfd6471349d SHA512 7c906f885fa0a730f1cb1ef4e62f5b602a49d44343febe1d38fcd4cbc28e0342766983796042585fe457aa229333558715b6270e378946faa8f398a7ecc2af8c
+DIST windows-sys-0.42.0.crate 3006791 BLAKE2B 7a0962364ecc416cf0ae7e49cce1298a12d819003e488f6e77aff1a52710f00378638b6a05db5557a031e1b75659587657971ddc63eaab35495133762f99a7b2 SHA512 b07b119688f3e3ad234d36979947f34e8e19988fb62101afbe18ec8afc9c8a4261128939df8bbb849d5c5982422cb4c50dbcba70f2bf401fbb7c605df1b2b354
+DIST windows-sys-0.45.0.crate 2568659 BLAKE2B 6f2d634d121a9bf41e2887e277a73f33aee69b04c7fcfc6ff973d21902787997f1e186f530e9226cddc003ffc3f85a179c069c8a8688de459f617df92d33f94f SHA512 f239346c0141b95aa76e0771e2f4e38b9a592f3cd92c6001de353637cd65cd73b94cbf9917a4eaa9b0c0b2e6e2af920b9cf6b3fccb52770df5160254cffc1c47
+DIST windows-sys-0.48.0.crate 2628884 BLAKE2B 551e900de4f67187ef034b60df9fd0e0d8f82a3100ef28e1eabd543ac129d882dc86ffcc1714071aba09e4cb2ae2d2f07ace1a32b99fd989ce525cf05991edab SHA512 bdf534bcf3face31e9ebe11427a911a53f89f4ff5eaea8cccd094e139bfe14b2aec602b1cab1df774794d999477439d9adc6b627a8e33c20334fc348ba2c47ed
+DIST windows-targets-0.42.2.crate 5492 BLAKE2B 42fc4a7d3e287fe2a70637e890304b49737776596f4a94a6d216668247092135e84322bd04caddd19c83b7700b0f27278e600ce8ed326957fabc21bffcae89b0 SHA512 84fbaffcad9a80beca77506aac26d0c5cb75aa0f21a5a70bcd3f6a16e71e8753ae00d3b89da9262c99756624163dcc0d6074fa9f99dfaae0dc098018209025f9
+DIST windows-targets-0.48.0.crate 7466 BLAKE2B 4ef6d89ad5b1acf26a1a24348122b86d3943bd95935499bc9032fbc7aa01c04999c723df7fecb4989854cb6b7cceffe141537dfb05a9eaf3902c4cb490533116 SHA512 1d2a29602a1e0846c8577ec9167c5f9972091998a5df449d67b13ad918bf37680e7f97247baf5e3010c166d0b3182418c2925470998b92893ee9469939b91e22
+DIST windows_aarch64_gnullvm-0.42.2.crate 364071 BLAKE2B 97c4e3b2a2dd3f936f9bfcdad23639c9c4c499eed220aec361d26d6013d798efa118e6b298f9cf841ac149d2ae5d58ca653731718450fcf2910bb5f6fa39159f SHA512 75cd7eb1def8ce9d0ff3d7468d2b1cc31cc76c08f981a2460c3d1eb09cff7100d7442863a3591621c1f5f3b3f4badf0b5c95285b6ed583e37283a8403f1095f1
+DIST windows_aarch64_gnullvm-0.48.0.crate 366543 BLAKE2B 9b10f65089fe6da3ff38a1061783f635644ae84f567f891eaced280af68f7ff3919b34289e8850aa34554bb0346903273ff0a7fa743ca8794c2d23a9f1b0185f SHA512 80c5aa74c5669f7acff3882a8e7575f15e8d7cc58c11a1cb731ff423eb9cc9ba43cc6b80e52803c0d44e6a9001655ba87de6f43a9fe858da6d6e3a5c983a2711
+DIST windows_aarch64_msvc-0.42.2.crate 666981 BLAKE2B 9f3cc5592cdede08bcdc1e7c455325279e3b763d96942695e10dccf1dfc37a81c749b69a7d6de883d4c0fa6e8a0d2f578fe2a8d6c42ad8ef6282590bf8fc87b7 SHA512 d2dafa8c94d01c1b65ca1bd631d31f2ef842f1db7accb132ff78c3f8483221b991afd3391563e03dcec42bbc9cbdc0ebdab47b991d25af85b5ba2ac1bbf8db63
+DIST windows_aarch64_msvc-0.48.0.crate 671479 BLAKE2B 0c80f210437628e1d878d1d14e884fea532c7539b3030aa76d46f27d02372c715c6e33d7efdbbd770666472b44a66c30711a33d819ede9cdcd51c96355802d45 SHA512 617e47a7202f1db4dbd3ecea509682135ccd85e3a458c0331b9bc7aa1d84e5756b59c881cb098d5c6d4c951248d13c8253a8e8a50938e1997bd19ceba77262df
+DIST windows_i686_gnu-0.42.2.crate 736236 BLAKE2B 4ef0496462afc73d9d72af7e5da1e6d3506a92f8172930e88ae64ab97596ffd31c4f97fb969e9b677e30159c27f00a8e756deb006b630fb98ce83f03c8b762e2 SHA512 ad09d650a05cb91cb6b40f59025c023a4c286bc1194586697c506016df2b9b0d5b02606b81687bc634795a0d9a9b8a73e486599328ae09c853e8e5ba662fc59c
+DIST windows_i686_gnu-0.48.0.crate 741490 BLAKE2B 5a4a584f8d8ee5bbd2d4c5b6749a66f2d43fc9e4ef90faab2227709b270f0d46fc26578c029edd96877c71309316ddb32d91c39f46d88f9a484c614f866e3dbe SHA512 15149fdd48b61b6d993acd392dbd353d0280d984ea88745217e4207937174bb90cdd9701f69ff0fe06a842f03607cbb57937d20d79ab577181e605a8a8fadc68
+DIST windows_i686_msvc-0.42.2.crate 724951 BLAKE2B b084286cd4927efd2889b149abf8a9fe9d3d777130db9e592982660dbf9a96a0f5e723ca121465787aa11877d2d29a5a7d7cf066cdc8fa7e90d7ca7dcb7677f1 SHA512 c1706fc36d4b157c020744a11b3eb5d7dfbf05a0b56775bc717e94b7fd725816b20154fdbcd69ac08dbfb8b8bbfa74fab72d7a9c10399aad6a1cc54cf597e804
+DIST windows_i686_msvc-0.48.0.crate 730056 BLAKE2B 4e4ad6ed94948145199c2ed50fc65e4af08455a0fd058bb0f763d481f30b029f99a2b8dbac087b29e762500a19270f6683baf62ba99d141eb002a5b0b5c8ea05 SHA512 11a50800e709712dbea907275bc0faa46d2eb2969118445ed5b932d9c5957a09592a5b26a40e554c1f5fd56c6d074a07637e6f88eedd2224e1001e62df7b469b
+DIST windows_x86_64_gnu-0.42.2.crate 699373 BLAKE2B 01c70809d564b16b268656e47295e99c992d8f9839fac8a51338a0e7c3b9cdcd0429c456ca8c1c139a8c687ed7ed6c43a82250889d881aadaa65bd037223e0a6 SHA512 5767af3c86e717f93137a89d442230e6b60a649057edb3ab104b1f82c0bcd64fe089dcdf2f4fd486a799bece1ddb5f0449641536b678211945e749ae24f35c1f
+DIST windows_x86_64_gnu-0.48.0.crate 703595 BLAKE2B b227efb78a99c43d0538cceadada3fa1840df29adc665787fdcf845b73e77d782da8a9f9aa602e1da61401b550d0107176feb6c397c922a6240b38cc8f04a180 SHA512 38eff1164fb37dbd2bbe53404b20cba92de84cbbd5e4eb9ad60d51fb43d6fdb8b87a1488e2c88ebd4b3ff3b708f93fdc05df4b14a285d3ff11c33ff0d9828602
+DIST windows_x86_64_gnullvm-0.42.2.crate 364068 BLAKE2B 64bc53e98eb3fc649c9b43a6e734de4e65088e41edacabd49f7afcc5dc6e1065c563ecfc682747dda05978dea2dba4f45c16fcc18c3b00684c3d93681e5a7deb SHA512 d39a8bc948110fe612d3f8d6628b3f0d56620df11d8a49e0fabb6c90389ad407582b3af10e4eab46c79b3d11d2e10753d73d9e55963fbeac085f41e9749bdba3
+DIST windows_x86_64_gnullvm-0.48.0.crate 366536 BLAKE2B 295dc3aef18c604d1579978045f4058b1a315083a8ab842bddf5800ec3460b1530ad88c3464acab712a229290aca235810de8a3b6a253859a354d9fa97277e58 SHA512 8d82fad4c8445030844708aa026a62f1ca43362b8e15f14b0d226c7e9cda04ffa0715087b6a025dbb738e8891de24fcc4a2df071a532917cf03c4a46f934f396
+DIST windows_x86_64_msvc-0.42.2.crate 666936 BLAKE2B bc3a456e7f8bc272f8978ec69506ec9d89f97b7582ebbe05d8bd57bdf8156ef62d0d2dc6137a97e81d54059d70db97a24af9a038adff357f5dfd28805d6193b5 SHA512 53a35f438903fceb59e36bd2ac331773fb8e6c8c5a6d984e79021761f91b3b4a23efe49d219667a4d0d23dcdbf906da9c24e74fb1cff93395b5c55ff524e3788
+DIST windows_x86_64_msvc-0.48.0.crate 671422 BLAKE2B abb063610dcc38581657133182b7d9efeed5553df67bd2bd6f30f1668a645186e4824f9ef556a5abc84ace10b1b437b6325bbda6df5a64ce880d7dcb743ac786 SHA512 6e598b8e3ac54912a8ebac01b0dd2c58fd282072527d7fedc7f6ebecdfb7dcb09ae46c22293bc0117849437f8b053db5e90406e7a38276f0f0afd06be3966795
+DIST winnow-0.4.1.crate 138177 BLAKE2B 9fb55dc5dbca2250c5921aebc42fd8dff7da6fc70656d5690475cf9d81d569b01e68c5134401f70759a9edbe1704cf76727efe5442961b1d220827130497b735 SHA512 390b3da6688d61d90d9bb221d95c7243968209b692737999b13326204954d1e916b390ac8a3a0e0864695ad9a073ed8a79e592ca565be374cc6e909b4166d52a
+DIST xml-rs-0.8.4.crate 52690 BLAKE2B 140d4e725ae0e82c949838c1f6d82e1fbb00e2df4d51b74486597302d4a434ccb46bbd6f5e97636b4947c0092793928c29837a3290bb525344e8a27c0951a42b SHA512 b21b0db9ee7cdfddae7c110e4fec714d719e75ba139744c290692d660caa425aa8b1ece644deb5f1879f21c0561b9b412b9ba8931f7f5b4e220ef08f8a7fc5e6
+DIST zeroize-1.6.0.crate 19049 BLAKE2B 8dad6af58edd7b22ece7dfefa47b478dfb74efd1e08c03c571c9cd50962a8eda8cdb59fab91fd44053f8acde8d1d84efac4bc48c5e6576255620ef21f2813de2 SHA512 9ebc81c10516440476b5c198dd4ff0d284a0a37cee11a2cdfb5a1995f95b72d05beb827483b16e8b764f720fbcf30a5e5d8b1517cfbbf572bcb27c2efb18393b
diff --git a/dev-util/cargo-audit/cargo-audit-0.17.6.ebuild b/dev-util/cargo-audit/cargo-audit-0.17.6.ebuild
new file mode 100644
index 0000000..5c24653
--- /dev/null
+++ b/dev-util/cargo-audit/cargo-audit-0.17.6.ebuild
@@ -0,0 +1,335 @@
+# Copyright 2021-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Autogenerated by pycargoebuild 0.7
+
+EAPI=8
+
+CRATES="
+ abscissa_core@0.6.0
+ abscissa_derive@0.6.0
+ addr2line@0.19.0
+ adler@1.0.2
+ aho-corasick@1.0.1
+ android_system_properties@0.1.5
+ anyhow@1.0.70
+ arc-swap@1.6.0
+ askama@0.11.1
+ askama_derive@0.11.2
+ askama_escape@0.10.3
+ askama_shared@0.12.2
+ atom_syndication@0.12.1
+ atty@0.2.14
+ auditable-extract@0.3.2
+ auditable-info@0.7.0
+ auditable-serde@0.6.0
+ autocfg@1.1.0
+ backtrace@0.3.67
+ base64@0.13.1
+ binfarce@0.2.1
+ bitflags@1.3.2
+ block-buffer@0.10.4
+ bumpalo@3.12.1
+ byteorder@1.4.3
+ bytes@1.4.0
+ camino@1.1.4
+ canonical-path@2.0.2
+ cargo-edit-9@0.9.3
+ cargo-platform@0.1.2
+ cargo_metadata@0.14.2
+ cc@1.0.79
+ cfg-if@1.0.0
+ chrono@0.4.24
+ clap@3.2.24
+ clap_derive@3.2.24
+ clap_lex@0.2.4
+ codespan-reporting@0.11.1
+ color-eyre@0.6.2
+ combine@4.6.6
+ comrak@0.18.0
+ concolor-control@0.0.7
+ concolor-query@0.0.4
+ core-foundation-sys@0.8.4
+ core-foundation@0.9.3
+ cpufeatures@0.2.7
+ crates-index@0.19.8
+ crossbeam-channel@0.5.8
+ crossbeam-deque@0.8.3
+ crossbeam-epoch@0.9.14
+ crossbeam-utils@0.8.15
+ crypto-common@0.1.6
+ cxx-build@1.0.94
+ cxx@1.0.94
+ cxxbridge-flags@1.0.94
+ cxxbridge-macro@1.0.94
+ darling@0.14.4
+ darling_core@0.14.4
+ darling_macro@0.14.4
+ derive_builder@0.12.0
+ derive_builder_core@0.12.0
+ derive_builder_macro@0.12.0
+ deunicode@0.4.3
+ digest@0.10.6
+ diligent-date-parser@0.1.4
+ dirs-next@2.0.0
+ dirs-sys-next@0.1.2
+ dunce@1.0.4
+ either@1.8.1
+ encoding_rs@0.8.32
+ entities@1.0.1
+ env_proxy@0.4.1
+ errno-dragonfly@0.1.2
+ errno@0.3.1
+ eyre@0.6.8
+ fastrand@1.9.0
+ fixedbitset@0.4.2
+ fnv@1.0.7
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ form_urlencoded@1.1.0
+ fs-err@2.9.0
+ generic-array@0.14.7
+ getrandom@0.2.9
+ gimli@0.27.2
+ git2@0.16.1
+ gumdrop@0.8.1
+ gumdrop_derive@0.8.1
+ hashbrown@0.12.3
+ heck@0.4.1
+ hermit-abi@0.1.19
+ hermit-abi@0.2.6
+ hermit-abi@0.3.1
+ hex@0.4.3
+ home@0.5.5
+ humansize@1.1.1
+ humantime-serde@1.1.1
+ humantime@2.1.0
+ iana-time-zone-haiku@0.1.1
+ iana-time-zone@0.1.56
+ ident_case@1.0.1
+ idna@0.3.0
+ indenter@0.3.3
+ indexmap@1.9.3
+ instant@0.1.12
+ io-lifetimes@1.0.10
+ itertools@0.10.5
+ itoa@1.0.6
+ jobserver@0.1.26
+ js-sys@0.3.61
+ kstring@1.0.6
+ lazy_static@1.4.0
+ libc@0.2.142
+ libgit2-sys@0.14.2+1.5.1
+ libssh2-sys@0.2.23
+ libz-sys@1.1.8
+ link-cplusplus@1.0.8
+ linux-raw-sys@0.3.4
+ log@0.4.17
+ matchers@0.1.0
+ memchr@2.5.0
+ memoffset@0.8.0
+ mime@0.3.17
+ mime_guess@2.0.4
+ minimal-lexical@0.2.1
+ miniz_oxide@0.6.2
+ native-tls@0.2.11
+ never@0.1.0
+ nom@7.1.3
+ nu-ansi-term@0.46.0
+ num-integer@0.1.45
+ num-traits@0.2.15
+ num_cpus@1.15.0
+ object@0.30.3
+ once_cell@1.17.1
+ openssl-macros@0.1.1
+ openssl-probe@0.1.5
+ openssl-src@111.25.3+1.1.1t
+ openssl-sys@0.9.87
+ openssl@0.10.52
+ os_str_bytes@6.5.0
+ overload@0.1.1
+ owo-colors@3.5.0
+ pathdiff@0.2.1
+ percent-encoding@2.2.0
+ petgraph@0.6.3
+ pin-project-lite@0.2.9
+ pkg-config@0.3.26
+ proc-macro-error-attr@1.0.4
+ proc-macro-error@1.0.4
+ proc-macro2@1.0.56
+ quick-xml@0.28.2
+ quote@1.0.26
+ rayon-core@1.11.0
+ rayon@1.7.0
+ redox_syscall@0.2.16
+ redox_syscall@0.3.5
+ redox_users@0.4.3
+ regex-automata@0.1.10
+ regex-syntax@0.6.29
+ regex-syntax@0.7.1
+ regex@1.8.1
+ ring@0.16.20
+ rust-embed-impl@6.5.0
+ rust-embed-utils@7.5.0
+ rust-embed@6.6.1
+ rustc-demangle@0.1.23
+ rustc-hash@1.1.0
+ rustix@0.37.15
+ rustls@0.20.8
+ ryu@1.0.13
+ same-file@1.0.6
+ schannel@0.1.21
+ scopeguard@1.1.0
+ scratch@1.0.5
+ sct@0.7.0
+ secrecy@0.8.0
+ security-framework-sys@2.8.0
+ security-framework@2.8.2
+ semver@1.0.17
+ serde@1.0.160
+ serde_derive@1.0.160
+ serde_json@1.0.96
+ serde_spanned@0.6.1
+ sha2@0.10.6
+ sharded-slab@0.1.4
+ slug@0.1.4
+ smallvec@1.10.0
+ smol_str@0.2.0
+ socks@0.3.4
+ spin@0.5.2
+ strsim@0.10.0
+ subprocess@0.2.9
+ syn@1.0.109
+ syn@2.0.15
+ synstructure@0.12.6
+ tempfile@3.5.0
+ termcolor@1.2.0
+ terminal_size@0.2.6
+ textwrap@0.16.0
+ thiserror-impl@1.0.40
+ thiserror@1.0.40
+ thread_local@1.1.7
+ tinyvec@1.6.0
+ tinyvec_macros@0.1.1
+ toml@0.5.11
+ toml@0.7.3
+ toml_datetime@0.6.1
+ toml_edit@0.13.4
+ toml_edit@0.19.8
+ topological-sort@0.2.2
+ tracing-attributes@0.1.24
+ tracing-core@0.1.30
+ tracing-log@0.1.3
+ tracing-subscriber@0.3.17
+ tracing@0.1.38
+ typed-arena@2.0.2
+ typenum@1.16.0
+ unicase@2.6.0
+ unicode-bidi@0.3.13
+ unicode-ident@1.0.8
+ unicode-normalization@0.1.22
+ unicode-width@0.1.10
+ unicode-xid@0.2.4
+ unicode_categories@0.1.1
+ untrusted@0.7.1
+ ureq@2.6.2
+ url@2.3.1
+ valuable@0.1.0
+ vcpkg@0.2.15
+ version_check@0.9.4
+ wait-timeout@0.2.0
+ walkdir@2.3.3
+ wasi@0.11.0+wasi-snapshot-preview1
+ wasm-bindgen-backend@0.2.84
+ wasm-bindgen-macro-support@0.2.84
+ wasm-bindgen-macro@0.2.84
+ wasm-bindgen-shared@0.2.84
+ wasm-bindgen@0.2.84
+ web-sys@0.3.61
+ webpki-roots@0.22.6
+ webpki@0.22.0
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.5
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-sys@0.42.0
+ windows-sys@0.45.0
+ windows-sys@0.48.0
+ windows-targets@0.42.2
+ windows-targets@0.48.0
+ windows@0.48.0
+ windows_aarch64_gnullvm@0.42.2
+ windows_aarch64_gnullvm@0.48.0
+ windows_aarch64_msvc@0.42.2
+ windows_aarch64_msvc@0.48.0
+ windows_i686_gnu@0.42.2
+ windows_i686_gnu@0.48.0
+ windows_i686_msvc@0.42.2
+ windows_i686_msvc@0.48.0
+ windows_x86_64_gnu@0.42.2
+ windows_x86_64_gnu@0.48.0
+ windows_x86_64_gnullvm@0.42.2
+ windows_x86_64_gnullvm@0.48.0
+ windows_x86_64_msvc@0.42.2
+ windows_x86_64_msvc@0.48.0
+ winnow@0.4.1
+ xml-rs@0.8.4
+ zeroize@1.6.0
+"
+
+inherit cargo
+
+DESCRIPTION="Audit Cargo.lock for crates with security vulnerabilities"
+HOMEPAGE="https://rustsec.org https://github.com/rustsec/cargo-audit"
+SRC_URI="
+ https://github.com/RustSec/rustsec/archive/refs/tags/${PN}/v${PV}.tar.gz -> ${P}.tar.gz
+ ${CARGO_CRATE_URIS}
+"
+
+LICENSE="|| ( Apache-2.0 MIT )"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0 BSD-2 BSD ISC MIT MPL-2.0 Unicode-DFS-2016"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+IUSE="fix"
+
+RDEPEND="dev-libs/openssl:="
+DEPEND="${RDEPEND}"
+
+S="${WORKDIR}/rustsec-${PN}-v${PV}"
+
+QA_FLAGS_IGNORED="usr/bin/${PN}"
+
+# requires checkout of vuln db/network
+PROPERTIES="test_network"
+RESTRICT="test"
+
+src_prepare() {
+ default
+ pushd "${ECARGO_HOME}"/gentoo > /dev/null || die
+ eapply "${FILESDIR}/${PV}-libressl.patch"
+ popd > /dev/null || die
+}
+
+src_configure() {
+ local myfeatures=(
+ $(usev fix)
+ vendored-libgit2
+ )
+
+ cargo_src_configure
+}
+
+src_compile() {
+ # normally we can pass --bin cargo-audit
+ # to build single workspace member, but we need to cd
+ # for tests to be discovered properly
+ cd cargo-audit || die
+ cargo_src_compile
+}
+
+src_install() {
+ cargo_src_install --path cargo-audit
+ local DOCS=( cargo-audit/{README.md,audit.toml.example} )
+ einstalldocs
+}
diff --git a/dev-util/cargo-audit/files/0.17.0-libressl.patch b/dev-util/cargo-audit/files/0.17.0-libressl.patch
new file mode 100644
index 0000000..bca6a30
--- /dev/null
+++ b/dev-util/cargo-audit/files/0.17.0-libressl.patch
@@ -0,0 +1,28 @@
+From: orbea <orbea@riseup.net>
+Date: Fri, 8 Jul 2022 20:23:12 -0700
+Subject: [PATCH] Support LibreSSL 3.5.x
+
+diff --git a/libssh2-sys-0.2.23/build.rs b/libssh2-sys-0.2.23/build.rs
+index d1d33dc..7f82663 100644
+--- a/libssh2-sys-0.2.23/build.rs
++++ b/libssh2-sys-0.2.23/build.rs
+@@ -121,6 +121,7 @@ fn main() {
+ cfg.define("HAVE_EVP_AES_128_CTR", None);
+ cfg.define("HAVE_POLL", None);
+ cfg.define("HAVE_GETTIMEOFDAY", None);
++ cfg.define("HAVE_OPAQUE_STRUCTS", None);
+
+ cfg.file("libssh2/src/openssl.c");
+
+diff --git a/openssl-sys-0.9.72/build/main.rs b/openssl-sys-0.9.72/build/main.rs
+index 243f146..d6d2eb4 100644
+--- a/openssl-sys-0.9.72/build/main.rs
++++ b/openssl-sys-0.9.72/build/main.rs
+@@ -254,6 +254,7 @@ See rust-openssl README for more information:
+ (3, 3, _) => ('3', '3', 'x'),
+ (3, 4, 0) => ('3', '4', '0'),
+ (3, 4, _) => ('3', '4', 'x'),
++ (3, _, _) => ('3', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-util/cargo-audit/files/0.17.6-libressl.patch b/dev-util/cargo-audit/files/0.17.6-libressl.patch
new file mode 100644
index 0000000..61ff0b6
--- /dev/null
+++ b/dev-util/cargo-audit/files/0.17.6-libressl.patch
@@ -0,0 +1,23 @@
+From: orbea <orbea@riseup.net>
+Subject: [PATCH] Support LibreSSL 3.8.x
+
+--- a/libssh2-sys-0.2.23/build.rs
++++ b/libssh2-sys-0.2.23/build.rs
+@@ -121,6 +121,7 @@ fn main() {
+ cfg.define("HAVE_EVP_AES_128_CTR", None);
+ cfg.define("HAVE_POLL", None);
+ cfg.define("HAVE_GETTIMEOFDAY", None);
++ cfg.define("HAVE_OPAQUE_STRUCTS", None);
+
+ cfg.file("libssh2/src/openssl.c");
+
+--- a/openssl-sys-0.9.87/build/main.rs.orig
++++ b/openssl-sys-0.9.87/build/main.rs
+@@ -285,6 +285,7 @@
+ (3, 7, 0) => ('3', '7', '0'),
+ (3, 7, 1) => ('3', '7', '1'),
+ (3, 7, _) => ('3', '7', 'x'),
++ (3, _, _) => ('3', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-util/cargo-audit/metadata.xml b/dev-util/cargo-audit/metadata.xml
new file mode 100644
index 0000000..687c7b2
--- /dev/null
+++ b/dev-util/cargo-audit/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>rust@gentoo.org</email>
+ <name>Rust project</name>
+ </maintainer>
+ <use>
+ <flag name="fix">Add support for 'fix' subcommand (experimental)</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">RustSec/cargo-audit</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-util/cargo-c/Manifest b/dev-util/cargo-c/Manifest
new file mode 100644
index 0000000..36b6e03
--- /dev/null
+++ b/dev-util/cargo-c/Manifest
@@ -0,0 +1,371 @@
+DIST adler-1.0.2.crate 12778 BLAKE2B a1dc17786adae945ac09d3525e609ed944e6465690787bbb831a1b9d53793cba1989793d0a5606d5d23ee20d36457923d451b1b3530c9ec7072a487aa3e55bbd SHA512 7ab190d31890fc05b0b55d8e2c6527a505e06793d5496be0b3831e0513412f9ba97f8148f6f68ed0770fa9cd980a5092d885e058becf1d5506b7c74b82674aa1
+DIST ahash-0.8.3.crate 42416 BLAKE2B 84836a4e33451012ff32c1a1a90500d87eb7ce649b60dff4eecfb0d25b9782a186376c154673c3121b154ff4616016d1718dfd687b88f4772c2c89eeb2f119b6 SHA512 cf2d2f1201ac0969cf4e2a0c47090bee971b2287ac44b5e091c90a9eced03cf6ff56d7900cc0f529d4acedc30bd400261c15e50efabdd1731f79951b449af53e
+DIST aho-corasick-0.7.18.crate 112923 BLAKE2B 4f6947d1aacf89ccfab0592cdc55fa61ef09cea38231d3f758765dbce328a810c0b588be4ba96e81d64955379ee005722d22a7aec39caea6e72342245d7ca34f SHA512 7a23b16231a90d23ee60ad4c81bc225410599a4560d33d3a203138fc540c39cf1000100fed3aed40dcc371c3635656a3792545dca5dd1aefbde00d8774eebd00
+DIST aho-corasick-0.7.19.crate 113070 BLAKE2B 5ddaa0d415d19cf9922b5723bf3480750634ea68cb66fd05bfa2bf57607eb6383ba86d8c55f70adb87b71b98caa73d8f6ebd075c006493530c81979032899b60 SHA512 0d63d29079650bde4e8a9f8529716b9d8c42db076a1d74715116240c2628173f1e86fb29c08a25ad07a0148e48789ab20de0c186a8b3dfb193cbfeb0d76ae78c
+DIST anstream-0.3.2.crate 19504 BLAKE2B 617b846c244ea4ccd6c7835a382afe85e14c245ea56b678f57ee12e9c7bcc1c0c3db9620eb4d16bf35e17eca38968bf04420b758f482ac5594670e6292c1fbb9 SHA512 b896e5208a2ee6a3c98bf3bb9ac1c52792de114dfa5709dadcac6183ea19ea63230dffd3217e571354a71d69b8eafbb0189e05f8f77f50922020de54e3aeecc8
+DIST anstyle-1.0.0.crate 13972 BLAKE2B 741704b6e338834696bc816d8a65ff933f9bff48e71d25269f04c4a24c3dbb06826d2f84f73a1dceeda99cfc5c8e3d59b3d07dbb404cc3471b86cf118d074e80 SHA512 5a0159b9f8a80afadff04ecbec3c1769cef712c77de8062b31323298dab9507f4a87b7c777e6335d310ec464b0982d097b5888b4b351c389b5f4419c2c87be7b
+DIST anstyle-parse-0.2.0.crate 24361 BLAKE2B f796ddf1af04c93d7ee2721731e5cd22bb941919940a9edf6b2a658a8c39e87bd801bfd989631d64e9061067f7349796c56009ec61c02d754748181cc4d91a62 SHA512 fbac25189a0f4c0ddf2733c8ff74bdc2dc1a35e522d0201fa48f0f45e1d5d0a42e4806178507d0bc6a2ac22978b813eae5d57f09dddc80582de524690d87147f
+DIST anstyle-query-1.0.0.crate 8620 BLAKE2B 2d296b5066fd6284a2410923215571e6df650c5ef892d6de7a7088a0996ca30608797feabc84f3c325ff4d07001dac80ac5067d2a9c9d15d9ba59a276b399f53 SHA512 2781be5c82293b7ae338ec5046fbeb130de9eb2dbf2e4dfaa73ca5233032e1e52c133e141b02f33d4bc36d996a0a3f680ac82d42d614a5305005f60547133c7a
+DIST anstyle-wincon-1.0.1.crate 11718 BLAKE2B 2500845a23edfb47ecd156424a89789c713a7c367c3fef98d26e4e7b2acb3c6433d39a1c2a59813a98266b0993d4b750e9b6b68b7ced7ec5a04a8b13bad174e7 SHA512 00c380fc0198c49776c40aeef419be2fd2d6809bd2e5d86457f1658c6f4b2e83ebe8feee95855c3bbedd4200a917f582bd41b0ee0cf5d7d1d5017228885a58e6
+DIST anyhow-1.0.58.crate 43137 BLAKE2B 8e797dfab555d7076128851203ec1c6cb3c448bad52fe28c82b10518549971e6daaaca52d4a0dbb126549fd819706d6788e5322c6433ed71836c7f6051230b7a SHA512 78b21c51efd37e2be8f5672dc57f23ecd222d910604276da094754e06b86eb5a899d7ca7fb9f92566a13f70c116b05fed93d68a06320894d76a14a31e6c557b7
+DIST anyhow-1.0.66.crate 43770 BLAKE2B 8d74397c47bd64c00f015cf7ee279fa020ea39191440208d77e4a5fdb35fca531e8bb9b765be223b24050d0fd1db76fa5b516146f450937f84a5c113c9eca997 SHA512 7b4078906df2805d491dc2f29c4eec85a9f43078c0dcd9c05261c2706ed655953b693c4f59fda62547681b29cda9ac7a0789f1359bb18110403cfe34e9fb0dc3
+DIST arc-swap-1.6.0.crate 67342 BLAKE2B 6afd6570c3cef4ae722d4168c3320be1343c4f6043892e5e5b52879b8210a896e083d720797b41a41db04a08eefdcfbacbfdee1a7f2180e9755c868d6fded872 SHA512 5e09cef9fa12d1204db24f3397158a3f45d12dd0fa61eadd691bba120a43fdaa916ab09997e7a63d61a3fb7dada4e3266181f4ef413850c4bc5e59d2c6c5b9df
+DIST arrayvec-0.5.2.crate 27838 BLAKE2B 51e2eacae0ef148f3f52d21ae00794e540e7ce4c013fb496dd1347ad91ffbbca199381fffbb064225f829216f6c5e915edfa64833f91fabdd13c3f011d86491f SHA512 1896b5f64b4dbdcff8ad234bda4ea8129bcacf87839347304717e94ee9f369cf5f4371755e453ff7d72817edb8f7fdbc726d77cc4f28ed05148dc89c7714b004
+DIST atty-0.2.14.crate 5470 BLAKE2B 2db856a9e898a430258f059aeaf7c844a153293e8856d90ac81f7d91a888c89198768ad5cb09303c23241fe85c560a55148fa56a303651a82b0edb895616bfab SHA512 d7b6c4b9a0f898d91ddbc41a5ee45bbf45d1d269508c8cc87ee3e3990500e41e0ec387afb1f3bc7db55bedac396dd86c6509f4bf9e5148d809c3802edcc5e1d9
+DIST autocfg-1.1.0.crate 13272 BLAKE2B 7724055c337d562103f191f4e36cab469e578f0c51cc24d33624dea155d108a07578703766341fd6a4cc1ef52acda406e7dba1650d59115f18261281e5b40203 SHA512 df972c09abbdc0b6cb6bb55b1e29c7fed706ece38a62613d9e275bac46a19574a7f96f0152cccb0239efea04ee90083a146b58b15307696c4c81878cd12de28f
+DIST base16ct-0.2.0.crate 10240 BLAKE2B a8097674e84bb85fa72ea752d71446fc39e695fea9acc0f98178bb4e6569180f9acb4c7a9820708359d1c4733b57af6448015cce83f8c610985e6d2f7858fc33 SHA512 efe7c810102646733cb24c5cab62bd58d797e77b117d0fa5d651c34630f77de4d768fb99c981af5968393734bc32a2c1944a719f9f1a192b5062c0af8bb3413a
+DIST base64-0.21.2.crate 76389 BLAKE2B 6da080dfc31c5b2ebdbfd336be6e71373918f9388c85649133363a60ee1647b6ad67c7dfd461b6ee842c3633e40593b6ac2f313585b3e8e07dbd690739f433f9 SHA512 3f85bdf846e2f8a2e0f2335749bab58c904479a29311143580f1de42455799d04606dedbf64d355af580d77867d7b895e1078463c7cc5a5fbd9ded9d7cbf3559
+DIST base64ct-1.6.0.crate 28870 BLAKE2B 60fbd9958f2519f293db2cd86add5160b51ff4f98718591b3e65d866e8bb176670ceecd5f6e365ff3ff488bf813860bf65d375a2159dd28b25e276e027303c4a SHA512 e3a267dce49257b6990d8d0842299d75b49a9af635082dfee25e314f5ab9067b339c877a4c7b012a1eaf9a84a7f8ddf0173c6f9d8695be81b8b4db03df66c92c
+DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
+DIST bitmaps-2.1.0.crate 16717 BLAKE2B 817045077c198a84d114f68474b14515309bf56abde29398fcb47d7593d41c3fac069825d8a2aa1a598dea5b4865b94a21e83d03dc8d069672e1b835bc1ad551 SHA512 a423ea009bf61629e6dd7cb954f2781dd3c578d2216cd843957e0db05abc8f8c5971d2cca1915929b2b3c7b712450c817bb1de8d08715a1ca2641ace015a1dc7
+DIST block-buffer-0.10.4.crate 10538 BLAKE2B d819c4f9c4be85868e8b105fb7e479d2e58d3ed85c3339bd677a3e111f85cb1ff624a54d7802ab79a6e1d9221115f66388568340480fe83eae1cb448f19f5b11 SHA512 b7d436d8e627e16e6ddc300ee8f706a6cef28ff6f09eff848eedee46f84bdcd03601303c92ab8996042e55922866a59259948177c0a4496eed723523e77f6fdb
+DIST bstr-0.2.17.crate 330350 BLAKE2B 90c3a48d78b73d7e36a3da9fda0beae6e91ce534d17198ea8ceee0b613d03297f9dd8bca30e1ec5da01d1da359a1da72b2c2771b77c82bebab5006cafd665192 SHA512 883eac8210d14f89517b4dd5e25d02c97cf31602ec74498b5e186112ba0f154d47de8d1c41a8f4e5503f3b53c064e2c976b60bbfd63fc28b186bc006e00f20c2
+DIST bstr-1.5.0.crate 346060 BLAKE2B 55f8b92b16947a02834a56d463d2f24f6857b9bfb590bcd250bcba4f0cbb06fd50793d6767e90d95bf48dd50b3e6f447096f8afd70890d54b27fdd6ccf1d99cd SHA512 6bd1be4fd785f7e576b4ae4a7203b1c1ff698d01f56b1f09b40dc1629f0ba7c958bfa9f6ca3cceef4fb51120707ae0fac9622126e1cdc477ee0802a57b34cd13
+DIST btoi-0.4.3.crate 10007 BLAKE2B 60a4c0511afc23ec3bdd07a905e82b501f1000081e6dbfca9ee6a0d6aad40ade84ab09d740fbc8e9656653a7f5a9a12a68ffa732618e8dc87f9cf00a90b6d3cd SHA512 35d54183a37c8adb11838724a061b38d286a92603a557ee8b4b80dd230649a0ceb165fcab4b6e41402284f2153e18fad5c246f83d99accb2fdaa8f32f854bd22
+DIST bumpalo-3.13.0.crate 82114 BLAKE2B 62a930b165e853aeeb40558079f570c75ed13ff5e8436d99309dc6252aa28ae69d327c4b438913d6c7543bc156f2714f0c1e80d759ea0d44babe24ef0f268ac0 SHA512 419368d6ca37474c2867751fe5706d0c747326bebce323d571cfc07ee0f022d8e8a7ef5692091b0fa804995b081998dafc55da19a53e51135a767bc0afdb9605
+DIST bytes-1.1.0.crate 49640 BLAKE2B b3140dd49dc222cd0405e405da9629038eb7d71dd4c22c8d6419ade041dc1118aa46df38f3426a36a44d8e5591c368ae32a89e71850dca7e810bbfff4441c37d SHA512 d34441ea146ccaf55da4d5c645f8ffbd008eeb3204dafd5961771abc85df52751dfd1af3975fb5c91eb83d9a43da4f3589bc3aa07c8d715906d8158f3092af2d
+DIST bytes-1.2.1.crate 54857 BLAKE2B fae7e7b0e8023e4b5a9b7d5a390035dc5ee2b19f1fca03d885ad27611d45bd276c837bb63e9498e3f6d2f00d5573fd01f20115da21ccdf8606ce8d8bf5bd1b7f SHA512 39c19594f52af24b04eab319ab329e8ecb5732e4531184eb376677f57c8a6402c15bd171282498e69a4a472d82e308d0dc8140df0b7d923dca588aec90c4fd31
+DIST bytesize-1.1.0.crate 9370 BLAKE2B 38fcddbdb862e82a076b7ae1339b48c776f704d25be78935d08637351ade725e86e00e07e62868e76a1a2db894f223e1f8309f8b362a46405ec6c06f6e421a96 SHA512 36f35cf53c468cf011b231d3fc5d00c5224fa3d917854e347daeaaae53ae7ee36c4d8ba26788460d56c922c9ffb0eeebc60655fef7366ae42e221950d03f6715
+DIST cargo-0.66.0.crate 2038772 BLAKE2B 22fe5997b350c1de8db83b739b16fd38f6a8d29ea7c78bc1c84a1f6685fcbbdd2778ad7f662fa63f865dd829ea479e9d7655e5378a0e9ff9b27eb1156168f197 SHA512 e6f56db8f859663cae79850afac4cd569964e732e9ab4a4f9a92aef60950305740cf16eb16f76f1c658cb8896ba22e36b7dc574351afd749ffd7e8acc2723dc7
+DIST cargo-0.71.0.crate 2286974 BLAKE2B b58fda44939825c4a4b71f96c10bb18a666ad1f3712fba3dc937a5539f2f39ea85fe19e6c86890b9a6238dfa26837036f4113f57d988d69c2ebf874db291ddd4 SHA512 2eaacd6b88078d9c20eddf931b4ed1b51678f4e5ac163534bcfdd6cf3b3db379693b7190062a40480bec39e859c712d9b5ad713731236ffa278e3b6286789120
+DIST cargo-c-0.9.14.tar.gz 28957 BLAKE2B 33cdf9de62119750f2a8a26d5d22c882b130b86c349e5b1eda9b5b4674c86f37362211dcfd33f5dcbaeadf52b8eeba404274f3eec99b51b45c5afd21e2754a4a SHA512 ed2aa5d455e2db23f797cc45fad15273b6cd931ad3a566617aa93fcd39e54f4694be7cd450f86fc2f81764af6ecc733208d44bd045ad3afddf87c29b60687bc8
+DIST cargo-c-0.9.20.tar.gz 29135 BLAKE2B ddbb6ce7ff7f1ce47302a8df9b7e4bf26104a3daea53b181579ab4bae84e1d67fca9b4dec9e4d84ef487e18b2e11def7f0860f125b40b401825597f2788eb752 SHA512 78eca6ddec1ad7a34e8399009380680dd00562923747fc7e2d14bd25e88c20872550071015e51e7146f96f01c1662deca121d162b6c61f50e5be5e5308b74685
+DIST cargo-platform-0.1.2.crate 11645 BLAKE2B 7770acb90e299f71c60bbadceaf894a3100916b7f7458f9c949b683b39157d3e1ec17d850f16dfb04017b01d7734d41872d48cf9f4e1ea7414439cd7031c2330 SHA512 c716bf3a4e0942160dbf7be114d1621e1fccc23511e7b0a2b99852b99a851910bfcf8640c2d0d0a03d5a324e1a59fb5d4264ca81bca24e3f1a1ca653bdf2956f
+DIST cargo-util-0.2.2.crate 23867 BLAKE2B b001d08fc9a5bf9b7a4a88dab99cce360e0bae445c2e416933d90fd01fb5054244e159f087a9a634226840878e26173e25b33be09116a54c0bdcf490e554b492 SHA512 f8fb4b3e0a9000e0b3056afc73e2d094af0486af9f0aae7d51dad143a19a11eb19594134e68fe0c176eb20626ca7ceafb14a71d9277dc70636eaa87f2ec3249f
+DIST cargo-util-0.2.4.crate 24160 BLAKE2B b8ff67313d89a1556ad601b99cdbcc96991e8c1c8e9d2ae0a7afb253304a2e3d8929709d8b21aaebdae6112f8f8a888be7d1b3118dc6a00ae6568163d5ae701e SHA512 1c44beddd20280b7563e42295f0374906b74a3ad959d5e142406ee27852601ef525ab579d73bd29e94ce6990db484c633ea38acafbcf81a9ab664cb3ed7ce74f
+DIST cbindgen-0.24.3.crate 195698 BLAKE2B f5c65e9c77a7c2f98a44382a6e4b852071b70bd832a3da3220bb8a7c4729a44b5964e651cd63577f555c5bf4e6594b1148a5afd96dc1d3f599b2fd1d523b54d4 SHA512 3a39be67a87aa7a4dd9baaf6b803215f4587bd7925c4315c5ec93954e021471919fa977ad2084f099c606daa392350de3557bba56cef77806def99c40318ef05
+DIST cc-1.0.73.crate 57880 BLAKE2B be8d7a25a54afdd759844e76aec61526fc2bd5ca09480e6cdd3bdcf27e5f9d3a88dc16cbcbf54cd021470a7cc521e1ad468116c112bbd30752bac0d5486939ac SHA512 980f012b90c6410144f6de4995048337e09214f19603076db6d4edb88e9ef9ac9e8c6e25569f66c2be3a47e99298f5886dafc102e1a9122316179aa26bc1c985
+DIST cc-1.0.76.crate 60132 BLAKE2B 9e8dabe8cb64a8ef7bb4a91d4e601a9175712da00644125e0e625b0a10a4815ed1a3c93f32eb773d0c2215c74b8f0d73a35831291195dff65d1ae79b8e423d8a SHA512 9a31f5a78859f7272cba9289d0c1b7fe01cbbe5ccd20a729141a751df7f5a576726e2b7e038cb7142e63c59a5ce7cdb83b93c32d5b5f3f45bb297ecdc1b9e983
+DIST cfg-if-1.0.0.crate 7934 BLAKE2B e99a5589c11d79d77a4537b34ce0a45d37b981c123b79b807cea836c89fc3926d693458893baca2882448d3d44e3f64e06141f6d916b748daa10b8cc1ae16d1b SHA512 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
+DIST clap-3.2.23.crate 219435 BLAKE2B e99a928ef61a7f9f6d7df2c38acd480fc86bfa3885d8b875007aa5bc855396641ca6772387de2eadc1d545dd201434037ea9e7fd138395831e4755ae5a917a7d SHA512 1f1f2ad07a0f8fbe8672f4252edf260ffb5e024a20d6673fb846d59e245a226a43675539ccd3cb252571766b1f6511c68c5cb0f2351c8086955d49c37f87338a
+DIST clap-4.3.1.crate 54225 BLAKE2B 53dafb5615c268b191e4c800516808136ac0e4a488a6ba67b55e02303b0412deeca321509f7ad094643f52a0dff758d420537b20a2f706001a8351017dfdf954 SHA512 77de41e119c0bcf6cd6747384c7da2bf81c0b98093c06c6e2a93876188c3f6dbfe8603ae7b7ad7437b05dae833273861c638823501da7a18fb30f74331c5c805
+DIST clap_builder-4.3.1.crate 162237 BLAKE2B 8c42a025d7939b08e13d088aa5894892c5910b035341bc81afc132bd03e49422d100bae363db4b1bbef1b47944b74494d8ba49e64efa58365e50c34995611908 SHA512 a5e064b66732108247a8c7617ac136eb1218d20922d434b2266f89d2e74e33ee31342879d462b85155d5213d5fefbb3fcd0e9b6bd232f75188fbbc7cea2e8761
+DIST clap_derive-3.2.18.crate 28208 BLAKE2B 05a23083a8e792858819d7eebf057257b1d49b0e8246d3f24c6f812456cbabfc75d9271c295a0d44539bd531ea6808ca7490e787c1fcae63bce045422d33d280 SHA512 d5349b3d5711bd4900173aa5210d7c4aebb0bf70128e11f26b362f5acb43687f6ce5ef73e4d614ce9c1d649d34b68ff15ab8b65fdf1898fd295ee4b4a7523497
+DIST clap_derive-4.3.1.crate 28956 BLAKE2B 83b82ae7e9a2ee7865183e9f00a204839477e8e909b9ad22f72f38d808bb8e21cbdc6e55f83b248d4949d6a81c5405755e20707d28c38b6cf181f94627b1fe12 SHA512 6424d952d99997f08347e46c1a65a77643be9fc708a2d95cad94c20e48c60af0ab46306e63d49e3dc4d153a21a7be2264ff3f0c6ae876c4fa1aad96c20132c07
+DIST clap_lex-0.2.4.crate 9652 BLAKE2B 5120b508dedf52507068c0c369a45ddfbe0369e5c05b65bc5a78c422b2a4bf488f9ef1e0bed4e335450f2c08b80148eb5f7efed678039b5a94b5bd666385939f SHA512 6c05e5fd850befd45be9005af7252385f2304aa28a107413bbe329d97aea835f7acfd0bd169c99f69f466ab93d6e1c35d73a4e48343457a06fe2d6be5bedde0f
+DIST clap_lex-0.5.0.crate 11792 BLAKE2B 0409c9d957ea6a566eb8b50f4212702df038d04c4c38f7440d91cb4c58ec887940f0cf500c4c3949c2191399aac3f5cb1ce44868eac587cde90211d3e467b9a2 SHA512 0149ed7c2438a19b4857f895767550d783711078f07bfa9ac8ca531e06f51c7388110f4d558e30bf503536367cc370cb581e8deb6fe51f9b5460a334963daacd
+DIST clru-0.6.1.crate 16507 BLAKE2B 6379e70a2d75530bde76e82c370c4481ce84d8196a395e94b30dddc1126529774e7ac662da2611e4da10cad6dd54fbe55e1bca4d554369ec5f4798bab59a9d53 SHA512 bb9303ea245e3df6321bbf3c4cf9f899648067f8d3950638387badc79ab37e7570ee73c90af96dfe4eefc004d116c5fc77cc8d89a2809defa2107cde530cd192
+DIST colorchoice-1.0.0.crate 6857 BLAKE2B a0818be1299717461ffc1bcfb6fc53a0b3b645aa8c45fb72e045cf2d876fa207948610e58d6a837aad24838ea9616e80b0558ca3eae03fdf9bc4c03a8e5ba52f SHA512 53363f2889cd8e8a3b3ed10c48356896c0daa72f3c12c9c7804707ab0dbc07c0e34ef52fa4f0fb1647311ce5913168c1bf62c2407ff86a33f765a9e6fccad551
+DIST combine-4.6.6.crate 132428 BLAKE2B fb52e724a52f1a551255591fedc134178080ea5efc0c488efbc369e6272f7f2b87dd7d0ce63361754d8ff0cf1b0a59bbc7b0396c50c53210f3e2c28ac965e0e6 SHA512 ff9ef9329de2cfc103271a25ad1fcb7e478f3328843bd8a65653e80b74112728ad4a33326a58ed7ef8cf39eec7c3b797fc287295ba149ee0dccb1de9721b5819
+DIST commoncrypto-0.2.0.crate 3009 BLAKE2B 174f3099955d595040005ef201361bacc3084f5218efb0f20df8082b9bb683909a10ade64af7062edfafadb9674b27a06836f2333fdaa7d2926b207355f7a40c SHA512 61f567468221cc46b30b31ce96dba26e3dd3a9245a8d37f9f8a615b346d992c261db059bdc678882415c608a806bd45c7b38a5bfb562ad96a111cee8e1082e85
+DIST commoncrypto-sys-0.2.0.crate 4338 BLAKE2B 992a06d56adc97a9d02c547766c2be2f1973507fc0083e50c623dc4ac554681b802f3fb5ef61ef430e4a58bda000170636cf6e38430550e0c0506438901fae20 SHA512 06851fbe0b87224f6c8333964237badf57f32256acb7e647ac2da16561701b7572c12509e042d0d1032a54c94c1663bc2ff19ef5ba3a7daf84276f2544bfba8e
+DIST const-oid-0.9.2.crate 44606 BLAKE2B d254b1d50d3d72a842e247fcf6cd0bd4ebb036db2a1580b2737ad9f0134288997ebc5f17b7b9f3c5bc532f8fedbb9aed0ae2a6a672dc23e66ed3902fd3c96f74 SHA512 ad75da209947af32b4020ef73a04c7ecc74600fe7ea70f33d1486f4346e7a3fb1d5e3a586b373f49b8b494215dfaff251b8d40181bd95e43373e8bd887fb6708
+DIST core-foundation-0.9.3.crate 27059 BLAKE2B d94fec51b1b1055c285609f4bba45c5169a8cc775e251eac7fbf0da7ef894e1be9ca9f4236b82b67be0610bdf811366e0c6fd3cdb671a1e83c49717e2c5b2d03 SHA512 de07967c4f5e2d2e730b6f21984c228dad2cb2f55187f13074a2200f4ce9f906763ee818267a9c67ea560229db7363473b230670a6dbd224fc335f32ba03d072
+DIST core-foundation-sys-0.8.3.crate 17519 BLAKE2B 4ac3d9ab16753dd995abe82f158d460d0d22184ab55d260e73b20305cffe4e03427dabfe0c8be968b6c3ecd348be2e17154ded7c9bbd5a95334ff266fe83bbf7 SHA512 a3ba3184cef65dafe8318c4db7e59eb2749dcde7b2370ad20272b0735ded0032daf2de3fd0cf55eb48448a335f5b81e8e745f2a647f9a43bb85946ce714bfd82
+DIST cpufeatures-0.2.7.crate 11563 BLAKE2B 917f8ce2675519b4d5d89fe09b02e147f00a915d195158a690b292376bcc2937dee8f76778506556ecde0187c74ca8c046973f44e1f34e4c8bb6809d2d4347b7 SHA512 46988efd895b88751200dd9693a1040f698c8b2ecd5d3d4ae1d8055e719aff262afea764083dabf1d8202a51e7e16b4f51adcffc8a2424c841b58840b6669490
+DIST crates-io-0.34.0.crate 9543 BLAKE2B 30ef8eacfd84cbb5f4b9aec4fc79d086a281f3fbfccc46b8e8573e74208a1f34d496c0ab00dd9135bd441e85c4e9dc9f07de55b0bd36fffb3a3849bd01174a69 SHA512 14cd86c9b065ae0a76c33e9b9843979a5058a8fbbb91a1c92ae989df3e0e2f5f598d583a1215f005eb0301fccbe2826acfac7aebb91ae90d9484fdf5e3323de0
+DIST crates-io-0.36.0.crate 10059 BLAKE2B e691bcceaeaf905c2035e21e35504e1bf9a6dbd6ebf1c617d6b13c01daebdf4d276e85c338822bee37834052c4252ea104abd2c39ac4646ea63ba9928ef7ffbd SHA512 068a984f0f421aa55326f368ed55003cabe5668ae5a1f741f7ac8bf8edd1d3c1fa4b36453b3095a78bc1552c5ea2c1991b0aef94fb6fdaafd85832e9a6bc7a9b
+DIST crc32fast-1.3.2.crate 38661 BLAKE2B ce3762b03d24d5367d89738991c060f4b3af7840e0a7ac7fc17d01ed438caf964bbaefad0fc4d0c438dafa5a578429ddd353c71197f8b54b1ec441395f2f7ee0 SHA512 a683943e252afdb1b9d626a07533ed11cf7a63af603c19640056c5d2b9c884ad9aff33ac54c0853ffca2f6cf94b0730eae6c05abf3e53e55e709d180c8152357
+DIST crossbeam-channel-0.5.8.crate 90455 BLAKE2B 017132056f1b40e55fbc7a09b75509d72b0a6123a0e5ea5d6104fe822f73b3ccce670d711d3b84b5ce743dcab5f10445297a6701b71213b77c0d56e2c3fd7160 SHA512 47677d6fe63050c51393e4a0537a3c65d7055c9eae118ebe60c5d716b4f47f23c2b1947b1e1b66bfb34a57c4db3a44631d323e996dd545565fe4f58c25863ff4
+DIST crossbeam-utils-0.8.10.crate 40672 BLAKE2B fbc65ab8a68d66f27cfc8495652ec5ff31a3b8c4de41464bf3a9f673249c2fd5ba4bff7ec8c7b838d5903328346214f91fe075bbe7a05a9b11055b7b17376ac6 SHA512 e0ac772262677e7228e4f2e06099ca788f4906f40fe5dbfb0891431c993c7e4d755d3ad93f55570ae06c1f06df14801edb3ba4f28271c4e83c80dbba2fffe24c
+DIST crossbeam-utils-0.8.12.crate 41785 BLAKE2B 486aaa80eb0fff5740690d8a63c7b41dd06c19cd141f4e12c8f133f5ffa93a121d4e24e19390851051ef07ba63480d9ce3bf751621ada3a420ab6982a0445e28 SHA512 0e1f17887615b1883c3a0c4f0fb908999d550bd0041e8333eebbe43a964838d948fc1e5892e4ebd31e59ad53e5fbb5ebf6741dc1dd8b61907429f691c84de2d2
+DIST crypto-bigint-0.5.2.crate 69069 BLAKE2B 0b946127d82a3474379a9eb75d41c860fdc972ddd5781cdce0e564a417da710d8fa6b3c1eef3a23c3e930e41e151a3cf4728b93b97657e30337ff03999427173 SHA512 8f36c974789faea7e8e0ee45978cd59d8fea85394948499ba9431f2f8c75a503e327ea7e0a123c810863ae454ba62944fe1a4a4575908e4958fa071337999205
+DIST crypto-common-0.1.6.crate 8760 BLAKE2B f2422bfb89c15d47a8f91c8f6695e05eb56990a922e3cdf3d426044736f9932324c0d899a151a6df4d6683e6a6b21659c657d3988734014c02cd854bb4b924e7 SHA512 471dbc43f517089d2cfe0868e29510c6ca579875b3bb5d013c70796db969b609b6c4bb35c9a07b9a2917012dc5708b717d48e317a20038adbe7e7039bf3ada6f
+DIST crypto-hash-0.3.4.crate 8102 BLAKE2B 8bcf39d195d40a2e6d899fa254c9f64e982d742fb304f4b271b75db305d5afa8ea5361c0b6adb23c0fbfd212f3c4601bc7476b4874eaac00a26c8a65b711b0ae SHA512 57d020650689c988859f51ec9252702a7e8510526364b00058b263f4decb249d7296811adf3b8c5e76f8aa744cd5e444aa198f3dfe134c98257b99cdeb824537
+DIST ct-codecs-1.1.1.crate 5388 BLAKE2B 2c5c8d3264428df7b6576f7c624468584e2aeefab2f35b024d2368f3fc2c77d8d1fc634a9ad5480dd5435d4d7f608434009eed262510608d74d264369e37ad0f SHA512 12538da7e45b46ae52fd5bdffe5608d64141bff9190750f9fd8bf3c0c73889c3477a0c988c37965ab2f9d773df596b5d01d15976268cf9852d0324a9660e2137
+DIST curl-0.4.44.crate 91415 BLAKE2B 0193d51d0ebca5a9ac87a3a2537d573a15d8f0c47e0dba5ad3c0401dfe4a96e63c43a1be054433eb782f90ec61dbc60a12ba035e4fdb033eefe53860d41c3494 SHA512 499c3496cb019856773da10c5dcdf539c3fb7542a5e5dde4923d36e0f9274515b43a68bd31fc18a9adbfa9061d752fa698dfc2fbb6a6b1c1347001b3d112b3e5
+DIST curl-sys-0.4.59+curl-7.86.0.crate 2996584 BLAKE2B dd06c7cdf7740049558b8296d16e2485ee1b83692a94bdd2a037ecd45c0ec88c32bf48a26ea985c8de2de84296edf3f52092bfd3ab8338e10066e0a8defdc33d SHA512 048c5dbc3e1870c9b205c107e006c7112d01f4f7f03eb301ad9ca06ef29d03b08a840717ccc45883f19f1f6734958301375365653ccc6e45ff99151bd5e03b3f
+DIST curl-sys-0.4.63+curl-8.1.2.crate 3175347 BLAKE2B c73a265f95920c10db0c4e9779d11bce1e70f4d817bffef4fcaf606a8a992466b52947869c3536386e83069aa3235440c207dde34eb90dda16f06b62eb3a8925 SHA512 50d2cacce02135dc316389eb2c486226f54c930bab26ca732d88b99970112a5528ec0bdd0e98bb82b17a8ed4db56ac82385bb36dbf5049aad376f930a5bfaaf5
+DIST der-0.7.6.crate 83585 BLAKE2B 7890b0ce9f0016e3a03146665c0a697cf63156e6abca373f04cf571191d4923d36b223b9cbca0ea24b32edb52d567b2d1f5c85e7114c1193e56d8e3888a16f44 SHA512 54a43a626a6f3371e15a3fe3e315444887c7e1182cc035702661f1ffd1984fd3e4c0b7758b955fdbf0e4d5146a3439a3570568dc50eef889b3485b409d5cc5a1
+DIST digest-0.10.7.crate 19557 BLAKE2B 61e69d78cb8d6850ae26ad7ff2d52dd6dce820d8c621230def11cc0e8aa6d883a6e1b25340fb45748db52a8ccf3c8d36a8aa0c8cdf4d4eeb4e3f870d86abe09a SHA512 0dd8c012468ab9011b89413ea4d3647d95b1f683b020a0e6274c95ed5148638b56fef19cd9044c837ad53715b582b88eed277fe96e917c27c5d7abdbf7c3794c
+DIST dirs-4.0.0.crate 12503 BLAKE2B 02c0b9b68d09ca713e365410c72d761de5adb87a0fc5176c4f980050198cc05078fa67b43a8af1b16e80e7edf41a428dbe55807463bab59f3fade09b53d7399e SHA512 be582e5045f1916fb6b918c8e8c5907b4b663534025e4227ea4828e2aa9fe7fbcb3c48f1f0d08d163ba684aa4404076ac210e7f14766a09b9ed89a2825121b3b
+DIST dirs-sys-0.3.7.crate 10597 BLAKE2B bbeadbfe15d9b92e4057cb600f1957e066e295e0208e1645ee49fa76c55c45e273ae5b87337eeb398dd3ef3adf0a5584087b8fc0fb780aa23c6d9392029d6581 SHA512 e630964e4c452950a475c10a490b49b2979dd7dfda48172b905cc789153ae4a0ba2d7d91f690705cbfff23737c4b4a339eb0c49e922efd7d68a92fe6368a929f
+DIST dunce-1.0.4.crate 8034 BLAKE2B e1e7ffbcf1e3632036c03303ab46fc37b2b0a991598790b2dc65d7a61341a78bf555230ccded8fbb87d6288282af3ed2a8641212a0f1fab929bf99298e878b6b SHA512 f57d9c53c177bac8e10a4b56ae421c604085aef0f264b8d6871abb7e1ff713b55f396c5c5f24422763319c504c6ea6a774416af1c2ba23ba7b67b2282f6731f8
+DIST ecdsa-0.16.7.crate 30682 BLAKE2B f72a2ecd548fac9ef25db77fd56584c6ae33052501c6d2cf0373dfaf343290724eba0ed35b97decb7a42cfefa1ce1c8c6f00741ad2f22a6f783031be2580b32b SHA512 93d7c274cae3c36a563deb2ea0ab97fb58bccd135b7bafc309bf1c2c8c4f6acd4f223e0ce22f5a227851debdea0ed3b5f88901578e7dd49d4af206ebe2aa0056
+DIST ed25519-compact-2.0.4.crate 29897 BLAKE2B 462d34e30670472a7b98e26b9e381f32f4f4ef9f9243cd2608e85d1000c4b944f5513ba50521cb5af09f4f50b5f49e21a89380f0797723d393007b62d87662fb SHA512 745c03c94eba7135693d259c7382589255e2204df4b890e9b1e44b9150f54579b71df6911cbe19e47a4418c154358bd9eabd73308383884ca071fc5871a0fb4b
+DIST either-1.7.0.crate 15492 BLAKE2B 3ed1c5c27e7bd9453f83b82d3f57a4a73f965b1943a7a17d3de45ee35f62db53976ba9f2055ba28c555500cda528ff3a2d7ad6cd957540c91f512bd3adf9c5e6 SHA512 894bf3980def07848a2911734c02eb0c5c5d2ff3ab7656413d2acfd164d120a7c075e0a5f3fb95243b8bda0257a5f457117d5c6eafc146f3f6aaf6c6fbc4cf33
+DIST either-1.8.0.crate 15992 BLAKE2B 5b9254d54ced1f23447cc78fca74f12085c37e3c2da441b30521819025ebb808e8cbd9cbcec811f8b3951030914c1736b8bda61744d1323af8c5b8b0a3ef3ee9 SHA512 5089b218af067b51ee39c085568a1a6f542e8f68b362207bd7126cbcd2b76783cd21cc1517a1d088ce4dad1714be03a3660f50e9498a0bb43a8676cd7ec490d2
+DIST elliptic-curve-0.13.5.crate 61528 BLAKE2B ba2d779fca6686453ef066b6d3d8c0aa9f0cb14e9f237639378da536aee67b6eafd017162c656cfad8eafd2e1a2b1edd02bfcfea70afc5003cf06ca101dfa8a9 SHA512 7bd65972318e51401c700ba6007bb658b46faf9c983889dc43449cc3ae817f8bbe9f38a549b80d3a785bcd921361476ef44f0f4335612a426299c57effd9b4fa
+DIST env_logger-0.10.0.crate 36574 BLAKE2B d2f387682059fe9b4566ab995be449c58c57b8df5e5d8bd5ffd153aec1648721d8a9606d3f9aa034263651f5182043e08b6cc08d2d29d0a10f6cc61df9949a06 SHA512 4dd02f9d333a1f15657167ef4bd403eda5426cad17e0a4a43fa20cc65449345eb4d3fae2d6b10a3480016b9e23497fac13ed7e70b40c9450ef430be9f910d3e4
+DIST env_logger-0.9.3.crate 33291 BLAKE2B ab0f0f85771bbdc6c7709f7cd4c86d9eaf436b073ce614f9297f60e95b6c9e6141d8810d1dccc575893c796358ab65ba56a281630ab75350e8f421167e5d9c52 SHA512 a3ee86e77d980c2eefe4be32d75422aa0f9a60a43fd11bafaa3c9e556584cf65c36976a6aa650f87426edfd82de0cbb919e0906cdba6db8b486b4dd4b2583bbe
+DIST errno-0.3.1.crate 10348 BLAKE2B 72831d0b69f95884a69918249cc0e814eb5eade3205331bec6d2021f8b01a42c4c9b494f2717033d65a4c5230c8490b6ce250d349c1e8e177b20e7e84a860020 SHA512 00d64157d066f1e7601c522c0f4e777eb662ca5cce64682f616de0734857765c343396f7161ac2908c3db0c474995ae157bfe9d8a9880743724d9bd428dfdf54
+DIST errno-dragonfly-0.1.2.crate 1810 BLAKE2B 781fc26dce5c33d83b9a1fd9be2b2ce9ac2559aaa858957ba6777e143b1e44cdfee48e1b47e3c91a95075a51921d1a421d0b45eb3d8de827cf4dd0ad744a7d8c SHA512 f853f1e1b8dd0f359a8f9a0399b3384c1103cd090d96e2b2204f91a40d40a9eb99383d4aa6a11e5470c51557afacf452d4be2049600d4235d27f59870fa3b916
+DIST fastrand-1.7.0.crate 11265 BLAKE2B 318f6c903a0ad0d0eac39638aceb162739868efd61dc0b54f6aac4c96b7b1283c8d463b48b36f9ea1fee640a2081a0eda39238cd53cdcc24efc4d17b4a3a09d4 SHA512 6a1a8cd4f6f9bfff07a4ca18ef84839e4427ca9bf9b6733bb15b1b70cf2439820d6a770ae9f3e5e10166a6144449e37e6f3f6ed9acb761688207fd7c53d2c673
+DIST fastrand-1.8.0.crate 11369 BLAKE2B 93e911ffcec559e30b2fefa44c4d74d1ffa9b8ef1904ace608b8576210bcd41a2b4c7adffc00cd3bb40996110d07316cf8068f4754a879c6cb47e3d41304d406 SHA512 82cbc2b29b97fa3fa2c9372d3e8c390586a7b39f6c7d8c45f9b779bdfdaa2e8a3b44bc7bfcb3367c18120726facc753c9827cf63a8fb4ddc2667509b16333cb1
+DIST ff-0.13.0.crate 17688 BLAKE2B c32379ebfea6cadd162dc169e0b413577fd191620f4f2a1c7d18e50ddfbe561ca865bc3e0fee3be287f43f6c9f2982992cbc56629889689bcbbf652e512da80b SHA512 eab19938f5a2cddb0fcc78b0724efd788aab7f17f04c482e0d06acac4d1cef2bcbfc74d6e4b2d9f535f9c955bf39c2153e010bdd2fa72d6d637d44baf8bf5f63
+DIST fiat-crypto-0.1.20.crate 475267 BLAKE2B 554c0f2c3083c141325667c7331bf4bdb0127cb98f66fc1bd5c103af368657bcaa2e15cd4644cc6adef466fe5619199cfec126f847cab193d17fdbecc1c8fce6 SHA512 2d8df5af1a08a80901980ab5943f036a28e82a582be522a90fca47df94e677b516c3b7f663ad0fcff5a25e6d448917921542714e519f6740a6fd7ac8432b734e
+DIST filetime-0.2.17.crate 14484 BLAKE2B c181cf4c3ddc5831c006917e7432620a62a0ca7aa379ea7f1aab9b99a8cf725055e8510f7f63ae5add770dc8f91c824d3b4e9e86ec0f3e7faa4e9a647c431a8b SHA512 3f7cc4e64381f4076ae04bbc0adbe2ecb024719f1f2fcc2ef537b0285261e03b8af7655d2db72358185dcce109df060d4a4a4015b3168fae0f6a952878860087
+DIST filetime-0.2.18.crate 14622 BLAKE2B 736ffe3ebadd458eeb24f8c5970d1350bbe07b179e0ad4f0d5708197bc91378939791cd331326a2cde9e03a84daba5a48a7a4a1001030fec4bcbc8af3741cb31 SHA512 d1631a50d0f1d3f43e316c6348a3595ea4a7d1116e904ac2bf6586b76ea5aef98ba84ff6e6d0b2a08de2515b8ad40f52fb95d6ccfaf1f316cfd7c5f6f8332129
+DIST flate2-1.0.24.crate 70191 BLAKE2B f5ff04557dd0a57151b4c704cce60622157be4c847fb0a42eeb5a9d531ba28d34b41632bc1b34d2f935ab576f152479f72877dc4e6b296edf125becc6e6d52b2 SHA512 8faf97c28dcc4553f4880295677b1269b4acbc6518d006913d32d7e319990c6631e10f1baf7199b96e03f6de95b9e2de04502522bb1eb45bc301a0fbb0bfc0c5
+DIST fnv-1.0.7.crate 11266 BLAKE2B 81da85889c91b6567e0f555e37dd915f1bd919719d1ca10c31a6861d7aec29a49ae9c1e8bc500791bf9d6b8dbb318c096d04872c5872a4b1f7d45fbd8e12842d SHA512 2195a4b34a78e2dd9838caf0ee556bf87cbb4a8ef5505aac663b614eb59dcfc0c40f432463ede41ecca57bfe7711f72673d39a85fe03d426f1324097d5628334
+DIST foreign-types-0.3.2.crate 7504 BLAKE2B 520818b702d990d296ecd31a8646850202509ccfa18edd0e1b260289619a6c351e758f317ec0824bd76eccb209b6f087057c25f1bd01a47897715013dd834867 SHA512 bf27b8243ed482c202d120383374f19ff09422535e24b9c1aebccc66529bf300ca17b8bbc76d67f98ac092e614497afe3add9dc68aa69c93074df05762f91232
+DIST foreign-types-shared-0.1.1.crate 5672 BLAKE2B d2e42e04b6657e7a69fe0bd20c672176629c743e49a55fd007bb30e289710b70045d445ae9cae0eeaa747ee708c90e8abd9b5fc39bad8ec0666befe1b696d4f1 SHA512 bafdb2143e136fb0818e2ffd90b5c862b7181647d6568947d4e4531012bbf7a57b597221ec7056c1b562dfc0c3b5dead26d1a4111ebc15e7863737a873518a4a
+DIST form_urlencoded-1.0.1.crate 8773 BLAKE2B e2d2224dbd85d053343aea29ef1bd540fb8be12fd600289e9c048e3b74bfb009d0770f8296556309ef756086f22feec4713dfed1006e1101075c8897be5471cc SHA512 3ab371c223561a27ffbd35cf648ef4a9145d47bba9d71900a7c54cfc2f089175e9361f6352331a9a7fa018923b15e7a3553c8f9ff9fae80e1626e641a5faff68
+DIST form_urlencoded-1.1.0.crate 8734 BLAKE2B eaca73d73d16242f3fa3e38e23531c67c01404697bc7b7eb7c64fa04167dcb403a41818487fc46c5d9118842818472d549a2f5fcef5e4d962461e1c103d895d1 SHA512 9e245495dbf235b147e4216b313f2e6a96357d2782a66d71c08c2902c6a065701ca8ecdbb6b2035983a83c44cf36c921b5c71d63af0e02dd39bf5f8347117e11
+DIST fwdansi-1.1.0.crate 8280 BLAKE2B 5c46e66a7fe25e02aaf42668853a0eea8ab3bbf9d160702770d94f8e6c4b3efcac9f840387516d1d14cf34271981ba095e3e0f7a5eb009b9d5837f94f8fdee3b SHA512 5f91a6fbc40b00a06abb6686cdc0389a837fea6513a9b9bde7cc4ce5cdb19c180ab21ecb5927c41a52c56675991ee10d127335c1f6d8c52dc7e6b30b32411370
+DIST generic-array-0.14.7.crate 15950 BLAKE2B e74c785e3127095625951da192a018281ea9976aaeb11019f9088c3f27748c5fed1ef25d577150864486dc48b5138d6892e42f99979339f711a66fc70756c82b SHA512 363a7b04e4102f9ca63d429721c1ada6272be6bf0a2e97da681faf76381f73f0e3acb86623b9ce2dae441de9fda704088391779b9769ec02b3c8c9f9f35f897d
+DIST getrandom-0.2.9.crate 34457 BLAKE2B ccf7232ece1047000140ed6bb9a1afa784be87b5cf83e2f58dff77abcd79e34120b45336cb05e47fbfde36407957fe9da8b04971092ec05f67b321fde9142d29 SHA512 48e341125223945d1c02c4dfc54df303ae27d3ceca0d5a30b42065f5e40da600cb2010bb59e88af6b990d54b5eb4bf83ae5bbd27e13e56363f5f68be03ea9082
+DIST git2-0.15.0.crate 198983 BLAKE2B 0e340dedef36339cc6ce4cf9ac79014e7bcbdf9ebf688986d1836c3e2f480998a60a2722017381124682edc5dc511368497f03c9bd9a8c4d0e7690682789bf88 SHA512 8ea32850e592cb9bc8caa0d7a04042e284c11b9d46959807d8e6d496d93946342dc37fcdf1ed354010434798a404f415e8e980fee2ce4f5cb998e0f8736b5bc5
+DIST git2-0.17.2.crate 208040 BLAKE2B 7cadbf7317ca3bb944e68c278a7daba75e78c12b2881637013a4ebcdbe12cc13eac6382753daa05aba4b7a6fb37b5f297929a123bec020727a497414ad714503 SHA512 ca04bc97d0d6e862376ebe62fde456b03eb9f606b06c1703e1afa98791ae4e702694b7ec8cd06bd059500daca9acf216d9f3dd3c3638018d4cb9388b144265ab
+DIST git2-curl-0.16.0.crate 9289 BLAKE2B 6112a92ab483db1511bebc91ea601bfa0cebc689f7c0d3fedcbc2d4cc04d46ff0a40c6b90522ace541f90bd62febe9ebb1b7ec82a86d216e83eaf48dc1927499 SHA512 37dc34e7f38d44d07a90366624c0549eb172aa4f517893e489ab9a5dbb4aa36177d2b9dc361bde9b503d6d0885710f885667dfa0ba9ac2fd476de32018936aa1
+DIST git2-curl-0.18.0.crate 9515 BLAKE2B cacdb26915cb54c55edb8e22916b17e4b7edcd8726c64ccf75121869c2db56f6e4176411f1ecf314524dd99f2379d4fbd7ccf5752e1cba6e868f43137b59d51c SHA512 5ae0f79b6683f3f6cc136dbecb90c005ea332b74fc90f8384c2f057f886a2e61b76a724736d7da21cc527c3ce09b2c88e608f7c74e48341ccc2f2dc495d8aea5
+DIST gix-0.39.0.crate 221823 BLAKE2B a2ae8cda6dfd0cca543c81c7cbecc7df8524eaa70a7267f74e31c4e4e5fdc14870905a6d8bbb7473e54c16884b72713d1e0c888005fd7ac6269d09cef99c3b02 SHA512 50e82a2619feca44f99bc6f7c2bb51a73f6ab693285a7eefb44832ffb05044fc3a98488f188e73979a4db2ffb59167efe669d27f46b0051a7dd97535cdefae1e
+DIST gix-actor-0.19.0.crate 4126 BLAKE2B b87f9fa1067e928ee252964fe8b8a93fe3d7cbb77790dc763c6dd09d37dd324c478aeb92b4f2c3e186dfb8a859a8e1c378c2c7d889f084fd4a22680951a3fc36 SHA512 dcfce8e0c413e3a88a812e85b92e9feb1807ebe15620c81943cd841ad890557b52800e4d83610e2c54e3bba19018ee20bb02bfcf9a034e4901be1a00d166a74c
+DIST gix-attributes-0.10.0.crate 23104 BLAKE2B 6ceb44bc473f5266a8229c6a71f5b61642aa72c7bffbabf9a9a32f807df473a48ebfe778d23e9132606956fff07a7e5fb857693a358b182a5baec92a051a8cc2 SHA512 b2e43d617771658248a680bc0a07720ef7fff18089410452ad8427c008a28554f053d2048086714993a07c8258e61448ea616d3e2bb30d2a5a11a6a88ac55b40
+DIST gix-bitmap-0.2.3.crate 9818 BLAKE2B 2f0116017b7713ac6d27b864c43fa05dedcaae62357d88492d018f78ff11ef783dc9e3cf22bd8267bd8dc1f13fc8b0a8405d491e0cc6c2bc24a5e0e09e3695d9 SHA512 2b17c0876a20d23d3658b360cfd745b1a1b01046754dada21bb5ab8e84ca98f0421f456f40c547f1f4d13e10034587d51ed7895e0dfd798f95e58d289132e3e7
+DIST gix-chunk-0.4.1.crate 12248 BLAKE2B 49a55d3ab4391b343ac3b42af93be8117de5946a0dbd5eaaff45d24ee456d8d6336f84e9f72fbaebdc03861a764fadd9e0c2ae856d6eebde54637d07ea298b44 SHA512 6fd5ed914389573f59f8fdff47cb47050309de385996456004ad8a9e4ae67426288272715df712a3e6124b81d456354684cdea1f892624ed3961abf3f73683f6
+DIST gix-command-0.2.4.crate 9212 BLAKE2B 889247edc864c9ffc3ce4eaa189654f9a599b9adc1d83cdefabebab4295951da1ce48ccbb386e400ad2ab850f484fd5acc4e93f2705bab7cd86a9ff9aedef4e5 SHA512 7a777ab4d557fee97e067cb602b80d55f824347b2c7c18c46abadb4f644dc891c926d6060c0a93823fb21caebba8830ae65ef0b4569d4c5856b7303dc8343852
+DIST gix-config-0.18.0.crate 134292 BLAKE2B ee0b990ee477bcdf35436143a5aec21aff306b27c955f7cf822b090c528f39c8c9d54fd787c3e48b7ea8344927e47821b72013d31861c72dddcd238aa5021599 SHA512 e8c275b4c422c23f4b7f649b959843ada564a7ae1fa0e69d7058338718499855d50afea0fce796eff93b5d21abd4700c6fc69eeb542f499abca32a844c921c9d
+DIST gix-config-value-0.10.2.crate 17543 BLAKE2B a86cd6e8ced82ba7d18b0506f97b27b89efa2178753525fed0c06132760f4c84c5d0f51be5949a1566206d77d7cb16c07728e6a579cadcf66a4e7dd6b9dedd2c SHA512 60c4deb158e04d2a24d9c1b9a3410d785914ad3facc2b51c44abe25bc585ca79f9b6f881670a6fc02d8ab82ad849cd8a0a0669ccdbc9b3909ab67fe43a72710d
+DIST gix-credentials-0.11.0.crate 36570 BLAKE2B 410373775704af9f11922f421c274a00d8be356a34256b3affda94fcc54caa4b44c4bfa22b9ac4f97028000e796b1703cf585b987d312137e7defa71b5a1d116 SHA512 8502b7723daf15d88c4f9abb2dd84c7559758ce02628c6dc69f53c59df4279f567cbeaeaa97b4aa2da93008e6e66005dc584a26bbcdc4736a762a23ca1002e27
+DIST gix-date-0.4.3.crate 19793 BLAKE2B c71c9467cc7cd48a2f867f6df014c46258667eaa9da249ddcae4f70287259a7adb3ce0f4f5a19abdc903e69a73287dfcf1cd71c666ad41d398bd00470d2145be SHA512 e2e047d081e07e2cf1b77dc60ad5336023673911a47f73cd42dcb550e492019a4d299953728d5ebc76d68f1d662b9a9e97183040985a268d6bf9014f95655e51
+DIST gix-diff-0.28.1.crate 7019 BLAKE2B cf71541f10dcef94a409d0fb9f4a665dc917b192a9531b6db8a5c933ac1666ee7264d0ed1cb7f9cea821ff7d0fa2f67d1051b60d79d2a05bc6097c9d8e7637f8 SHA512 8ed3e4f2d45a595cd633ab06c1838571c7e7a4a6b855e3cff86277613211363d77ef613e28f62e693a9c648b04a8f7e46085021a8b4ba04995cf803000132e14
+DIST gix-discover-0.15.0.crate 30192 BLAKE2B 4da50ec6f02aae625d756c06b3f4e1fc72dae4dffe23c87d6835500f6f3fc37c3d997993d595c4ccb57766b7cefee26d822f392a9fab3cf0cc3b324c22309dd4 SHA512 d88d7e840fccd67304f3d66cbfca69e0c793aae278f4fb8a2839b27aaf7a6c658e1abdc0d6a4584975cec28e825c6e4d951054d32ba76f66664e1026cf9aff02
+DIST gix-features-0.28.1.crate 63227 BLAKE2B a74dba5189753b86308fc14ee405c0f1cb178ba24a07f0e120b92d46b9047a459034d45c080e900c1387c757942398218085c1490d49f5ab00a64b056c12f185 SHA512 8338b1a9f78676faa49c2c643afb60951ffff1f12739325fcf6220020f3e1be1bcc779636ad65f0f317046c9b9210c9efd278532040f4a33b08dc37f5263e9dd
+DIST gix-glob-0.5.5.crate 39749 BLAKE2B b2f1d5385a7b7f963c799447ebdf7624e5d52e3b3a1cc2800ef60165ce2774ef63231a7dfb9fead3118a052d21c3977b579c1b6df094460bcf39b09b3ecfbb29 SHA512 15ac1ff886a6a364c181776bf5630635e0cfd519a5ec1ee58e9bc1a097dfd14030511db490acb534e8428b8016c946e9efc3324cec891ab9f2698a9096a1df09
+DIST gix-hash-0.10.4.crate 26357 BLAKE2B 412c56b6adf1204a10f4bbbe5f90623001bc41fa268fad8cc5bcef1e8bc441c3012e66d0d95c25e51452c195e50766c557dc8040866e929d1e8468d8db1d21e9 SHA512 1f298ab85452456e302ccc5d2fd449228d3f61dd0fbefb9c7c7fe71a285c4a5d1bad29cb26dedf4df65d63488c21034ab3d93ec5ce7066c940883fefa270316e
+DIST gix-hashtable-0.1.3.crate 2244 BLAKE2B 9f22d0889e522fead317409651b0690e4c745c702653be393fb5f19fc5c6d25680a04f83c8286e0992aa7adec867c80ea25147c856138f8f07d67b5c7ee746aa SHA512 cc663da264ec5505c2b10f47d33a201c6ecf0f8591f96129c74c2c39278555dc5b1527caa6f85387c0730970c424b0d02c2d52339d2c0dfdd6d26d2cc156c313
+DIST gix-index-0.14.0.crate 59497 BLAKE2B 9793033e973a1d0e0958a65c7595c3125ac81600f97318b03f476bddc2c0223bdb5815d693d6112639da10eaa5f36c85e1c25d04b6024a0785ba2dba0bc999ff SHA512 2707949d8beea0a4e515569432eba87452c73205644ab527bf29e0fe6e6d4733cb7939ca3b24c29d332b81799f3a4a99d99c2a55aff54563b2ad7cd33c4e5993
+DIST gix-lock-4.0.0.crate 20580 BLAKE2B 8a63f41ae2ae2974cbdc51db6c8ac8a4a6e40a63be921140484c410f091670d9f802da6dc51eddad45a69810a10fd5ac6621e6ad8ab4c83de9b5d85d00c669ba SHA512 572cc70da7ca6cf9f4ddfa8bf36cc843538510652c04d93d31171dcba22a77aa02b5ee170b37a56c222df51d3377a71eff840b39c28b620d470e5c6ca69f5a22
+DIST gix-mailmap-0.11.0.crate 19465 BLAKE2B 44be62738b8a59c9a5d647af5b217775002121175ba87c5dfb76b8625484ab73c8e795e14c14af3bb3e3cd70b12a826d64b5b6d7b7383c911e09cb3d25be5218 SHA512 5fd87fdd30f25829d9a7a2d5c467942a280d1e77e909d8326aed3515be215b34e6f5910a8cffe0f82c367ace6eae5cdacc5ba4ae11d339126924f70e7a7c9eac
+DIST gix-object-0.28.0.crate 23594 BLAKE2B 794f2db1d483b93a8c3b6dd3c34ac8c05a3e7f303c1114673a8ed4a756d3f153ce2232492d8bb10a712fa90107d72d83d31f7efe2b747c79d2b639682899074f SHA512 cb0e099ba21e114bc24a343072c85fa5d77fa8f6917c69039a2355e66d157ce65ce73918f8870e415f4d88e771a837c1c310cd1cef0af2036fea9dead42890ed
+DIST gix-odb-0.42.0.crate 135352 BLAKE2B 398168232597998176519be4217f1a057e90eb5985fcb618f903b7e4d26cd16eaf5286ce7a19e7b8af7de41945596142b172faf9c8757cf2a832865dc11f2099 SHA512 95b98b1ca5c341696fba14bee827d7b4e5b39179badecc66c7413a5dd75d0084b2b660de6e30d71325cd21c59d466feb99de2103d4711acc4092a6749299cc05
+DIST gix-pack-0.32.0.crate 135294 BLAKE2B 37388008cd18e849af167247cef850696c0a230481d4fad0987b09823258d5a89e98e1338983f4bb80d417939c57c42ff86ca8a695c831fa8380eff07b74339a SHA512 80fe721ed172af2fcdf98468ac6ce72f6524f776217bddfbb81ab7be06873acc48682685b66b2de4db61af5bb1ab470bc1d331f0676ef2975c41e9202037d6e2
+DIST gix-packetline-0.14.3.crate 36974 BLAKE2B 158aacd910f1c0dadac35f63cf84c818b8c79481999bb3521505b196c12bf57d2aa18092984dc6fab2ffc434f4539968a18a8d0b2ee0d8a68edd5c0c72b5a661 SHA512 f13270d8bc2f61378ad1164b9690ea2a632df8015fc648c0d53bf7012c1c42b1e7e7515eae35b8b928762cc275f02bbc5443d7bbf86eabe1383308012b7e500e
+DIST gix-path-0.7.3.crate 22347 BLAKE2B 0c6bb3c9bd360700e46a29e0d491bb3bcd74ec0afb984a26213c8af9709823b6b1456197aedd1d6a341f99009c02a07dc0c862989d7614459d4637a5d5b0aff1 SHA512 02ba23aff4c71c682c1a828b0f178cb7fb9fe6c4c2004d59687d33f43dce6c40199cf920f9f1146cac0dc709f13811bc56c21375fb5117bca9556644804d65e0
+DIST gix-prompt-0.3.3.crate 15057 BLAKE2B 816d7a0c1b16a729b4f0706eaf8e701131bf11fe934b0ad252e83469d0551961271c4942df145ac62deb9c8aad6de3ed8b440eb27d75a18080fdae5d4783cb3d SHA512 f107b22490e3916a09e250f615967c09034ae56ea0e35e62b0e283b819675e0b79e654aad2d08e04094d01af8d10af8cdd393145a6d2970690f875c6cfb41e5a
+DIST gix-protocol-0.28.0.crate 71642 BLAKE2B a73322eb7654ebf29072918d3c4469806e2f147e00e48681d2fe4b18952408aa3022620b80650c19e7343169d42c3dc8a2cbcb2179318dfceb940f68fe6d5668 SHA512 0f116929d1ab3c48eb84942d132ed74f428ff82a8ef6a5b5ac89fa1b56bb399ac01aa14736d0d97ab6af16a0988c872c5097d4966a75e5ba59c94e20f180271f
+DIST gix-quote-0.4.3.crate 9769 BLAKE2B 28ff4050178eb0711387a5a4ae8ce6e33b0c7063427411134752adcaee578aba4ad6cbaead8ebaa5047e2255e76f8994a01e9e8d5de39934cfc7f525c7e1a619 SHA512 4b1296be473a022926f67ff2412308954bf19f0233a4fea1ee44b605a76cdfb06f036591709e8b9dc6307d106267031ce034107a490fd63843227f681cd87d4c
+DIST gix-ref-0.26.0.crate 50232 BLAKE2B eff2acced8bcd2fcd270bf6d2c428f836ae657976299de7af99fe08a28f2129289256ffaec641cfd59e978b88115a1b665a51bff87f7df06f17a359086a61e73 SHA512 1177b114ecac9c487f5a0cb204430fedef2a607718480aa45f28daf4afc99bbef8618a56342041a4e93d1472a1b86e2befb8bb812b4679eacebd121ef9704bd1
+DIST gix-refspec-0.9.0.crate 28295 BLAKE2B 068ee1a75d3378fe520a31dd121e318e99afe86d522b18bbf7679f3912886feff409002dafe635be3ccef30f36525ec370c049cbbf0fe624c93253b254601956 SHA512 1425cee185f67c6709cd5240e2461c0324a9193e174edc181075d92d8ee095fec6fd9bb4bef465dc15072c3253798721d40cdfc68b76d1e6b6845536de6cf53c
+DIST gix-revision-0.12.2.crate 37050 BLAKE2B 34ef57c23c9c062d879a63adf8bb3fbacabb4af9c7aed00211a4637fc0e09a6d5d81f06bed274165292179217504661556523a47f0d71d6397244ec64c65cc71 SHA512 3199b494c4abf61a3f08e4d2b4ef483c1df45511ce61943eddb115ad776b6906a03d0548275d2c91837d99bf55ab612b205eac02202edb8af8f21205b2a503ca
+DIST gix-sec-0.6.2.crate 17385 BLAKE2B 756b8cbf9061a384f863f14f3a8c8fdf8888a9f9886ff70d53ce9fe081d22439a2cee718a721585c3ac4ea67e1ab258b7bb242a11e04fbb6a7b41ea5a1b0cffe SHA512 749af2dc7ac0b350cb5cc68d6f44d1d9fdeb345b336f60a1800db4ed4adaec4140ee67769c9a3a300c05a6eb96365f65d97be9e6af29de577538cbb84504e93d
+DIST gix-tempfile-4.1.1.crate 35191 BLAKE2B 766786aae854dbe4d09d52253603a9365e3aa1ac470b91e4f4975ef6d300f98d436b63d1fa5d45fe8bdbd0ae0b90819a61216dd5f246840b80e5f75bd412a3cb SHA512 3b0b9e55749056a296993954cdde71e6d775c542b6a34c4fb44e16764232ab2b3f6df86497eb870310d1048fe2291c68ea19041344128ff8013e2051325dc7fd
+DIST gix-transport-0.27.0.crate 90761 BLAKE2B 912117ca9932442169346c545f5819ef9f74c0ae9be3cea2e81967e8a4d2fa081265148b5859ff4e3b1f3a5b08db9a4b705cc9da1b3c9c96d24f202087f00252 SHA512 0fab1220d965b23b96b8edefd20be4db58680b14365150ed8458ba5baa4e801b2e20280b27e896c2699954d33d95d04de6de0b6618e3fade4493d0d781f76bb2
+DIST gix-traverse-0.24.0.crate 7240 BLAKE2B 0d0e5ba8e171d844adb5ef43692f555ffad3c69e4e8ff4cf302ffe1d345c34f5fdc3aa2aac63c556865071e479736858b10af9984499e6a193ad320547b50a20 SHA512 846d1e36e3e1c50f7c1d6ddf40bae979b12fc016a6554de7e2430c1d6a1f42ff8d7eac1ff2716d2ff9759dca697b3464247f97201f9a132a4d2e43293784dfd9
+DIST gix-url-0.15.0.crate 28617 BLAKE2B 61175530e6734acaddc8d7c43a12c16b5d27643428e1476220594588ba441cc8135b47bb49b3efeab4aba971f6c2bac4ba8846ad24d78d999309c34901d1eea4 SHA512 2cbb8d968cbb9f1f2e8345e504d59a579a41cb43a3b9c7106b38babf860bf78891511a07b301b479cd183319e38cbae722955a09a89d33149e28d0af44948dad
+DIST gix-validate-0.7.4.crate 2529 BLAKE2B e16506a3d21a9499b3e5a851815b9367f5d6050a3a697587cfeb0e05659bd4ad42774f62227654d18b585a4ab85aa4698cd4da0482bace7a65f7df6e3f2ebe83 SHA512 f877571639b2e86853d408b3ba6abbe83d33fac81a3b6c7eb0b15b13f382d512996e5ade85abbddd72881bf3ab506b9b3f3e8c3af6a8e158464122c415bf0b3f
+DIST gix-worktree-0.14.0.crate 37067 BLAKE2B ca222d9a24960c82ec43bbf4d485cb77c4885509c2ca78c4affab56ef4d715cde5cec1e9099fffa1de2bd4708ce4f37313d9a3edaa90fdaff5dc32292a4f3d91 SHA512 22a1142376762151d84b5100cad0acc336234b20a3ada17a89b6066c84e806f9f2f7b9f6b31b17452849494c7692c3a7eb875f40362cb523f371593a2504f26d
+DIST glob-0.3.0.crate 18724 BLAKE2B 1f1dd380e7d668a0c2cff9134279ebda958b4bccdd4a65ff01f9665b45ec4cce8ffbd47eb46e52cf516c5fd5803561e6bcb60cdee21ddfbb8601a95d45500620 SHA512 87098ffdbc518442995c422120cef71f83069c8f88a1970ecec5105b0f284ddd92bcee929f5c230d5b90ae1ead7e1214c3eea26f4a8b26715a00c1ab8b09bc46
+DIST globset-0.4.9.crate 22929 BLAKE2B 91dfaeb99a3f6f40a5a025ad8527c91770545487324e191801eedb6f916739b5efe687d84a43eb8b712cd181d98d3ab17b839f30c19e0da041b4c34d9286089f SHA512 66841495098b028b8d294c0832276b8864760df3a16b93b57222037c351591ac7773a99a65b85a20c438fbfc04c56ea4901188cb18ed470d3481eeef29eab708
+DIST group-0.13.0.crate 16526 BLAKE2B 099ced5b8d16e6fefc331f2d89aee931ec5900a168dbe31bfbe29bd00304e8525fa5763dbcd60cb19ac6c62c8d77877f2d83e700c7ab18255b08c9b42be60d24 SHA512 359db06bee4cb51ffe799d9c408791e310e72fde3bb3fd447cf97482ebb909af07b43e9b728e3639d5497fc905b650bf00403b3a6b21515e6628c2466e0851e3
+DIST hashbrown-0.12.3.crate 102968 BLAKE2B 492072f27eaec45abd2c5d7405c614c0c6a8221425e901bb6174bfa1688ee524408a618650126d6c683b7285b9bf0a21dcdbff7347e4d8f97bf7111defa1b7e5 SHA512 b3700fcd659a21a6b9b3777c18b37a83bf25542b4e8f2b963779a122f5d22e1742c064cfc03e649583e7dd5c6e90ca8407f8c51a0e8755f6a108682853022f76
+DIST hashbrown-0.13.2.crate 105265 BLAKE2B e9ff7e6e753166ab3051a834df6f2da81a19ac6997ba269ab13a65e0abb9ce00839311785aefb451553284ad5ef3a0cda925dc2bc188d2a138a78578e530969c SHA512 21dae7a283326d21e16bb32ae0dd1481c4936939a32a06478a3351c2dec97941be532437b808e99ac40e7900a75433fe0efbd852158659a682461245e19d0e70
+DIST heck-0.4.0.crate 11161 BLAKE2B 13b8bc39cf3ab90e71433e3c7b3e5f1c19404bec58dc4298dca05d94d5c14c2fc97350de737cb78aa45196b1241aa8f1ccf3a11ca309da5fe0f6a657673412b3 SHA512 33bdbf4ff9ecc4f4d74cf06590e056f4d96bf0d990d5381b9da5b65682b2495ed74e27b45419c2afa986c1f6200909d5175b137ae73ced5cc8ac869e4e1bce8f
+DIST hermit-abi-0.1.19.crate 9979 BLAKE2B 801e8052b85341cca388ada9db4b06bb1bd7b64474185b2ad06c0256b9e597639bd3dd4ba0053ea010f922e53969a4ab47b90d451fd9b94c8f2324055d151ea1 SHA512 1c877fcd562b15d2de9c151fd6c5f3ea4bf48abcb799e6139a180ffad5d64b632f0000d5707bbd92ff23a0e5f349157b9e0f5be8b50f03680b0fa47315dbb78a
+DIST hermit-abi-0.3.1.crate 13793 BLAKE2B ece7865a09f566a95bfba5f1fba380bf12836c3761fc6d5a3d5543d3e50ca0eac81bb567d50b5643849cf1a752aa651a0db4c053c60faa8f1c74fe2f12819d71 SHA512 a55fe9230e4e8fef63284befff74108f206e76067257439d334d33068875368902dc690926a1feea15611f14123073867d7e9cd21397bc484cef849d6e1dfbf9
+DIST hex-0.3.2.crate 9053 BLAKE2B 3ac67d26ad367df7543967a8153a2ca7c082d5f56df16cf63a37f76157ce94c68f4cb11c14cc75621a9c45d19c38425acb92b552dd6f45b9052d90cde2ea6e5f SHA512 fbb5e86da5c7fd4b7ebc505d4c0da1258b06406d40a5c6c1626f559e1a91525fa747cbb6e35a687c63216158832ceb49dc61d68cd7d74f2df3630b36ac423852
+DIST hex-0.4.3.crate 13299 BLAKE2B deab49bf3d97f6fd7c0a0855b50232422443b226362bc7a4a19e57c2e662fff2cb046d4c5bd7618ddd523045f3d8c78754508f862f9a8ca29ca9247da6d6ec79 SHA512 fd8ff33b68eea2d6f2c6b02a6d82a2807cbcdc209ca5a76e3e3e5d006917ee151f236b6d18e2646cc9a9674bcdda1d6ce6ee363a89cadd99bef00d0eea9989e6
+DIST hkdf-0.12.3.crate 170910 BLAKE2B 08d0c28891f780abb46936481251f217e9d8f2d17d04e6e504368fe9028300ed02f091cf6a0a0983eeb02dee04309f713f73278e9b0f1b918caa2cd998112753 SHA512 bba8bd837e994e5f5131d4269fb80fb84d789dc0ca68dd967d71e92576617c933ee8c355427b470ad71ab89178b1c36e8a7e122457287f023dd4073605784d3f
+DIST hmac-0.12.1.crate 42657 BLAKE2B 5d432a666dbcf9077a98e1f8a4aaa3afc88f3d88553cf7a2356d117c66f38efafe686c148598ad67ae89d64ee3edf56387a6f89b75dd9ab5eee63e13953dcead SHA512 77d4bf51f4633a8c36712ce3178945141df31cd645eafcf4bd130b8ecd7cb498bf1ee6f2d9c8dfbbc9f97ac638919fcc81bd3ee600a1b27c3be3fa87313aa0b8
+DIST home-0.5.3.crate 7890 BLAKE2B ed1cfadae63d1fb0a66f38aa5440dd09a98343e3afadcf1495bf69f3ce813774c9a49776c6b3641001b6007c01e24ffa6d2600c1bab05c4ea3353c74ddae2fd6 SHA512 cb3b7b24db30a8b29f36f90a0d345b2e187f9e76f22203e142a77c8308dcc62e97b5714fb0ed890210b31375cf30d3362b8d740fe189079a6d3a095be50dcb0b
+DIST home-0.5.4.crate 8538 BLAKE2B 1512afc063cc31104e24a744aefc2a28f07d4ded12b4500480610124289e5b7c7f2fa3f1e66da36832cc45874c4bd2d08c1a584fed25aab4ecc962abc6675e33 SHA512 2494111301bd1281c89dc77f4f78d3bc6e3a04d1969938cf4584d465c01af12ad85022832b4a99a5c0ce6adc31a83c00820df2d513a09bf5c0d4fe44c53812a4
+DIST http-auth-0.1.8.crate 38880 BLAKE2B a34e017628587a2b6ff30994c15b1d996393d5a6df49076fb501c32d96c05ecdf2bf97c482c8f49e1af737a4be9e6d47aa9768b13ed6cdd47508a4cf802d95c1 SHA512 509313647380a98c2fede816ea90d04f85f6bfeb1ae4112767a0ad9fdd29d9169a30f4359d845ec0ee9ddcdd93921d970ea68199edc50a1c7b8e29aa6f664fd0
+DIST humantime-2.1.0.crate 16749 BLAKE2B e2ae8325b037fb175b9200cc5c1944ce579056c6662cce307beb6701894552362a25e371aad65f8fb9384945b48815ca74bb8b544a32e0a5845b7edd30b918c9 SHA512 3bf29ddd1391d82897c22baa0ff3ed58ef6d6959859f1f8ed54d324caba5b6fb4422e56790511ce82f902cd11467f93c8ab7fc7b0e0bdb719308a4d0a446ae0c
+DIST idna-0.2.3.crate 271023 BLAKE2B 157ece18825fd3f8055581ccbd14191a6923da4c806ce51b3d6376682878db000a1b873f744c8e9e1966e4c1f8393643bcb603deae299ed0bd87847b0bd2c591 SHA512 1278bd561ce329e1dc7a6f24a10f83d9a068af5d15a088414f3921c6728b0d54f4d60d6f4d0d5a786596ad226263e1e50c3842f192d5758aa4665ba4ed5c269f
+DIST idna-0.3.0.crate 271128 BLAKE2B cf8a2c43760f03e94953c6692423a12f28fe763aabea8785b93cd247b3aedd2aeef2cd99978a027186290016ed924db39d19fe7d397da1ab570be9646bbb630a SHA512 9b7cee27811ee52ed9bb39fe82f724742eef2e5370642b6c756bd134c8cbc20bb6faa9f296053672dba8a66f7356a08b2ca99f176407b173e2d566d85d066441
+DIST ignore-0.4.18.crate 53174 BLAKE2B 41a209a310515af9fa066c88c92751e19e0859f411baf9946933203883098f52901f8c03250cab7f716abbd0da9c03c5e6fb270a5f9e26aafab4bf1d5f5bc045 SHA512 5d11a2415f015cce6ce72aa3d08a7cfb645ee7f1845b3445a924a92144438f209c992cc15d4ede3099d1eebe3fa28bde4e0eef1a3fbcb9dbced19a42051d21be
+DIST im-rc-15.1.0.crate 194077 BLAKE2B 327132f1b7cdb993c041e0083838cae9fb99dd2024d9191cefc02c3d0cbcacd3f5b710b0bb36b47fc49e24915ff7396cdc972326e35dd0ee27e7f48ab65add1a SHA512 2825364dd8ddfa2a3623c3b507768b8602a3a17d0a9abd10b9ad20f4e7b6dbf5b35e928129bf0708ab29207e899e82f2285d24a7de2b55de3538b4123efc8bb9
+DIST imara-diff-0.1.5.crate 154821 BLAKE2B 5be6954d53e1787e6c88b23c7cbc8848f92aa7892a4590fa7d55269550dd7e0a355ea13ff646abb4f91467ef4fca12e74da60958181ff0c6800d9965f6a536d6 SHA512 9c8254012958869cb4845f76d34849b140dd1604d14dc9822f969ffd66c32a94ae6151a1b11052817e1ef60fb94ec52ac9bd0a122b5a1e6a994952445e4d869e
+DIST indexmap-1.9.1.crate 54114 BLAKE2B 71e4968c85d5b3fac550590658f9fed72c754a9443221fc804efb97bd39b5fca7f894ee67f8d2c330bf212eb8a6b5c85879cd813ed56e3fc43a54f0bb689af5a SHA512 7eac99056123332ad38ef32eb65235c810e8b4d051d9b0ddd5582348c9cd3b162d36defe8e46a532e2066562f224e37fae94b52b4649ee9cfac7673b76a2513e
+DIST indexmap-1.9.2.crate 54627 BLAKE2B dbfa551d33305db06b59d07c1b4bf8d4596a67ff1caa03062d07f6d78b4604ac0533d1c1fe3c371702dd7e65a012bfb960d79c76db37e264d0b44be576969285 SHA512 946c54881a347892dfcb55648a2b881d3a4d113424b8c76d8957980a834895318d11336dc438a04601916cca787420708ad7e271f965c38bfeae511ec1dedf85
+DIST instant-0.1.12.crate 6128 BLAKE2B 728923f757c1ee4e4a7afb90e460eed81392068961240a538e5c6468e15a0b6491f590fb5f6cc46e6d78901ca232351f65abb9f2f230d8f4983c5e58c4011902 SHA512 fae494c00111c51c840f9dd6a10febe403e27ebb933dd16633a213e9c20f2bc11adeb431c71f8a6713bf88f270a010941e15d83df294e658791934f83a5d2407
+DIST io-close-0.3.7.crate 8025 BLAKE2B 3ae34374d194407200f327695e7525268d03e5c2e8a051c99aecd1d395407197f9e6ba39339f67ad4ac249b8be63e4595993e6cfefb2f0b421bfaf8d655099bc SHA512 0cc06245da4ad9f8708ab03619734dda41d1cbb2777a7944df10e2efb0ed0a6d34aab3ee55210b05eb4507c802d01a301b6718ddd6cb8e2b4abdd2e1be11303b
+DIST io-lifetimes-1.0.11.crate 37346 BLAKE2B 7f278b7378a8569d3552c9b6d4be06d7908e05d77cdb964267f0b621ec4975a42fb6e48fc030a75ad5865681adf32ff747943ac559ab4ad73331a6611a1b10c6 SHA512 30c6e5ce6f5beabe0d7bee4f4522884d1316cf7d9b8d093ba0f952995997be3d0f10e1e77b9c20b7fe2b65429de0d2ec89bb35e939455795205206a3154ed544
+DIST is-terminal-0.4.7.crate 8356 BLAKE2B f0f42d6f6204c68bc8a9e1290b9b059ec55f5aa2f83f6966711a5f986852befe21ac9281fd611e65cb4fcbf35dfb212748785c7258c44602e7e390c51f09dec5 SHA512 56c00b2942963f8a0b5c40c96a885f85565fb09e247bfd5a3e77ca5c9e0e0e40a17a8d809c0541177e8b496fef87baac4b86c751765491ffffdb631515d8acf5
+DIST itertools-0.10.3.crate 118661 BLAKE2B 0095d6e7f14ddda69605d09f74e8cc881eec1a1d234f705e667d7f9e738ef157b7ddee066855cbcad7f134bf79b99a4a4c77bff3371397a567cd34d98b68bf97 SHA512 9d17357eb68159edf4f4ccd2eb9895672c7fb633803166d5e24ee12350639eaf66f1c822910518185cd1f1ca5d9c3e228dd37525e6c337ba3fc7ce967f9bfc85
+DIST itertools-0.10.5.crate 115354 BLAKE2B f24734bdfedf1dba48554e39b43669efcd4a43656eeb2c511096060daeaf049e1ad3eab232e757057750ce94aabad9fc8a0cf29a997edc6c4b167301c3443391 SHA512 d03c3cfba9841776913bbb6daad0c8945830c155f32ae4b48872e0f937c75a443f0ac9a0355f43b359ff75232f38b15f4f6d446b4be30b00b4209cf66ef770c3
+DIST itoa-1.0.4.crate 10601 BLAKE2B 95545252eaabc3114323a44c8b8ea12a91568d9fc8d26ccb3bdd798ac0e04d9a6a9307927c17558f1284fa5491464cfceba2f0b880d00673449b94c0fb783150 SHA512 a70bb6fbdbcab27fbb5a84041bcbad8e0c8fda58d55ca7ac757f7be5cd373101be40df99e9acd6ae49e637e40de037c6bc59560f96c9adeccb2b2e0bf6531e42
+DIST itoa-1.0.6.crate 10410 BLAKE2B 8b1dc9ae9d55a006bb2abe3b0282e5e77397814b692a87b9becdc2bb74deabf5db09e3d5a2f604964cbff046148025988a5d916480e0402b2b80646fbed32875 SHA512 e1fb82fe16e1248141d48de9e05e7abed0c6fef58f2ff8b77b52aca5f16f3600c46707ff4c7a0f0307047610f29775bda74948d6d1efceb74b37cdd22e1fcf31
+DIST jobserver-0.1.25.crate 21888 BLAKE2B 2ecd417446f9eb975119af4ec74c9b3463d061f5348ebca380f0ab9963ccce6dcea8c1671c7701f3f867c7e49d0ec130809a37bff466261a2fc75e80cc01d15c SHA512 0c014e7c72a070e3332463cfa6e9c9095d542a68f8631150bad0efa3706a2d6de0347bf7d1221cc3bc0f3d5f9840fe7188aad949559375403b929d43b4a524b7
+DIST jobserver-0.1.26.crate 22645 BLAKE2B 44bcc15330268ea29650e58605c7f21c35108eb64b790c005968955238e948d27b3d12e6bb06bfc0eb4a3fe5f9e5322bc0657200212bf87e08d9e043e008a5a8 SHA512 ad3ebb693018928daf399e918ce35ed0d4e643cfb5c78bde04697e41dc8adf2861023ea1cf2c5033a3026048ca0ebeb7f2f57a966ba8e420558e42dde8d494f7
+DIST js-sys-0.3.63.crate 80154 BLAKE2B 378b8da12827a743c2cc996362934cfe249dc9d9dc0de507cef366fef4ed1b9d82b5ffc22f3ac6270c909eef901f494dccc8f01725278876ef2fae1945041111 SHA512 fddab182e0f093d8b600f86688ffe736852b48351abfab1e60073c67901f144bacbcdac867f533056b1213eb75920b08b6249fcfb5a15e650978966e8350918b
+DIST kstring-2.0.0.crate 22063 BLAKE2B 71e58489a167d57326ce974c8e05dd4d2e18f7fa142249aea86594b56b83d566e14fdd79b7202a20ca9dc9e0911f7f873454925fed642d51241e6fc920775831 SHA512 17cf8f86f0a1df9de75ded552c4bfb9f7f0567802c83c0a8fa71625aa33cc537b498c3a247716a7b91b01c609a3722233d6316322210aa44850fd564ca16f624
+DIST lazy_static-1.4.0.crate 10443 BLAKE2B 25b2e61bbac48f0dcbc79c81d7bf01f2403d8269ecb6be3ea6147bd00f7a588df15a91f44dfc18ada19b21faa71de4637c7d493a8628cbecd0e547d74e616a23 SHA512 e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
+DIST lazycell-1.3.0.crate 12502 BLAKE2B dca2d3f46823a52dcf87b7d6103fc4f1f83bc5247ce361946ac2d9df239fb43ce4b418104503698dff0242480cd014996e77da4ae0a88f3cedbce4eb9d3c9ef8 SHA512 f9d627afc28b61e9687a3f72260eb013401fd64057647641ff2e763770d7380ab1d2d8cbb4a3c8818d53d504c618a3b46aaf701f72f4d7b25d226042824c2f8d
+DIST libc-0.2.137.crate 606185 BLAKE2B 6724b7ddc2460fef1d0f20efee8726162d904b92987f9de2d3dda06c9cd49124c9fa43a9b39e84d78c03d217ed8ffd30e0dc55a4eb31970413d56fd58ea00adb SHA512 1ef979dc59a7ec4aad7229ec5b40be0ec9a8496c7a2177d325db62f3eab00d72c8d2277d517c0093e0750de12fbb4e45b67133604afeef9153b8e1d4aa0baac4
+DIST libc-0.2.144.crate 682092 BLAKE2B 1f699cb880a65baf9210527789abb35fe8be9565828d061e12b5c76330e21babab67b21e9a44be6a706f643f3c8b98503a3b40482183188b49f33f96a2489a68 SHA512 576da68e3845a7149f64bee425529ffec4bbb8df0272790182e49c8bad5b9744de21ffb5c1206753b57b7fe45af02c6c429e16522b72a77e5262482d64df5692
+DIST libgit2-sys-0.14.0+1.5.0.crate 1740370 BLAKE2B 0bdcec13f78292ad7849f88bbf21a8168371e9d4b15dcd09863b2ef703caa8e94a33da01164214620e11ff6f75038cf9ee6257c44aed5e07c52af044abca9952 SHA512 b2e1e54b172e6b0c71fdd02da0800e9120a3fe1b9c33b5fee4e667e9aa627979012865397b406fe91437425bf52e52a26245cfb7fa84f3ba64269dbe204582d6
+DIST libgit2-sys-0.15.2+1.6.4.crate 1755413 BLAKE2B 55cd09821df10a263eeb0f9a83748695c65093fc6c1b0c28c2d33e6dc0cab08cdb045340bf1f93e1e6c20ae7cf406bb21046f45a96ec6068e832456f8d2b4c98 SHA512 28b66ffe6da956bd1127aef295b222b55681b25c1820e016284802531f5360e6d21c11c695be569d26a318321868a0ce0b2c848bfcc887f09f47fbaadb13b478
+DIST libnghttp2-sys-0.1.7+1.45.0.crate 4527090 BLAKE2B 29fa3021361656826d523cfb0312e35980199611887cbc43721a2276ecb3f663ac1283629552721754e256124340650e907293ab43b96e043c7aa87bae979ec4 SHA512 5d7a1e262fc91b654678cef4026886ccf1f55b8238164583ef46de58fbc46034288b198843e2483b1d8fa9070cf6640d83d140c53d780b38527ce68222c94376
+DIST libssh2-sys-0.2.23.crate 493516 BLAKE2B 00c0c1396f3d6723ad750112e7af8c8ac098af7b3d11e3fafbb4dc3b90c0defeb8184e007de3c740bf1111e12a53b71c355d697c4567deb3a30ebe3fee2e0caa SHA512 9617fb1d5826dacce23658b42e3eb3f8427b33db1b5a4424081e148bd90a3f776aa50ef66183c93ae19086d64321fc10b19b1a496c3feb12a669c7313cdf39cf
+DIST libssh2-sys-0.3.0.crate 514550 BLAKE2B 55a24d513420e0222c342d252b1699cd583dadb37099082e0ea068fe064e80f6d82470a08d03654c17f50139993f07e20dddac4d11f0574c79040aee08f512d6 SHA512 cb8dfeade699d97fa5fa393bd87315f44810731f78458267ab098a08d949fde47fd57b64ed3e882c10a83ffff8f869de13eda50c72e140f57d802fa07650403d
+DIST libz-sys-1.1.8.crate 2481844 BLAKE2B e890a3850aed5348afe7558168c7571564687d6a7d3567a4d53ffdf79444d38c4d70d35891e16f496f31169bf73b669534f5fc584f9ec520b518dda05e80b882 SHA512 0766ab72cc1414160ccefe4812e6204cbed1341607e5d17607f24fd4ff81dca68d8f2cf43e1d27f332a508d602bff0ad340c4c647a5d5f85acc120c19cfb4100
+DIST linux-raw-sys-0.3.8.crate 1013776 BLAKE2B 375b29d2cc700e95d94ea8dc304cb711562952742f65c9664e33560a3da862aba74f2ad2ee66b1dface8cd5371ea9cbbc452ea953a6b6c656ade7d938b7d2ff2 SHA512 cb0e5c54870dacfa513ad05f7a84e9e90dc1a42f55685fe3e252fd25cffa4b875f1b65eaf4ad132ef0a19e6677c7763b360d71ff0060fe6ce5198f38b9956375
+DIST lock_api-0.4.9.crate 25685 BLAKE2B 8adf5c3cccebdf6aff6ec977f230cd2a208b0b188ef57deacbbc6019431f0ede1a760b2384ba3cb49c96b8a589dc56c0f46a6359b3e62277e7ae1a1c3f586fa3 SHA512 9215381d9bb6b80d217c73a900db43df043b3e939b5bd7a292a02e9ab911cf0eacd8f883d35bdf72b3a0e78df8f1bc3e843ca4c775294c7a7a03091dc1a74990
+DIST log-0.4.17.crate 38028 BLAKE2B b46be3719fc0a53e50b1f342762e188587e9f1ceb692c72473ce2663edfb8253742d30024e68c1444780ab7fc0e2d5b0601b8ea7228dc3405a9342a57548e605 SHA512 2477d88db42b1d92c30708d88823212e236f613b3465e85eb425f83f8d16fadfaf0352f06c2999a1852102edd2f6ffb10ecb539d8a3b6c48f552a25622ccffa2
+DIST matches-0.1.9.crate 2246 BLAKE2B de155202636c6a03ed68cdb21e8ef96e19b45be040a82943d2d7e5192c0ab5c253ab6d65f0b30b2689e21da79cba684af5be6e63c48266681aceba356f6eea41 SHA512 6a2809687d30ff04ea97bf9d1610d746e097699a4c3625ffd1b7b1e4a9673ece9d559058c9f760b99d6ab509024f7b338e7cfa6fe767499c983efa98bfb98305
+DIST maybe-async-0.2.7.crate 19186 BLAKE2B 9c60b19577943ecf43acca877ca96fcf386a62cd5e55a3a0cfb7e022f1e477b56a3120d6f92fe39742dc119cfa90d16c956853f61d2268d8977e5bf8f3729d66 SHA512 ef5f4e705def3b188ad2dd4be33dbb2c3f28d08855a1cff0aabcfd63fe22d1ba99e6cb7d10a43bde3bb5d30c2fd98dd2c9172d2e0a2cf877051b5117f0e7d262
+DIST memchr-2.5.0.crate 65812 BLAKE2B 57966413a1f933dcb2d2d4ccb29c247070f65a83299b2a9f5aa83f5a48a5c5f1c4c7c632fa63bd19f9508e9291e7258db2f16e2813a56fd84e0856f70f1e67ab SHA512 444a163b484c233e78c0e2e4d51f01ce2da93d7d29f516a95e4b0866b20bdfd3f34137653abed53eb70387991ee3e2b5937d8d4360a85bbcb50a93005a75defa
+DIST memmap2-0.5.10.crate 26847 BLAKE2B 1cf50f710ffedcebade4f131b8c3103b036778b320da671305c0244077743c53da155d444bcc4d0eece294234bb6e86bffe67da67aaf12a116573c64ce0ebc50 SHA512 39bd2734ce4f16c7f5a5e771f9ef92272b26f511421d5f39dfd2aaca072400ee38f2cd38352005c0c8c359095131770ce1c14570790bfe19ce6a17f711deff8a
+DIST minimal-lexical-0.2.1.crate 94841 BLAKE2B e6b8919b80d938d0b98d60d4f5f29ce43d77ebfcf8b18bde08909141915c6ef4f0d07a543538d4f3ba8527a9f55926d4a8e83473248469d087e80b274d701d61 SHA512 385fab51884bdcc7b0f2728a219ab164d0dc8efe42160b918f2c09f79ecf853fb12bda006d11e649f097bae1499dcd41ddf2a8784ee7d178cf2c28059e46078c
+DIST miniz_oxide-0.5.3.crate 53452 BLAKE2B ae99baa01c493b5eb779595be0d77a064c4624397676d3a023cc2a54941b0b3e7c80492ac47c8a28d78ec36e2f04aebe5af79f0e714380061c5e0139b9dfd9fb SHA512 cc2971ee2a2e891cdb05c1942f533b11a557199421910266ec2e4848a16dfe6882f1c08843035443935d695882720402356b4df4a50ed131a8f5fcc0591a72c5
+DIST miniz_oxide-0.5.4.crate 53485 BLAKE2B 8836697bdc3707f89fa869e6b09a36ee4d83ce2ae0a53bc7b06bbad70ed7ac25f8f67d841f3f611f6756d891f0eddb0abf7fcaf87570f8ab32220f113583ea6d SHA512 589dac16ca9c2f94e6fa92b68bcf51d140f46562cbb3a1b791b75c59feae51da5ec16042604bbd6bcb7d7f0c7f75e98ea1af8cf42d177133a5eaa86429cf3114
+DIST miow-0.3.7.crate 24563 BLAKE2B 24375754245e4ac50620a8b6da6b21958914a6af6422a470487841c2524587d596673cc3718a85979ee911f104d71b59b38fbe9db28c1c7e4b702b9373215cb7 SHA512 451073e8913148889493de0373bc0450c8b23e136e151b48b9976292e4e03b7c3f3279ecf49dda5196badfe662a661a998cfa456d2ec340a495d54a4d2382699
+DIST miow-0.5.0.crate 27696 BLAKE2B 7286b13b0ede0bbef23b9eb3456ca5c1903b572e37c274d136fb1d26785bf87d95a877a67abd930f08efc986e19e8da0136927fd2d5f5453faedef312342fa46 SHA512 3340b5dd1ec88b1033982cc93e6496c34d53404ff6e385a2cea566a01efac794d695443da19955a73a1dbfe857cb72a10fce55a5f2ecbdc4a079160e9414722e
+DIST nix-0.26.2.crate 277973 BLAKE2B 86adcbeda37edda784593196c390e92ee069761d283f706c0390bf8983ba8841a51486a98a1869f910fe4d518afba5572490e9c69a021e12c598d094b41361ad SHA512 abf2d0a4eb83cd4bd43836e8b533f0f07f07979619c86c11302a2df0800d569f33f0dda0bc2c4136d36c79789d175eaf5d3928ecf16286319aabf93c720a1704
+DIST nom-7.1.3.crate 117570 BLAKE2B 5643b67990b7305e101b16b8cd27c447e162a7adc6d0dfac00920b0cb50fea98c9d4edca63c34f6845cba05f8d0acb407cf3045cf64a4cb28e53c8b6bc9090cf SHA512 1ffce08dde299bc0e0367ad59c7b6a83e23decfa11115ee076ab91ec53cdd9ef37e4c2103c96eff23a7b6b8b5c3f67c83ce1917928c7d4c6462083bdfa0c9cad
+DIST num-traits-0.2.15.crate 49262 BLAKE2B 942ab170b2acce1cb40e6847f766bf810a79edd293d34f3a27864f464c16fe2b99fb13171ba429cc6d584248de879434beaadf1b231a4001b0e8389ed6c1be04 SHA512 5228498af0f15daeac3c9210f3e6e71cfaaeb30beea81dd37f8eb06b9592c8bf3226a47597cd8592ad4c513964a9a40f1ab2c33102ef3dfe3800d22c8d4528e8
+DIST num_threads-0.1.6.crate 7334 BLAKE2B 416efdf395b0299b6b01e1508823afdda08cf67ca54e1d644fc5accbb0490945a492a34bc5ba70c3e838e6405d17ddce164ef87468bd9da27097de8994ad9577 SHA512 b2d9897e29e59353379b6372a629fc7f9afc89f777b4410eaeac7b4729527948a8dbecb175f056899f9076693ef855cc0d40e725cc54f28af588fbac5f7ce3b6
+DIST once_cell-1.16.0.crate 32120 BLAKE2B 59bfc8a44f1fec72442e3d34bf4be3a5af073f854f07b3618b2857c759dca4a0fa6ba358514ae28c25d745b01bb7b390ffe9ed6e296d163fd3dd67e49092b87a SHA512 bc199570ee43bde9245a2c4637ae738e370ce9988635c8342349ceb6fb158f376247b69f9ec4ea0e6d76b934decdc77a524299ebde96c0a2c2d29d9501b9a568
+DIST once_cell-1.18.0.crate 32969 BLAKE2B a08d5beee50a7add28bd9e50b18709e7b34574f0f55f80909d5efb7ac5917e5f30bdcf3fb43ddd0a4f420a427390c7ffe1cc1c7191a3a1d939bc6e3139e6eef7 SHA512 9328968afdf3535b2d9e0113d75afa725259d76994ef2e1948ad7efa4ec8a65bac7cfdc31b749d5cd55ad4e28d2e28ac57b871e3067b89182453c7e2413a13b8
+DIST opener-0.5.0.crate 12350 BLAKE2B 5992f6d564ae14b609aff2d0415c4d7414a8cafebdccb9ac0b66056cd2968f346d63855d8251b153414115c6c8d8cc91134ab53d6b714df78f2c3c858b22cf8a SHA512 4a9be4d280cc5039d080bfaa318b47a80dfa930f3e60068ca10346aeac421abc8575d7eef3649061847e24ad3a6262fb58ab183f6f2704f429e9674f392c30a7
+DIST openssl-0.10.40.crate 217120 BLAKE2B 7470af72e060a4dd087468dd8f092f7519978e49e3a9e7df78cd1ae8d33819a4a14aea078d113772528f3eb4134c019fda9458656b25b9483352b1a19259acf9 SHA512 c07b2fa47cec33ad3abfbfdfe0c8c99ce00aafed5437f864e9be1d151c8f82e52c54ba565ab710693f108429f48df2ce0d2955f54b1926d808ea56fa168afcf9
+DIST openssl-0.10.42.crate 225875 BLAKE2B f271b1f2976249354a3fb485635d3c05c4095cea497cde36a88145b33530436cbe60aafb6b8edd0eb48cfaf8668ea65cf6d01c71c3ed1b343449744b8124c329 SHA512 2f23f460518ab2efca867a38b51bb56a87dbd8abd99075eb0d08a82e23d3ebed337c2214eec28636c5c94800532a6a404186889b500f95bf7cb5babf18da2b0d
+DIST openssl-macros-0.1.0.crate 5566 BLAKE2B 51116df0f86274435f41b8bfd2b385d5a6464560a05c214445dde5cb414999d200c55e5529fa98e95abfbf26bdfe31c88708ddfa2a81671341792059ea703c07 SHA512 7e37a0c05781da13bbaf4c056c19d032a93820cc324f9f6e5743bfcbfb30e057501af1bc7cbf5f07e3a05191678cd5ae5bc4d6832f02ce75bfb03c027d18abfd
+DIST openssl-probe-0.1.5.crate 7227 BLAKE2B d1fd6a9498b3ab7f25b228f19043067604bf20790530fd0ab6fe3d4d3bc27f13e6e94d1e7ef49314c3663477d8916b8790b90427f74976143b54b95350895165 SHA512 7e560314150709a34520472698060c4f29689d4e608dc4dde146140aa690350d3603279c693367deeb0f21ab34ef61956143a3447827a2b7a3d578b9ccd6552c
+DIST openssl-src-111.21.0+1.1.1p.crate 5102958 BLAKE2B 4156423d559f1619e1dae256895cab8c8cef8818fffdb4c23abdda1706642f279e11e15462438614bc95a56b3eed7b68dc3add41be7d7fef734033858ab70587 SHA512 b59a084e672d41fcbb89b62d1a483a349e20f985475801884352f433108423bec3f78a6f6c9a71ed9bef9fce8a5e72addbfbc7ce8b7681fc30b26d5ebc9ff18c
+DIST openssl-src-111.24.0+1.1.1s.crate 5106276 BLAKE2B a2da79f567049f5bcb15d15b5083ff9a4830ea7493cff48c58c7cec06bf965f3f123af4cff2b0a24b8262a8f7a0da797f351a61b77778ac005b45dd72e05b383 SHA512 c573a93df6a226d4a451d6b1d1badf49e55ae5bd1b60ce3d6a380dbc999abefac9b46df099f31e30d47231fd55ea93f7fcf2bb8c13340b6b201fb8eb9622cbc8
+DIST openssl-sys-0.9.74.crate 59808 BLAKE2B e616a0194828afe67d617e4032ed354385935ff7aa40eb495781b38b134226d5c5cfc5f9405e6273c96622245b6d4771a71b7b9512e3be7feba9a2ce88b66ecd SHA512 18015ce4dc8f15f3c371d393f4654db11b6e5ecaadbdf6cd9f020ee9aee29f3fa12a8dd74d432d8e8b5889162491b722f855b02fbf0892c8f2003bc4e692254e
+DIST openssl-sys-0.9.77.crate 60799 BLAKE2B 8a2344c7a579c568a420959eb2710a012af0819c054b190cd2de688defa804bbc735efdfec1a537462feaf9cc1d891c4b53be1910713e06786e811e66c6b1488 SHA512 a31256943e739a4ee500a1080d105d8380a65ff43b88ef5bbdcc164cf97a133ab2926b5f4ab3010bca3c14a09edc7570a2edfcb745fc21169408aadc0eef0fff
+DIST ordered-float-2.10.0.crate 15589 BLAKE2B 76561b2ab32b61ae69bef039f5f4636a05533cb8002b894ea18ce776ada1b5911c3067af2318126f359a305d7a9d3844053be62af1cbd2c3c9c1f45443a1cc9c SHA512 cb883ddd723d1bedfe13d16c9546dcb84d17d4fb1c6dc6d632a0c385d80b0b881694b3364a406e5d7f073c5a7e9e80810f343dd1d6f22df6188322b3e89cf77f
+DIST orion-0.17.4.crate 175901 BLAKE2B d01cfe58efe0f9ecb3859fe29f49998da95450e01f6955605665282e41e03b4dc04ae3027e4519982a44a58bf80d547d4fb0dadaad366ea24b1f1c41773e3aa3 SHA512 a10d11867952b0f20cc964ebd08285272edd209efe1444e87028b59f13634391034ee9a3987e4708ba138b94e5ac2dfd2714276958e1afa6463b1c779c28d675
+DIST os_info-3.5.1.crate 22593 BLAKE2B 33fe303542a1b560c95f987ed690337dccb1f942f12cf00484d3444087f86388dc5b7f1e998d2d71ec23b3009cceea2fa1348a587b6157d0a75ec4540c62b41c SHA512 933dcba711254aeb732666256770f4475d256f84adea1ab37aa3c179a015973d6baeb2d990f0cb75ed6fdd1ae9aa0819d0294a2a11d5925cafa69feafc43187b
+DIST os_info-3.7.0.crate 24133 BLAKE2B 321f1c47fbb4425bb7a779a45cbd4edd0c8e57bc97739b80ff28ed19144913af775aabc0f328fafad6afb75f2a54c8b0132c943eaa713b469138144a68497e4f SHA512 46945e48e10677fed222a6f34e428a7fbbadc4535b929f141d98483246d1f3cfc45eee905f1bd75123a101d04c5111b6376233a5cc50df2caa482a461fa49d06
+DIST os_str_bytes-6.4.1.crate 23101 BLAKE2B 252fc826f646bbb999fa80b47f58ac9a77e409b10a99284c7b669304c0cd701a3d20e690350018f5d7de8c6c7d38521f3413ac81d08067dc26f76b7c0e5b056b SHA512 2199502ad24449e08370686a596f905325f5b145e105e8c7bf90ed7729bbc405e065fce62c98eada40f77f0665ca041db41f16cc8e62473501eca32c24e56f43
+DIST p384-0.13.0.crate 236495 BLAKE2B 240fa9cf7cc066cba64e9c89d78ae65d0f0fff3e875b0175646114784a2eb0083cbdac9e1a17e6de6b3e9a6074b8f318e8d6abfe63b7de432c2d19dfc0fc0091 SHA512 e81451d336b2fd0c1dc3483f1e586b7d4059b3ee7cfc935edca6be1be02d23b1e380859a44d0a6cc6538fbdfbb22cc22b8d3aba11cf90c6fdfd0e8edecdfba17
+DIST parking_lot-0.12.1.crate 40967 BLAKE2B 940a112a066e3cbd15e2f6df89bfff37e4ece2194118618a96fa14871813c91798f93181ab0f768d3e1f3d60805508f216724013afb7e3da95678d0d951a42d4 SHA512 07327d3b737a913508dffb66023766348ce7f9d555c224a099cabb05baefd16a28e15fec638e3a148a5169dbd980c4541b0f8820ae9d06dfe0704482838fbd5c
+DIST parking_lot_core-0.9.7.crate 32412 BLAKE2B fec3ed2cf28e6d5090aae6a7c0ad583acf3ce6e54e881b78a9cb6721ca1e7040d46c044d405852728e74baff6ff1feaee7a89a64c69d20531f29942dfaafcc72 SHA512 1f232f1a87ba9377621244ba49378663f3113da7192a399fdb70be971ff5e5ca0d0601e1210a3fd8ab75ef464dc8505e719f81902e3448cce5e7848ef4bdbef0
+DIST pasetors-0.6.6.crate 137852 BLAKE2B 23827d36f1365f5ab69f553896ab92437ca91a9b6d177e0a3d2980527a62de4707ca36aa7eb6fa7893a121198777d6417abedc80d7437b99b049843087c8a1c5 SHA512 513d607a88f573a7d3255907151afcf682d47b60fb5c95b9014b0391dbcdfadb3a2a1b57620b5d5f6db6974d2ecd59e7f8e4951cdbad0e92a3dec61649a2b427
+DIST pathdiff-0.2.1.crate 7142 BLAKE2B 7f9a162c2add4acd69a81171fdb31aa9a67beb4e1be0fe93d76dc46b320729257240fca5d65dee38901f6b6ed1e536e3fff09c93cf3482859e6ba27e7206fc5b SHA512 a646f271ce81d5f6d4a8e0d98a2c802a8796a961cf8fe8177911e7757bdaecd8b156ff22046f1663a9efcd5fef1e6f000e5509d3949dbaeb494126b7e8a546b7
+DIST pem-rfc7468-0.7.0.crate 24159 BLAKE2B 478d355dd970b9705ebcf44d74d61ae0694db6de16b2018548fda88546f53e35b965ff72d939def399a49fe97d3c8317a10385ace94b3d552797ec64ace1eb8f SHA512 f47d3b6c7c8bf4547916acc2a3d6671f6c1308e74641419c8f1df810d8bd940aba8f94d361e4cbef3eae3b7f11587cd3996a11be3be41d19111abfcde7a9272a
+DIST percent-encoding-2.1.0.crate 9748 BLAKE2B f3ff35ac683724b15e40c85e0fb8ececb07b61beeea82b7020f02d27df05a8a3535f157b3cd688533e414d6541de7de8640ef4756706d8061af0fec94ba04ab3 SHA512 98af4dfa7c6a3cf0d5aa929c436f9eb1ba1b576a944513f1284e6df2ad06be7cab9eba145d888d50af88f8c970bacc702b323041bec6d4fa1dc34095186c628a
+DIST percent-encoding-2.2.0.crate 10075 BLAKE2B 397e59acc3953868c709244b89a2e0db3304c0b574ecba761026b570a485f2cb5b0b2a0159586d1f342ec395ef02ace536da3bc1c72093e1cf93f8b37b26b0ec SHA512 890a5256d2b4290e12e04a02c3529f3a017faa2b6016a4dd0f08b36509f0b1107eacfcb4702024d6a21ff8852a11f263c1adc096b16ef8d12c45a734c087fe68
+DIST pkcs8-0.10.2.crate 26360 BLAKE2B a62b5b7386eedba6fcbc4cff2b103b899dbf6179101445283f9076080489129543561af1ad6f09061564f68c28954262e49d0bb3e182f2ce7495e19d6f34bd5e SHA512 87127d51f0e1fe085d46b30394f2a580e857cd64f5c6fe4a3ac3b8871230aa426598dbb007e8bdfd5d729b99a9c0b4d84116f0768886605342d2ed112c51dfa8
+DIST pkg-config-0.3.25.crate 16838 BLAKE2B b6ebbcacdc0f440e24ce5730edd4b371387cf7f44e438216893f29c0f303ac7920791630d4a9bf13581da840c8888e18bdd78dc61458d3331e967b3dfa6d0597 SHA512 46658794f0a7446354041c1cc08cf637970f7651c0c506e2b90c9d4e284347cb82f05ce282cc55c8087bed58a5b961424a56574f4500de9f3ba9cb9e71667aa8
+DIST pkg-config-0.3.26.crate 18662 BLAKE2B 2ad92dfdc8ac0414b12a61dd30ea4ac5f142bbb55d0555ecfa3a53e750367e1b11766a693ef11f8cbe5a2ddb978327632458b2bcf75be7aa8f973262033349ee SHA512 509c4d1494cccc20de6a62d9d037c63ff77ebee8d907747c57ba0926d177b08fcac0231ccdda14511b453deb0b76ddd10f8fbdf63ff94257d72a12a889546435
+DIST ppv-lite86-0.2.17.crate 22242 BLAKE2B 48c4a31a3b555fa37072c4de083580bb769747c7668748541af472778b5b58c3e7ab2b5e178760f542f973774f09910bdd4058ae5fb9d6b10c103eb76cfd0d3d SHA512 539d916e7e5869d832045c1aa88aec519bd000227f9b01d4dd0bfc9ffb640d5f5eb21b05eba718174773c97192a655ad3cb31b53ceb914dd19179a6699b3583a
+DIST primeorder-0.13.2.crate 20139 BLAKE2B b6539be08d6e732143c45403c68add90dd19cbcd34f6bdc98e28383d314ef3aa2c27b5d988790525507033842567a8339ba7c8c933e705189bde2077e6b9d287 SHA512 8d7005b3463442f6e982e7cce91851cf60abb9da7fa20b148a660f2727f0229c6af33411fefba6a3c956325ccaca593a8e13a0f8d905b1ea26bc3f53fcbe9b11
+DIST proc-macro-error-1.0.4.crate 25293 BLAKE2B ef918c5efaf2545ab38787c8d0c07315af00431139e4dff66346bf798e3a429f91d12a79776c150412fdda0b158a72badd5e1044ac4d6917f8482d4b5a7110b7 SHA512 8a47bc9d3e24e9561d1e384d8f5a633284c2cf9b5e6733c5f9d1dbfe1870ccc8e2152482852e50b551cecb68e009148585b910ffb0508a7b4875598eaf8657db
+DIST proc-macro-error-attr-1.0.4.crate 7971 BLAKE2B 98e2925881c2be186e22c2c439697e91d43f807eb61a5d13e3b0b4321ed50a74f3d699942c04b89b6fea0f156bb5d19ebcf22f9cd4b98a7e6917c437600ed823 SHA512 2606afa9ec78d7dad4500c98d3a5ecbd02c6b53ab829c742bed7f57b322a95238ab4e01cf268746815f1424fd9b02eddfa30e72f98c66106f57765f3d3116495
+DIST proc-macro2-1.0.47.crate 41955 BLAKE2B dbfc20b61443225130d08b05deeba56e63e76921e56359c9b0531798b18778d6ddcb56c3372fb6ccc68586a6c1dc725054f0e83f93e8623cb5ff6a7a2ed3dc83 SHA512 60c5d0dcbdee7ddab40664882d3cf5a868f7ea5b49ebab3b4419c3f325582b816625e73e0d1737bbd46bd7d765ece6c81c2ff4be894555d4b255f5cb9255e931
+DIST proc-macro2-1.0.59.crate 44360 BLAKE2B b1e42efd70e9a61bd46fd8bdd7db26aea142d98d28765de799901606b721c23a22c3e853d0821709ef5ddeac0304731b6a09c3bff3b7769e946b77fc67e44d36 SHA512 30e3340f53593afb3f07c4ba4c3d51acabd9a7513976aeaeed4c063fee268a28066c53b265b629d5d3f56597d1d34a9e69378f0ef5cda37b51a8fa8b67424aea
+DIST prodash-23.1.2.crate 83797 BLAKE2B 6407d22f46020a7c1b2d78a17d05bcc4b8088a913ee31a778f0f403530e908ba3eecbb4f677eaf8dbb7e90bfb3485dbde47720203119aff0696e555c07d339de SHA512 733c3a072fd544c151e5e1298ac4cacfc4356813e454978ba526adec8c9fd00af6c37c84ebf156e5761776d07cc4142bbbf414ed19b01533a90222e64cf0fcea
+DIST quote-1.0.21.crate 28030 BLAKE2B 547344ba9272874f5fbb4bd27a69ef5be99823e10e1318afe71971b18f37e9c73d54168f16efb82c53a332e4874c80a82ea951fb2c85fad50cdfe783622b79fc SHA512 0728eb4df7e1f7c4d32ab08c901c2c969db8eb46b03bcec3e4956a4f6b360939d32abc6b6ebd7a31058e8e9b69c3d995a24cb484f93656f05b4ee963be1c74fc
+DIST quote-1.0.28.crate 28382 BLAKE2B 9fb16c3bb2a7fec3d8138ffec1f58277061f4a643c9051e1f6525f9e347ed9de41a3797eb3140a6dd828526eb4114c1f7ca562151dc933f338d64b175ed35d9f SHA512 846d718153f78cbae6dc714caa9413a5d5964bcc5e032f5c6c5356c62c33bf22635955ebdff0dede69ba1c9657387e65d61de7c537f6f56f8060721dfa52d735
+DIST rand-0.8.5.crate 87113 BLAKE2B 516f26bb2a969d0d79e957818133f35d2c0b4d9f1b401098ea23c5b80d27599e842b9298c0c5e46e2a6cb6953857bf8a9fb71ec9366c5ce6708cf17df14f179c SHA512 8b33a8988906ba5e2057a9a84bdd11f867a5536c22f5056eec59ed4ec4e3a6da2fd773da4c0510d343762e5a4ea0f007db4c4a7cef87a47f90e36c1a84d86fb2
+DIST rand_chacha-0.3.1.crate 15251 BLAKE2B 645771b2c3e274f085e0837a20306b1d59f6e9032fba8eb38a6d1b30180d15e2f89ffa2a162bf6358da41e030098242d81e71dab4321980d0a4f6ddfc2974ce3 SHA512 8198c580b1b9b0429758ffa49cd8138fa3ce724f0dcf73c767ea7e55611d6a2e4c7cad9950896510def500ce4062b594386c947ac3d89425b4e5c9b04d0b8075
+DIST rand_core-0.6.4.crate 22666 BLAKE2B 8b6b66d50aade877f2779c006f8038db450f808c66d73d79efa66c4178dc03db06f12201bf0e7930181c4b0f4030c49b20cce6eb7839763cf2217cad9710789a SHA512 36c67eb845aa2ccca49d6d680f28d418229bbc5a050729e487fe6b9f9f384fdd7b8d67fc6508b90b79ffb3c26688e72feceb3ecae57d3d7f59338aeb62296f79
+DIST rand_xoshiro-0.6.0.crate 17125 BLAKE2B dabdc3641fa85cecaa057d988396f55bbefa57ddc44ec1989958b40ea7dc51ffc4d04cff556fc6182d202cfd61834256f31fbf8c71c40b37a230610095c0b6a1 SHA512 dfdfc6bbeb222f6badc186773f3f3ac7c899d76f7274c33fa7bddf00a1a02b9eb6990f7f37fd37097085cae7a86d21e0819f8dd0d254aebda66fe367b8867b34
+DIST redox_syscall-0.2.13.crate 23759 BLAKE2B b59c3e923b7bddc84285377eca86e649c21ee7dd61924245d43c6554124adf689f9b92841ca64876b34797249698511b322f6e8e639d71e45e1ae9da5f8b7834 SHA512 6551f503ba52c4edc0cb4a418ff212188ddc7be80dcb39eaf3bfb82faa9a76cdf359f604d6b32be6c6a335b54180c9399a0e32670333a5a08351957308486100
+DIST redox_syscall-0.2.16.crate 24012 BLAKE2B 9497a52044458b1435ea16e86ee072e379b6b11ee31602ea72d6b6072a4a99426f409c2e58108a4e9c36dc193fa49c83951e71f4fd4e158eafff18c594dc01ad SHA512 63b5d876baaf99f5cf737679bc6ac7a9e3d8a41aa93f5c59416ce7e3841e2513bff678773553cfe62fb452707f82acc384ea63aec932a31bf94679cd1caddd27
+DIST redox_users-0.4.3.crate 15353 BLAKE2B 5e3b4e902566620cee8856c092cac193366ddcd2f5aef787b1d485353a0da11486ae1359dc60f3c87a198cb68f93ef99ac7551cc2315412b93b10ffb10540633 SHA512 0d3366e23cf93e1b0e025a29025eaebfcd1145bd158e2663b94fd952dc2d8a25566819e3a03c4136ca16a6408d37396e2ead0814c3f0c2bb10334dfd0b838fda
+DIST regex-1.5.6.crate 238593 BLAKE2B d2b200d9d3d8924e7dd7a1f96c769a5bdf01d9bcd358ffb90692c526a81ac6f1a5db8ab0c343b96868ef9d71e78633373744468fe97d281676c84ac795352745 SHA512 43ad2ebe14f43d69c62f563a4fd53b5657f0f2cc130a0e6353a13073027640ff891e9f9b40ea85858507047bddb2e023d668c9bf57f2ba0ae045b74b5f0d2a1f
+DIST regex-1.7.0.crate 239421 BLAKE2B 6e9434bb9835bd8e15c81e817aa64e8443c4188219caf46579078c6b7cbd98ee588af0f526e0fd5a01814762dfaa113ca3d15f7cfa14e969d5acda3a631e9560 SHA512 974c15a593d86c33e0bb34f7a67957fe96dec07b3752f2b6b968d657845f5d2342a5ee9ec1359109c43e4f46c9b2b2b678d59f7b752455a0ab1435c1fa56ca3c
+DIST regex-automata-0.1.10.crate 114533 BLAKE2B 0e357229f6825f14339b1d7c40730b83e62bba12115d01ed20313320766e769a653a2fcd2c9d19af51a82c38e9e42c1a31d005e1f44f5b6fbb3ead7c9c74027f SHA512 56d64da361afce82c6cb49e70b99ce1fca3e1969c54bba5f9971db135f8544c65f49feb8827789947b3d1dcefc9c49a7a434a7ffe0d09c5900345a1733723c5f
+DIST regex-syntax-0.6.26.crate 293912 BLAKE2B b0ea1ea1f87a493c770265a8d9371e3c532bf5ca20330b5946f5c922292d4420ddcfc30105a4ec3c1b154b5a77e55e86987f7edd61ef34c12eb0b4bbcaf23d2b SHA512 46087f5a2abfb48f24da77e79e66f6e514b5d005c4ae2c3283418ec471ddac9e4a1361edbae9d27efeb10217157092f812946b7b98182cf9f8aa703e01c03634
+DIST regex-syntax-0.6.28.crate 299288 BLAKE2B 8554370e269e888e603c403089aa6eb4a087ae65fec016a428e424289990a07826e37a2e51cd353c7d530d5b3421e2db6a8f9d50e62379867bb5b6cbc57f2436 SHA512 ba5fb1622a330b67a4eb820551c7f20dbfdc6b38eb697b9bfddea4cf0060b473472045e93aaf6cb9727ae609e06ed285e1e42f06f34ac730ac39fb90425bbe85
+DIST remove_dir_all-0.5.3.crate 9184 BLAKE2B ab7ef94e0230ddc9b363f038254a180881bbc20eb04a254f97e6f71ed491c99ba1c88f5e85632d450243882a4a0df63f3b8b183bc1fbca9caf30ec23d577b1d7 SHA512 50417d6d8a33912193a1ed37eb72b47431b12ae65d2780cdb7080c3d141e63819da13751c3fb737685cea322f70b36d413389c3dc01aa12b4dce615aefed0e2c
+DIST rfc6979-0.4.0.crate 9140 BLAKE2B 662d967b1d818439e972d19bd251a4e3609c65bae945b4d11c0ff4966e9fcfaecb739d0b63bd767cda6a22e77a52f3386f02cb27c5c76ce9008837c882f8df33 SHA512 fb68114f5f8c1e7b921ed175fc01813531a584b8cb2df1264b72e1925bd66b4c021714b3627fbbcf3fabc26e4d6578c4d246369a0c98049d4058dca4cbabb20f
+DIST rustc-workspace-hack-1.0.0.crate 774 BLAKE2B 521f71467c95554c8a87ab3e10623ea3516932fe4bc9ca95c835c06b8e0bf526291dede3a5e08df8222f365f4d326c4054a99ef0d37aa6fb5210e2a35d7599be SHA512 48e4774a272e717ea571f4c22606ffca78245723ebc3f15ae5d0b28c5d767df9e772b7e2d6c5c3505bb09bf28097aa83a34b182856bb9d74b3a00b292da45315
+DIST rustfix-0.6.1.crate 17352 BLAKE2B f353ac56f01bf9e1b164ca6d835f408be5189644b3db328cfc6bac8532704af8fb85f916f2de2a4cd7f4d3c0e9a8c2c8415a94d7f19737bda6796ac0a83ddcd6 SHA512 17113d1349a0caff8c93888d5cc8bcf943b9ab9033e87e9851473ffc115d4721125225d433384c375fc0df00edf3d4b6388ee507d0fa0c95b7a6c22e020cdeaf
+DIST rustix-0.37.19.crate 323809 BLAKE2B 6a01e5128910c4b1333359efdacd5d0c1f0cf0ac4f2615e6891c10e7de3ce8df5ca50955a3e5c27f3b85d3ffee9fe28105aac3baa4fadd05172645e9f7ddb853 SHA512 e1c00f97414313580dfb7a616cd0e9a64d87950b4d4e6b536b5eaea93b8741f769ef62d4ee1461af8266758f9bdc136a445abbb05c8355a11d338a166b498722
+DIST ryu-1.0.10.crate 48485 BLAKE2B cbc0ab4e0b2031f4ca3a34914bd61395d14706d42e2414757aa23a67530d549382d61b630159c92a169d1dd3315951b0071ff18349d2b090ae262de536aa29e2 SHA512 1bd0af71a20715251dd42596df6e7677e44f712bbb40b0d9544109c1b2478a7bd2c9393535f0d4f3bfe2d1b75b3a2b899044051715a7da7d165d6d586e0775f2
+DIST ryu-1.0.11.crate 47007 BLAKE2B d03e8df69c3b21c1b2e4ffa91ece794f141e9f9bce4e9ed1ebf394b1cb0f796147b86189885f0734df8f431b2d166d8f6ed6a261be398d6d088fd56046a85c2e SHA512 dd2642aab2d3017c31432436226d5350b894c8b88a09395eb7de6350964b3cc48451a829ce78b04a9e4e0480076fe1bddd0604f4e57700faa2d60cac6e361408
+DIST same-file-1.0.6.crate 10183 BLAKE2B a320c8343e0b38078ba81c4f0159d886bf47764c74efe0d7cd2b3218426e8341b51e523c00a9e5fbc2ee1057618296bd70b576c68751bd55d6ddb352defaca15 SHA512 3ba35309742c8db63210d9ea78bff4ecd80471d69e6238eb96c7bf0673814f221e2d838fe6311bfc5a0e71b4a7ccba33e07859c0b9cff2171969ff08a4214a7c
+DIST schannel-0.1.20.crate 41579 BLAKE2B a7924b4bf0f130e2aa4668cad3c7112e39e028fdcb04259c6926fac4875f8061a9148da5f001dc49051310ed8e6ab341da0990ccf0a7cbd4dccce8da54c1ca46 SHA512 19f217fd4571a0d0fcf52060a8639e0ce7114719aa23fb0aa2ab5a531e8f8be0a21af55ef45c8da804101e5a62f15669e66fe005c4cd5bb24def09f1b4afe059
+DIST scopeguard-1.1.0.crate 11470 BLAKE2B f774eb90b7d3ffb2efba47518e9d1dead4017ab4b38a4bd74914daa84a5af4bf9eb63da0496e3924499d79cd0439c37447aeda4a21226f95645bddcd6becfabe SHA512 368fa5726df8f42b599993681579a9ffd0196480ee3cd0f9f671e8493f3bedd1e1779bdf2beb329e77e0005fa09b816e3385f309490c0f2781568db275d4d17d
+DIST sec1-0.7.2.crate 17935 BLAKE2B deb59ed300c697b0a8cfce31ec6a9edfda08896b72d12dd9350acacfc64571c6a68e8429005656a289caa3c73f2a08531b63efb60af7e253bc611b3281103bb4 SHA512 c6c0c589c9f0a177f4eb71fe1db1922865b721fb4d086a8c64d43b2ae70f76a5f688116ba2134d841112010a2d1dc8d0226782c52b7e6fc9f412f8d7941a2bcd
+DIST semver-1.0.12.crate 29615 BLAKE2B d0a8e7d148859c402c6a84ed8e261e738879079c5f755a80af6a210696ca157f1153d61596bf40f83d75bb69f27c045791ed141a32441e5d8c906aea495bab69 SHA512 d9c0984e59c8abee49418f785fdf5f7110dad8b4c84368723b7682bde3b9f97eac458f4a7ae2969548757b6d989bfb45909ec4a26b191ef304995628c7c78440
+DIST semver-1.0.14.crate 29813 BLAKE2B a080f0a65127142a90bf033452241ffebfc7098b56a6a6b8bd818528df3b88fb48b3982125b405c1601e1bd55f3a0fdb4ffd9653e398295d8156651a04b2e903 SHA512 04db4c0a30141c2767d24d6d715b66ecd6355c1c88e572d4c473e0fa8c1fdd7197092b8286c973f25d201c5fcdc9105ba3e28c11ba1546a666167afc1fdf6728
+DIST serde-1.0.147.crate 76697 BLAKE2B 90fb2df19ad225c96a30cf88dea82a5785bb110f256b882cadef8d1e09f91dd610637a104c2e7629847a14d4a422f89f7ae324c29845788aefb0a6bb51503886 SHA512 d993bd86c61bba602faf7286ff21d36c5d8c83176c5bbb203cb284a3f89dbc8a1ca893a09eb2657f9e98ccb5c5287f44aac06d2e60db96e78d99ee40bd1fe1b0
+DIST serde-1.0.163.crate 77030 BLAKE2B 0d7ead66faab8ae01c693c9bbcadfd0a7a736c8bf46f50ef43ba261eec9e0f0c43477feadb2e134f0ed6dda3115dcbc3d22daa28592f343739f1ea03d9c25723 SHA512 752738ef5f67f1b4435bdd4e76e740ba192bd93e83cac55fd667809af26ceaf02db7083aaf7b2074644b38964021af206000b6130199e7994c12c9c57cd31a34
+DIST serde-value-0.7.0.crate 10249 BLAKE2B d2d3d687cf490eb0be1910bf82c09334ffe32efc485297ee228363e4dbb536b72e2c37f3d37a5f8fe61af7480fa8975c0a654f761c55e56348082e4605f2288b SHA512 6ca9a73420ca9fb5415730bac4daa30087b1722ed7966ae07f403497b8cab95e1e1da664c0581b9cd170494242d4e01be75e1d5f9b6ce19c538e7323da46bf76
+DIST serde_derive-1.0.147.crate 54861 BLAKE2B c758a3c854f1474dd3fadd66d60a59408e30d5b658cde4c7ceb10c8d4b4210c8069cc13618f83f1faf36de928feeeb82b2f7011b457e8b9003a15177714f9c0f SHA512 434d65dc0d78c7c1c3f8832221389dc4b0c5d74d605ce1d2d660c2df9a92f5e5d0c6d543763e1462c58d6ea18001c823ca594e3dac92a47d8fe48319a5c52e59
+DIST serde_derive-1.0.163.crate 54447 BLAKE2B 284d02fcbdd05c53c8da737fac422fd61ff53669b140686d1732ef727a1e873945b1ebdb85fbda1d79f2c563b2c7b81d3ac51c76fe0cf5205dc6ab4d46a9d4d8 SHA512 744c4235330781c8d9c6ab4f49f6ddd11fcd70b97c97fcbf1434ccac02ba7d29eacfed21ee8e005f5541dd8ab4a34023e95d85231f11c5f4d6e24fcf806f7283
+DIST serde_ignored-0.1.3.crate 12434 BLAKE2B 665fffd6ed4c42b331f3589d7bffa48d581ea730d352a5f26c7d133a82b77a3eb0f29bd22da19df6a7fe08334a262140d44195d7c591991da174ee29d0e3e444 SHA512 9c459540b614a2075cc4d6a6d5bf1f3b3f91e8e48687388b1aee4872ca0eb95b1c265fb2c918929f99d0d8f2dae22f9eef4c67c5ed2fc5376b391163b20d7bda
+DIST serde_ignored-0.1.5.crate 11858 BLAKE2B 82d28254d8f43b29bbc16e5cd860e6c5692fd7b9b91ea7c59719c2961f979d6637df50b664738f32a6c1f7028d99a8d0a175b82da8ed49b3f71108dbcb3e14a3 SHA512 814762f5d624dc34d2ea1756a20e75f648e71ef8489243985088c952ad09e89773133cfe33a205315cd37ba9b40ad16792c44b67f0be90de849bd48ec2338a2e
+DIST serde_json-1.0.82.crate 144514 BLAKE2B dd4b5ee1b93f04be09b1c204f8484091d608acc3966ed4c8252a1d46003dd154666e2731e761828dda4123da5c45bda653f453454c5c7c11977aef05bd0e9e9a SHA512 39e4cb0d8b22c9beae6decb87b9692581698c6309b2e9fd78e5e199a200da563e7459d34435b7890e274e13357195392cab69d73d3ee2ff537c1667de32f92c3
+DIST serde_json-1.0.87.crate 144383 BLAKE2B 357ee30245611b15bf98ba719266dedc75211a80a660105756b20d52f50bf4032385b366c3272cfc1c7f34022e818cb6a6af799faf76f8d5969c256a02f9187c SHA512 77b90340aaaa0fb477b33e6628ed2ea0fb53cff1e2b5724a3474e24b2bfc9bff077633d9581e41dd96b2a0e167549e992d238bb09c627fb5680996b39583c4cc
+DIST serde_spanned-0.6.2.crate 7749 BLAKE2B 3a2522104579cf667e567e1ef65e2e1db3fda700abbf10747f1e770b45678cc6414ffdf384690796fc5df570e39a7518af15857c8c3b5b40fd185f32957ef30d SHA512 ca64305238a8cc61cc4db3c9675299d34e4810dd63387be65231369cccb69c942c473b01388ee2b661cdaca8e133f1e8848bfa4d6a43eff28fda0fa9e1fe7ded
+DIST sha1-0.10.5.crate 12146 BLAKE2B 476a0c365ab639a0ce427856787595865a60339fd6b81a45f879ff9b9112021d2c3a62e0a817b4555951131a7fe257d0c30988631ddddc3d217274c46c79ebe6 SHA512 1046b91a9ea64b90098ee6e16c63f0620dc7c2dc847d200972a3da3c8d1ac61fa9030682099a411cdd24717b64d488e0b1be1cbe8f7bfee26b8c15cf4f8e5e9b
+DIST sha1_smol-1.0.0.crate 9782 BLAKE2B 214b58f6a8681399b9c925815f4ff48974466b399e96e372c9592cb139ba9306ba162b3b426dc12b585ea15b616fb58a60d253b4d928dde46217de6ddf7d0437 SHA512 75d6809a2aafd47cd5f5888f42283985895a9c82b53ead7529a23cd6f2484f32654094dda7a9e5d93e82afc9d0049938def1bdc28803502d140d06a3496adea7
+DIST sha2-0.10.6.crate 20558 BLAKE2B ceae6f1e28606371f93f5e4fd617b2cb057ed9aa4aa2d81bf4c6af4ca47d639a51f50d0fe4fa77667022c770056d6d711beb4835b2341ae0a8d667f11a4a51a3 SHA512 38dea4c300ea8dee22587ab0af6d66dbde824e1cb071e02e7790bf978efff6bdb6d4076d61c5acb38e86e69261a65811a7bd0182299d53ef053202ee54d2b05c
+DIST shell-escape-0.1.5.crate 6847 BLAKE2B ccd71a73b217b375843d3f0a762b3f5317bc0fdc8e43380a17f25e1ffdc391de0af7b0e4472be23241a6654f5b6ab799a51bbed8da35295322002c54ad84e9a5 SHA512 848f8d47d802b82e83f113fb07f44fe962628379481d1bef9d15f2e5821a382c9928c32175652361aae9fe4c8fa5c1dc1c89350db6ef5e68691bae4a3742df93
+DIST signal-hook-0.3.15.crate 50138 BLAKE2B feade39b877523dd138a5df3114e13c35d6a2ca281ed4cb7774dc970b3cc88b9dc011db2914c87655c0962ad1cc72293fd105f06fa4297e02fe28d78bc56c1c8 SHA512 8b7703c8ef683868e4b0c315a73fcf6802f3e28730db6b79301e9818532ea62d6d218c9ff3ba465e02ed5c19a33e733ec5f7750ae9e0f823a2ebb35bb911a3cb
+DIST signal-hook-registry-1.4.1.crate 17987 BLAKE2B f1df8bba55c72a506b9210347f9dcac4d158948e73f6d1e60f43340ddfae368aff1bbb6a109af326af47246d9738d49f76d380c52208efc3c6f79ea0acd31f0b SHA512 e83acec2b0083967555f6c659dfaacc32d851a9485c9f6f4b4cf257742ae3ffba8c14708c75f1a5520e9d132ea9e21d6eb65aba492eec481e8492af8b798c5d1
+DIST signature-2.1.0.crate 15627 BLAKE2B 241847a73a3bfefb952b3e4e41a48b23803dbd949feddad06c02a20cc4aa8edf26c039108612faee896508c8bfe0defc99d3448680d8e46f2eca47fd4b5baeff SHA512 f903bd4d07bb954992f71a6f4579bbe935282a2b7154fb5090550894a32cc2981b7765f8b24f1a0ac9e41bbf7f32b99a91b8f22e6175323edac44ef43a66125d
+DIST sized-chunks-0.6.5.crate 43628 BLAKE2B 961121bd773ea5f0e6c3210b17191e122e90180cb39b35e501b49c41de69ce17f29bdb09617c22db4b4632f11193b2a97072f493707e66b956dd6dea61d5f310 SHA512 c7496094a6ac45003b31d55c61aa42e649eca40a2540e1acc507d541d3c02e5a1801fb517e2685752b81ef5a8c0ee6efdcc93dae9268f22ac8c6eaf1056e9656
+DIST smallvec-1.10.0.crate 31564 BLAKE2B e3e46a0781d3a7892a739b001592d462d0704f010363984c439e3fe4f75aecb9720648aa1e9bcc56bb3be848dd40cee578212439f78f07a807c9441c3c3e0147 SHA512 a09110184582dcc01d7a0d3fa8f74c17bf726935126d3654667b8e9c4bc43ad16ccfd8fa94feae7d9b31913aa7ee030fe5936e4b44a36302b6ce5fe37372a7ae
+DIST socket2-0.4.4.crate 44048 BLAKE2B b2b1aad2995e44944b98ff3291479fb74e8cc965f866e692821427e488c68282290773dcd77da0542c45daf231a5e676d20e59a1d4568b8dde2da2f16425feb2 SHA512 6624fb9b933763c22e6114a8f72c6af0969912717017dd5b13f1b5df19faa1b160376c12e8c8023c435281f6a7864e802f3c4c535de8a345fe206652104f2cd5
+DIST socket2-0.4.7.crate 44619 BLAKE2B 9bf2560812db2c91498d12274e02d17c279efe5817d882faabc465de71b1cb8045f6eab3c8e6031f6fd18e0e77913f42daab07f01e8d83bfa5ea44cc6966466f SHA512 44487f2de30cd327cad1af31ad36aaaa0bf10c33b5c23b024ada8d7e41d064fb2adbc9edb14aa8aa1eba679d8530c373c7187fc68d9709ae736a5c1a2cf37088
+DIST spki-0.7.2.crate 16270 BLAKE2B 95e0a36569f2d8941717c1b5ef1f346d2c5017f469d4fa5450fcea781eff102178acb2bd0ce226fa042a7c1457c121c42f3757a4af34912dbca0406060c56bf7 SHA512 25eab1b8590ed849ce1e93ac286e51532cfbaedc8c4ba98449ada0d675c8bef3bdeafc942fdf574aa8def0d148b7a6c694c69cbf37a9a3da12540b3be67d7fdb
+DIST static_assertions-1.1.0.crate 18480 BLAKE2B 358dd5ac413d06f62da0388e2016c5fcb8ec68fd7dceb0dbbcb97665c032b7509b7e083c20701648b6a9174485f117c02682ae4bde7ef037e80a85cdf6a0c86e SHA512 46d0e35f77941dee6f60f574c130472248063dc38494c1c4f84f7c048244cc2a58a86fe17c0990e3f0f01406b75ed385a13d00058612b27cf0e867c8d31c92ee
+DIST strip-ansi-escapes-0.1.1.crate 8668 BLAKE2B e140f9cf55224953f0fc64480cb62a8191ac7fead81cfb891009ffb379085d121c577d6b40b726c52e9eebcedaff617554b0e0b56975048a99dde33b85de367f SHA512 ebcddc0af68f7263726d8f9dc3825819ea75389bc6f97f97f0238b17a06e0596f1562ddcf065178940e4f1963bf7a2b99eb02ec124f9f633b2fab1b443bb5717
+DIST strsim-0.10.0.crate 11355 BLAKE2B bcb25ad0a7284e24e4f17ebe0ccb621bdc4118e499b50b094d98aa7e8fcc0b96716c9953c3516ce7ea78309d41d424892ded595259696a5bbffdcb07802b5c2f SHA512 78b318532addfcf5c1ccc1e14539e258aab9d3cd893cc45d82342549bde838c177d90f13c560671f8f32929af47d0b467db35e6876bd7697d8b3f9e055aeeac1
+DIST subtle-2.5.0.crate 13909 BLAKE2B 660c3a472ca54c9843ce3feea74b802e27fd7f62dd37a30e2a4ba82e4b3a71df63562e8865d5fc675d31d0900998a8730503f91a61450884446a3bdd6af0041b SHA512 f150b1e2037554f8cd3213a54ddbc258f8f670cc4f39e7084cdea4b47538dbc58b834bc93b443d58a4b9087224efc003234042aaf366687dbd32b1e7174082a0
+DIST syn-1.0.103.crate 236495 BLAKE2B fd139b1a8b4449e9be6eddf0036c19b93b876182a03f36954f79eaf79abd5e53667a8a9fcb5c872c96639779307fa293f597831ff838a41d90e1ea201f8a4797 SHA512 3dc0f564ac1a4ce85060926c0897158da0baa127a46bb318506f4fdc79e53d9439295e8ed6a2d5ffcf15d9f6651081b7602cc2a091538e8df061b545f7e3bfe7
+DIST syn-1.0.98.crate 235451 BLAKE2B 0667c24d7f6b9bf4c0a5f45fb51c903303a87c72d445ad824e05ab98a158f9beda0d00721144c486335b6a830db47fe57a34831cff6995f478c969c4d0a039dc SHA512 fe5dda742e085e14b6aea5617d3f9dd19ffd46009f34b119c0d74ec693042f641e594f75ff027dbfa38f3d5149a94eb6187248ee9d09d41dab9cc2cfc18fab18
+DIST syn-2.0.18.crate 240648 BLAKE2B 1e16f0936faf2656ee74cf9c75bdaec19589a4309d68b0cab37438061cfa29c66a1dcd624ad9247d63c85b3c1fdd8a484a65509d672cc6471f3c93f3ecce30d2 SHA512 2642eb35d52022c6d21bb893843beb9b737a267f620e1f5a6c9096d434fd1fab05fe007c8d8b6f1fe00a25007d6f55dbd4ec620b9f5c1154659bf34c246334dd
+DIST tar-0.4.38.crate 49158 BLAKE2B a344a65951c5c39212ffa3cfdc7dc68c40a85dbc5e4aa08cfe7cf22f0216443fa081ddba5e8fadc48968cc8e70e08d23391a6caefdf359310e5880741c9d6730 SHA512 4b6458734811e1913cb7e348f32db16f9402fd0e0027ae867db81aecac250b35d07d9478cdae4e27a609ce0f29c9d61683934296cfc3b371119df9f2c380a84f
+DIST tempfile-3.3.0.crate 27578 BLAKE2B e98c5ed4c59b6ff411e89ad4eb529bbe15264d6744edca8675c89bfb4397fbbb8da60bbc582da24bf9953afd9bb17cdb22654d933468697e9fa9e9903e6a7c77 SHA512 ba6faafb2dd56d694efe424752099a2efb50316afc0a4db9fdb7620ae3f1a31dfbb2a7b41724878cb977fa11f7568a406bd3b6a4f7cfc0b88b86b2cc616b953e
+DIST termcolor-1.1.3.crate 17242 BLAKE2B 5aef69c0004081bd3cc4d531d13d63627cc02313868c0faab62358d13abfa7b4ba82f142c2801d25a6ae46ecbc8b7bdbeaa21c9105ea3b8950ab6a38cdb88513 SHA512 5838fcbfd70f300cb4b62aab50565db52074c56b152ccc8ac1173e4676c0d5a636271bf5a645a77da6e1d4edbf0091af2cd4dd6d73b85c3d198c760898c06f3a
+DIST textwrap-0.16.0.crate 53722 BLAKE2B 44140aa2dfd5076005749449a56e920418e71e34cb92f1d697eb3f3e7f6fe87b0a3861c8a4050a4a62e03187b6cadc4495e4200bee52ee183541431c73e47209 SHA512 97ae8acece5663e1a6b08b827179e96d5ad0ee67d635888cc3d83454b52cf48fce97eb0eba374ba4747834099c74f43d66d9fec868e84be45369a42c1aaec2c3
+DIST thiserror-1.0.40.crate 18709 BLAKE2B 8057ebcd11546f8b3ae5d760c1dd1764386f3c29dc43bc7a4aef20604970c65356daef137734e80260051d41e39979943bfda496459696b924a95f455159704c SHA512 db1b1fab3aa61dc6bbc672670eb70cee2f838fa713d3a927022900eddde253108d123bded1aa6df8d314e1aa2f8ff37bc72fc9b0803fe3a56447a64290ab2a91
+DIST thiserror-impl-1.0.40.crate 15138 BLAKE2B 7590428b5a97efde6a823440a9c91e1d1835b20df4ad8a700c1eeddd98516f1203605853fc6dc65528c5fd92480d04f9a8412aa7c20a524cb94435b0a0032f1d SHA512 9027f2d4127864c34d2d92ad3b2753a95893d26f5b2dcdec869884a98232c5304db1700a38112ced258e5f3832218cdea3a4bb21223098e1b20d06af1fd7edd2
+DIST thread_local-1.1.4.crate 13106 BLAKE2B 64c19368f8cec46f23b3052759c4c4ef0de50748432790e6ea11b12477239b177d54e60b9046fdcb2f495b8e0b37ad82809d03602edab9fc85cf814e3bd94fe2 SHA512 db7ff3eb88a73d9313dd58d72397614c5aae6be1d64ead7f16535cae2857be3b27d189e7955308591ec64a0d67777fd2a62a2b124ca73facb9a2d8e0458bdbb5
+DIST time-0.3.21.crate 111598 BLAKE2B 8b760bf4bb8501ae3b4c121e1265b9f07fea633e8acfcc091e8c2a4ebf1f2025c87f13d63c95ee46eb3fe31f920605c2100349c8b7be0242ff8c74037fc7c602 SHA512 1bc0505fd823d7ab869e2b8b1e44563dbf2bcb7cb4a9fc67d32efb54872177e89b7dc051151d4d83d21d77d4c3d89a3370d35e4fd5db9bb5144a373e309c9ce0
+DIST time-core-0.1.1.crate 7197 BLAKE2B 9d0be2ef7111a8b66e5c750b2c372627ae4acfb2c68b0c6ed44b3c23bea1cdca4f65b24d2f2027b4d334667b1620019f4cb8c6d9799c1c2c537e6cfe692ab88a SHA512 a29d6619581d3fed73d6bc66a2c18805b80a3d54197feac5ad987a2c31d003bf4fef88a312d5315d2fa5c7d3e509066a65c1732be2ce280cf937bb4eff012e14
+DIST time-macros-0.2.9.crate 23684 BLAKE2B 5484a3c5bca52fcff3fcd4e6f060ee24ce293fbdad1abd5819d0426eca29b95de866fe1273e0ed3431d1b94b12c37f23748d4cacb0112a67e9be0f49132d03ba SHA512 2fe094e61ca0ab708d60693367812f1b87fb9b6770dbfa3dad8a2aad7d2a000c24ae3b8960104d6c5b72b4a055c7715fa5d4d601eb7b7ea1764bb730aec86033
+DIST tinyvec-1.6.0.crate 45991 BLAKE2B e9699d4d80a78978f0ebfd049f5b33d7f23d401cf4f4439ccb168e8c0e322473ad0ea7e2ff0ff69e9aac3e5c4c9ae5a7102185533bfbf96dbe77b3526e700bc9 SHA512 e5acaf353c58c60ae5556130a934f1048abb79cf6668ae467d308bac44b689d8a9997227ea879f4b5fe50f29cde8761801b088d7149bcd063b973056c381921c
+DIST tinyvec_macros-0.1.0.crate 1817 BLAKE2B a3d1966bf57c11afcd026269135a6189f149f905bb70b47537c0a7bcaef0bfc6c89bdcbdb0f6cb8e5255632855134631c683fc90606a254ec8ba818fd5ef0794 SHA512 d6afc83a3c70cde916a6ff599e2772588e4bbfa7a5b1c7e5c8aa0f4a8a5c9426182497a644e4a88194ece986d38fa64b6c8eda9eb1630441c8e65a8741a45873
+DIST toml-0.5.9.crate 55667 BLAKE2B f2bbcac136e0182cad9b51f07943610c8700b68afd08fdbb822b47bb79d215e8132376da8ac61fd550e86c353a83b007297b6ac92ef5d503e1b90e746c40c649 SHA512 7151bcafbe2bdb1d2bb91562daebd357c884819af047843f1b4a56bc3812d4153eaf70683d0f9bff51bd1048700920322d64d41da13ebb4cbf34f0f7822d7ce7
+DIST toml-0.7.4.crate 49003 BLAKE2B bd2f17019fface4e55370ccae5cd8e768227bc9303a105e9abcd7f7e67cf758e47cdf77a40170782c0be85ada4b7645d721b61144f90867332da6ae0728c9baf SHA512 aa589354d4e0a608257c62fdfa6f09d2094b6799f6cad5a98deaf44f689c8893d1b7989f1f67ff828867a9dd079374cda03de62dab624f55cf9df3aebe7557a1
+DIST toml_datetime-0.6.2.crate 10768 BLAKE2B fddffa3e4f8f4076c66c171379670df41d2be2c33810a78c5902f11bf8910f39f57b74d5f00ed77cc6b74bdbc34b293b57b2e867233a2fa9373f8ce7635669a0 SHA512 4ee0e8685c2a0738ea6f8ee10bf1dbb823d7c0e7bb7d4bd90d633f5f9056f77bd5a768d6b27d0f8d8a5818374f8497f20fdbd9a411dacd8b4fb58671aced1b1a
+DIST toml_edit-0.14.4.crate 105387 BLAKE2B 63b364d812969fb206ec8ec38e8c0264bdea3a3e7482e2f253c8b0c4e9903bb5becbea6ec03f38d9236be7cbe8111a437e667b901ed75fe32d6de3f94d3a2790 SHA512 613aefe6b648eb202002d447a63cec1b83aaf6ba04e964491069198a0fc39ad11268509a2ebaddd68ee3253bc28df2a0e771cc2876c57136e517850a3926fa4d
+DIST toml_edit-0.19.10.crate 95594 BLAKE2B 5894ea24538013d37bc6c4beb762c18c07a193918791d062a4ae0c1dfb0cebf6014ce73672feeb9fd3ddb0d77b58ecb2d3946ce00837d81d7de69b77c497bb0a SHA512 9ea97b52437591ba38b2aa0706067254de68d40c491ecd6c53aba370112a72cb502012c982a2b915bec4c0858215c3f0c44f65d049097c8b71de45aca32f58cb
+DIST typenum-1.15.0.crate 40741 BLAKE2B 5752d80396d0a37b0069b98ace9efe96d94ccaf41b33b8149c8b8c6a767537dbffe64251bbf61f3812465ecbc8cb45544f177dc97ac9735d84454282e4d1ed66 SHA512 a3c1ceac85e1aed98d0829449c35f4f36db860218b955b4e5f8f01da1d27ee6213f3c60e2b25c3745dcd67369049da5de737a9473fa9402db99cf7cddeb42288
+DIST unicode-bidi-0.3.8.crate 36575 BLAKE2B c0442dd47a8ee81f575b28e34c9781ccf507b53ea96d1d4df2e8117231e8e67579031e4244a2dacfd6f4c24ec01fbbd4da7c9ab72ad50af51ef56d7d813b6444 SHA512 810b5be48159ecbca542c715496f279518285c3b09f7c39451986f94e6c259fab1057512a2148bf99ba9abf76e861a24456b547cc2273f0b45ed5d3ce9dfe3d5
+DIST unicode-bom-1.1.4.crate 10221 BLAKE2B d175111edf436f96d6265b413c8f70b0796e8b0a0fe5bee90a459063dc82dad9837b0d32b00927aa173205b6b32dfedde08c583953b47d332d677ec99fce184d SHA512 c10c42a23822763f1327518d43237b9e2b2d2c9cfd4839d990beb8c85be7cb1cbc528514ec5f4428bd486bd59ce9036a7f980f2aa76c1a28aed2f3a57dcc7343
+DIST unicode-ident-1.0.1.crate 33770 BLAKE2B e028e9f1d6c01a7a37c8f9ecd6b1d99041b45674bc7699066bb7479822cb8d5a1b4083db1117d9d44ab05096d8a37a9bd5d93dfe8cc5db6bb58950b4f5d5c8e8 SHA512 505650712a51c6f309c97bf72029de1eede33c71b84de9733f5f987859a61225e3d07d369b85a89797d870ea436f30b5b5046306f3d5fd672551a4b30c43e428
+DIST unicode-ident-1.0.5.crate 35455 BLAKE2B 7e14ce97ac53a88ccec015dea690918a673dc5b49e44de7fdcb5421871da35c4f514c6db9a363d6f4bfcf2e9a61a50a593d345d0b6f388ea882b17a00cd0335d SHA512 d355370daac356d900cd4c0a792d6c0eff114524c4bffce4d7e74469fe2117883ee00bf0e27d950b72e88739473f2045d5f83440a0aedfede97b4d9163b64a6c
+DIST unicode-normalization-0.1.21.crate 121745 BLAKE2B e67a472d39b72be66f5f8e5b924157232dcd73edb2ecc1bf4f1aa078ea3b9860838afcb1710297367fd8c95f3c1331c91a520ac46c39b94f58a633919f124c95 SHA512 2994104d3393a117cf3eafc147ec9599c870b3bd4fbd096980534c8aeb48c6ba05bcf3f9804e3f2a0148940186dfb27871b23a991360bf8253a5a644f3cdcb12
+DIST unicode-normalization-0.1.22.crate 122604 BLAKE2B 3f3430b279cc0ce1595392c869442ce676ab097154c688779ebcf726e10c497df59be2cd7bb2f84f99499a9df0654760a10ac92224c17d74775aeebe291241e1 SHA512 a5810d5e9cd93dbb80e013997aa9d38e60834619483a6623eb2859ec5d59a5aec3fc4db123dc7f4e2fe9f2b8799cf6af48bdff22d69a00a23707240e8bf3bb3c
+DIST unicode-width-0.1.10.crate 18968 BLAKE2B 6174e307fd3ee290d0a5d1d31233baaa5315cdb73f19b8580718e9f9eb04cfd3aeaeb474af1e50c4b9fecc6fc777937dedc527c9dc9ed14ccf42af099e591f31 SHA512 9836a8d489d18ea1ecfe1957ed6d5da7dce825e138cd1848aef093fa8d2eb83fcf01eabb1a2446df4f5ede4e67316e9e81b5d58b59d4e8c5d67870e8fa5dca3b
+DIST unicode-width-0.1.9.crate 16745 BLAKE2B 38d4b92e47a284d6881a8073089be59a73d82b91efe5522f55be977f95f479890b6c02cd519544729f1b1e62eb21bcfff8c5f5382917f953603b760e39cf1ea7 SHA512 0f5ec46c57e3b5e50cb8430c89db8d9c129e80ca11a9c398b5312bfe95001e19ca3efbfeb01c3ac09c4ce7e26c6ee1f352f7e114ecef78cefd68c54d2d50f5f4
+DIST unicode-xid-0.2.3.crate 15174 BLAKE2B 5cfb2a094047106a45eaeb77ebc1ae2e17ca51ece71082c127d3e2bf36773959f52df1c6df0d0d5cbc40ec4ee7f81820a094fd7ee99f01a2f99a1f7f68317223 SHA512 2adea0c8447c9450be34859f2b2e2b87a61b5e313685da994d21bc24a96dd94088f3320bcdb8d20466a3fdafb0bc0375823f0c28ec0077c9c42a9818f66ac1f5
+DIST unicode-xid-0.2.4.crate 15352 BLAKE2B 80c327b39f3b8f2cdb5747cde968cfa1efe7b65b6bee9136adc881fa19f66aa5b1010d9d08de55a61b322d665b5b0cb0395e9ac471f6333c40d8dca5d97e123c SHA512 e67bd1258e1961807d9d5fe583a89ab5b82b2a529ecd32cadfc79aa5331380eb4a2db9fd96b74c8eace47f2f29021587d69bcdbf79f7e2650e92a25f7839d03c
+DIST url-2.2.2.crate 68555 BLAKE2B f8e59f784b6c2e16bacfba36ad68670a6af17c16ea3b0866b5aa98e5bf4686cf1b1aac9b1f0a0ea3b89a01e044a2ca37830416f42d147158ea8e88f23fd28ac2 SHA512 f9b6ad99d69ff303283b3fd9e98945fbd6cb411a3d141badcbb3a0566723a451375e6dd5d5357e3eb7a1b5b1ee5756a2347c43817db2de6fe35b9004b090e077
+DIST url-2.3.1.crate 72777 BLAKE2B 6ca0e537baf373b92269b2531945c1cdf360f1566cae4734dfb96f05a605e5c6c82e3192a1b9dde0ff22b92b87aba2d56e32a1bf17882b4de15efd7cdf52bc76 SHA512 8224010bef067574481e5d84100d944782d52b49db7c396ae2b4dfc145ed58769c15440d97a0fed4d2f9857592a8601417cc5b1bdea959c47a3e7a1f7182ed0d
+DIST utf8parse-0.2.0.crate 13392 BLAKE2B 05296f48fe429a871f42e729e3540ec3a974a69892c6bc9da95e23c0aee2163c9b115a9614eb1943363076793e17ac4c89e28066a9816cab30c451524a5832c0 SHA512 1f6a2eca32e42c8e4b53d28c4fea54c426ed66fc01447b3cf8fc0fd75694453eadbe3ba000ac8ee0347d16dbfec47681254117949109081798eab5370886827c
+DIST utf8parse-0.2.1.crate 13435 BLAKE2B a1c111d7ffc60690f2aaa86f034c66ba1abe4e126f1774a4377d41eba3269369862f57515af387ea785d69a8adf46338b5e53761b5ee6f4f4380473f4d9cab0a SHA512 51fba8f1e7eb74b7020fd831e30a67fc8353ac2ee07335c8c3374a5570ac8117f165f6905d4b7f0360095b7b5ed3e739001d02a8cc3c89195baf2cd679136050
+DIST vcpkg-0.2.15.crate 228735 BLAKE2B 6b6bacd9a7fa38919241f45a97f58cae957e58d3aac99df208a26aa718e4f1644f4ccefa31b09151e5c1952288e0e5837c363918b98c7f55079a948a952c1c50 SHA512 7322a21e8811b2fe4e79e09dc321458068ecdf1953f05d36233f3278ecc0b1dfc64194db7010dd46fcf692285f42475beb090c6c6cac0c8f9fe0eb5c770e3172
+DIST version_check-0.9.4.crate 14895 BLAKE2B fa1fa4008af165bfc1fdbe560488afd9d232cfafee94104fbcc4cbc52f234849bff9ddfa88109a1ac682f6d9c1d86b0459893d223f64e65adc08966aaf93dc89 SHA512 b172dc9a3759a4a683ffc39b9a40b03b9974b626a088217de87090466cef695226557c226cf3e469b2b25ee7297b7eb0d7719878cab42457f80146a81943c0c8
+DIST vte-0.10.1.crate 24947 BLAKE2B c7e94b7bba2423d14e5aa85f94dba856a6c984261551f204f029c55ef923c0012b259e5b229974b54b4eb5da1e85bae3c8cdb680372b5f9dc6caf51d1075b0ba SHA512 0c8fed2cfca5ad07d2a146e1e26979d390347a409cdc2b960246fc2fadd85019b9febf2dfd618f7a144493084b55f285c58ef5204e613bd9013af26faa9f2033
+DIST vte_generate_state_changes-0.1.1.crate 2422 BLAKE2B 6e8fb4ce0ca0fd6b9a4dcccdfb02445babbc13d47de5fae9bbb81e8c67ada8a40e8dc5e57c120c36876293b111ccc71e1069ea3fdabade6f9ba5ea2d44ff4632 SHA512 ba09352e037cbd279cbf5641c9783a24f76e54f1f09e13f0ab1ca99c9646c1e3c958e8e302d7cc88431073bad2e2d5619410f2f93f96f1db25f0f0ded0236f7e
+DIST walkdir-2.3.2.crate 23516 BLAKE2B 473f2b51aafd6ac17e5c3da8d545d179b31486b3a65ab39fbd8bd7fbb2ebcc24bebf01781200a26a68f0b1cb464f5763a919aead3b03eba5a7e1be6efec5500b SHA512 6c44071354faf37720ec4117ded34c8d530489542ee107ac26a7a56ef4a882b9003e22e84f1d61f6078643521343e35aa1f7b57c838779e78e5937a667bf82da
+DIST wasi-0.11.0+wasi-snapshot-preview1.crate 28131 BLAKE2B fe501889f25d65e2d032f885cc50c4f8bf7dd70fd5cbc438de349838370d8699e9627b0a4fc76030ea9fe6d508f41d0c9928a875fdbc47e73bfb17241cf7b155 SHA512 043500ab28cd9cb779475255da5d109ebab7fccca72b64873dc28d77bc5a157ba8d96b9e8f05223b5b36c7089bb7b4ba87657fc69bac16b78972f897294a865f
+DIST wasm-bindgen-0.2.86.crate 174170 BLAKE2B 09146027b7c841ad0ff4dc18d2440330f5fe76d445cb947a5ed47e12455cfef8dee60398be6c32fdb7095535d1c88c7cc61a11c5194c4a0b9e4f55626b1dad0d SHA512 185f513e0e67264842f7ac03f19dfa89c6954de333fd5dcf6ba2e016a459c4a9c98d4ded341e99d0fd1f2795c458acd1e5032b1f74f6cf79c220b156f26c093d
+DIST wasm-bindgen-backend-0.2.86.crate 26792 BLAKE2B 0df16a87b4e3b91b2c66613e49844567ef036dd79532759e07296dacafd4993d2783f88b137b5e6e5d9c7f18c8f4c7eecf11edf666e6dfaa4c1d3dc32872ace8 SHA512 6e62432e29f7ad02e890c5c4943869a166606a7f9ba9a8ee78fbb1d86f9083005da5268e6b18ce1da13c5016e8c89ff3f5576ac3bbe3ae4587bd4c901ed5e436
+DIST wasm-bindgen-macro-0.2.86.crate 13888 BLAKE2B 267d19541474501be9ffaba4ffc6a81d32c3c8bd79ff60cb7588edafcf00a65d4547dfcd6ff12692c49438c270e0611e6726ab03ad2b449f7d4c6d41aac86949 SHA512 f6ae82d9ae6e0316c9d35a02100c7e93d5fa17e23d36f72b04a1365a580323126a514bda71f7c225b51ddc966460e9f3d7855cde15a9264c05375a92a56e4f75
+DIST wasm-bindgen-macro-support-0.2.86.crate 20027 BLAKE2B bd6363b515400ba393c8f3c7c38e8fcfd19d1eafc377528777254208d3d03cdccbd208c83e70291525b856d88c36f8e13b8c9df3f2d568133357c1e7b047baff SHA512 f4d5a883be6b7e6933e705a112b5efdcb1c5a282b214a592c08c6b5fb423a600c6fe43581cc2f8c13ccf946c5a210e05d0455cf594eccee2077f9a96c5a40902
+DIST wasm-bindgen-shared-0.2.86.crate 7246 BLAKE2B b199125c7a65dd2f77e8700d459f1aec0572c6f1ee16198f7212d494daf4a71ec7637803aaec54e3b04bc991281d102e6f4da9d63838919238b2034353ee56df SHA512 e2a557c58185cea726e694617afb108ede9017f2aa492309695cf9a8b339806c0d9e35c4eeb6733acc56f8d0291f34fc236651246e82b450435949a4d2e0002a
+DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
+DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
+DIST winapi-util-0.1.5.crate 10164 BLAKE2B fc800aceae5249a858c806c3e969ef2545766099872d856ebee51c883d9acf1122278db9607d50ca53eac351502b700fd2463900932d342240f97f683d517963 SHA512 7baeb661f397c4693dfa001fdc774b323c51a7c55caad40f2de5112a1cefd1d6151e3df41fa4ee193460a5905917c83d2b1de5fa10b4bd014ad96690af95c0fd
+DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
+DIST windows-0.43.0.crate 11492640 BLAKE2B 793aa1a7f5ba07b864ee318d529f0003a979c3c5b588860cc317dd6abb499db73ae7ba98e2c18765f7539ffa3eb2af80fdd10d12238b5e0cfa1fbcf535a0ea9e SHA512 810a1a08ea65dad929ebacef8a2c2f13837f09680d97d1e9db7349b00b54a06ebc5fa1c7e9bb5ecf4a2d0cda54d4acd6b89e3eaeb9e7e1ac888ce105cfbcc139
+DIST windows-sys-0.36.1.crate 3347053 BLAKE2B 818f7812bd9a55a4e95b3d461fa5fcc14569a159882f950d20fd5a6b7d2a2841f082c0bccaab657f5830549e6286a37d9f8fdf825a42403f543b51e35b2d20d4 SHA512 80973e461bef3be0d0d0c13d02b2129aeb0d0700768d637544315654126f101b39f980738035fe325bd96f549493a2245bd7b82511f833efa7bbcb2f62266001
+DIST windows-sys-0.42.0.crate 3006791 BLAKE2B 7a0962364ecc416cf0ae7e49cce1298a12d819003e488f6e77aff1a52710f00378638b6a05db5557a031e1b75659587657971ddc63eaab35495133762f99a7b2 SHA512 b07b119688f3e3ad234d36979947f34e8e19988fb62101afbe18ec8afc9c8a4261128939df8bbb849d5c5982422cb4c50dbcba70f2bf401fbb7c605df1b2b354
+DIST windows-sys-0.45.0.crate 2568659 BLAKE2B 6f2d634d121a9bf41e2887e277a73f33aee69b04c7fcfc6ff973d21902787997f1e186f530e9226cddc003ffc3f85a179c069c8a8688de459f617df92d33f94f SHA512 f239346c0141b95aa76e0771e2f4e38b9a592f3cd92c6001de353637cd65cd73b94cbf9917a4eaa9b0c0b2e6e2af920b9cf6b3fccb52770df5160254cffc1c47
+DIST windows-sys-0.48.0.crate 2628884 BLAKE2B 551e900de4f67187ef034b60df9fd0e0d8f82a3100ef28e1eabd543ac129d882dc86ffcc1714071aba09e4cb2ae2d2f07ace1a32b99fd989ce525cf05991edab SHA512 bdf534bcf3face31e9ebe11427a911a53f89f4ff5eaea8cccd094e139bfe14b2aec602b1cab1df774794d999477439d9adc6b627a8e33c20334fc348ba2c47ed
+DIST windows-targets-0.42.2.crate 5492 BLAKE2B 42fc4a7d3e287fe2a70637e890304b49737776596f4a94a6d216668247092135e84322bd04caddd19c83b7700b0f27278e600ce8ed326957fabc21bffcae89b0 SHA512 84fbaffcad9a80beca77506aac26d0c5cb75aa0f21a5a70bcd3f6a16e71e8753ae00d3b89da9262c99756624163dcc0d6074fa9f99dfaae0dc098018209025f9
+DIST windows-targets-0.48.0.crate 7466 BLAKE2B 4ef6d89ad5b1acf26a1a24348122b86d3943bd95935499bc9032fbc7aa01c04999c723df7fecb4989854cb6b7cceffe141537dfb05a9eaf3902c4cb490533116 SHA512 1d2a29602a1e0846c8577ec9167c5f9972091998a5df449d67b13ad918bf37680e7f97247baf5e3010c166d0b3182418c2925470998b92893ee9469939b91e22
+DIST windows_aarch64_gnullvm-0.42.0.crate 357917 BLAKE2B 58da715a46692ed786fa554338d446eaaa50c63ec1d4090cf0690a9211c0221034479e9066cad1c98234410519833826ae3163bf6724c3b06097d5b84d7b9fcf SHA512 8bd60142e8982ddb14dde4e93b9753f9ac34830c05c2a1dd4568377f9a928651bf9f026a0080e5bc7dfa62a45942376736954e3ac800855d00eef0c72929f338
+DIST windows_aarch64_gnullvm-0.42.2.crate 364071 BLAKE2B 97c4e3b2a2dd3f936f9bfcdad23639c9c4c499eed220aec361d26d6013d798efa118e6b298f9cf841ac149d2ae5d58ca653731718450fcf2910bb5f6fa39159f SHA512 75cd7eb1def8ce9d0ff3d7468d2b1cc31cc76c08f981a2460c3d1eb09cff7100d7442863a3591621c1f5f3b3f4badf0b5c95285b6ed583e37283a8403f1095f1
+DIST windows_aarch64_gnullvm-0.48.0.crate 366543 BLAKE2B 9b10f65089fe6da3ff38a1061783f635644ae84f567f891eaced280af68f7ff3919b34289e8850aa34554bb0346903273ff0a7fa743ca8794c2d23a9f1b0185f SHA512 80c5aa74c5669f7acff3882a8e7575f15e8d7cc58c11a1cb731ff423eb9cc9ba43cc6b80e52803c0d44e6a9001655ba87de6f43a9fe858da6d6e3a5c983a2711
+DIST windows_aarch64_msvc-0.36.1.crate 661960 BLAKE2B d503150a05c4aa6ec376d1094ad24a7a4b3579d8f60cae65f4a98adfe830dd776c8996d5c3acfbfca1a69598475b918b5de2a162e3253b0b28cd6aa17de2dc13 SHA512 d0c352c78caec9c71bbaa1a688baab8f39a33c903c0492b19398c76e08194183e254ecd3a8b24af3e7e5e1d9d97373dcbab54499236829898a4fd153cfde2ccf
+DIST windows_aarch64_msvc-0.42.0.crate 659424 BLAKE2B a8c9a288767756f2086bd0706774cdcce5c8639431ad76ed122d4b6d13c936ca8fb1a463d34835b3a2728f4444e2f4b91ee772f00c54f348094da69c05ce6b93 SHA512 20c0840adec84dde03b143e5b82bb0003fee675310487f0071a81ed7f40ee647c4018ccb9ebdbc4aeada717ec8600a30dfb15510c6b336f07becdb7167668fd0
+DIST windows_aarch64_msvc-0.42.2.crate 666981 BLAKE2B 9f3cc5592cdede08bcdc1e7c455325279e3b763d96942695e10dccf1dfc37a81c749b69a7d6de883d4c0fa6e8a0d2f578fe2a8d6c42ad8ef6282590bf8fc87b7 SHA512 d2dafa8c94d01c1b65ca1bd631d31f2ef842f1db7accb132ff78c3f8483221b991afd3391563e03dcec42bbc9cbdc0ebdab47b991d25af85b5ba2ac1bbf8db63
+DIST windows_aarch64_msvc-0.48.0.crate 671479 BLAKE2B 0c80f210437628e1d878d1d14e884fea532c7539b3030aa76d46f27d02372c715c6e33d7efdbbd770666472b44a66c30711a33d819ede9cdcd51c96355802d45 SHA512 617e47a7202f1db4dbd3ecea509682135ccd85e3a458c0331b9bc7aa1d84e5756b59c881cb098d5c6d4c951248d13c8253a8e8a50938e1997bd19ceba77262df
+DIST windows_i686_gnu-0.36.1.crate 818115 BLAKE2B fdb78cf88e1049d1ed6c474f870dfd1ff37b48bc24726d754cfec5b3e77075162f291f93aa709c07c9fa38ccb21a6c31cb5149dabc2cc8ad8a85c03408384a0b SHA512 e2c60e6639beb879472a06ed4462667eb4a78385df6bcde1ca579af759cf2b4ac70e84f7dd7b736e7fbd1b129061555671fed4b83bcd81a6083cc013963194a5
+DIST windows_i686_gnu-0.42.0.crate 728570 BLAKE2B b72079610b5c4fc798a79fa757b19f8c8baceaf7f4ce824193a65fadaac988ebdff1719a74d676b7dd017e11ceb029402bbac4e55c35206172e15a9bef422f78 SHA512 a24dd1ba5eb7d5231853bebadfde0575ae9071a565868d2f3d1bc6ec0a87380c569a621f0cba2552af7a1e46ac62f09f87cfbce3f674be06be1a7c1d3f421474
+DIST windows_i686_gnu-0.42.2.crate 736236 BLAKE2B 4ef0496462afc73d9d72af7e5da1e6d3506a92f8172930e88ae64ab97596ffd31c4f97fb969e9b677e30159c27f00a8e756deb006b630fb98ce83f03c8b762e2 SHA512 ad09d650a05cb91cb6b40f59025c023a4c286bc1194586697c506016df2b9b0d5b02606b81687bc634795a0d9a9b8a73e486599328ae09c853e8e5ba662fc59c
+DIST windows_i686_gnu-0.48.0.crate 741490 BLAKE2B 5a4a584f8d8ee5bbd2d4c5b6749a66f2d43fc9e4ef90faab2227709b270f0d46fc26578c029edd96877c71309316ddb32d91c39f46d88f9a484c614f866e3dbe SHA512 15149fdd48b61b6d993acd392dbd353d0280d984ea88745217e4207937174bb90cdd9701f69ff0fe06a842f03607cbb57937d20d79ab577181e605a8a8fadc68
+DIST windows_i686_msvc-0.36.1.crate 724575 BLAKE2B cf964bec007d8432e2009644cf7f89ea7d910ccf9512c067b7bf5c6c825208ce4a36e9864c0cbca137f523983eb46e58e4bd01054cecd7ac7126d2ba9f67ac0c SHA512 02bb1507981229422498ce29f6c777d5e412358040128f84b09d948ccddf0461b078a0a20cc7f6ab7da8595121bb369453ae9ea1f0506aab715662e8c631e737
+DIST windows_i686_msvc-0.42.0.crate 717477 BLAKE2B a37e068f45590f0c31349acbdb56848106d6de0e1f8030e6bd5e1e174bd9a46737db54fbd61de99054e5e8c5263eaef0508c440f43c39dca82baa77792ff2743 SHA512 740400e2b11c1d177f7f37f844cd2a0f84b97a5adb03a7656661deb026b593a799ace8da1f9013ba9f74446fc43260d01dff7d4be607129ec7d602f341b2b4d1
+DIST windows_i686_msvc-0.42.2.crate 724951 BLAKE2B b084286cd4927efd2889b149abf8a9fe9d3d777130db9e592982660dbf9a96a0f5e723ca121465787aa11877d2d29a5a7d7cf066cdc8fa7e90d7ca7dcb7677f1 SHA512 c1706fc36d4b157c020744a11b3eb5d7dfbf05a0b56775bc717e94b7fd725816b20154fdbcd69ac08dbfb8b8bbfa74fab72d7a9c10399aad6a1cc54cf597e804
+DIST windows_i686_msvc-0.48.0.crate 730056 BLAKE2B 4e4ad6ed94948145199c2ed50fc65e4af08455a0fd058bb0f763d481f30b029f99a2b8dbac087b29e762500a19270f6683baf62ba99d141eb002a5b0b5c8ea05 SHA512 11a50800e709712dbea907275bc0faa46d2eb2969118445ed5b932d9c5957a09592a5b26a40e554c1f5fd56c6d074a07637e6f88eedd2224e1001e62df7b469b
+DIST windows_x86_64_gnu-0.36.1.crate 790934 BLAKE2B 9dec5d966bdc89efbc81989acca242d519f51676ec37487df2bfacd6bfbc5a8de2871be72c5b96a073a899c666e3a39aa60d493e7df39fa90efe869fb744a332 SHA512 598b69e4f2cd3d68f910d526a66dadb465ff30a8c261c9a4455aa1c5b952d23c04f8edaa063cd16fb43564c116a13f06d607f3a0a9c7495054b8bfe1c04d1865
+DIST windows_x86_64_gnu-0.42.0.crate 692493 BLAKE2B e00eae443cfed3004809244654268ee1bec17975166ca876dd393dcfe8a2ef0ca65d81b04c8f513f95a0fae9405ba796c085951bc2c597d252a3122f7dbf6425 SHA512 7df7ee0c345f0a2c37d7f9ec3a2824116b4d7a943bf245787509e67809a4f31ebb1862e212efb2d943d82ccef77a716437cdc61004396ca86e95e688368c6dae
+DIST windows_x86_64_gnu-0.42.2.crate 699373 BLAKE2B 01c70809d564b16b268656e47295e99c992d8f9839fac8a51338a0e7c3b9cdcd0429c456ca8c1c139a8c687ed7ed6c43a82250889d881aadaa65bd037223e0a6 SHA512 5767af3c86e717f93137a89d442230e6b60a649057edb3ab104b1f82c0bcd64fe089dcdf2f4fd486a799bece1ddb5f0449641536b678211945e749ae24f35c1f
+DIST windows_x86_64_gnu-0.48.0.crate 703595 BLAKE2B b227efb78a99c43d0538cceadada3fa1840df29adc665787fdcf845b73e77d782da8a9f9aa602e1da61401b550d0107176feb6c397c922a6240b38cc8f04a180 SHA512 38eff1164fb37dbd2bbe53404b20cba92de84cbbd5e4eb9ad60d51fb43d6fdb8b87a1488e2c88ebd4b3ff3b708f93fdc05df4b14a285d3ff11c33ff0d9828602
+DIST windows_x86_64_gnullvm-0.42.0.crate 357906 BLAKE2B 02e08e696f18105f0c131fcf5db046ec945cb21ede76d2da477589e15d062ca6f04906dac80fdd2ef9fcda9244490aad86b401d0156eb6b65ba3599098e8cfe7 SHA512 242e11b4a0d50a0ffe8d0e26e971de30ef4d29260ae6749403d39cb4278297a240c1ec4112bb38151cbb11a6f3c8a743e84cd75b6a76adfeaee8e623649c9ecf
+DIST windows_x86_64_gnullvm-0.42.2.crate 364068 BLAKE2B 64bc53e98eb3fc649c9b43a6e734de4e65088e41edacabd49f7afcc5dc6e1065c563ecfc682747dda05978dea2dba4f45c16fcc18c3b00684c3d93681e5a7deb SHA512 d39a8bc948110fe612d3f8d6628b3f0d56620df11d8a49e0fabb6c90389ad407582b3af10e4eab46c79b3d11d2e10753d73d9e55963fbeac085f41e9749bdba3
+DIST windows_x86_64_gnullvm-0.48.0.crate 366536 BLAKE2B 295dc3aef18c604d1579978045f4058b1a315083a8ab842bddf5800ec3460b1530ad88c3464acab712a229290aca235810de8a3b6a253859a354d9fa97277e58 SHA512 8d82fad4c8445030844708aa026a62f1ca43362b8e15f14b0d226c7e9cda04ffa0715087b6a025dbb738e8891de24fcc4a2df071a532917cf03c4a46f934f396
+DIST windows_x86_64_msvc-0.36.1.crate 661999 BLAKE2B 4cf967f10d4ce148bac967598168752d1996b4ddf5278a8fca53360566c37c1a014bfb4dfdc0ae2d96e01196c42eb4906ea80d8e9dd23b9e9f3163631c9e253e SHA512 89c22ed51a74f531662d80ae0fa5e0215728db1e6caf3c13eaeba95a93548b43c00b8474f52553ac866ac83c203b6c22dc44fbc870e882a4c9c97ba54b87c631
+DIST windows_x86_64_msvc-0.42.0.crate 659377 BLAKE2B f01dbfcb86dcb7301790a1a704661864378021cbb92b147fdfcee978b7011bb770441c481b439985c298816c524c6a11f21a7bd81115e65882fa000a28566bcd SHA512 94d6554ae293785d2fc9dc9d53480c98bc08ab2b78bd8684a0606e7e0ec156a454c1a653d214c21de382bc7ab5d898e45000ed73e6110f679da513ffabbf3cb9
+DIST windows_x86_64_msvc-0.42.2.crate 666936 BLAKE2B bc3a456e7f8bc272f8978ec69506ec9d89f97b7582ebbe05d8bd57bdf8156ef62d0d2dc6137a97e81d54059d70db97a24af9a038adff357f5dfd28805d6193b5 SHA512 53a35f438903fceb59e36bd2ac331773fb8e6c8c5a6d984e79021761f91b3b4a23efe49d219667a4d0d23dcdbf906da9c24e74fb1cff93395b5c55ff524e3788
+DIST windows_x86_64_msvc-0.48.0.crate 671422 BLAKE2B abb063610dcc38581657133182b7d9efeed5553df67bd2bd6f30f1668a645186e4824f9ef556a5abc84ace10b1b437b6325bbda6df5a64ce880d7dcb743ac786 SHA512 6e598b8e3ac54912a8ebac01b0dd2c58fd282072527d7fedc7f6ebecdfb7dcb09ae46c22293bc0117849437f8b053db5e90406e7a38276f0f0afd06be3966795
+DIST winnow-0.4.6.crate 142565 BLAKE2B 671c643bdf03d8533998224bccb375614bbc0192e3d9b45a580db9aea04f60f1f5fada06c454e705bfc1f82bc52067db8d3d45cec1e898c6ace689845cb21884 SHA512 cf194bfa3e6ca3a79b6940cb3a9fbbcdac2b10f997a0c15f58b570281c4651a6b3f4a32df6ee4da579d6cbb40b19b38d1123b6f7fc116f1171bb5f51270f6698
+DIST zeroize-1.6.0.crate 19049 BLAKE2B 8dad6af58edd7b22ece7dfefa47b478dfb74efd1e08c03c571c9cd50962a8eda8cdb59fab91fd44053f8acde8d1d84efac4bc48c5e6576255620ef21f2813de2 SHA512 9ebc81c10516440476b5c198dd4ff0d284a0a37cee11a2cdfb5a1995f95b72d05beb827483b16e8b764f720fbcf30a5e5d8b1517cfbbf572bcb27c2efb18393b
diff --git a/dev-util/cargo-c/cargo-c-0.9.14.ebuild b/dev-util/cargo-c/cargo-c-0.9.14.ebuild
new file mode 100644
index 0000000..fee189f
--- /dev/null
+++ b/dev-util/cargo-c/cargo-c-0.9.14.ebuild
@@ -0,0 +1,214 @@
+# Copyright 2017-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Only bother defining this if the github tarball doesn't work!
+# Otherwise just comment it out and things should Just Work (TM).
+#MY_P="${P}+cargo-{CARGO_V}"
+
+CRATES="
+ ${MY_P}
+ adler-1.0.2
+ aho-corasick-0.7.19
+ anyhow-1.0.66
+ arrayvec-0.5.2
+ atty-0.2.14
+ autocfg-1.1.0
+ bitflags-1.3.2
+ bitmaps-2.1.0
+ bstr-0.2.17
+ bytes-1.2.1
+ bytesize-1.1.0
+ cargo-0.66.0
+ cargo-platform-0.1.2
+ cargo-util-0.2.2
+ cbindgen-0.24.3
+ cc-1.0.76
+ cfg-if-1.0.0
+ clap-3.2.23
+ clap_derive-3.2.18
+ clap_lex-0.2.4
+ combine-4.6.6
+ commoncrypto-0.2.0
+ commoncrypto-sys-0.2.0
+ core-foundation-0.9.3
+ core-foundation-sys-0.8.3
+ crates-io-0.34.0
+ crc32fast-1.3.2
+ crossbeam-utils-0.8.12
+ crypto-hash-0.3.4
+ curl-0.4.44
+ curl-sys-0.4.59+curl-7.86.0
+ either-1.8.0
+ env_logger-0.9.3
+ fastrand-1.8.0
+ filetime-0.2.18
+ flate2-1.0.24
+ fnv-1.0.7
+ foreign-types-0.3.2
+ foreign-types-shared-0.1.1
+ form_urlencoded-1.1.0
+ fwdansi-1.1.0
+ git2-0.15.0
+ git2-curl-0.16.0
+ glob-0.3.0
+ globset-0.4.9
+ hashbrown-0.12.3
+ heck-0.4.0
+ hermit-abi-0.1.19
+ hex-0.3.2
+ hex-0.4.3
+ home-0.5.4
+ humantime-2.1.0
+ idna-0.3.0
+ ignore-0.4.18
+ im-rc-15.1.0
+ indexmap-1.9.2
+ instant-0.1.12
+ itertools-0.10.5
+ itoa-1.0.4
+ jobserver-0.1.25
+ kstring-2.0.0
+ lazycell-1.3.0
+ lazy_static-1.4.0
+ libc-0.2.137
+ libgit2-sys-0.14.0+1.5.0
+ libnghttp2-sys-0.1.7+1.45.0
+ libssh2-sys-0.2.23
+ libz-sys-1.1.8
+ log-0.4.17
+ memchr-2.5.0
+ miniz_oxide-0.5.4
+ miow-0.3.7
+ once_cell-1.16.0
+ opener-0.5.0
+ openssl-0.10.42
+ openssl-macros-0.1.0
+ openssl-probe-0.1.5
+ openssl-src-111.24.0+1.1.1s
+ openssl-sys-0.9.77
+ os_info-3.5.1
+ os_str_bytes-6.4.1
+ pathdiff-0.2.1
+ percent-encoding-2.2.0
+ pkg-config-0.3.26
+ proc-macro2-1.0.47
+ proc-macro-error-1.0.4
+ proc-macro-error-attr-1.0.4
+ quote-1.0.21
+ rand_core-0.6.4
+ rand_xoshiro-0.6.0
+ redox_syscall-0.2.16
+ regex-1.7.0
+ regex-automata-0.1.10
+ regex-syntax-0.6.28
+ remove_dir_all-0.5.3
+ rustc-workspace-hack-1.0.0
+ rustfix-0.6.1
+ ryu-1.0.11
+ same-file-1.0.6
+ schannel-0.1.20
+ semver-1.0.14
+ serde-1.0.147
+ serde_derive-1.0.147
+ serde_ignored-0.1.5
+ serde_json-1.0.87
+ shell-escape-0.1.5
+ sized-chunks-0.6.5
+ socket2-0.4.7
+ static_assertions-1.1.0
+ strip-ansi-escapes-0.1.1
+ strsim-0.10.0
+ syn-1.0.103
+ tar-0.4.38
+ tempfile-3.3.0
+ termcolor-1.1.3
+ textwrap-0.16.0
+ thread_local-1.1.4
+ tinyvec-1.6.0
+ tinyvec_macros-0.1.0
+ toml-0.5.9
+ toml_edit-0.14.4
+ typenum-1.15.0
+ unicode-bidi-0.3.8
+ unicode-ident-1.0.5
+ unicode-normalization-0.1.22
+ unicode-width-0.1.10
+ unicode-xid-0.2.4
+ url-2.3.1
+ utf8parse-0.2.0
+ vcpkg-0.2.15
+ version_check-0.9.4
+ vte-0.10.1
+ vte_generate_state_changes-0.1.1
+ walkdir-2.3.2
+ winapi-0.3.9
+ winapi-i686-pc-windows-gnu-0.4.0
+ winapi-util-0.1.5
+ winapi-x86_64-pc-windows-gnu-0.4.0
+ windows_aarch64_gnullvm-0.42.0
+ windows_aarch64_msvc-0.36.1
+ windows_aarch64_msvc-0.42.0
+ windows_i686_gnu-0.36.1
+ windows_i686_gnu-0.42.0
+ windows_i686_msvc-0.36.1
+ windows_i686_msvc-0.42.0
+ windows-sys-0.36.1
+ windows-sys-0.42.0
+ windows_x86_64_gnu-0.36.1
+ windows_x86_64_gnu-0.42.0
+ windows_x86_64_gnullvm-0.42.0
+ windows_x86_64_msvc-0.36.1
+ windows_x86_64_msvc-0.42.0
+"
+
+inherit cargo
+
+DESCRIPTION="Helper program to build and install c-like libraries"
+HOMEPAGE="https://github.com/lu-zero/cargo-c"
+if [[ -z ${MY_P} ]] ; then
+ SRC_URI="https://github.com/lu-zero/cargo-c/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+else
+ S="${WORKDIR}/${MY_P}"
+fi
+
+SRC_URI+=" $(cargo_crate_uris)"
+
+LICENSE="0BSD Apache-2.0 Apache-2.0-with-LLVM-exceptions Boost-1.0 MIT MPL-2.0 Unlicense ZLIB"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ppc ppc64 ~riscv ~s390 sparc x86"
+
+RDEPEND="dev-libs/libgit2:=
+ dev-libs/openssl:=
+ net-libs/libssh2:=
+ net-misc/curl[ssl]
+ sys-libs/zlib"
+DEPEND="${RDEPEND}"
+BDEPEND=">=virtual/rust-1.65.0"
+
+QA_FLAGS_IGNORED="usr/bin/cargo-capi usr/bin/cargo-cbuild usr/bin/cargo-ctest usr/bin/cargo-cinstall"
+
+src_unpack() {
+ cargo_src_unpack
+
+ if [[ -n ${MY_P} ]] ; then
+ tar -xf "${DISTDIR}"/"${MY_P}.crate" -C "${WORKDIR}" || die
+ fi
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.77 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-0.9.14-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+}
+
+src_configure() {
+ # Some crates will auto-build and statically link C libraries(!)
+ # Tracker bug #709568
+ export LIBSSH2_SYS_USE_PKG_CONFIG=1
+ export LIBGIT2_SYS_USE_PKG_CONFIG=1
+ export PKG_CONFIG_ALLOW_CROSS=1
+}
diff --git a/dev-util/cargo-c/cargo-c-0.9.20.ebuild b/dev-util/cargo-c/cargo-c-0.9.20.ebuild
new file mode 100644
index 0000000..5bc2a8a
--- /dev/null
+++ b/dev-util/cargo-c/cargo-c-0.9.20.ebuild
@@ -0,0 +1,357 @@
+# Copyright 2022-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Auto-Generated by cargo-ebuild 0.5.4
+
+EAPI=8
+
+# Only bother defining this if the github tarball doesn't work!
+# Otherwise just comment it out and things should Just Work (TM).
+#MY_P="${P}+cargo-{CARGO_V}"
+
+CRATES="
+ ${MY_P}
+ adler-1.0.2
+ ahash-0.8.3
+ aho-corasick-0.7.18
+ anstream-0.3.2
+ anstyle-1.0.0
+ anstyle-parse-0.2.0
+ anstyle-query-1.0.0
+ anstyle-wincon-1.0.1
+ anyhow-1.0.58
+ arc-swap-1.6.0
+ arrayvec-0.5.2
+ autocfg-1.1.0
+ base16ct-0.2.0
+ base64-0.21.2
+ base64ct-1.6.0
+ bitflags-1.3.2
+ bitmaps-2.1.0
+ block-buffer-0.10.4
+ bstr-0.2.17
+ bstr-1.5.0
+ btoi-0.4.3
+ bumpalo-3.13.0
+ bytes-1.1.0
+ bytesize-1.1.0
+ cargo-0.71.0
+ cargo-platform-0.1.2
+ cargo-util-0.2.4
+ cbindgen-0.24.3
+ cc-1.0.73
+ cfg-if-1.0.0
+ clap-4.3.1
+ clap_builder-4.3.1
+ clap_derive-4.3.1
+ clap_lex-0.5.0
+ clru-0.6.1
+ colorchoice-1.0.0
+ const-oid-0.9.2
+ core-foundation-0.9.3
+ core-foundation-sys-0.8.3
+ cpufeatures-0.2.7
+ crates-io-0.36.0
+ crc32fast-1.3.2
+ crossbeam-channel-0.5.8
+ crossbeam-utils-0.8.10
+ crypto-bigint-0.5.2
+ crypto-common-0.1.6
+ ct-codecs-1.1.1
+ curl-0.4.44
+ curl-sys-0.4.63+curl-8.1.2
+ der-0.7.6
+ digest-0.10.7
+ dirs-4.0.0
+ dirs-sys-0.3.7
+ dunce-1.0.4
+ ecdsa-0.16.7
+ ed25519-compact-2.0.4
+ either-1.7.0
+ elliptic-curve-0.13.5
+ env_logger-0.10.0
+ errno-0.3.1
+ errno-dragonfly-0.1.2
+ fastrand-1.7.0
+ ff-0.13.0
+ fiat-crypto-0.1.20
+ filetime-0.2.17
+ flate2-1.0.24
+ fnv-1.0.7
+ foreign-types-0.3.2
+ foreign-types-shared-0.1.1
+ form_urlencoded-1.0.1
+ fwdansi-1.1.0
+ generic-array-0.14.7
+ getrandom-0.2.9
+ git2-0.17.2
+ git2-curl-0.18.0
+ gix-0.39.0
+ gix-actor-0.19.0
+ gix-attributes-0.10.0
+ gix-bitmap-0.2.3
+ gix-chunk-0.4.1
+ gix-command-0.2.4
+ gix-config-0.18.0
+ gix-config-value-0.10.2
+ gix-credentials-0.11.0
+ gix-date-0.4.3
+ gix-diff-0.28.1
+ gix-discover-0.15.0
+ gix-features-0.28.1
+ gix-glob-0.5.5
+ gix-hash-0.10.4
+ gix-hashtable-0.1.3
+ gix-index-0.14.0
+ gix-lock-4.0.0
+ gix-mailmap-0.11.0
+ gix-object-0.28.0
+ gix-odb-0.42.0
+ gix-pack-0.32.0
+ gix-packetline-0.14.3
+ gix-path-0.7.3
+ gix-prompt-0.3.3
+ gix-protocol-0.28.0
+ gix-quote-0.4.3
+ gix-ref-0.26.0
+ gix-refspec-0.9.0
+ gix-revision-0.12.2
+ gix-sec-0.6.2
+ gix-tempfile-4.1.1
+ gix-transport-0.27.0
+ gix-traverse-0.24.0
+ gix-url-0.15.0
+ gix-validate-0.7.4
+ gix-worktree-0.14.0
+ glob-0.3.0
+ globset-0.4.9
+ group-0.13.0
+ hashbrown-0.12.3
+ hashbrown-0.13.2
+ heck-0.4.0
+ hermit-abi-0.3.1
+ hex-0.4.3
+ hkdf-0.12.3
+ hmac-0.12.1
+ home-0.5.3
+ http-auth-0.1.8
+ humantime-2.1.0
+ idna-0.2.3
+ ignore-0.4.18
+ im-rc-15.1.0
+ imara-diff-0.1.5
+ indexmap-1.9.1
+ instant-0.1.12
+ io-close-0.3.7
+ io-lifetimes-1.0.11
+ is-terminal-0.4.7
+ itertools-0.10.3
+ itoa-1.0.6
+ jobserver-0.1.26
+ js-sys-0.3.63
+ lazy_static-1.4.0
+ lazycell-1.3.0
+ libc-0.2.144
+ libgit2-sys-0.15.2+1.6.4
+ libnghttp2-sys-0.1.7+1.45.0
+ libssh2-sys-0.3.0
+ libz-sys-1.1.8
+ linux-raw-sys-0.3.8
+ lock_api-0.4.9
+ log-0.4.17
+ matches-0.1.9
+ maybe-async-0.2.7
+ memchr-2.5.0
+ memmap2-0.5.10
+ minimal-lexical-0.2.1
+ miniz_oxide-0.5.3
+ miow-0.5.0
+ nix-0.26.2
+ nom-7.1.3
+ num-traits-0.2.15
+ num_threads-0.1.6
+ once_cell-1.18.0
+ opener-0.5.0
+ openssl-0.10.40
+ openssl-macros-0.1.0
+ openssl-probe-0.1.5
+ openssl-src-111.21.0+1.1.1p
+ openssl-sys-0.9.74
+ ordered-float-2.10.0
+ orion-0.17.4
+ os_info-3.7.0
+ p384-0.13.0
+ parking_lot-0.12.1
+ parking_lot_core-0.9.7
+ pasetors-0.6.6
+ pathdiff-0.2.1
+ pem-rfc7468-0.7.0
+ percent-encoding-2.1.0
+ pkcs8-0.10.2
+ pkg-config-0.3.25
+ ppv-lite86-0.2.17
+ primeorder-0.13.2
+ proc-macro2-1.0.59
+ prodash-23.1.2
+ quote-1.0.28
+ rand-0.8.5
+ rand_chacha-0.3.1
+ rand_core-0.6.4
+ rand_xoshiro-0.6.0
+ redox_syscall-0.2.13
+ redox_users-0.4.3
+ regex-1.5.6
+ regex-automata-0.1.10
+ regex-syntax-0.6.26
+ remove_dir_all-0.5.3
+ rfc6979-0.4.0
+ rustc-workspace-hack-1.0.0
+ rustfix-0.6.1
+ rustix-0.37.19
+ ryu-1.0.10
+ same-file-1.0.6
+ schannel-0.1.20
+ scopeguard-1.1.0
+ sec1-0.7.2
+ semver-1.0.12
+ serde-1.0.163
+ serde-value-0.7.0
+ serde_derive-1.0.163
+ serde_ignored-0.1.3
+ serde_json-1.0.82
+ serde_spanned-0.6.2
+ sha1-0.10.5
+ sha1_smol-1.0.0
+ sha2-0.10.6
+ shell-escape-0.1.5
+ signal-hook-0.3.15
+ signal-hook-registry-1.4.1
+ signature-2.1.0
+ sized-chunks-0.6.5
+ smallvec-1.10.0
+ socket2-0.4.4
+ spki-0.7.2
+ static_assertions-1.1.0
+ strip-ansi-escapes-0.1.1
+ strsim-0.10.0
+ subtle-2.5.0
+ syn-1.0.98
+ syn-2.0.18
+ tar-0.4.38
+ tempfile-3.3.0
+ termcolor-1.1.3
+ thiserror-1.0.40
+ thiserror-impl-1.0.40
+ thread_local-1.1.4
+ time-0.3.21
+ time-core-0.1.1
+ time-macros-0.2.9
+ tinyvec-1.6.0
+ tinyvec_macros-0.1.0
+ toml-0.5.9
+ toml-0.7.4
+ toml_datetime-0.6.2
+ toml_edit-0.19.10
+ typenum-1.15.0
+ unicode-bidi-0.3.8
+ unicode-bom-1.1.4
+ unicode-ident-1.0.1
+ unicode-normalization-0.1.21
+ unicode-width-0.1.9
+ unicode-xid-0.2.3
+ url-2.2.2
+ utf8parse-0.2.1
+ vcpkg-0.2.15
+ version_check-0.9.4
+ vte-0.10.1
+ vte_generate_state_changes-0.1.1
+ walkdir-2.3.2
+ wasi-0.11.0+wasi-snapshot-preview1
+ wasm-bindgen-0.2.86
+ wasm-bindgen-backend-0.2.86
+ wasm-bindgen-macro-0.2.86
+ wasm-bindgen-macro-support-0.2.86
+ wasm-bindgen-shared-0.2.86
+ winapi-0.3.9
+ winapi-i686-pc-windows-gnu-0.4.0
+ winapi-util-0.1.5
+ winapi-x86_64-pc-windows-gnu-0.4.0
+ windows-0.43.0
+ windows-sys-0.36.1
+ windows-sys-0.42.0
+ windows-sys-0.45.0
+ windows-sys-0.48.0
+ windows-targets-0.42.2
+ windows-targets-0.48.0
+ windows_aarch64_gnullvm-0.42.2
+ windows_aarch64_gnullvm-0.48.0
+ windows_aarch64_msvc-0.36.1
+ windows_aarch64_msvc-0.42.2
+ windows_aarch64_msvc-0.48.0
+ windows_i686_gnu-0.36.1
+ windows_i686_gnu-0.42.2
+ windows_i686_gnu-0.48.0
+ windows_i686_msvc-0.36.1
+ windows_i686_msvc-0.42.2
+ windows_i686_msvc-0.48.0
+ windows_x86_64_gnu-0.36.1
+ windows_x86_64_gnu-0.42.2
+ windows_x86_64_gnu-0.48.0
+ windows_x86_64_gnullvm-0.42.2
+ windows_x86_64_gnullvm-0.48.0
+ windows_x86_64_msvc-0.36.1
+ windows_x86_64_msvc-0.42.2
+ windows_x86_64_msvc-0.48.0
+ winnow-0.4.6
+ zeroize-1.6.0
+"
+
+inherit cargo
+
+DESCRIPTION="Helper program to build and install c-like libraries"
+HOMEPAGE="https://github.com/lu-zero/cargo-c"
+if [[ -z ${MY_P} ]] ; then
+ SRC_URI="https://github.com/lu-zero/cargo-c/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+else
+ S="${WORKDIR}/${MY_P}"
+fi
+
+SRC_URI+=" $(cargo_crate_uris)"
+
+LICENSE="0BSD Apache-2.0 Apache-2.0-with-LLVM-exceptions Boost-1.0 MIT MPL-2.0 Unlicense ZLIB"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="dev-libs/libgit2:=
+ dev-libs/openssl:=
+ net-libs/libssh2:=
+ net-misc/curl[ssl]
+ sys-libs/zlib"
+DEPEND="${RDEPEND}"
+BDEPEND=">=virtual/rust-1.69.0"
+
+QA_FLAGS_IGNORED="usr/bin/cargo-capi usr/bin/cargo-cbuild usr/bin/cargo-ctest usr/bin/cargo-cinstall"
+
+src_unpack() {
+ cargo_src_unpack
+
+ if [[ -n ${MY_P} ]] ; then
+ tar -xf "${DISTDIR}"/"${MY_P}.crate" -C "${WORKDIR}" || die
+ fi
+}
+
+src_prepare() {
+ default
+
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.74 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-0.9.20-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+}
+
+src_configure() {
+ # Some crates will auto-build and statically link C libraries(!)
+ # Tracker bug #709568
+ export LIBSSH2_SYS_USE_PKG_CONFIG=1
+ export LIBGIT2_SYS_USE_PKG_CONFIG=1
+ export PKG_CONFIG_ALLOW_CROSS=1
+}
diff --git a/dev-util/cargo-c/files/cargo-c-0.9.14-libressl-openssl-sys.patch b/dev-util/cargo-c/files/cargo-c-0.9.14-libressl-openssl-sys.patch
new file mode 100644
index 0000000..4ef74b2
--- /dev/null
+++ b/dev-util/cargo-c/files/cargo-c-0.9.14-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -281,6 +281,7 @@
+ (3, 4, _) => ('3', '4', 'x'),
+ (3, 5, _) => ('3', '5', 'x'),
+ (3, 6, 0) => ('3', '6', '0'),
++ (_, _, _) => ('x', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-util/cargo-c/files/cargo-c-0.9.20-libressl-openssl-sys.patch b/dev-util/cargo-c/files/cargo-c-0.9.20-libressl-openssl-sys.patch
new file mode 100644
index 0000000..baa6f72
--- /dev/null
+++ b/dev-util/cargo-c/files/cargo-c-0.9.20-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -268,6 +268,7 @@
+ (3, 4, 0) => ('3', '4', '0'),
+ (3, 4, _) => ('3', '4', 'x'),
+ (3, 5, _) => ('3', '5', 'x'),
++ (_, _, _) => ('x', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-util/cargo-c/files/cargo-c-0.9.27-libressl-openssl-sys.patch b/dev-util/cargo-c/files/cargo-c-0.9.27-libressl-openssl-sys.patch
new file mode 100644
index 0000000..0eff7a0
--- /dev/null
+++ b/dev-util/cargo-c/files/cargo-c-0.9.27-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -273,6 +273,7 @@
+ (3, 7, 1) => ('3', '7', '1'),
+ (3, 7, _) => ('3', '7', 'x'),
+ (3, 8, 0) => ('3', '8', '0'),
++ (_, _, _) => ('x', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-util/cargo-c/metadata.xml b/dev-util/cargo-c/metadata.xml
new file mode 100644
index 0000000..ec5776a
--- /dev/null
+++ b/dev-util/cargo-c/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>lu_zero@gentoo.org</email>
+ <name>Luca Barbato</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">lu-zero/cargo-c</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-util/cargo-ebuild/Manifest b/dev-util/cargo-ebuild/Manifest
new file mode 100644
index 0000000..a9e279e
--- /dev/null
+++ b/dev-util/cargo-ebuild/Manifest
@@ -0,0 +1,127 @@
+DIST aho-corasick-0.7.20.crate 111440 BLAKE2B 3f5d54fea2793ce1c2c4d5b3049b910f45a5721e7538cb2557df63dc3069ab3f6b66aceb5e9a48f21c43ae29778fd045428ea103b2a6de81659e605e30e64ca6 SHA512 ad31f3d1b3fe41e593d4ca7e721bbad62936f2e6a17fd1e0997353edb6fc906d1bef2b79f0ac7c7676abe637bbabb23ff22059947be379a2441011f8178983c5
+DIST ansi_term-0.12.1.crate 24838 BLAKE2B f636772c34e2d68cda7b8d3b2b86abda074585a62bd2654812ce92384244655a9197fa66e6939e19a674c0148ca605313d83de262bb18c2339a8a4eb4438a791 SHA512 b840e28b3e7700689a69a39659b1e066560078dd4a58326b91a028915819e7af883399ee53e920db68fd974c58d35bb1ddf8d427af5937d5f696f57c4376b671
+DIST anyhow-1.0.68.crate 43882 BLAKE2B 0ccd8fcb746344dfa85674fa7c95aa648aed8d40134b8c1c1c0852f6c7d22f5622ca1704ec65c254fc20946b1733299e1517364d74f726952d5a951ef89a2fe5 SHA512 b8cfc132ebeac823edf18cba7e335d1939fcbb095ed4ea859f4dc4cde5b1ff35fd68f0743577c69085f74f019768a3359936bf6dc1b2aceb7e2b28ace7f74a0f
+DIST atty-0.2.14.crate 5470 BLAKE2B 2db856a9e898a430258f059aeaf7c844a153293e8856d90ac81f7d91a888c89198768ad5cb09303c23241fe85c560a55148fa56a303651a82b0edb895616bfab SHA512 d7b6c4b9a0f898d91ddbc41a5ee45bbf45d1d269508c8cc87ee3e3990500e41e0ec387afb1f3bc7db55bedac396dd86c6509f4bf9e5148d809c3802edcc5e1d9
+DIST autocfg-1.1.0.crate 13272 BLAKE2B 7724055c337d562103f191f4e36cab469e578f0c51cc24d33624dea155d108a07578703766341fd6a4cc1ef52acda406e7dba1650d59115f18261281e5b40203 SHA512 df972c09abbdc0b6cb6bb55b1e29c7fed706ece38a62613d9e275bac46a19574a7f96f0152cccb0239efea04ee90083a146b58b15307696c4c81878cd12de28f
+DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
+DIST block-buffer-0.10.3.crate 10465 BLAKE2B 32f0089971bb759244b73a75bdbbeb2d24f0422e92ceb0ae0afe3c698e3fabb371112a2eba3dab16a3859420d492c0ac984bfbb25e59e0c31951501cc652aab7 SHA512 e29faab70f8f2965a58089728274ec34bc97d681526687868c9cb1a2c145db00717f97e77b79a04fa52bd76817d796e104b509cd2a3163085b214f8eb68ac04f
+DIST bstr-0.2.17.crate 330350 BLAKE2B 90c3a48d78b73d7e36a3da9fda0beae6e91ce534d17198ea8ceee0b613d03297f9dd8bca30e1ec5da01d1da359a1da72b2c2771b77c82bebab5006cafd665192 SHA512 883eac8210d14f89517b4dd5e25d02c97cf31602ec74498b5e186112ba0f154d47de8d1c41a8f4e5503f3b53c064e2c976b60bbfd63fc28b186bc006e00f20c2
+DIST camino-1.1.1.crate 30737 BLAKE2B f2403e2f3c4c66f14c298faf582d5ce4f3071be62ecd9ebd4b2d684f0e8d9964e6da14326cd89011c4ec26ede18b26b46f36d04324eb67cda0ebeacf4a18f726 SHA512 4709463c158e248a17b3aa1a1d065d397f88f66871a1fcd7389acf2729acb7e6457d60682c7eda3e2654878e428baa8eba48118e2f26650fff641b4a0f84ce48
+DIST cargo-ebuild-0.5.4.tar.bz2 19942 BLAKE2B 04ff0c6c8f94900e50452d608d2adf8df22f7d3074f84ea81bb0951671a8c5068556bbe5d60fc79f11cb640af93b24f969efe7d60b2a7da21fdf469fc54fb74f SHA512 34f6b491d2bc9a3e8ed4cff40c0ec77727a4649341d3bd74dac532e65f4852b5fba3b32154dfdf01edfde1fe3768d124d2cf307966ac18bd43e4ebfc688a53a9
+DIST cargo-lock-8.0.3.crate 39302 BLAKE2B 63e67288b0201088d25da9246675b4d9bef96d532038655b484996cddcaeeb44b1bcba22f4738001c8593c1c5bea2716896b2f57cb3107c415f08bf85adca629 SHA512 297636b1e573ed42e539d8f9eab40ef516af7eaa60a476ed371900e5a4c1ae61dbc94d5aae8313f7eb684d1e5e9cf0bee698022fc95b9557d6fbc944e38e1140
+DIST cargo-platform-0.1.2.crate 11645 BLAKE2B 7770acb90e299f71c60bbadceaf894a3100916b7f7458f9c949b683b39157d3e1ec17d850f16dfb04017b01d7734d41872d48cf9f4e1ea7414439cd7031c2330 SHA512 c716bf3a4e0942160dbf7be114d1621e1fccc23511e7b0a2b99852b99a851910bfcf8640c2d0d0a03d5a324e1a59fb5d4264ca81bca24e3f1a1ca653bdf2956f
+DIST cargo_metadata-0.15.2.crate 18528 BLAKE2B cb80318d0cf7316fa57badcaa0502737232b28bc9efd17a71ef1afa8e1b61a597d7f36d6ecfb41a2859360ed7ed7c7ffa86b9184400c4646d3196fb895cf3e94 SHA512 f663676ac3e2182d67d1047164eddd24d1006f61f378003abb1d5f53f9dfee672202d33a530cac1bb749955edd142ca78169dc3412d78c8fe98d6121c4303fd3
+DIST cc-1.0.78.crate 61375 BLAKE2B fd4765cf5ae0dc7018bc6b56298cd0fa9bf6fe23545e845670d98ce73baee55354e77c6d87cf047f10b074f3d742deca8b5631a250c69b347b4a1fc653965d43 SHA512 b85bec4c75cb1d1e252419052e9dd22b6892e54ea36195ff483a04f785b5b103e82b30b778459fd45324ffeb2463aa4f5696baeff2779c25ffe9f65eb99ae893
+DIST cfg-if-1.0.0.crate 7934 BLAKE2B e99a5589c11d79d77a4537b34ce0a45d37b981c123b79b807cea836c89fc3926d693458893baca2882448d3d44e3f64e06141f6d916b748daa10b8cc1ae16d1b SHA512 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
+DIST clap-2.34.0.crate 202210 BLAKE2B f383adf1d757ac4b68995132b33837686ce451f85a02a8d05d2c746da398510d05d46330f3efade063c3952aacb1754cdac73dd0afcae0df5340a89f9353aa1c SHA512 c648a761b9996a7e7464a538bb53621bae22090b846a42c3b729beca3363958ae67e3da9f93f58b10a10e043cadf7ff930388680d168646178c2824177832db8
+DIST cpufeatures-0.2.5.crate 11251 BLAKE2B 2724be40d3bc0e2fda957f645e1cd6472450dee68db3592ab607bdac444283f571f3c904e47981a3fdaa06cab4032734a54470e3dd6e1b67fd856daf010e1277 SHA512 d02327a27ca9fc3c587dcbd10da6b1370671cd7b1df8dfc9078b47180744d0572ef41a7ec205ae9f1c571e5b7f4bc81278ab4c6b076c6ccac0167100e346e74e
+DIST crates-index-0.18.11.crate 19778 BLAKE2B f4fc0df0b768a6e63feea0151d4b83574a77150c0fd783f0f2bd294864f329f7bb4e5a913280f718653e58ce9714f4f7f057b15f49e52298ca157560d34de4cd SHA512 2725dfb5a8c9cba70af3cd2e0b8ab48159bea77f5a4ef6bb633131c84279e890ea1efb43732d62f24088a51bd1295da6eb840af00c439bb5ff15b58676b13c99
+DIST crossbeam-channel-0.5.6.crate 90292 BLAKE2B 7da87ab15c384754d2493dd1a30e83550cd4b2b749b7f0c24de131f054e3a2e521e1bb4ba10094378c8f4c7bdf19218e35b10562c50b4ad1d2871bf6f821e488 SHA512 de6a42ffede95750a13e3b9af6ab26cbc498125860cd8e4d227c7361bd831e558254a48bdef5cf901585a915003071b0efa321f2011f282218c364780f62f44a
+DIST crossbeam-deque-0.8.2.crate 21237 BLAKE2B f00948fe90806fcbf1585c0404250dc84bca2cf27733bf7f2a0aa957e618f916162f41124333329a5b1e84909cbae3d93fb3b4461ab23e9dd97672c7d520d5b7 SHA512 a50a878d843d6eb1b5b92321ce6bfb87a23d3c16e820b1ff55472f0bd3d29b41d09ea95e1b9ccb2790f6687c043dd9ada1cd5124705e24292ccbd8fae1f243b3
+DIST crossbeam-epoch-0.9.13.crate 48313 BLAKE2B 6e548cd39fb400732dc179c5b7185555bdb8a367b5d3a27dcabe9ad36db6e9858604dee210fe487de8f9127fd6d0db1ef1fd04a1cc8cdcf34bedcf980c048555 SHA512 a4578e0e535f301b73f0332778e79b327bafea6afa43284317fccc49b410118360866a2dea8ac22f2977f309d07c663e5d95fbfa852ab795d414c170ee4e06bf
+DIST crossbeam-utils-0.8.14.crate 42127 BLAKE2B 3e31e6371e46aba6697501a34e1b737680dcb692c0d1ba7cc1ce7025ec70ee69f7595e3abd90fb52c11e42cb43fa5fae6103f97add35cf87b0a68ea83213d0d0 SHA512 fa00a57c41c9daa152f8a6c6f4d3c77986de1aa21585984adf577e244c2f121db014ba2beb92241590e1cf78710e77d9a703ce4a4d44d8854bc3e60690151393
+DIST crypto-common-0.1.6.crate 8760 BLAKE2B f2422bfb89c15d47a8f91c8f6695e05eb56990a922e3cdf3d426044736f9932324c0d899a151a6df4d6683e6a6b21659c657d3988734014c02cd854bb4b924e7 SHA512 471dbc43f517089d2cfe0868e29510c6ca579875b3bb5d013c70796db969b609b6c4bb35c9a07b9a2917012dc5708b717d48e317a20038adbe7e7039bf3ada6f
+DIST cvss-2.0.0.crate 20012 BLAKE2B 5b6ce0a7340091fd27bd47d5a51542cf413999bc81ddbb1b520e799d18d723ab154ab4087363cedf1a162a1d79e89f1f75b9e0a7becae95c462d099f59d916c2 SHA512 6eba4a170785ed017d9e078451fa3cbde6f394bce9f3494f50c6a4e5979b730d9d630dc5565d959c16d034caac58e9ea2c02ca96935706b331fc0850cdde777d
+DIST digest-0.10.6.crate 19527 BLAKE2B 402009105a6ac055be062769dd4f162aabb977b9afe29f451eeb3e6b5dd1a579c371c5ec996b9c1bdba3b4ded83830ed2e1934a0505480bffba1e0d16775a8f7 SHA512 21d3c1dc64e640300c51e8a009af464d6e3cd2b10aa67c87a038165c11409d6e5faad1967236724a9a4cab8fdd88826cac1db4798245fd53ac2ff1a9b2b68b76
+DIST either-1.8.0.crate 15992 BLAKE2B 5b9254d54ced1f23447cc78fca74f12085c37e3c2da441b30521819025ebb808e8cbd9cbcec811f8b3951030914c1736b8bda61744d1323af8c5b8b0a3ef3ee9 SHA512 5089b218af067b51ee39c085568a1a6f542e8f68b362207bd7126cbcd2b76783cd21cc1517a1d088ce4dad1714be03a3660f50e9498a0bb43a8676cd7ec490d2
+DIST fnv-1.0.7.crate 11266 BLAKE2B 81da85889c91b6567e0f555e37dd915f1bd919719d1ca10c31a6861d7aec29a49ae9c1e8bc500791bf9d6b8dbb318c096d04872c5872a4b1f7d45fbd8e12842d SHA512 2195a4b34a78e2dd9838caf0ee556bf87cbb4a8ef5505aac663b614eb59dcfc0c40f432463ede41ecca57bfe7711f72673d39a85fe03d426f1324097d5628334
+DIST form_urlencoded-1.1.0.crate 8734 BLAKE2B eaca73d73d16242f3fa3e38e23531c67c01404697bc7b7eb7c64fa04167dcb403a41818487fc46c5d9118842818472d549a2f5fcef5e4d962461e1c103d895d1 SHA512 9e245495dbf235b147e4216b313f2e6a96357d2782a66d71c08c2902c6a065701ca8ecdbb6b2035983a83c44cf36c921b5c71d63af0e02dd39bf5f8347117e11
+DIST fs-err-2.9.0.crate 17662 BLAKE2B 9919c253ff98280eb3ae8d700ba3f878e2ffacec1d3ea69f0445921dd4084c67f3309cddfc2c4e9ba42cc9f64e201fc88313f517185e47f62c3f3023bed62e96 SHA512 b0fe36a1158a1267a10f6ca66f987448c2fe05dbc26af67cf92e2fff5af210312494823c201156f1029e3d81ec4b075a63a51770e153dad3867fdc6ee1d29126
+DIST generic-array-0.14.6.crate 15889 BLAKE2B 7beac5446f5da4d077598af43c238eb7e71a12b0b91e6be5dbfc1ca33dc21d128fc93c9c8b18caac4b88830c8c8a643f2033acaca1d9a9f3d95329d042276156 SHA512 254e6fb6658f083f26e022916795c9ebfac241b9df2d811aac8316b17e1375e1c5aa54d72f1bf6c2627a88484a7df4b14eca231c90578e9aa3d9997047fa0f20
+DIST git2-0.15.0.crate 198983 BLAKE2B 0e340dedef36339cc6ce4cf9ac79014e7bcbdf9ebf688986d1836c3e2f480998a60a2722017381124682edc5dc511368497f03c9bd9a8c4d0e7690682789bf88 SHA512 8ea32850e592cb9bc8caa0d7a04042e284c11b9d46959807d8e6d496d93946342dc37fcdf1ed354010434798a404f415e8e980fee2ce4f5cb998e0f8736b5bc5
+DIST globset-0.4.9.crate 22929 BLAKE2B 91dfaeb99a3f6f40a5a025ad8527c91770545487324e191801eedb6f916739b5efe687d84a43eb8b712cd181d98d3ab17b839f30c19e0da041b4c34d9286089f SHA512 66841495098b028b8d294c0832276b8864760df3a16b93b57222037c351591ac7773a99a65b85a20c438fbfc04c56ea4901188cb18ed470d3481eeef29eab708
+DIST globwalk-0.8.1.crate 13705 BLAKE2B 4d0fcc805cfddb47af24f5d8f2c4f9bcbba48a8a523e565f7ce7bea767b6d108ae5e3f5cccf6647b497b3690f862e1652812b9d83ffd02c634119d5e03d1a7e6 SHA512 3235fdd9c24ffc54994a0b37862c44e16a4c9ef6a7e1a008c5d83dc62a9683ade97e451e4da7f6db710be2532339a55038fa3bb85dbe6685d1c807cf42f6d955
+DIST heck-0.3.3.crate 10260 BLAKE2B dc756738081d855583f239908f671e9b5dde72ebfb577f6387b1a169817a03332464cf67071708a4c4f06b1ecb222118e8c719073ccdec1c0f938e5ef378b13f SHA512 b3498e033f44e03206421e565efec5b21d13107b60d35e4476331c44e6effd75c81f7678f2452c822eefd581209a2ffefd2034779cca2d8b4fac4583bbbf777f
+DIST hermit-abi-0.1.19.crate 9979 BLAKE2B 801e8052b85341cca388ada9db4b06bb1bd7b64474185b2ad06c0256b9e597639bd3dd4ba0053ea010f922e53969a4ab47b90d451fd9b94c8f2324055d151ea1 SHA512 1c877fcd562b15d2de9c151fd6c5f3ea4bf48abcb799e6139a180ffad5d64b632f0000d5707bbd92ff23a0e5f349157b9e0f5be8b50f03680b0fa47315dbb78a
+DIST hermit-abi-0.2.6.crate 13027 BLAKE2B 4df5306639511a5f69594e903f8ce62482cbbfbfe272a91a12f407483dbac4e87c2d7e5668cc06ca5c0fc149ca93a3152fe6ad4bb3b96cacf56a22cb635e5b7f SHA512 bad8442bb822a9c99f6536db16523c80f5139af6a139bcc359c03725c59ff935816e2ecc5c491dc362ac75ab2dff41ab1e9dd29431f5e9a109b60eb9b7a8dc28
+DIST hex-0.4.3.crate 13299 BLAKE2B deab49bf3d97f6fd7c0a0855b50232422443b226362bc7a4a19e57c2e662fff2cb046d4c5bd7618ddd523045f3d8c78754508f862f9a8ca29ca9247da6d6ec79 SHA512 fd8ff33b68eea2d6f2c6b02a6d82a2807cbcdc209ca5a76e3e3e5d006917ee151f236b6d18e2646cc9a9674bcdda1d6ce6ee363a89cadd99bef00d0eea9989e6
+DIST home-0.5.4.crate 8538 BLAKE2B 1512afc063cc31104e24a744aefc2a28f07d4ded12b4500480610124289e5b7c7f2fa3f1e66da36832cc45874c4bd2d08c1a584fed25aab4ecc962abc6675e33 SHA512 2494111301bd1281c89dc77f4f78d3bc6e3a04d1969938cf4584d465c01af12ad85022832b4a99a5c0ce6adc31a83c00820df2d513a09bf5c0d4fe44c53812a4
+DIST humantime-2.1.0.crate 16749 BLAKE2B e2ae8325b037fb175b9200cc5c1944ce579056c6662cce307beb6701894552362a25e371aad65f8fb9384945b48815ca74bb8b544a32e0a5845b7edd30b918c9 SHA512 3bf29ddd1391d82897c22baa0ff3ed58ef6d6959859f1f8ed54d324caba5b6fb4422e56790511ce82f902cd11467f93c8ab7fc7b0e0bdb719308a4d0a446ae0c
+DIST humantime-serde-1.1.1.crate 7886 BLAKE2B 4c66a483276e0cc5f4bd82fd49cfa0ee40c8ceda753919cfb7a8c794d098e9e4e851643fbc42a209d6ab00c5c62d9edc81c3bb1f6da218a09eafc96da9b566f6 SHA512 0bd72554e700f89506d2d1c8191832aed0065ea02aacb99e27139a60c883d3dbabb1fc3d60f499f5aeb20bd155fdcf21dc671aec1ca68d4041bf98ddf324248d
+DIST idna-0.3.0.crate 271128 BLAKE2B cf8a2c43760f03e94953c6692423a12f28fe763aabea8785b93cd247b3aedd2aeef2cd99978a027186290016ed924db39d19fe7d397da1ab570be9646bbb630a SHA512 9b7cee27811ee52ed9bb39fe82f724742eef2e5370642b6c756bd134c8cbc20bb6faa9f296053672dba8a66f7356a08b2ca99f176407b173e2d566d85d066441
+DIST ignore-0.4.18.crate 53174 BLAKE2B 41a209a310515af9fa066c88c92751e19e0859f411baf9946933203883098f52901f8c03250cab7f716abbd0da9c03c5e6fb270a5f9e26aafab4bf1d5f5bc045 SHA512 5d11a2415f015cce6ce72aa3d08a7cfb645ee7f1845b3445a924a92144438f209c992cc15d4ede3099d1eebe3fa28bde4e0eef1a3fbcb9dbced19a42051d21be
+DIST itertools-0.10.5.crate 115354 BLAKE2B f24734bdfedf1dba48554e39b43669efcd4a43656eeb2c511096060daeaf049e1ad3eab232e757057750ce94aabad9fc8a0cf29a997edc6c4b167301c3443391 SHA512 d03c3cfba9841776913bbb6daad0c8945830c155f32ae4b48872e0f937c75a443f0ac9a0355f43b359ff75232f38b15f4f6d446b4be30b00b4209cf66ef770c3
+DIST itoa-1.0.5.crate 10622 BLAKE2B 0d08db487ee791a252389e40e08e47a649d9eb90faad16bfbdfdfde46366082d2e3561fb8a62da80b122e7771052c50a0483e9618260d094820e20748d99882e SHA512 b90841e3a016a9a68cb090e4bf78959bbadecb3391cba71e0deeb5ac2723379ccd3251ec18a0bd055fba7cb6e71608ab1d7db990ad4d03cf2fd1289bd5834540
+DIST jobserver-0.1.25.crate 21888 BLAKE2B 2ecd417446f9eb975119af4ec74c9b3463d061f5348ebca380f0ab9963ccce6dcea8c1671c7701f3f867c7e49d0ec130809a37bff466261a2fc75e80cc01d15c SHA512 0c014e7c72a070e3332463cfa6e9c9095d542a68f8631150bad0efa3706a2d6de0347bf7d1221cc3bc0f3d5f9840fe7188aad949559375403b929d43b4a524b7
+DIST lazy_static-1.4.0.crate 10443 BLAKE2B 25b2e61bbac48f0dcbc79c81d7bf01f2403d8269ecb6be3ea6147bd00f7a588df15a91f44dfc18ada19b21faa71de4637c7d493a8628cbecd0e547d74e616a23 SHA512 e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
+DIST libc-0.2.139.crate 638983 BLAKE2B e92b296cf8c916e10e859722ed75f4790401662ff7aa2fe8ed84ef9b94a00538768be33c272f0881e42da887c8c43e1fd44d061343386216492a76fe5d308598 SHA512 ff5fae517c49c382dee9b1d7479b65b0a818780453e5c00c416847d02f42186e2fcf19a8a8dc5e9cc2611300690c6ad324f9c0f0e8172e913a1b781fb7c0b5b4
+DIST libgit2-sys-0.14.2+1.5.1.crate 1742257 BLAKE2B 028e6bf6980d7a54b76c918fcd499684869f14cb160e821d6657e59925d142655dae6e018c9f29389de304ef6109197fd71e6e6752d0d0a53152f2c4820ea1a3 SHA512 eb9602706036ea62ecbc08250f297119a1c51ea09ea86ae8630dc6d0521b74db96d8eccc4106343572eb70d9a156415c017c6a91fb5529100fbed091ff8e7921
+DIST libssh2-sys-0.2.23.crate 493516 BLAKE2B 00c0c1396f3d6723ad750112e7af8c8ac098af7b3d11e3fafbb4dc3b90c0defeb8184e007de3c740bf1111e12a53b71c355d697c4567deb3a30ebe3fee2e0caa SHA512 9617fb1d5826dacce23658b42e3eb3f8427b33db1b5a4424081e148bd90a3f776aa50ef66183c93ae19086d64321fc10b19b1a496c3feb12a669c7313cdf39cf
+DIST libz-sys-1.1.8.crate 2481844 BLAKE2B e890a3850aed5348afe7558168c7571564687d6a7d3567a4d53ffdf79444d38c4d70d35891e16f496f31169bf73b669534f5fc584f9ec520b518dda05e80b882 SHA512 0766ab72cc1414160ccefe4812e6204cbed1341607e5d17607f24fd4ff81dca68d8f2cf43e1d27f332a508d602bff0ad340c4c647a5d5f85acc120c19cfb4100
+DIST log-0.4.17.crate 38028 BLAKE2B b46be3719fc0a53e50b1f342762e188587e9f1ceb692c72473ce2663edfb8253742d30024e68c1444780ab7fc0e2d5b0601b8ea7228dc3405a9342a57548e605 SHA512 2477d88db42b1d92c30708d88823212e236f613b3465e85eb425f83f8d16fadfaf0352f06c2999a1852102edd2f6ffb10ecb539d8a3b6c48f552a25622ccffa2
+DIST memchr-2.5.0.crate 65812 BLAKE2B 57966413a1f933dcb2d2d4ccb29c247070f65a83299b2a9f5aa83f5a48a5c5f1c4c7c632fa63bd19f9508e9291e7258db2f16e2813a56fd84e0856f70f1e67ab SHA512 444a163b484c233e78c0e2e4d51f01ce2da93d7d29f516a95e4b0866b20bdfd3f34137653abed53eb70387991ee3e2b5937d8d4360a85bbcb50a93005a75defa
+DIST memoffset-0.7.1.crate 8556 BLAKE2B 1ef270f1c8dba32e66cf47a1835f10c342024762c0e56953f16e82d575250028154054d4c42b1324c60f955a40fad3bbb1c5fced147c11c9a4ad62f6f0e948c3 SHA512 40ca3c4b1fb929bec75bfcde0135037f81a6c5aa80181bc7dd7bbcd9c0946288eea8d23fca95e296567ccb02155ed0f66c7c23644b5cb3e6d3932be9f9742157
+DIST num_cpus-1.15.0.crate 15680 BLAKE2B a4d98b29ad534de9bc262f58f615ec06bde5d5a2f5252f09b5a0a6ecb06a9daf9709ad9045eb08f7cb744d8a838854b9095aa73918e06624a84efbc11a9a5c1d SHA512 fd4772868def9460a6ee17ef6fc00b0bc74115eec891bb3fdb07ba5b5fe4057a2ac69eb31ba8beddbd3189c7be4545888e5724879f3a89132fbc9b32aa7bb10f
+DIST once_cell-1.17.0.crate 32736 BLAKE2B 767fc8f362ce5ed7a9eafceb2f0764a2a1c7f4070e22d1e6e2498b3c841c5f761e77fb66a34b899a75d48f1563f6b9b73b90aa9431055d4e0269c47a1b043c1f SHA512 291d87380c0ea17fb3ffc9fdff8620d2ff55601c06ef65b2f0c54254fecd5b488645c6e94c6026b82071893f4d420491ff712399a782e14efa1e323e5c299c46
+DIST openssl-probe-0.1.5.crate 7227 BLAKE2B d1fd6a9498b3ab7f25b228f19043067604bf20790530fd0ab6fe3d4d3bc27f13e6e94d1e7ef49314c3663477d8916b8790b90427f74976143b54b95350895165 SHA512 7e560314150709a34520472698060c4f29689d4e608dc4dde146140aa690350d3603279c693367deeb0f21ab34ef61956143a3447827a2b7a3d578b9ccd6552c
+DIST openssl-sys-0.9.80.crate 61687 BLAKE2B afe13340a51b5f7c6242085a0861c02ca20de7ec24e12efadb4eafd55b769f45d0ec4866799bf64bc383e68933277503639f148dc600f8036ecf6c325b745f5d SHA512 e141423f7a7c72d9062616b87163d2e1ded028ec165b3758c52a2e5f8519cd517fb1a89fa0ab3da27e0b47a1f5973772673d8233e98cf4ef79ded56e0363a072
+DIST percent-encoding-2.2.0.crate 10075 BLAKE2B 397e59acc3953868c709244b89a2e0db3304c0b574ecba761026b570a485f2cb5b0b2a0159586d1f342ec395ef02ace536da3bc1c72093e1cf93f8b37b26b0ec SHA512 890a5256d2b4290e12e04a02c3529f3a017faa2b6016a4dd0f08b36509f0b1107eacfcb4702024d6a21ff8852a11f263c1adc096b16ef8d12c45a734c087fe68
+DIST pest-2.5.2.crate 106500 BLAKE2B f54eaf717b4918f2a01a897a3a0a43e48bfbacbf3b6fc997125ed5ebc8c11900386478f8579c8a4248458d50aab3dda6c027d5f8754fd7b9009a4d56919ea59e SHA512 e3aecfa3445050716906963f2226d794493d6525ae25a9e7f9a64c620d4abd6c345fe24bd41d329ea72d9349b7df1b8ea32e6adf4b1864b1e10f85e25f0dd59f
+DIST pest_derive-2.5.2.crate 17728 BLAKE2B 7d108ee8248653f8fa1d16e2836d772a931d1feea9cae8bfe911daec372235a4ff52996fda3bbd7e38d444902708127d835fbff37e2894a1849146249e8a6c66 SHA512 1e525bea881df2a9833122b98d9c32d3d5cbf2c78c465bfb44bad9a132b4327eb8d5de8df52f9f9f3a0efec13709d8bff70b36388cc158e17bf7533375469377
+DIST pest_generator-2.5.2.crate 14960 BLAKE2B fff48df2a862b68dd5ac72caaf06c96d130dadb0a434654d2e1dc1eaf2bfa4e2f693079de394c62bdd39bcb7a31e9541ad4a2589dc4f92ba7529cf814d99e524 SHA512 ad253d6047e658f7bc001c4af575f46bf99d8d38646a74b4de830b26a71285b1fea0b094f1af6f714a127c8730abc3df05c948ec7edf360bb82a1fcb08e5330c
+DIST pest_meta-2.5.2.crate 31245 BLAKE2B 94125f817e7324ee7d302c4f955fb28ebdc2c44f533eea418b79c747e312138592de9ed28de89ced24038aff6e15ea5d7fd853d1982f0a1059e14c1163327246 SHA512 32f38fc8e01822417dad438b37461933ed8bdd12f601c816190c7a9614b749e02fa5ac205f58ef7a1a66ad93da0ee72df43be747583f1b5336dfe518b99e233f
+DIST phf-0.11.1.crate 17232 BLAKE2B ca7932652a154bdff90b0260439c74da70e5c01c69f8ce2f0f88fb95247236f3a9d9e509f5deb36b4c3e9c23294bcc30ad415f4be5cf6e36bd09c31b961eda24 SHA512 d4b020ad259889828cf224a1d70fe0f78498c4d40c375a1c437a60d9c9a1a9c623737da54d197c358e0557e6f0c5a35a9d64198df90dc104d11f5eb7a17315a6
+DIST phf_generator-0.11.1.crate 11075 BLAKE2B fc8fb9d06ea933ddabef555b01be6d72c108cc5f493981b87ba2d926259a6311f5407eee441377ed0e76d041a792858ec39a19d269677b49f285b60c34f441c5 SHA512 0b6eec4edc5376c30dfde8c7fe4da5905412b944dd56c085e90198c9d716b40aa9928a8d08cd1a7a4c6ca26c83d318fadc61fbb5cddfa239aae07a6c831c5e50
+DIST phf_macros-0.11.1.crate 4693 BLAKE2B 291fc890830b3d350b5b36f53b8a761ef0947e9aca6d4accb9e3e4edfa3fb0a230dd6583b874f20e19654f06035aa9ac03683315dbb59b503beef9de8ce2722a SHA512 cb392629736028ac15a53fb0929bb57c9fa7c296be86906e24682274509e03e3e9dfdcb6791345a83419a3fcf9af81710dbc9fae9ac5d55341466dd4cdcbbe00
+DIST phf_shared-0.11.1.crate 10320 BLAKE2B 9a511bdaf3c74c48da231effcf7e65935e7b0ceb9271a3d66f5b15fe13e801b8a7eb10ad5fe1a07913294cd070ee9f9ef942843ddc1a29f51c76e7baa62f8eda SHA512 0e6968aded0535c3430474c49378420fe64809ad436cd39e331c8dcfb1759605df12a9fe78db75bf0761bfbe8beacae4faad2209923327cb41f015f048fd74d1
+DIST pkg-config-0.3.26.crate 18662 BLAKE2B 2ad92dfdc8ac0414b12a61dd30ea4ac5f142bbb55d0555ecfa3a53e750367e1b11766a693ef11f8cbe5a2ddb978327632458b2bcf75be7aa8f973262033349ee SHA512 509c4d1494cccc20de6a62d9d037c63ff77ebee8d907747c57ba0926d177b08fcac0231ccdda14511b453deb0b76ddd10f8fbdf63ff94257d72a12a889546435
+DIST platforms-3.0.2.crate 27905 BLAKE2B 036fa49ccd5c033d98e14ff7856036df6db51d38f6fa924ca89d3139534e2d4acb8ba47d53871f5abb251126f15f07cac3d5b25e16c0f97f322c8f58555f7451 SHA512 3bdc739c81e50434e2f59800634a792d1e1a8fc22ed6c7316170e5a84960234c8a0011264c0965eda34f87db3322431bd9a2df78e994c9c68933f0c5ca9e00f5
+DIST proc-macro-error-1.0.4.crate 25293 BLAKE2B ef918c5efaf2545ab38787c8d0c07315af00431139e4dff66346bf798e3a429f91d12a79776c150412fdda0b158a72badd5e1044ac4d6917f8482d4b5a7110b7 SHA512 8a47bc9d3e24e9561d1e384d8f5a633284c2cf9b5e6733c5f9d1dbfe1870ccc8e2152482852e50b551cecb68e009148585b910ffb0508a7b4875598eaf8657db
+DIST proc-macro-error-attr-1.0.4.crate 7971 BLAKE2B 98e2925881c2be186e22c2c439697e91d43f807eb61a5d13e3b0b4321ed50a74f3d699942c04b89b6fea0f156bb5d19ebcf22f9cd4b98a7e6917c437600ed823 SHA512 2606afa9ec78d7dad4500c98d3a5ecbd02c6b53ab829c742bed7f57b322a95238ab4e01cf268746815f1424fd9b02eddfa30e72f98c66106f57765f3d3116495
+DIST proc-macro2-1.0.49.crate 41977 BLAKE2B e31c81d3b836404bd2c28363eb0cf2637cb7fb1ff5fb39333158be2b40b15f6f8f582edaec51cabd32d7b215df39c08a9632208fe4da36fc435dc32a48483a6b SHA512 b490d5cbaa790163aaa49c1595e694dfaded61c59fc23f9b6d359f4b774ee6eb20ae8efc5f5ebd59c8ca75da85baad61c065451c1cde03b3b6148e2aaa2c9e1b
+DIST quote-1.0.23.crate 28058 BLAKE2B 81c483fa26b36b5c4dbe85b386a74f5bfeaa854a99c0d678374507613da916a60e3f5b14d4a4d295e1c9ef0413fa1f16447df8f19a9db8cb0485b7a5c327fdc1 SHA512 3bce6846dda94d285de15771549099e60df39c8395c498b372c90a240f77df31d6d9048127913ec1c7ed8f3a189470ade1db2bede406bb00fa715ea641ec87c2
+DIST rand-0.8.5.crate 87113 BLAKE2B 516f26bb2a969d0d79e957818133f35d2c0b4d9f1b401098ea23c5b80d27599e842b9298c0c5e46e2a6cb6953857bf8a9fb71ec9366c5ce6708cf17df14f179c SHA512 8b33a8988906ba5e2057a9a84bdd11f867a5536c22f5056eec59ed4ec4e3a6da2fd773da4c0510d343762e5a4ea0f007db4c4a7cef87a47f90e36c1a84d86fb2
+DIST rand_core-0.6.4.crate 22666 BLAKE2B 8b6b66d50aade877f2779c006f8038db450f808c66d73d79efa66c4178dc03db06f12201bf0e7930181c4b0f4030c49b20cce6eb7839763cf2217cad9710789a SHA512 36c67eb845aa2ccca49d6d680f28d418229bbc5a050729e487fe6b9f9f384fdd7b8d67fc6508b90b79ffb3c26688e72feceb3ecae57d3d7f59338aeb62296f79
+DIST rayon-1.6.1.crate 166330 BLAKE2B 5bbc439e0c88780b8d80cb36d4b4164e698a1189bd140e8c84d9f6a466023de0cd69a1f24c4217d595ae9af1f61aca6829461648152116c6bebeef0f0e686e50 SHA512 2e03585170e59f4388359817d67a43cd10a2244382615ae39bf84210db03a6dfec3b75d8a23800b8faaa31f45e8df4c44fbc343f02e18dd3dc0572c207791e73
+DIST rayon-core-1.10.1.crate 70008 BLAKE2B aa6dc470af3464ddd20f75faa5793bbc684d1550e44e0148134be7219dbded5dc7c1a1da96487ce9132330f26a587d9861b64be342566d6550cf3806a764d51b SHA512 a9261aa4a648029f50bcca30bd991ef51353c258b9b8c98027efe9ff62e4b7be200e59bc7aa9144d9a3d39873b01bbe104c1d7875d61e02e089bb04e0312798f
+DIST regex-1.7.0.crate 239421 BLAKE2B 6e9434bb9835bd8e15c81e817aa64e8443c4188219caf46579078c6b7cbd98ee588af0f526e0fd5a01814762dfaa113ca3d15f7cfa14e969d5acda3a631e9560 SHA512 974c15a593d86c33e0bb34f7a67957fe96dec07b3752f2b6b968d657845f5d2342a5ee9ec1359109c43e4f46c9b2b2b678d59f7b752455a0ab1435c1fa56ca3c
+DIST regex-syntax-0.6.28.crate 299288 BLAKE2B 8554370e269e888e603c403089aa6eb4a087ae65fec016a428e424289990a07826e37a2e51cd353c7d530d5b3421e2db6a8f9d50e62379867bb5b6cbc57f2436 SHA512 ba5fb1622a330b67a4eb820551c7f20dbfdc6b38eb697b9bfddea4cf0060b473472045e93aaf6cb9727ae609e06ed285e1e42f06f34ac730ac39fb90425bbe85
+DIST rustc-hash-1.1.0.crate 9331 BLAKE2B 16ac56622897f47a06b661fb59a196b08d48e782ab87549c8bd5c6fe92f374c9bfd44dcb36588512bd9b6125c2fd79a12d648aaa308fd9694bcca3a7c1b49ac9 SHA512 84e673ea9b046f7b989d47f2c4505557fbd5de991e6fc9f56a03605d40e0b4ba5427cd566954890153cc033ccbec6c984306634571935bfe0d4cdfbe56f39544
+DIST rustsec-0.26.4.crate 52630 BLAKE2B 2a505ce07747e32f1afb6557dab59123fcc183e0e7820193bf271909f40bb7af81b6f449d54acfe48543541b984c14572436de45db19926ef708aeb5c04bc31d SHA512 045fe2f50531ee755a897ad5de59a7ad21c9eb734b3a581c80db4046e9fa890ab792b8f91e54e6859bc16ee9880e5304a1570dc6423f5790e9fd5ee043b9fdac
+DIST ryu-1.0.12.crate 47070 BLAKE2B 02b0eec6bf266b7c482aea15ff83de4bf3cd6f607f8cd6f17f1c3ffc60cc64b62b15738907b4069f5816dd81669ed4f5b00c4bbc8705abaebe3a0846f56e8e29 SHA512 070f0b2b52e47cc9a6d8f003439d257c27aec15ffb030a92481ac22d5052436156e25127ea3ea7986cc514d2a7a924f9328710d743c216d7b1379beacae79829
+DIST same-file-1.0.6.crate 10183 BLAKE2B a320c8343e0b38078ba81c4f0159d886bf47764c74efe0d7cd2b3218426e8341b51e523c00a9e5fbc2ee1057618296bd70b576c68751bd55d6ddb352defaca15 SHA512 3ba35309742c8db63210d9ea78bff4ecd80471d69e6238eb96c7bf0673814f221e2d838fe6311bfc5a0e71b4a7ccba33e07859c0b9cff2171969ff08a4214a7c
+DIST scopeguard-1.1.0.crate 11470 BLAKE2B f774eb90b7d3ffb2efba47518e9d1dead4017ab4b38a4bd74914daa84a5af4bf9eb63da0496e3924499d79cd0439c37447aeda4a21226f95645bddcd6becfabe SHA512 368fa5726df8f42b599993681579a9ffd0196480ee3cd0f9f671e8493f3bedd1e1779bdf2beb329e77e0005fa09b816e3385f309490c0f2781568db275d4d17d
+DIST semver-1.0.16.crate 29850 BLAKE2B 6a6a680e55b6e98e5d0d466cae2f144531d3019988a7a241e7f0e54ebf2ebfbef27eb7af5ac59a618fdaa5546bb84c65e4616734b775fb2e90d87c1ac0b07317 SHA512 4fac06eb9ea475f8a31dd85e4d28c70a351656914e8e61518ad69274e93f1b6f14cc32a5b0c0e5a7d9ba0c74d4a16d502518dfdf2756e8df5e45869886db8c2d
+DIST serde-1.0.152.crate 77091 BLAKE2B 89c01ce359042ebe6b1b64ea710580886f965a98e1d6085c58a75269a9b43401e2cace080c4c93ee51982855fb7e2f09fdefe9bd237bbf30c5537f3a4258283b SHA512 b47bd58fdc1a81d96cc0c9d14c8b19153b6689e893851975b1d7c7010c4448750e7fa09056dd4f13ed475a4aea2a3950952ff528832976919a6e78504a37bea7
+DIST serde_derive-1.0.152.crate 55586 BLAKE2B f133c6cdb87d435ea0c05144e685047fec22b93df7c61df4aa139358c2732326c98d0f62fda629da0f648aaacfc9d6f312813940238f45b359546dd435e7a516 SHA512 2f4dffb5671b4758f0b7dc0939f6b5cfe3b3ba02a53c62c75b5a0ec89d2db26bdd95f3e269d1fd4b07ec921bc0ca5f0741c26fdfcd25bd6532ac698c6c701e91
+DIST serde_json-1.0.91.crate 144654 BLAKE2B 857f25cb43f8153ed4266fdc38b0a426ea04edd9e7954ceeab384729abb51ead1378a819eca6ced5cf20ed0cf237548b4c81ad507e3f4684aeb9bfd7e4958684 SHA512 b0bfa3d64fe9fb0d09ec8dcb6e41eba75ad0f0c4e34e0ffd5e2a3230057d7499a57ffda8c1615bea5195ef398afe414f3b0a143a39865123c1c5f976ea1a0337
+DIST sha1-0.10.5.crate 12146 BLAKE2B 476a0c365ab639a0ce427856787595865a60339fd6b81a45f879ff9b9112021d2c3a62e0a817b4555951131a7fe257d0c30988631ddddc3d217274c46c79ebe6 SHA512 1046b91a9ea64b90098ee6e16c63f0620dc7c2dc847d200972a3da3c8d1ac61fa9030682099a411cdd24717b64d488e0b1be1cbe8f7bfee26b8c15cf4f8e5e9b
+DIST siphasher-0.3.10.crate 9889 BLAKE2B e5dd6d265340b4c9e4266ab1ff3a20f1fb87fd493b2d7b5fba32d26421cc858b38929e4ab96941d0c055375b8acebbd04236d994cadca324500ed05064b9bfc9 SHA512 f90425a2cccc9575d377bb92a765d34653ddef1ac12b7c63dc6d700aaa74b525787e11609061c2d3e44ea56fe0e4b8f93f7b13f0279b5de2e0f710c5caffd4ce
+DIST smartstring-1.0.1.crate 29555 BLAKE2B e6706bff07889a39e40c764c51f0f3271570e2ddeaa2d11c510ffc9a07dc34005b62078abb7dc6f0bec5439f0bfb26d7b20be48a5189f6a468e4977352bcc941 SHA512 18e359d869bf006d49d6981c26a31ed73424c2734d8225c235b5f3c65124e5ca9d5f5bc95f4b190dc65746b73f31e2588bf9f50eb2b30535e5d05ebcd23ad760
+DIST static_assertions-1.1.0.crate 18480 BLAKE2B 358dd5ac413d06f62da0388e2016c5fcb8ec68fd7dceb0dbbcb97665c032b7509b7e083c20701648b6a9174485f117c02682ae4bde7ef037e80a85cdf6a0c86e SHA512 46d0e35f77941dee6f60f574c130472248063dc38494c1c4f84f7c048244cc2a58a86fe17c0990e3f0f01406b75ed385a13d00058612b27cf0e867c8d31c92ee
+DIST strsim-0.8.0.crate 9309 BLAKE2B 40a8be506c43ee1ffe006ddc7dee98c3d418bdd205d57b78f5d1e4c9312feb57e1eaf952e02d92d4e0932db240c6fba45beb06ea8c4fc6de1cf1faa8b6a3a939 SHA512 1d55a8d946cd55f5f37d06aea536549ded95739fa58c0f2da285a0041154c181f663682bdcac643aa198b3e762d694a04f058db985c62ebe22b5c16327ba6d34
+DIST structopt-0.3.26.crate 53798 BLAKE2B 04be64637d18bcc87d261320668023459a42c167bb5a4c52216df556a7dd19be28032e7bf759cbcf710a3729a9dfaeb20c29f37f35fcf33533db583ac4fa049a SHA512 dec27090b57107473c9d398db68bde3b1b5191e7c7980d7d2c20fc723f92c64a6cf1d391d5122a103222c4262253d8073fd0fdfb11c74f235af79b2ae0caf069
+DIST structopt-derive-0.4.18.crate 20996 BLAKE2B 2ae17e0d365a7ce7a4d0e007513623ee0d5acf45afdc3844114e02975b855fd1a9f7df404a24044cf33a3a4cc4142eccc34d1e97925646d54d460a89baa28275 SHA512 68a7f9c2ed987993fdd8bb7e81c31969a1fdf5351c58cba9de61a2f5957aba1626be4b0742f31d4de502301675ba24b0d91dd3acb24f5607bdeec83070626a57
+DIST syn-1.0.107.crate 237539 BLAKE2B 5a65968806c72fedf69638661f827a0426b9e49c2f9a5e5208f986105f8facca2bdf241f92f74bde790e9a0dd68240d4827a345a939c087364360e19a5cbeff3 SHA512 58132adb76643521a6a9cbc0316431318ac25f8517bba3cbb98e7e28ed536f9e24f643e898fa21a2f74cc8c1aeafaecf9b4199b23048c7be8c0bab2fe3aa7623
+DIST tera-1.17.1.crate 98201 BLAKE2B 317eb9d64c2698b88a5af27902423077b369b7ed6a28380d0e8fdb2ac42adaf6a112e51cf797b0107b6a216e9c9ca56abc29c56b46b2c9e49ef9e5c4df8715d0 SHA512 55cffafa1c75dabe5bc40121c8bf3583b48b18e747c28f4a02756ca972bda861cd7e0e1cd2b12363485849108169935404d9936ac58984e4d579e4dfe418e6ee
+DIST textwrap-0.11.0.crate 17322 BLAKE2B 257428908342774593bbd3528fcdae710712ff54e8a711393a24356d8ba0e16e466a4b20c05f942c48ca76b3b5b5aaa90ec202f782cad892caa8b71ccf124da6 SHA512 f5c0fe4f28ff1a3a0931e8e235b5157a45f67967985bcc752418c5ec3481fca44a8ae4800088889b37e8cd0533f53d3c456d5ffd19b767b3f83a87b49a2e209a
+DIST thiserror-1.0.38.crate 18947 BLAKE2B fb81df34dba2958395ae360cbb14e2708e5a3cfa5cd0bd03c58f29c146d8afd8595a7ca1b30f1ed2a75ba140a55ba450fd4fd040aa1a1dccb0baf393b0e98d60 SHA512 95b8ca682b579834a04058f03ed0c994ccef426d75e0fcc28ee47151d343da25e8fe31f8157744d942aa54652115f477fc6037f91c581dbc127b829cc96476ce
+DIST thiserror-impl-1.0.38.crate 15429 BLAKE2B 96202c256e970fe23f07b461d71430889e36d9f0e83608d001c6feb4e86f4a34047ce93617b27f89c6e2a5d6ad8702b9f64ac7e59bfee221677261fdfcb06e69 SHA512 628aa28404a181b384ac6a11a433829a5481d97face5bc1704349414f36e93440738122fca716fdf878719870d10e0cf8d495df6b1d40913e985c2824cbc3aba
+DIST thread_local-1.1.4.crate 13106 BLAKE2B 64c19368f8cec46f23b3052759c4c4ef0de50748432790e6ea11b12477239b177d54e60b9046fdcb2f495b8e0b37ad82809d03602edab9fc85cf814e3bd94fe2 SHA512 db7ff3eb88a73d9313dd58d72397614c5aae6be1d64ead7f16535cae2857be3b27d189e7955308591ec64a0d67777fd2a62a2b124ca73facb9a2d8e0458bdbb5
+DIST time-0.3.17.crate 99048 BLAKE2B a10a4b8d0edf8ca5f073f0840060a487a60a162341be3454e069eae48fd43b9b7bcfdb9bfd7d31380d8beb1c5364bfc9b774f3f438327d49f04eb452d2932e9a SHA512 c69ec373a79038315d0257203be16539f5efcfc0ceb9ce2cc0413f3d6ab6ff39881720c310f12cada17536ccecc4501f081890290d15282514b26fafc02abe69
+DIST time-core-0.1.0.crate 6597 BLAKE2B 43137c5cbeb61a89c1cbbef325f2e2dc4b907d4c576553b202d178a64d46396958745b00c9f2aa60a6eb609d663e48b1f9bd1f7ebe58ff6e22540e96b2b1c7f2 SHA512 f7e181a40a0052d7aedf78219a46f8876618342c710e819748a87a5bc0728e5b2fc7ba08e38ebfa6a17d6fb60382003bb35745ff1eabac1c8f8b47d186a383db
+DIST tinyvec-1.6.0.crate 45991 BLAKE2B e9699d4d80a78978f0ebfd049f5b33d7f23d401cf4f4439ccb168e8c0e322473ad0ea7e2ff0ff69e9aac3e5c4c9ae5a7102185533bfbf96dbe77b3526e700bc9 SHA512 e5acaf353c58c60ae5556130a934f1048abb79cf6668ae467d308bac44b689d8a9997227ea879f4b5fe50f29cde8761801b088d7149bcd063b973056c381921c
+DIST tinyvec_macros-0.1.0.crate 1817 BLAKE2B a3d1966bf57c11afcd026269135a6189f149f905bb70b47537c0a7bcaef0bfc6c89bdcbdb0f6cb8e5255632855134631c683fc90606a254ec8ba818fd5ef0794 SHA512 d6afc83a3c70cde916a6ff599e2772588e4bbfa7a5b1c7e5c8aa0f4a8a5c9426182497a644e4a88194ece986d38fa64b6c8eda9eb1630441c8e65a8741a45873
+DIST toml-0.5.10.crate 55193 BLAKE2B e718f93b865c4e8d17e625a753776bc62a50f98d6f83e4323268d65547b6bedaa90bdfef8b0ab9ce42df62c5552939ff020402bee9aeeb7d883caf583438995a SHA512 0d438b1752b815445db647d7bceb620ba7e393a29dd5154f4f20e0357e7744c69e72ea3a797f8190bdbb72f413053621de7c8de88d30926a489526de440af2df
+DIST typenum-1.16.0.crate 42477 BLAKE2B acc6dcd4521493c438a8a3d997ab0456fdbff3db66aee9b81ba219714d47522c3ca8fe26f8ce84edfda416ff9a22747caf3ecc9cc4bcd1e7647ac351d5aef407 SHA512 93da3ed62573acbc9d5d31257fb72ae9cfc7d59e4040c1f32d93e8fec94795e1aa20a3bf76ddc64c4b383184306bb2a66e51fd61b64dd4ce46a1bca8238b57b2
+DIST ucd-trie-0.1.5.crate 45391 BLAKE2B 1b5bbeb63ee88f4481168f12e94004a4074c0269ea4a58a406da147834c25c23efff4273bd1945b181950d2119c6d83fb32acf42c658346e85a272bab4dd687b SHA512 67272b54b6f404eaf32d83697b0d4e22205ec8f24df40a0feb005a218ff6f74b001c4cdb1c471582b1f3ae53eee71ff89b3d0b9e06a9133cf3e6c21e144ebec6
+DIST unic-char-property-0.9.0.crate 6809 BLAKE2B d2bb66259b66e59e831ad74d89528882336a7cf6dfac7a9f49308a70a3d61d5ab88f3ade9df2c086f27ff4a6eae0d2d2b8e63bd154ce3e700cc525769f34542a SHA512 ef969968c61eae6a7d68e6ccb0b40f6618a69bfc4714b51bf4ee8c5ec4532d10b9c6675a4cd5121c904a578ceec7c6471d1496fedbf121059f076ad1c5ccb70d
+DIST unic-char-range-0.9.0.crate 7020 BLAKE2B ab79b4298b999a9fbb769bf191f83e259b40b8d06cc5cb82abac48434162216a283fa82c1bc9af8b40656c2d06e5b6a919ff7888852eabb9001a92db12fa48d7 SHA512 bb0ede1695f4f016bdf9ec83bb49639527248c175c71d24993b8651ea6be0a411251ed8518893101dd5e96fd2913cf15ec27799c677ddb08b8e408da06ae0ceb
+DIST unic-common-0.9.0.crate 2558 BLAKE2B 4efd81198a61076ed45f6fff73561de21b5b7500277de206ed41cfb01ce8e5046a1e2c5f90ac75c03eb1897b7f54a14cf0a8f6d9cb39f624b3a9fac375468e58 SHA512 9212f99afd4c694a3a671963d63e5349f81adde6d5f50c92ec39d15e7ee24aa91eee63ba578a857c8b21380937860968a8e13cd16bb0ee0c0ccd96b3094ad155
+DIST unic-segment-0.9.0.crate 34848 BLAKE2B cf04b1d875ebc835758b17f8fa0937da8e47b5c3aa3d2389b9ee35160805b1a0696c3a654d68b60a515fd31dba0571b0a087e97f6815ebd075e1bfeefd0a623a SHA512 cc2a27459dca554a78ce24fee42f0e4d0fbac37c42b4c5a1275f9e3b412cd1c813a4b4864857ddc33b549d99f10c9ce9c277b00f9fa7d93f130f5e47106d8fb3
+DIST unic-ucd-segment-0.9.0.crate 39262 BLAKE2B 73a2f0bfeb17ee731c17e7eb4b7188a800fcd3745c5c6480916240d087df5a856e4f51556e1aaee1e6668b216377acdaf4879beee6b285da040f6871f0c04e6b SHA512 04aab71f97785453dce7f561acfb2382a23d60a68735f3664577015a256191463dd6b1f90694e4440c4889eb9b6380c16c7a0ec2dfc2d49fc44a284eeca43c09
+DIST unic-ucd-version-0.9.0.crate 2246 BLAKE2B c546ee182387db997e6cd699a25bc201fc943306d8e87f96edc1a3dc1cd5ab8ad96f34e8275721a5604765aa6fb6f81e3d8d9eae690d04e5ba71325a769b065b SHA512 153219ff18be02e23ff3dc90bba11fa8c7cda11b972e0d84500d9a0742fb7d84466f2cc63ee278a24098c39634e50742af3317cd942f4ea882ef5a2a8e003d7b
+DIST unicode-bidi-0.3.8.crate 36575 BLAKE2B c0442dd47a8ee81f575b28e34c9781ccf507b53ea96d1d4df2e8117231e8e67579031e4244a2dacfd6f4c24ec01fbbd4da7c9ab72ad50af51ef56d7d813b6444 SHA512 810b5be48159ecbca542c715496f279518285c3b09f7c39451986f94e6c259fab1057512a2148bf99ba9abf76e861a24456b547cc2273f0b45ed5d3ce9dfe3d5
+DIST unicode-ident-1.0.6.crate 42158 BLAKE2B 6e4ef61fcac69b4ccbf743a2c2f857a6ea9fcbac9b9890f5b7208cc0732c6892aa5889b3030e87c8c29ce4ce24ddb7adec6bcf47b7aefe9cb5d19f920f12cfbd SHA512 ee1dc78fe535f46bdaf3e19dd8dfc859bf3133d9271026cadf626a07ba586c39caca4e45d905156a6276cf852f9cebef196b2229c3ba4b5e2b26c956fd6cff86
+DIST unicode-normalization-0.1.22.crate 122604 BLAKE2B 3f3430b279cc0ce1595392c869442ce676ab097154c688779ebcf726e10c497df59be2cd7bb2f84f99499a9df0654760a10ac92224c17d74775aeebe291241e1 SHA512 a5810d5e9cd93dbb80e013997aa9d38e60834619483a6623eb2859ec5d59a5aec3fc4db123dc7f4e2fe9f2b8799cf6af48bdff22d69a00a23707240e8bf3bb3c
+DIST unicode-segmentation-1.10.0.crate 93893 BLAKE2B f0604ca03586726b878f7884a639554037816ae01965fbb97b4998fbbd12e614f2af50065a59c834448413418a56b198b016e685ef9509513e8994a5c063da40 SHA512 e6a1baacb557a5a7ed7ff780c542c5947eb473763eb2a6018cb1e0a1abb9f4bf3f8073610e4897393f15df076f6657a0f162a5c5bb7ed5f3b3fd832e533a522c
+DIST unicode-width-0.1.10.crate 18968 BLAKE2B 6174e307fd3ee290d0a5d1d31233baaa5315cdb73f19b8580718e9f9eb04cfd3aeaeb474af1e50c4b9fecc6fc777937dedc527c9dc9ed14ccf42af099e591f31 SHA512 9836a8d489d18ea1ecfe1957ed6d5da7dce825e138cd1848aef093fa8d2eb83fcf01eabb1a2446df4f5ede4e67316e9e81b5d58b59d4e8c5d67870e8fa5dca3b
+DIST url-2.3.1.crate 72777 BLAKE2B 6ca0e537baf373b92269b2531945c1cdf360f1566cae4734dfb96f05a605e5c6c82e3192a1b9dde0ff22b92b87aba2d56e32a1bf17882b4de15efd7cdf52bc76 SHA512 8224010bef067574481e5d84100d944782d52b49db7c396ae2b4dfc145ed58769c15440d97a0fed4d2f9857592a8601417cc5b1bdea959c47a3e7a1f7182ed0d
+DIST vcpkg-0.2.15.crate 228735 BLAKE2B 6b6bacd9a7fa38919241f45a97f58cae957e58d3aac99df208a26aa718e4f1644f4ccefa31b09151e5c1952288e0e5837c363918b98c7f55079a948a952c1c50 SHA512 7322a21e8811b2fe4e79e09dc321458068ecdf1953f05d36233f3278ecc0b1dfc64194db7010dd46fcf692285f42475beb090c6c6cac0c8f9fe0eb5c770e3172
+DIST vec_map-0.8.2.crate 14466 BLAKE2B 8f109fbff19604b82ea2aa61c952e2ce9b5597ccc8e1ef4e847648e2de08dece8c4debe92889edeccb8d393645fd0b62436b49d236ded7ad181c4a51239a9539 SHA512 4f1ef59bc2c437e79f1f84fe021bce5aa8ccd581f500f3d5776913d5f17d45b03ccee64f5bd03d47656318cfc9344a1f4311079d471fa409a8e4e94c143973f9
+DIST version_check-0.9.4.crate 14895 BLAKE2B fa1fa4008af165bfc1fdbe560488afd9d232cfafee94104fbcc4cbc52f234849bff9ddfa88109a1ac682f6d9c1d86b0459893d223f64e65adc08966aaf93dc89 SHA512 b172dc9a3759a4a683ffc39b9a40b03b9974b626a088217de87090466cef695226557c226cf3e469b2b25ee7297b7eb0d7719878cab42457f80146a81943c0c8
+DIST walkdir-2.3.2.crate 23516 BLAKE2B 473f2b51aafd6ac17e5c3da8d545d179b31486b3a65ab39fbd8bd7fbb2ebcc24bebf01781200a26a68f0b1cb464f5763a919aead3b03eba5a7e1be6efec5500b SHA512 6c44071354faf37720ec4117ded34c8d530489542ee107ac26a7a56ef4a882b9003e22e84f1d61f6078643521343e35aa1f7b57c838779e78e5937a667bf82da
+DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
+DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
+DIST winapi-util-0.1.5.crate 10164 BLAKE2B fc800aceae5249a858c806c3e969ef2545766099872d856ebee51c883d9acf1122278db9607d50ca53eac351502b700fd2463900932d342240f97f683d517963 SHA512 7baeb661f397c4693dfa001fdc774b323c51a7c55caad40f2de5112a1cefd1d6151e3df41fa4ee193460a5905917c83d2b1de5fa10b4bd014ad96690af95c0fd
+DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
diff --git a/dev-util/cargo-ebuild/cargo-ebuild-0.5.4-r1.ebuild b/dev-util/cargo-ebuild/cargo-ebuild-0.5.4-r1.ebuild
new file mode 100644
index 0000000..a19ea0f
--- /dev/null
+++ b/dev-util/cargo-ebuild/cargo-ebuild-0.5.4-r1.ebuild
@@ -0,0 +1,183 @@
+# Copyright 2017-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Auto-Generated by cargo-ebuild 0.5.4-r1
+
+EAPI=8
+
+CRATES="
+ aho-corasick@0.7.20
+ ansi_term@0.12.1
+ anyhow@1.0.68
+ atty@0.2.14
+ autocfg@1.1.0
+ bitflags@1.3.2
+ block-buffer@0.10.3
+ bstr@0.2.17
+ camino@1.1.1
+ cargo-lock@8.0.3
+ cargo-platform@0.1.2
+ cargo_metadata@0.15.2
+ cc@1.0.78
+ cfg-if@1.0.0
+ clap@2.34.0
+ cpufeatures@0.2.5
+ crates-index@0.18.11
+ crossbeam-channel@0.5.6
+ crossbeam-deque@0.8.2
+ crossbeam-epoch@0.9.13
+ crossbeam-utils@0.8.14
+ crypto-common@0.1.6
+ cvss@2.0.0
+ digest@0.10.6
+ either@1.8.0
+ fnv@1.0.7
+ form_urlencoded@1.1.0
+ fs-err@2.9.0
+ generic-array@0.14.6
+ git2@0.15.0
+ globset@0.4.9
+ globwalk@0.8.1
+ heck@0.3.3
+ hermit-abi@0.1.19
+ hermit-abi@0.2.6
+ hex@0.4.3
+ home@0.5.4
+ humantime@2.1.0
+ humantime-serde@1.1.1
+ idna@0.3.0
+ ignore@0.4.18
+ itertools@0.10.5
+ itoa@1.0.5
+ jobserver@0.1.25
+ lazy_static@1.4.0
+ libc@0.2.139
+ libgit2-sys@0.14.2+1.5.1
+ libssh2-sys@0.2.23
+ libz-sys@1.1.8
+ log@0.4.17
+ memchr@2.5.0
+ memoffset@0.7.1
+ num_cpus@1.15.0
+ once_cell@1.17.0
+ openssl-probe@0.1.5
+ openssl-sys@0.9.80
+ percent-encoding@2.2.0
+ pest@2.5.2
+ pest_derive@2.5.2
+ pest_generator@2.5.2
+ pest_meta@2.5.2
+ phf@0.11.1
+ phf_generator@0.11.1
+ phf_macros@0.11.1
+ phf_shared@0.11.1
+ pkg-config@0.3.26
+ platforms@3.0.2
+ proc-macro-error@1.0.4
+ proc-macro-error-attr@1.0.4
+ proc-macro2@1.0.49
+ quote@1.0.23
+ rand@0.8.5
+ rand_core@0.6.4
+ rayon@1.6.1
+ rayon-core@1.10.1
+ regex@1.7.0
+ regex-syntax@0.6.28
+ rustc-hash@1.1.0
+ rustsec@0.26.4
+ ryu@1.0.12
+ same-file@1.0.6
+ scopeguard@1.1.0
+ semver@1.0.16
+ serde@1.0.152
+ serde_derive@1.0.152
+ serde_json@1.0.91
+ sha1@0.10.5
+ siphasher@0.3.10
+ smartstring@1.0.1
+ static_assertions@1.1.0
+ strsim@0.8.0
+ structopt@0.3.26
+ structopt-derive@0.4.18
+ syn@1.0.107
+ tera@1.17.1
+ textwrap@0.11.0
+ thiserror@1.0.38
+ thiserror-impl@1.0.38
+ thread_local@1.1.4
+ time@0.3.17
+ time-core@0.1.0
+ tinyvec@1.6.0
+ tinyvec_macros@0.1.0
+ toml@0.5.10
+ typenum@1.16.0
+ ucd-trie@0.1.5
+ unic-char-property@0.9.0
+ unic-char-range@0.9.0
+ unic-common@0.9.0
+ unic-segment@0.9.0
+ unic-ucd-segment@0.9.0
+ unic-ucd-version@0.9.0
+ unicode-bidi@0.3.8
+ unicode-ident@1.0.6
+ unicode-normalization@0.1.22
+ unicode-segmentation@1.10.0
+ unicode-width@0.1.10
+ url@2.3.1
+ vcpkg@0.2.15
+ vec_map@0.8.2
+ version_check@0.9.4
+ walkdir@2.3.2
+ winapi@0.3.9
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.5
+ winapi-x86_64-pc-windows-gnu@0.4.0
+"
+
+inherit cargo
+
+DESCRIPTION="Generates an ebuild for a package using the in-tree eclasses."
+# Double check the homepage as the cargo_metadata crate
+# does not provide this value so instead repository is used
+HOMEPAGE="https://github.com/gentoo/cargo-ebuild"
+SRC_URI="https://gitweb.gentoo.org/proj/${PN}.git/snapshot/${P}.tar.bz2
+ ${CARGO_CRATE_URIS}"
+
+# License set may be more restrictive as OR is not respected
+# use cargo-license for a more accurate license picture
+LICENSE="Apache-2.0 Boost-1.0 MIT MPL-2.0 Unicode-DFS-2016 Unlicense ZLIB"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~ppc64"
+
+DEPEND="
+ dev-libs/openssl:0=
+ net-libs/libssh2:=
+"
+
+RDEPEND="
+ ${DEPEND}
+ virtual/rust
+"
+
+PATCHES=(
+ "${FILESDIR}/cargo-ebuild-0.5.4-updated-eclass-style.patch"
+)
+
+QA_FLAGS_IGNORED="usr/bin/cargo-ebuild"
+
+src_prepare() {
+ default
+ pushd "${ECARGO_HOME}"/gentoo > /dev/null || die
+ eapply "${FILESDIR}/${P}-libressl.patch"
+ popd > /dev/null || die
+}
+
+src_configure() {
+ export LIBGIT2_SYS_USE_PKG_CONFIG=1 LIBSSH2_SYS_USE_PKG_CONFIG=1 PKG_CONFIG_ALLOW_CROSS=1
+ cargo_src_configure
+}
+
+src_install() {
+ cargo_src_install
+ einstalldocs
+}
diff --git a/dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-libressl.patch b/dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-libressl.patch
new file mode 100644
index 0000000..09bef35
--- /dev/null
+++ b/dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-libressl.patch
@@ -0,0 +1,10 @@
+--- a/openssl-sys-0.9.80/build/main.rs.orig
++++ b/openssl-sys-0.9.80/build/main.rs
+@@ -283,6 +283,7 @@
+ (3, 6, 0) => ('3', '6', '0'),
+ (3, 6, _) => ('3', '6', 'x'),
+ (3, 7, 0) => ('3', '7', '0'),
++ (3, _, _) => ('3', 'x', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-updated-eclass-style.patch b/dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-updated-eclass-style.patch
new file mode 100644
index 0000000..bd3e173
--- /dev/null
+++ b/dev-util/cargo-ebuild/files/cargo-ebuild-0.5.4-updated-eclass-style.patch
@@ -0,0 +1,60 @@
+https://github.com/gentoo/cargo-ebuild/pull/36
+
+This patch makes cargo-ebuild compatible with current gentoo QA
+and fixes an outstanding rustsec issue
+https://rustsec.org/advisories/RUSTSEC-2023-0003
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -78,7 +78,7 @@ dependencies = [
+
+ [[package]]
+ name = "cargo-ebuild"
+-version = "0.5.4"
++version = "0.5.4-r1"
+ dependencies = [
+ "anyhow",
+ "cargo-lock",
+@@ -462,9 +462,9 @@ checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+ [[package]]
+ name = "libgit2-sys"
+-version = "0.14.0+1.5.0"
++version = "0.14.2+1.5.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "47a00859c70c8a4f7218e6d1cc32875c4b55f6799445b842b0d8ed5e4c3d959b"
++checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4"
+ dependencies = [
+ "cc",
+ "libc",
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -1,6 +1,6 @@
+ [package]
+ name = "cargo-ebuild"
+-version = "0.5.4"
++version = "0.5.4-r1"
+ authors = ["Doug Goldstein <cardoe@cardoe.com>"]
+ license = "MIT/Apache-2.0"
+ edition = "2018"
+--- a/src/base.tera
++++ b/src/base.tera
+@@ -19,7 +19,7 @@ DESCRIPTION={%- block description -%}"{{ description | trim }}"{%- endblock %}
+ # Double check the homepage as the cargo_metadata crate
+ # does not provide this value so instead repository is used
+ HOMEPAGE={%- block homepage -%}"{{ homepage }}"{%- endblock %}
+-SRC_URI={%- block src_uri -%}{% raw -%}"$(cargo_crate_uris)"{%- endraw %}{%- endblock %}
++SRC_URI={%- block src_uri -%}{% raw -%}"${CARGO_CRATE_URIS}"{%- endraw %}{%- endblock %}
+
+ # License set may be more restrictive as OR is not respected
+ # use cargo-license for a more accurate license picture
+--- a/src/lib.rs
++++ b/src/lib.rs
+@@ -94,7 +94,7 @@ pub fn gen_ebuild_data( manifest_path: Option<&Path>
+ if let Some(src) = &pkg.source {
+ // Check if the crate is available at crates.io
+ if src.is_crates_io() {
+- crates.push(format!("\t{}-{}\n", pkg.name, pkg.version));
++ crates.push(format!("\t{}@{}\n", pkg.name, pkg.version));
+ }
+ }
+ }
diff --git a/dev-util/cargo-ebuild/metadata.xml b/dev-util/cargo-ebuild/metadata.xml
new file mode 100644
index 0000000..30b9119
--- /dev/null
+++ b/dev-util/cargo-ebuild/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>rust@gentoo.org</email>
+ </maintainer>
+ <upstream>
+ <remote-id type="gentoo">proj/cargo-ebuild</remote-id>
+ <remote-id type="github">gentoo/cargo-ebuild</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-util/maturin/Manifest b/dev-util/maturin/Manifest
new file mode 100644
index 0000000..dc2e2ff
--- /dev/null
+++ b/dev-util/maturin/Manifest
@@ -0,0 +1,556 @@
+DIST adler-1.0.2.crate 12778 BLAKE2B a1dc17786adae945ac09d3525e609ed944e6465690787bbb831a1b9d53793cba1989793d0a5606d5d23ee20d36457923d451b1b3530c9ec7072a487aa3e55bbd SHA512 7ab190d31890fc05b0b55d8e2c6527a505e06793d5496be0b3831e0513412f9ba97f8148f6f68ed0770fa9cd980a5092d885e058becf1d5506b7c74b82674aa1
+DIST ahash-0.8.6.crate 42780 BLAKE2B ce2fb8201a484715d42bbd9ca1bfe2d5f541d90e3619ebd437c34a018920b679d5a11f9e96be48fbdabd2e98a379c0395d118616f21eb9004724d8fcb04b2b2b SHA512 46428b27e96be1f30058b9383a94988beeb5064dfb4df04d6959b451d0c77ef69fc51f07fdf9511ab9728295eb6beee7783c31a2297f9e473fc537883e722b73
+DIST ahash-0.8.7.crate 42894 BLAKE2B 56f4b2f577eb2752e675fa2b3191c65e0bb88575f92e8d906714296fca1daace46e93256672fce08cc5b4ac11d40a690a06b32a99fb50fd0df4f042773c33b6c SHA512 2c9eaa22f7bda47a781994c769d4a2ef15ba0f511fdd4ec4680c13d4c1809f1ce01adecc3b3776793158062d28ad9e5f0b1d1c0a9429e43dd07cd99540eae7a6
+DIST aho-corasick-1.1.2.crate 183136 BLAKE2B 2d4306d8968061b9f7e50190be6a92b3f668169ba1b9f9691de08a57c96185f7a4288d20c64cb8488a260eb18d3ed4b0e8358b0cca47aa44759b2e448049cbaa SHA512 61ef5092673ab5a60bec4e92df28a91fe6171ba59d5829ffe41fc55aff3bfb755533a4ad53dc7bf827a0b789fcce593b17e69d1fcfb3694f06ed3b1bd535d40c
+DIST allocator-api2-0.2.16.crate 59025 BLAKE2B fda69b52435a7243eb19bc55914a1961e59dbad5ac12c40db39cccdf7a99c742da59c3ef160350808698db24b91e0ce655cd1acedbbcbe20c717604aae23ea5e SHA512 e1eb0df6b44b62115795ebf772f81e9ac0b6d273afd81659dbddb7eb6628b6e5ef6a60ea21413e79ee638afb72e6872ba83a075f6324daf93f2f1eda48daff2f
+DIST anstream-0.3.2.crate 19504 BLAKE2B 617b846c244ea4ccd6c7835a382afe85e14c245ea56b678f57ee12e9c7bcc1c0c3db9620eb4d16bf35e17eca38968bf04420b758f482ac5594670e6292c1fbb9 SHA512 b896e5208a2ee6a3c98bf3bb9ac1c52792de114dfa5709dadcac6183ea19ea63230dffd3217e571354a71d69b8eafbb0189e05f8f77f50922020de54e3aeecc8
+DIST anstream-0.6.11.crate 30239 BLAKE2B 4ac585ec56a804239d32ad3e64d93936ef9d5c8e0f0e2df17f7b081b6a3b2c4c32ff4ebc09ec02507bbed22b025628029d859610aed90c024e19a3216de73c8b SHA512 f8dd65cc116a1495782a3bfc98edfdd0973ab22ea2fafd292fb4bd3495af7b5ea410f320d3fa05f7f812fa96c2a20f4cd2af9fc58869a1a306f32714cbe45163
+DIST anstream-0.6.4.crate 20593 BLAKE2B 2b617c45d351e01222fc50f52551e57b4a8b0ecf84c6ddf44336c7c9d3b9dde15232b1c4f664d567849295bf8f03612b73ded56f1b3937392eb7718f1e0446c3 SHA512 0b983d626c53d1edc184f04cbd2c004eb9c40d14486b23cce86ebf50cbd3d916d32cb0423ae1d67c2b83b966690090af740538538ef846c0b126c686a1ebe159
+DIST anstyle-1.0.1.crate 13977 BLAKE2B 35be03a7de78737592528967e8ad4851436a74c7863cae9cf5cf7366d3cce9bbbd255b1a89401051f82fe8569a0ff029dcfe427c14a2e0677890453c6119d241 SHA512 2bf9b83ad9772c6a3ef28239cbb98bd667dc631fd1ef76ec5029825c128f6cb22756bb1548dd991e482f86eb9fd94fae5c648f91de2c0d71754b6dca4ec2362c
+DIST anstyle-1.0.2.crate 13983 BLAKE2B 4274b101d1cab2b62f9bb7637dab35f4b16e8c08a080355a2ea53e2b7b353ff230aa77fb3a244e0d6ff0dcd27abe5895eb306c630aa0822d0c608f041d4abfea SHA512 09220abfc844192ca698589897845752e02666b4ecd6529af4cde9f260ef36694e6e631c7503fc0e438ac72c88c419043b78399385cb248e789e86404503935a
+DIST anstyle-1.0.4.crate 13998 BLAKE2B fb501700855709e53438461c2f4b48d869613e7bb3bb700db8bd0d95082876d3782dc2cfe3ce110bb4a206994de56afe0e90fe89f9ccd07c60fe1c652123ba59 SHA512 671c6f57106198bcfc2f9000aacba98fabacfadfce2329dfe8d0e0a2af9404da483d7a844ca2b08e1fc0249371f574c13d0082c9f7a4ed90ff581308257a52d3
+DIST anstyle-parse-0.2.1.crate 24802 BLAKE2B 6304a56c6a9fbaf1bb4d1d177b2315684345dc9d71c35836f9544145364f8d6eb56e25c03076690c594ab7db5914501acb569f6c136952e59c93179ced527fb2 SHA512 5c8fc7d88ffc3a6e78340ffe0f3c2d72e865512030ade4509de9c673eba955c536bb1873dac11f6ba11cc8367fb30c67451ed65d19f81507c9e917c702bfd176
+DIST anstyle-parse-0.2.3.crate 24699 BLAKE2B 17e8638187ccc1ca0174a8cec7f7daeee7e0d8b8c430f7e74f9b10d8de4b49fd1c6facfdafde305b7a3e55b1ebf2b4e8ec4975a0cce691514ddae9eb5b5e711e SHA512 4a6d0f706d75c9b3c5144f34efdef3ef8fcd075962c594a23a6209ed56112563a34b3c01e05a08a0868d59204272d06211b2585cb9d06ce075ea875bedb2f399
+DIST anstyle-query-1.0.0.crate 8620 BLAKE2B 2d296b5066fd6284a2410923215571e6df650c5ef892d6de7a7088a0996ca30608797feabc84f3c325ff4d07001dac80ac5067d2a9c9d15d9ba59a276b399f53 SHA512 2781be5c82293b7ae338ec5046fbeb130de9eb2dbf2e4dfaa73ca5233032e1e52c133e141b02f33d4bc36d996a0a3f680ac82d42d614a5305005f60547133c7a
+DIST anstyle-query-1.0.2.crate 8739 BLAKE2B c06643e8616f1f4469a32f9c0512941ce53ac5db9ebfa7a5b2f19233040cd4438dd2ee69ab89ecbc1c239e92b674dea9df15ed673408c6f3fe21787cc17d76f3 SHA512 f409b624cbeecf58fd87c47f85be28cae1fe48f65d692195fb80854c514e38c40d0e0ffad3a5b388a3929c47bd2060302ebb635aa98dc57329f3a5ed7be3e2dc
+DIST anstyle-wincon-1.0.2.crate 11712 BLAKE2B 68215a76e44cbe0e69c4111eaf7cd818d0e743883aec01f99f6d96e863d8d36bea67ed112db715a3a0daa348535f3db50547d8a0ab5e4572975d68937c49aa86 SHA512 8bda8b79785d201cda90c8d3544f5cead955c25749a4b828bc897e4bb132acbbcc50ac90ee07323ae3077af3e4c613264871366d70e5211200d119f4ddb63b0b
+DIST anstyle-wincon-3.0.1.crate 11279 BLAKE2B 593de9443b4c612526550285a6c156db26a233815e77a748597c6eea509ae511f41eb8ee736010f8be853695c9f1d94b034a77190e612f0a00bf00385d66ced2 SHA512 75ab14081b09e031ee0f559538976f39092aaeb6f561a56de83d12911cc2b45e28eec21068792c86a61e344021921ab55e7139ca79acec78e7d4a796dfa42a2e
+DIST anstyle-wincon-3.0.2.crate 11272 BLAKE2B 73e124773f618a744b17017d4680ec6ccc84ff94fbe2e565073fbcc0facecd3cb65356cf27746d07f453bc917cbeb2ade3a618c6b8578d64cff4828c99569868 SHA512 4cc194faacffa01c6989354c1cadbf1134f0945250f67b7020ab5b475e30db34c799176bd335a6265386cb9c5e8b5bcbdf35894ec0c809b140ffe1c406751931
+DIST anyhow-1.0.72.crate 43837 BLAKE2B 1547c158882e50579a568a14e6e5cd162feb6cf291835266c9dae0c1c4df05a7872bceb02bbc8a13ab5bb84d299a94892057f54eeade7fa095ff8f897f6fe9d8 SHA512 25d8d4cfcc9679c9125fe03c7ce5a46462ca66e7457d45cd7838b7867f3461a899f75b22d76dfb04caa09c013c3b702313ffb6373f92b2798119a30199c38a98
+DIST anyhow-1.0.75.crate 43901 BLAKE2B 6353557d7ec2cbfdd001c039fad62c95fea9e02b113149f726fd14bb36b31e637e8609dd5ee20a900e9c11bb783d9958d664b31ba7c467382fa7f51d477ad3aa SHA512 190d6be8ede0af9808210db53e4dc31ce69b126a26b0357220c4705a11e83cab2c2c09c59964a35794f3c434f717eaa6bb669e9e8f16012535c14246b17e8d40
+DIST anyhow-1.0.80.crate 45138 BLAKE2B 4985d3d8f1d5b5886fae5c7d1a61f921d3d64fb51e24710044b85dfadd2dae2b25b8995cab419cb7cdb5c8cb6b50ad0de93b9a942d34bc45014bd5fb9aecbd39 SHA512 481a3bc29de2af0b913d83cc79dacd559cf0bafecafcc707b921b91a732df953a2df582a54e5fca3f506f6441fd47379bd6bd006bcb1bd6f2615198f9903cc59
+DIST askama-0.12.0.crate 16773 BLAKE2B f0e9d355de0092334b65e669d49b465f02fcffc980d364ba8f478951584b43b890731e7d994358fcea1e5aebf62ed6649b1b2715e9431eefa4820ac0d57f0638 SHA512 8703a9091bd0145c12b724b116452be45ea8730fb05eba375af321345105105fb1486511e3cec82c494fae8771b12632caf5a01e3722a730cda6f81033c470e5
+DIST askama_derive-0.12.1.crate 38245 BLAKE2B d16ac4cab01895349a20906a90ee72a366a320db79be57de0959592f65276beacaa726563d93b5c1e08a603652b20163aa513dff47b2d91b2040af8e40f5bb07 SHA512 6b627746bbc00cec610903d1ca09e723265b68f3c05464800afc69f152f5bc44a4c83e76932d0dce77668d0ac1ce4956d57ea4bedc3efcd0b473eb8fafe1aebf
+DIST askama_escape-0.10.3.crate 8875 BLAKE2B 6bb88f18aa0bd05a36e7bf5cfcaed3138ddb96ed366e7da9b9a64c4e0345fba384cfa3e9bfab3674c1697a7722bd59a9428438b78d44bcac78740d4c53c3d3e8 SHA512 1978add567021fac7f086b6091c97de81919877726455828164642c55607d5b5f6f01c0187f8a8a3371c9b3a1ef41f4c3c9e14d9068826c38ee8a6efe2eeb5a2
+DIST autocfg-1.1.0.crate 13272 BLAKE2B 7724055c337d562103f191f4e36cab469e578f0c51cc24d33624dea155d108a07578703766341fd6a4cc1ef52acda406e7dba1650d59115f18261281e5b40203 SHA512 df972c09abbdc0b6cb6bb55b1e29c7fed706ece38a62613d9e275bac46a19574a7f96f0152cccb0239efea04ee90083a146b58b15307696c4c81878cd12de28f
+DIST base64-0.13.1.crate 61002 BLAKE2B 3b3a5b26e2ef18e9b4f1ede72b1bd160a1494751878e8441d463f8a514e6cb9ac859231536989e19fb1261fd864617fe31440df1b5855a0ec625521fc6fcef91 SHA512 1eb76aff9a84057f2ccb7082e9c57b015c2d71a28173089b02e7aacd09a7d311bedf0a943529611ada29f8d7b536d7ae4de256d98eee8450003a3a9a652bda4b
+DIST base64-0.21.5.crate 77134 BLAKE2B 901cf92d7dd8af2bbb789ffbe60972c1fd295b16690ecebbcb500e4613afa057ab2b294bbafdcaa4007f46412825260a0711d89e55664418a503dde02c8afd1a SHA512 40b1d8470a932c8b7f31717e33bf26742c1bf920caae639b8a992f77e64d5e6d287569742c1348daa25b7325f8ca8d8a312754a743dab3932181f37149d91b16
+DIST base64-0.21.7.crate 82576 BLAKE2B 25cc8761c14220981ff4ed332058f6179948080cbfa2b225ec1d1602e4af14cd470c969e8b7049117e6fc51a5a24e06b1d27bab844486ecb76409d12e0581d5d SHA512 c6986d88dd9aa081d914f35b4174be4ba874848657ac4b5e63b9b45af765d973289c548ccb5a01584edfc0d8d79ff5be25b51365295d6e7a311bd7f0ae3c0cb9
+DIST basic-toml-0.1.4.crate 50206 BLAKE2B c9d3489862c6e3140c8aacf9bce95167ab8f52a514019db9b3a8d92052403b4d6d7293881345addc23ad0ded715f6e2fa9b691f6ca241e3e3b0b850bba43a19b SHA512 03f0aa90b948edd943d924a33b83370703139de0c4d08e8eb4af8429f0a5b7df35c5b7027b7d5bca0ca332151fc5b7567e29ac8357efea8cd855e0e6fb094fee
+DIST bincode-1.3.3.crate 28958 BLAKE2B ea01d2efd8149ecba5e240ed989268b683d542a5f369902d316a4fd1ae4b8edd94e2d4a8cbff0e96646eb29facb04a84b249d74f0781dc3d29c8797ac975aa9f SHA512 49e39d71214dbb623a18e3852f6f2f2a5c3f951b64107d66c8adaa95a442a3283fba978bca41b126c9879b12833b945f478d2c77d35482b3577fc1a894e8e5f3
+DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
+DIST bitflags-2.4.0.crate 36954 BLAKE2B 1d6cfeb0a17dc53a6249a83c8c7ad7c102985ffcfd7f7f76506889684235e78fe489d23b5a5f9018f0bd526a38d6b1449784c62322fb01f4bb507c0af8bd545c SHA512 0c3d6667abea48811a792749702136ee3db97518b33bc4c7d35737505bf56315e0e5810deeea28b7a1b540ec0e21bd319ba0b3c5c4aef0ba8ed5499ffdfd9b0c
+DIST bitflags-2.4.1.crate 37043 BLAKE2B f61c45b142265e9c2944c7054e01704de47510735e9ee5351cd02b98676cc4eb42d68b1fc4849ad5f54654617a74f20cb533b4207c2fe76516b724ba9318b414 SHA512 d3fd7abc95acc1cb5bf16d6acc12dbb8eadd250f069268df13c2e8dc3d5f5c15a929cd17ca931c77393b64dce0516ef8674c469789ed32d78e315b5faada062b
+DIST bitflags-2.4.2.crate 42602 BLAKE2B 768d4ca52aca73d8acf2f494a66957ed2603eefd5a04332ed0880d230c2cc6ef3bfdc0792fa6f288a0eb132913dbb256793e580bc34f4a40e8200e1fbafe97a9 SHA512 ef4c20e6e78a2ecee97e17189b7100a504d8176c7c15d7f17d62157a116d66f83f8b2bba472a4acf02cd3edbd94b20a7047af918c3f3b371e2e04f7474be0214
+DIST block-buffer-0.10.4.crate 10538 BLAKE2B d819c4f9c4be85868e8b105fb7e479d2e58d3ed85c3339bd677a3e111f85cb1ff624a54d7802ab79a6e1d9221115f66388568340480fe83eae1cb448f19f5b11 SHA512 b7d436d8e627e16e6ddc300ee8f706a6cef28ff6f09eff848eedee46f84bdcd03601303c92ab8996042e55922866a59259948177c0a4496eed723523e77f6fdb
+DIST bstr-1.8.0.crate 380176 BLAKE2B 017ba2818bd636297cfb16fa975b34aa83367aef6df2cc321443754e5fbf4a9afa8ec9e99328e0cb0e5929268d6a4c2301e55aa2a6516e43e87280789c8d159f SHA512 9b8828790f3e342e69bb92cb9231c7134188c168a9b67a8705dc2e3370b86885f99e4d47f21ff68afc9147968b0fbf5a293307b09f132dddc550d8cd576f1048
+DIST bstr-1.9.0.crate 380170 BLAKE2B 06ae5065a5d566b6333e911a5b97e3999ad2f0bc19b27023187004c81cd01e5315dcac920ff87a6bb87ccfbb949364f1361dc04d342e24f9f54490b5d44a81d1 SHA512 dc313a16c38ad881128977a20bb390e7c95a96d9530596433a7c4fd7f77d5fffd079d436006dd8d2bfc4aacdd7f0aff229504444250418f6aa3f8d6d4df9abba
+DIST byteorder-1.5.0.crate 23288 BLAKE2B 7f85a7948406844070a2c8202e0bd52f73b3dfc7c666a97046128044eb9352195afb80e2bf894c0742ad109e4473339de1365d09591de70dfec6c8c02a8e1453 SHA512 96caf981177f6ded9f27f025922cb94eb0cd9de5303bd91680099912d922092e77b7361efa70011e84f1595e443193e4f1b354443b9980c123f6ae573b236f7f
+DIST bytes-1.4.0.crate 58080 BLAKE2B 99a9d343424e04649bd209bf2a6c3a089a6cc9fdb799968f8c3a711189328e4499df2e09cc6a2a8ce05d2cc668149b364cf30cb3b09e96e21d50a39519c2f49f SHA512 502c63b9fdcd36ed28ede55a63cd359dc7b28658ecd43020511d17d48d7c34e45aa8ff7e4b17770f12197451040c2b724fe68d2aa3ab4f81c9171d052f2aa000
+DIST bytes-1.5.0.crate 58909 BLAKE2B 2931f19e813eff73be407677622fa29e45f9b49434d5b3a04104b56563fc0e941fd8c5f996258a1aa660000ef014668d70b683b751af8e48d28d0aea76890c92 SHA512 6654cf41d8f0d7e19b05fd95044b9a3bfccd81f469c797c6aa763a4dd29e1b34064bed2e094548d147045cca7bc4706059de5bcf9f6579189e6068fbbf1c29a3
+DIST bytesize-1.3.0.crate 10164 BLAKE2B 049f292705082dbd3b2f0abb6f153023613107949f4849154aadce2181f4568ea1b3c12f00b6ad56146f8a4f3b07b7025498e0c989ac6561ac7255720b85ffab SHA512 c718af51b0da2979b70142012544fde6bbf8639cd4fde66a8066b138f7f58dce019209e27566027dc0ec5a7fc1d2ee17b9b6366cc7a5f95a6419e29a0ffedab5
+DIST bzip2-0.4.4.crate 34197 BLAKE2B b69f8ad38b44eb4912b33d53467492b0ebe6ed740451bdfe9133e71c47a8dbd85b1110a9607c4cc627fbabc44cd86fe0396bb545864632ffb6169f9cfa547b6c SHA512 9cd2b9159bd0b42ac908ecad41f0a737272af94ae0d6dcfe182d2f44bcea4632d32b0456f02322047ea9d6f46377db6cd083f468782bccd6126bcc75cb852555
+DIST bzip2-sys-0.1.11+1.0.8.crate 633444 BLAKE2B 01578c512443134fc786669bea4f2ec4b9c457b9936c907315299d8b67ed78045d458c83ccc119f0fad511529fb5af5feff5fa2d983fdae832d2fcc1b343e102 SHA512 d0a86b9f03acb1e4e309d5739dc2e88cab582757d467a433afe0017017f0e5d2c0282529e3a117160958ed170d8d695ecae739805888305df0e35e4dc440582b
+DIST cab-0.4.1.crate 25985 BLAKE2B 5b30e5e810645641dad0690449f597551b99715cd054c04eaec5d702fe7de8f9719a217bc1edf335075df77c108af1e562c117d9276d9ab10350f5e2fbc42e2e SHA512 030c897f544c8beb22dbcb43afa1899e092b28862dbf08ac55ed2b1c7ad02b7b646b3b36424243a38d83299a7bdd05886158fe7c8e7b17e756921eda98b8ed21
+DIST camino-1.1.6.crate 30519 BLAKE2B 3696bee362c9a6c7331079f86823aede0df06c1c36fdc2d11c0628267ca7635fd78430cc927cf3b2af34591537d3968b3c5f1cf9d500f3e889c202c944fc6138 SHA512 e777cc6e2a01c95931a81521eb278156d1c50ffd0126f914b21e35dbb7644b835f3c26bbe7a487bbca508d26b4c933bbbb9e051fa42825b154c2fa03c04375b0
+DIST cargo-config2-0.1.16.crate 61568 BLAKE2B 75576ff3ae6f69fa9059a8a6d4cb548352bb7d46153eafb0c54eb90415ec8ce7358eeb20709628ed3d48cba9df16f77aa238d32457c17dfe396f450979830c17 SHA512 1d2d22ce9f38dc095293940fe2e358361df88f1154e9f015e467e3b4ec2d78524f0ee693f51232b3c2a2c423949c0d5a279963d07cc6ae03ac9285fdc653cd2f
+DIST cargo-config2-0.1.19.crate 61168 BLAKE2B 04c44cebf4a36bac54bffa200931c54591a4202ace215de9deff647f4fdea8504ccf8ac6b222f1c137c8c960b899517d7dc30e619d41a9430f7789487a1d042b SHA512 3e3c32e5bab54c601e78b45b1b2ed93f520e6e3e51c5540b648021a5789d9e27cd7fa390df6a7a8d4ba82e1eed0c8de8f5b9629f7ce400a13225feb2f5c89ecc
+DIST cargo-options-0.7.2.crate 17686 BLAKE2B 682985bb0f9d7a38e4bbe2b6cace1269b4b98658b119436a0a857e41f0ad3412dec4bce681e4ba515760715d3f92441cb973b9854b91429d649c83928f9d4de9 SHA512 35bb26b7600c3664a4beed0c6d3810ea5a60de293009471aa5329f986fc29f578ae3344b4e97329386453c45f243a524fe0230995a67cf049cfb3e6f208c1bbb
+DIST cargo-platform-0.1.3.crate 11230 BLAKE2B a67d0f77015b85c7cc8e9cadd5eca3c1ac57fc5c54345f80c9892c4ca7a4bc295f8e23330fc9a51b4954ab4fff7cf2a6ed509b506bf801baad6882f19f173404 SHA512 09897871995f40ae792cfbc58a46b602ea9e28458cc066bbf89451edca6755809816ea7b927cc7f35aa95a8da35e1765d38471bd9317946f8c3c81cea82d6d10
+DIST cargo-platform-0.1.5.crate 11638 BLAKE2B dd81f40c628474916c4ae42f4299ea6806429025bfd46718b1f4c4d8463a0fcd77fdb3d5b6b012f4b3ad802ca977311114d539adba1beffa6dc05c9409e4d23f SHA512 ed1a06584ced11631e23e056c42f27fcf8b22adda6b54fde0f3a0441e191de1d9e5072cdc970c9a8c085d32fca9ad9b4242cbaa5a1b5ea36fe9b18ba8f42d1e8
+DIST cargo-platform-0.1.6.crate 11668 BLAKE2B 6cfb4a3c6f1005481b80cd41882c5e5d42912d9abc2f9aeb90464d2c5e904359ff1981852126b49bf7877bd72ad6d295cf35a0b3131d3b84df5c088f346812d2 SHA512 c1e6d8ca372ecf8b23d0580bf45bebac22c0f7460c973e65911bea023deb9f47e65e3969b4940f308a3e0cc9b7e8c37a9e5ba70196f0fd2e530fb1fc283a4d68
+DIST cargo-xwin-0.16.2.crate 28648 BLAKE2B fe6364a2504b37e7fec32aa06030d1440b6a2966c63edf17745017f3853ccc63fb66f0def09095dcec918a54b5bc279503cb52bb78745a0ea648fd0d00c5afb6 SHA512 5a682887f358f3fd187355ae09f07426e1dacb8848c8746fc945000720c72a5fd8282679f72dc92c43ec8a16d1595cd59153b6b95ce8b6266477187b2a7a96ad
+DIST cargo-xwin-0.16.4.crate 28603 BLAKE2B 4f2103f464e420d46f99a43fb176df548e904d7256a5d5214c75a9ad835375b6ef71847d94f77d5053edce16bb1204f15763f78e3762c981b9286b3a4c539b06 SHA512 eeab0052918fe03086ca012fb3db277aae967b34ae8aa481eddaaec783c8b3f8fc4d34b199e2e534e1f5e55c7f30be143d931dfc76f531ff81e1af7def2acec7
+DIST cargo-zigbuild-0.18.0.crate 36875 BLAKE2B 94584fbcb8d58a2480dc461db5bb1c9fb9ab79d777e7f89a7288df2f6c52535b761b0362fb55e237603c5641477ee81b75ce64825958033e64b79214a12aad2b SHA512 841ed89c4eb94a75b1f86d2353fe876b63b45ebefcd39e4538773601c28b6be62ecaf8932dbc4037cf8692afed0bface1afa7d9c6e3c930a57e645576cbbf172
+DIST cargo-zigbuild-0.18.3.crate 37114 BLAKE2B 605cb9d2030fb5c0a7fea31db9718b26bdeb182a21c00558c00413d7157b27dd31684acd13d4be3cbed6048e5e8a1f5e009382c67ce59c71c4f5dfaa33e3820e SHA512 a301d3c1e67b7df4e4705820b7dbe6d01e0b84879a4c2c4b0d32362ecba00c3e491771cc416ca3315c9b534fd73f485cd920bdb050f02cccb01cdd0e2354eab1
+DIST cargo_metadata-0.15.4.crate 19993 BLAKE2B 33bb182a4fbf453be323cd657e0927d7ae8f4cada172c482d96ba959155aa0bd5fc392d4e0a6d4a869456be5de8756c92a4ee0642d60db992aca6d8adadb8f0a SHA512 dae54e7d21642a12fe967d832769f2310a18903a0a46694dd441974f037d8a53e148bae2668a177478b91629c5da736ce56aca3e140d442267ff0bc65bb984a0
+DIST cargo_metadata-0.18.1.crate 24535 BLAKE2B 9d0018e28a3941e269dbd30291054a882a960905a43d4818c874250356a6c203bf08ed77a8041f08607390b2a382864701c519d71a0b88818ee59c6322c74e86 SHA512 43f87d2b84597ec9a27e9fccf06ec5f2630a0147a9c85779622c25493bd61268c266643f8206a17d76a16329af85f0cc563a9af7e17ca77024c0eaf788555f7d
+DIST cbindgen-0.26.0.crate 206157 BLAKE2B 4c435ccf9d5ab3cc036691cc51c55334e27a0348002b6303b11974c0aa4908b9f902577ca6e50bf241ca75816775e7bb33901f1f81e3d5293ddd2128b458204b SHA512 2de81f46c9c68c985241a349f13125876667d1460d3658ead8c4ee9788cd139c30dbc08bebddc172cf0bd4644f3f17c02cf66f2a3ef706c52366fdaf0f9d8059
+DIST cc-1.0.73.crate 57880 BLAKE2B be8d7a25a54afdd759844e76aec61526fc2bd5ca09480e6cdd3bdcf27e5f9d3a88dc16cbcbf54cd021470a7cc521e1ad468116c112bbd30752bac0d5486939ac SHA512 980f012b90c6410144f6de4995048337e09214f19603076db6d4edb88e9ef9ac9e8c6e25569f66c2be3a47e99298f5886dafc102e1a9122316179aa26bc1c985
+DIST cc-1.0.81.crate 66857 BLAKE2B 1f20aa7fe1e41b7d043242ed2e6b840ef7e764fcd844d82441d20dede2bac7386c8089e7dffee5bc22a49bfab2cf9f2c82757bb5068fdfc82610eae7cb2b188e SHA512 00878fcc5e344571cd8756fcd7e0a8e11325cf504eed09ea2ac890368c4d69978fc0de9ef99757cbacdadbf50faadc486d20640b529ac9a4963b3afd71caca6a
+DIST cc-1.0.82.crate 67879 BLAKE2B 3b06cbe1516d4fe8291e1543b09d32d39a135c2352e545b64bc69fc82a40128a9b1291f20bd4cac6a3c37d9466093f8b63cae20663ad517bd7dbc380bfa87ee7 SHA512 27810ea12401635b0122e5b3a71367a52ca7040f196cb30f709e0b8ec0e717aeb8a89ef4e891b1c7c88f7cc8a1c35e55db132b728b0c499e0b683d5b803a671f
+DIST cc-1.0.83.crate 68343 BLAKE2B 33245b33fa845ea2f36da36e3830ec835f937e4319865b357ee9d5ea29a0f9f8392eadb38bf1d95e3c15ed201e561acaa87aedcef744f8db3dabff87a96c7f02 SHA512 742a248c3a7547bb220a0b9c97b67a831fab9b4ac21daa08c85a3966b9fe576088def33e16132fcabec9a2828a6fc437088bb045bfc98b2cea829df6742565a7
+DIST cc-1.0.88.crate 75288 BLAKE2B 81c512bff79ddc40af633620ea440a73d3f7370c96878b3a84606ac0523f13a9ea756765afedaf2148344ffca3ce928fbb0678977273c918c21b4e3985507938 SHA512 67ca5820d36d1be38e56f54a0292d550c9c129d680611a60fbbfa458b8cb748e5f27c7ed1eb767ac3df41cd4e875160525b81ab624726183b1d298ffdcb87846
+DIST cfb-0.9.0.crate 67837 BLAKE2B bab7c813d6636c6e8f371ea8a76ee23361b4f53235cdef2378ebfb9b3df30ddbc6d229a4a904d0711df5dca78711926407a0e2696a4e0d6151b5dcdf8f3067dd SHA512 6bff6dc27f459c7ae15fb537ea0218e17abe2477fa9aafad6b3d0b17773272db61df48ea9cb5055b35459373684b20a0bed031a4a53df42f262c08aa05307d4b
+DIST cfg-if-1.0.0.crate 7934 BLAKE2B e99a5589c11d79d77a4537b34ce0a45d37b981c123b79b807cea836c89fc3926d693458893baca2882448d3d44e3f64e06141f6d916b748daa10b8cc1ae16d1b SHA512 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
+DIST charset-0.1.3.crate 14330 BLAKE2B 928771e37cc4f86f49cf09b671cc016cb662275799f34159dff9c22ca61a71d722f199ed36b2fadebde30b5763cc01d87bd6f27e70ff8ad357df10d6ddb652a8 SHA512 61166acd4fba3330c4c71e101e1993717baa448d91dd9773f7d58ac504fa4025322560ce82bd7de1b5935443f96ba84691658e5c982192196b325f52dc48f4b1
+DIST chumsky-0.9.3.crate 75112 BLAKE2B e74663dcf524513bf54494c62ad154fc3c3560910c429b91644f35327569df835c13645b148ec1b1339f78e9fe6ab3d5b83f10d53235a8e137756a548a9e6abc SHA512 f304bafa831c47fff4ede3b2e67628d7cf33d267559ff0f3eebba9355439f8bfbf08ed576aaaa1d51462114113ec1dc5d3593fa5a1510f6e2032da88d021423a
+DIST clap-4.3.21.crate 55024 BLAKE2B 441333d4f256f34423b7fd991c1cf3cb336d4c124d15ec45f0b45959d12abaed1c397dd12dba99e88b7d8a26d90a25539cfaf484dfc9af6f8d1452d330ac3d09 SHA512 ecc4229f5f8f9890e023236de5ed1ccefd9d51a1d832dad59f03dc312d025d0e5d90fb4ccd1540a4f4077b6cfdd75f320e5688445105cf8ce4bfe20ea2d07fd9
+DIST clap-4.3.24.crate 55026 BLAKE2B c49987221905f7a39d6628fd755524b2395130f0b55f984067238fe73ee7e71faf2532e990198ece793ca8aa03043108b638a618c30ff8c0a3e10b68a3f8d0e7 SHA512 4c45cce4ade8058e6e7131ebc7754da5974e5965128ef5be1a6d327e0ac5f7151ab6a0494024d89404e1743efbb8891de76322d3e44abff76cf2123fcb4534f7
+DIST clap-4.4.18.crate 55269 BLAKE2B cb5d4b093bb7958d013b28ee25f9cbf0479ada392b81265834d75a5fa2e6a4a687f8d4a71520d5bdce05785a874ffaa09beb5707766d59e70928dab00bc122ad SHA512 1f151864b92dcfcc69a66c2a8aa8310ce28171895698d82e2e69e19a6b51ed8780e5eaa77410df9aae2d17c9b45117b913a4c23ef879106c1b7a96182656ebb9
+DIST clap_builder-4.3.21.crate 161410 BLAKE2B 4442407e167c73064ce929f41b7fe187227b2cecce564211d9fc315d4ac23b27584dd18c11e4c00164f749d3e89c4ede33c599caf9b895bea30c65a7f0ddb9b0 SHA512 0cea697633d5911bd5e592d9b10871764fff19250f4eaa23f634594ff2223bd78d59e6fdb9cc7ec2b81815d1d4b5a2ef6a18855e7010de3c1e47790a12d32874
+DIST clap_builder-4.3.24.crate 162489 BLAKE2B befbbc2f379d8b6bfe538cf86a0f27927a4f9ed73e7224df980241c2ad6acbf79a56cab74b3f337d09ce26a5b0c9e9f60226ecce58b6b2ae0dcbdd49a3df6ccc SHA512 e81d73bd3bef181c945856bd2402ec52a100d38ffc223bf485186c4618076d38c277dd85b21e2391471de463dbe3f2fcdf59e115576be8dbef330d888fdc05e9
+DIST clap_builder-4.4.18.crate 163538 BLAKE2B 9991c1a8aba5feda466fc878f9415ad9b5922ea1835c17e1dd6c640234ee85e623bc556ba0e4edd84100a0879ae462028c74304465310d69f9d58e333c2ba8a3 SHA512 ff04ce8e700d8df4a0ae94e8341c3bcc1ebd415312e3b21d56e6beadf604aa5576641861506fa1c901a615a013e4f30bf8e6467889d637b34fa37ef22e2a15c2
+DIST clap_complete-4.3.2.crate 34104 BLAKE2B 8ac5d031536f3917755642cb69cb80a70138871505f7f3b346c66163c6295b94c6981c9ec6291dcac4f6f675bcbcd507a9264c44dba42e6403090a32844a0a7a SHA512 8eecccc5ecb24983bad0c0f7118d632b466e6bad2f2efe1d6695bb53616fbc2ee382e1105252fe587d534a5120a985efe07922447e2168cb3d28e9c72704bc4e
+DIST clap_complete-4.4.9.crate 37659 BLAKE2B 99de16ea4fab3996ed9e7d0855b0184ceb3c5740b690120b48490c1fe78115dcad3d8b52b3ffa31afb2b0e9f8e4c0beb8e331e4cbd5b1f688c1dcd4b49f06ab3 SHA512 79ca2717a7c4752959ca48c60e8e0751de67be1e40717cb336028d5edbeff0650cb3bbab8463dc6f227feeaac3f18acc249f08f26d1855055bae07758b3733d6
+DIST clap_complete_command-0.5.1.crate 8273 BLAKE2B 84302d7ffc34d9e947dd141421462b2035f324a77a8c68fa342a49242b0f97e43afc54be90d7cbb2efb311ea7848313af3d98c572402e7b25f83c22ff1fce8c4 SHA512 0cbd75f41349c709440ceee1075cd209f927b928c665b31907caecae91ab0b1e00c0a73f8185df754663e4d079467c6312abdc175bb6f8bd58c6d783b371754c
+DIST clap_complete_fig-4.3.1.crate 11632 BLAKE2B 77b78c04eec921a2deab7e4bbd68bd4da16eab37dfc17e256a06ac2188f00cc9c30f67f4be7d37d6810162b5b23028439eae3ed800c8f7e40b2582fea569efa0 SHA512 6851aa0cea0c0e5f410bcf4f6d17f9e8bc977880fdee06f99422f5903a538db25d85b9e26f99c7b4ca6016b21c931e3e4b09507ca5d55b183afcdce59470b861
+DIST clap_complete_nushell-0.1.11.crate 32198 BLAKE2B 6a704251bfc10fa7fd113f7e82bdeb9655f2e23d851fc3d654332ee196214b179fa83ed6c57b436df247f6eb1d2feb28017090b9087b7b8d92283978e7ce9957 SHA512 04098511e19cb629df43509f2596904ec2a8690fa6bcf160825030c42dad73f77ed184e5a4dce10c8308b9718541540f10277b0ef0fee6b039ac1e7b482d3cf2
+DIST clap_derive-4.3.12.crate 29052 BLAKE2B 501fb22eddca5b21456bd9911ad1f90ee5d5c918eedd08e2615d22ce58bb0fa5dd626b51a734f20b78411b9a4492ae63629131e0c2e1bd0f3eee21e5da3fb37f SHA512 a58e948fddf45321f0fcfe9d9afbeff42849da472fc4e4b15c31f46ffe55a0dba34d2c1d14e342530c1e4080c43de790595e4f3dca06cbb6a8a60f9e3cab3abc
+DIST clap_derive-4.4.7.crate 29046 BLAKE2B 96ca919b8f9901b2e89c58ee8cf8bd3881ff715ac27999c03c867b317321e4839d9e923f68d411a05b45c34d54557af12b8a173f2445732fb6de16f30dad8e2b SHA512 4be40460468f7ce22906cdc9eea8d01bb07cb206d4ce0c3df2abd929d6925b175a49cf63907925ca16ae6297d6f4d933087fa5b35958e551117ec7ae050be167
+DIST clap_lex-0.5.0.crate 11792 BLAKE2B 0409c9d957ea6a566eb8b50f4212702df038d04c4c38f7440d91cb4c58ec887940f0cf500c4c3949c2191399aac3f5cb1ce44868eac587cde90211d3e467b9a2 SHA512 0149ed7c2438a19b4857f895767550d783711078f07bfa9ac8ca531e06f51c7388110f4d558e30bf503536367cc370cb581e8deb6fe51f9b5460a334963daacd
+DIST clap_lex-0.6.0.crate 12272 BLAKE2B 22aa04997fffa15a2efc7013ae27fd223c3247cd31f8fe96aafb4e87e3224f075e887df10a95a2da80b468d4e16088ae9f171ba6551c0ae06d77bf3b8920ff9d SHA512 3651aa5e27ed35b6b75b1d25fd9c20c26a2a6039116e54d84c51469087732a4f0fd71754326456b367e341b017d03749e9a6774cb7b62250ca8745f5af46574e
+DIST cli-table-0.4.7.crate 13195 BLAKE2B 498e7434639a4bf21f4b793def59e2f045f8353eb2e12ccbf8778a0a92196ed589ddd94e696a000fa7a2bd50470624f2972eb613cba538956e50c6ecaebc1b53 SHA512 2696d3204107f2bf104312fa1e13a92638fe9ea1894263cf707cfe3891ec083499b1b0594d8571169ca242abd6a41396a88ca41dae8a3ce7f04365292158a87b
+DIST colorchoice-1.0.0.crate 6857 BLAKE2B a0818be1299717461ffc1bcfb6fc53a0b3b645aa8c45fb72e045cf2d876fa207948610e58d6a837aad24838ea9616e80b0558ca3eae03fdf9bc4c03a8e5ba52f SHA512 53363f2889cd8e8a3b3ed10c48356896c0daa72f3c12c9c7804707ab0dbc07c0e34ef52fa4f0fb1647311ce5913168c1bf62c2407ff86a33f765a9e6fccad551
+DIST configparser-3.0.3.crate 23259 BLAKE2B ff713f8b09e63a08cedddfe94f6f68920a70ca158f610de6259816bda9cb56f75560456233d0d895a3cd6a41ab08cc298e5133b1bf75fe8e3364d9eba3212e90 SHA512 14e678c0617a5a95444964291fce9492f8e2c7117c3c93272d79572548dc89e8d2bea088d0dfc49481f777ce6da4e8773359de5d6f26e21f21af7ae220ded0d4
+DIST configparser-3.0.4.crate 24680 BLAKE2B b9f6552fb57cf175cc0bd61138e724721ef53609ff86033273af772c48270979a76e60c97d67c40ce0e1d326c5e6dfee9113379bd3f3b6d37b1e290be97950db SHA512 aef273f5ce927a137294b3a6f1c505720ff9029d3c163785287a43a551ffeeebadd4b7212075524a836dafd9d2eb740046b3eb4d33535d20a98cb77372010d4b
+DIST console-0.15.7.crate 35409 BLAKE2B b5e34b03a1c7d5fbffe5ae07182e28f6638e026a1dc2bd87bf47f67230ead612b37ce0c79b50d84619009753bb98dab661279b77c68760a0b75ce8303733abc7 SHA512 f37213812527bcad23baa8648cd949d8ec955e1be7589ecd36fee46637e77420c2561fc301f2562dd95bb66802b92ec1da5b85367bf16b793849913698a80576
+DIST console-0.15.8.crate 36364 BLAKE2B 467de2c2fbfe31688cea20b338558ae9671e50ba1fd07983d21f32d7eacb73e565ebdd6ec5e78b2ae04446f09615c70983c0ee534e25ca5a28fd1b408acfdf34 SHA512 b05e49ed145785e29631d481885788f0cc5574d4d7c4d90280dfedaee7f8c1515072c9c4cfe6bd2e017230cd228157222af7e7d41a9fce697cd1888095df4de9
+DIST content_inspector-0.2.4.crate 11386 BLAKE2B 2393cf83b2dd338ded7f5acd695e05a4a08fa639a52a8042dd0692be5e959cd1cc670472e25ca696a151d161c821eb899b2a950c74f4cb5b880bc42bc53d1d57 SHA512 1acb8b4f12ce3479f5a60b7b6a0c05b86548591e488e7be529c4a2f9aaa60a76ed07e7ce1e557664d31ddd9964e7f73415ad667cd14ada919f61511bf486ed6f
+DIST core-foundation-0.9.3.crate 27059 BLAKE2B d94fec51b1b1055c285609f4bba45c5169a8cc775e251eac7fbf0da7ef894e1be9ca9f4236b82b67be0610bdf811366e0c6fd3cdb671a1e83c49717e2c5b2d03 SHA512 de07967c4f5e2d2e730b6f21984c228dad2cb2f55187f13074a2200f4ce9f906763ee818267a9c67ea560229db7363473b230670a6dbd224fc335f32ba03d072
+DIST core-foundation-0.9.4.crate 27743 BLAKE2B 5b695e671cc833170bc6bad436b2d0d8d386ffb8181bfcf2e92a1d93cee67c3ba1768cf57064fb91b0897c6aec1be7db40b5bd256a052c1bdaf872ec19f6e15e SHA512 82d0878a1b9e3d56b3666fb5a78f92c6f7806d01665c242c06a640bd6b1fd36260211e92dc05e1a16d1430622bfdd650aabb0b5bd8e5592f74abdcf412448e33
+DIST core-foundation-sys-0.8.4.crate 17725 BLAKE2B 8afe47838dc91c8848c0d6a96a604149e5f0762228dbc10c17b85e4e9cd2c3928712bd0b28e1071f5fd6fd76d4ef972cb86c6c929246fb6e84577776933a8ac7 SHA512 15da472316d6decc213e4e5f08ecd22a108ebefe427b890741de4f9199614f19123e64329da76de5e8b4c9ff74ffc31738fd929acc1460fc757b4aa1fd3fdbb6
+DIST core-foundation-sys-0.8.6.crate 37629 BLAKE2B 683d5a84b6a3816317f87359532a8339f08bb4043f1d70a8588636eb5dbe6ebb3843e2a12d9a7e5fd1637a912c52a5aefbb8d44796330b09593e7adefd3babd8 SHA512 24a8958cb16b081862a9000affb0147b8b3be1a664b834c3dbddbff03e709de3f4060ff4800e5a35453f4392ccf33168e8b864be71b17be38cb264a39b915100
+DIST cpufeatures-0.2.11.crate 12727 BLAKE2B 5b91dffb779e437606db9b75d2b05c2de19069575a8272112e9a0389f5bd8de0f753cd90330b5a5bb6a3f84c9e794e96328664557db31c43853ba43097229efc SHA512 af179e269a4d5f48b50134a5e98ac541a9a0d6aa34f13fb8fd9ce8d5092352e1b322437254449ecb1bce608d8558b1cca2c79232ac1327efd887193bd1d36031
+DIST cpufeatures-0.2.12.crate 12837 BLAKE2B 5b518c58c548d9116f94cefc2214fe2faf87c3aaf3fffbb0bf4085f75372cf7fc5144bc3f827101a3a14a51363d06d8075db94ff5ed853ab2ccffaf597728093 SHA512 52742595702fc3371d4126fb355f3d7a6da514a94e43170f1db041cc6c560027f92115eab7846131dba1018ca5c72003ae36f945c1de88d57a0e7f66331623c6
+DIST crc32fast-1.3.2.crate 38661 BLAKE2B ce3762b03d24d5367d89738991c060f4b3af7840e0a7ac7fc17d01ed438caf964bbaefad0fc4d0c438dafa5a578429ddd353c71197f8b54b1ec441395f2f7ee0 SHA512 a683943e252afdb1b9d626a07533ed11cf7a63af603c19640056c5d2b9c884ad9aff33ac54c0853ffca2f6cf94b0730eae6c05abf3e53e55e709d180c8152357
+DIST crossbeam-channel-0.5.11.crate 90434 BLAKE2B 8666f039a0e4ac6f0f8be2d08ce3349d8ad4aa7d0f38c638dfa6dc6a7f30a1629e42f87757d9e054e836941dff6a8efa53b5337706bc5958d33dee61f38e7bcd SHA512 1d37bae1c946d402c1fce37f22a82037d68896770757aa91d209387f947d39c514df52e0ce94317141513784511ac626482f16099cc3b62ca28a52f387b69c71
+DIST crossbeam-channel-0.5.8.crate 90455 BLAKE2B 017132056f1b40e55fbc7a09b75509d72b0a6123a0e5ea5d6104fe822f73b3ccce670d711d3b84b5ce743dcab5f10445297a6701b71213b77c0d56e2c3fd7160 SHA512 47677d6fe63050c51393e4a0537a3c65d7055c9eae118ebe60c5d716b4f47f23c2b1947b1e1b66bfb34a57c4db3a44631d323e996dd545565fe4f58c25863ff4
+DIST crossbeam-deque-0.8.3.crate 21746 BLAKE2B c24025c65d7c1c98e442af95491749dd4f777af0509636ed66886dcf656359ec50dc2a5e26327559c6659f6b355d2b0b992dafa691a36571c99637cb47372d0f SHA512 f3201c9afef7d2d119702696f7e5e7997a104b8f7d67c7adebd1cbed84d3a3415636ff674f1ccdfd95d0dc162384e46c6138c8203ede69577b0d5359a4b44672
+DIST crossbeam-deque-0.8.5.crate 21726 BLAKE2B d97b35e8e8858deaa7fa9a836e836d02914aad29e5c34ab121f52ed65e95213cb2574df82273277365889ea771f04eb40bb2439347c259979f1dd6d5e9853bcf SHA512 0f0c9745763ab156136227cf1415de514952a3f8282ffe413cc249f9f4b345b029940e6a6c87b3be8331a7c783655a35b89c7a2547360ea5ae10aa64ba7ae864
+DIST crossbeam-epoch-0.9.15.crate 48553 BLAKE2B 23aa0532d3126e22efc779859478098e505b4ec895c643530a3f7e8dba0543df3d8ffcb6825b1d3869a4418e17d798d464b3e1bb51522435d50f53ac224e22c8 SHA512 d9292c059ef1d156da52950137b2b3ea5eab66c4cc2f763d02078d0b0106980839ebed2ae2aec53e026ee7b3ddc37c4b51370d925ada1ad13d9981934daa7bde
+DIST crossbeam-epoch-0.9.18.crate 46875 BLAKE2B 200c256cad6011a3a14c4664bea6b150fce72d561c4fffc387fa561b08c0480e8756bf51c14874c5fb19f427424547f72d2cd7dd6f56fb8b6666a85f8d52bfd1 SHA512 0a8a199b9d77f4e28e91fe0a0cbff7e0dec58cac283631fd972477fa912d2f6ddfddaed2c695e4978b01cb5440b702822af6333e7c3dfbcb9a2c2086999516b2
+DIST crossbeam-utils-0.8.16.crate 42508 BLAKE2B dfaf9e7cade2cb5a2de90dc622e58a69c5b28fe9f69d3cbb945431683cf48fb409565190e3414a815563afb12631d990476919890fc482ce6b5792fdc25536a7 SHA512 4b8d599a8b93015eea2fd404cdf1526fbb94662fffc7c64d2f0659aeef349e4ad682f61b2b85d075c7f3fbbc4d8106cd7caf6e65dae117ba982f31262df3f831
+DIST crossbeam-utils-0.8.19.crate 42328 BLAKE2B b2846f569555818fe7a3ef4aa29f68c638f933ee0251713c2c92624bee5f8013def5527027022963f572815991abb98d5e68d0fa00f478b2762133f84ffc84c0 SHA512 6e742fbb0d2a6371db87e81f8ac583259530a288237d0e8347394581c60004703a822318ec945936c410bb44001b115d8d986bb264e5b2d8091bb63a8edd93a9
+DIST crypto-common-0.1.6.crate 8760 BLAKE2B f2422bfb89c15d47a8f91c8f6695e05eb56990a922e3cdf3d426044736f9932324c0d899a151a6df4d6683e6a6b21659c657d3988734014c02cd854bb4b924e7 SHA512 471dbc43f517089d2cfe0868e29510c6ca579875b3bb5d013c70796db969b609b6c4bb35c9a07b9a2917012dc5708b717d48e317a20038adbe7e7039bf3ada6f
+DIST data-encoding-2.5.0.crate 20632 BLAKE2B 16ea08dd12f09f2e6f8ba2910b3db07d4e7c9916e6a70d41420ef1a0e5393284b49787c47af0868bceb7f5d3f1fadf203f5a547dc8cb97713d5225dc9181fdef SHA512 b1de8bcfd7cfbfb988091fdb550eb98dfa5739ff58c4b789663e5db0d539c9acf145ccd72d87f7e1cdefd09d5771772d131d2b2e2589ac8f0bc6972c801ee0ae
+DIST deranged-0.3.11.crate 18043 BLAKE2B 738d5a88732e227bb0e0d33c04ab8248a699c7c499100666ffcd78673d1f38ad2d740222ab405e3eaa7a0a6f4596cfef90bd581a1baf77c954dca830c22e74f9 SHA512 48485666d3e50eb7976e91bed36bddbaea80fac4ac664723130069bd7d17893b6d1a2b82a4c3dd61677162e4305ba5ea8aec7bc2793d1b8b92dd1666c204fc43
+DIST deranged-0.3.9.crate 17080 BLAKE2B a1441d629cb5d8ed75c49c25a42c144ecf5f6d060612b01bc2c78cde577f59fc3aed35b8b5629be50433244975fb4f98004ea99bad1177862d15c8695951dda1 SHA512 63abb2a6aaa770596caf96672c764e2f65b867653f9cd3fc268b4d2137afee7b3fc0618d83ab29c80c313e03455fb717a5015cfb33a69f95adeeddce723003fd
+DIST derivative-2.2.0.crate 48076 BLAKE2B 56d27e27493c3b818ad45703efda607a0a0d9a48b0d43785b6a013443b8b964b67bb5b5284d242358415c5fb81b86b02079ee7c0595ec07bc658240eb114b887 SHA512 3c65ecdabd2dc202be3d83b06f96b6f68504fe542ede7e2285093c6d360a33ec76a3787c436c6e5ff8f59d430436a4b8ce2f908cf7b2b08cd8b0045de4e5d1da
+DIST dialoguer-0.11.0.crate 31286 BLAKE2B 612c7b9de482b48df6404ce31b3d9a8afbd1c8c42807f2c3bc343bd3aa16c359abc95bc879304f29c6861c93101833bf5da036eb0fe85f21be50fdc3a771f447 SHA512 7124e9943dd4fd4403200357b7d26683e7ea709ad9b0251af5d6db4dc8da2a476c6b89e7413df3a90e4279498bd54b67d8d0b161b0e5ae8ebd0bb5b5276cd612
+DIST diff-0.1.13.crate 46216 BLAKE2B 27ceeafb7afd45eabbbe22d1f05667f513a6062762e6b77122e267282a8f2a0bf96384989508bf10c9e13af4856bc9f58f09b10055d6fc2c32681e288ffa9f9e SHA512 45e259c9fe7c23bd9e9454891b42d4aef6d681d35ee039d21fdb05ae9ed5856161a40f29889e7880ac2a2daf85f1b7d752d213b4a99a1a74ed2682c18a3ae7fb
+DIST digest-0.10.7.crate 19557 BLAKE2B 61e69d78cb8d6850ae26ad7ff2d52dd6dce820d8c621230def11cc0e8aa6d883a6e1b25340fb45748db52a8ccf3c8d36a8aa0c8cdf4d4eeb4e3f870d86abe09a SHA512 0dd8c012468ab9011b89413ea4d3647d95b1f683b020a0e6274c95ed5148638b56fef19cd9044c837ad53715b582b88eed277fe96e917c27c5d7abdbf7c3794c
+DIST dirs-5.0.1.crate 12255 BLAKE2B eadd38e85211ed5aee7fab964e90342273320644c36262aa7b436e493512851a4751a09d22aa8bae0495f4b22df6e7395d13715ca8b8c6196107b1be03af9328 SHA512 cfc329518e85a25c296521b9aeb6e5d5f60b4525aa786ebfa8b9f198446a1ff5892160d1bb4790d7f3fc4a0abdb5921b2e4896e271a3fc3a3225897313b77bd1
+DIST dirs-sys-0.4.1.crate 10719 BLAKE2B 30334f2192698d7d03bd4e8bc8a682482da7d13baacb8547a132f55019d3727ac35579926ba4367fe0a5b7fa917945abc03e010cb7363683753c87440581df42 SHA512 53c7c8bc76d7211d08a0e6b25caaed12eeb7283cb4b352c12311db3c796794330943259a08e48ff9d3a280917920a088e5aede32677a4b2f9f819c2dca6adb9a
+DIST dissimilar-1.0.7.crate 27588 BLAKE2B 499890812558de9d8dc2a43b8b3430106ad8fd5f8593aca6de08556afcffcbc251cfa02c1881f6ea4edb164166335d3c8ef3a5cf2d7e51f4e1c86bd2ec12ab85 SHA512 f3e21500d19e030c629b1ce8f809cebf329514e4f901baa443ca2f93c4dfe7d49342c998216e94560c4fde4415c252dbf213ac7a6f4953a229ab0808d99b152d
+DIST dunce-1.0.4.crate 8034 BLAKE2B e1e7ffbcf1e3632036c03303ab46fc37b2b0a991598790b2dc65d7a61341a78bf555230ccded8fbb87d6288282af3ed2a8641212a0f1fab929bf99298e878b6b SHA512 f57d9c53c177bac8e10a4b56ae421c604085aef0f264b8d6871abb7e1ff713b55f396c5c5f24422763319c504c6ea6a774416af1c2ba23ba7b67b2282f6731f8
+DIST either-1.9.0.crate 16660 BLAKE2B ad61038bfacb16f678fff5dd9ccf8f345e1bef18bd7aa0aa9c99d44abf8428939362f32fc8dbb1b60ac56016e0096201071d0bf8c0431b660605d0dfa97da466 SHA512 4978d50842386f51e31a47ad037d5e491106a668bc701bb833e6ec3998afe3ebd80efddc47756b2f300f534b39b26fc01386dc878d3b02cc8c1fec6a474c2177
+DIST encode_unicode-0.3.6.crate 45741 BLAKE2B e1e3792bc2bf9db7df33a516d0d755eef5eff1249aa9b2fd7f0dfcb155786c566fb619c9b2d73425a8625c8593988b117e9676c341f65e8795ddc838bf9881c4 SHA512 64193d6ac75f66d58ed864169b5d6228ede36dcf100614395e086bc8e847a3ddd287734d88e8ed50f38c679a99c80ec68449175a67d8ee03b02ec1cfa9d55e77
+DIST encoding_rs-0.8.33.crate 1370071 BLAKE2B 0e81419086ca6e18f2aba5194b87eaba49ddf20493fd6ee09d479db86306e39dff9b23f399594afc42f1fdb33855e070beaa1871794dc0b0371c35d296a6369a SHA512 20d28a4c0ff0710f911f510be56c2bc5e7514b76d370493d2b89b7f25d1c0cd46ffa64862e54fc472f07f928a2cc24cf9d790a37751cafafc81f263705aac4bc
+DIST equivalent-1.0.1.crate 6615 BLAKE2B 302d78069d9df05e78b53f0488a9e4eb98fa2bc1e21893dc8a0acf2234347ba7c4df4b9d6b380ae77d8ffb1074b9c790460fe2dae47318aa1c4fe4208244540a SHA512 b2bc60e804c1b02c461dcefcfd60fc37145af710d183ebe65f9a4d63f2b2072d23193f98dc550a9213c7fdc6a2a837af23b04a89294ebbb681a4aaf5d5031140
+DIST errno-0.3.2.crate 10424 BLAKE2B 3061d5a5abee015bf41c11ef31dd0f38a738c51992e3bf9f9ec98f67a87b88341c97901211718a5f103b8cf021c875f8fc799fb217ad69fd27371326b5aa40e7 SHA512 b728704f11cfb2bffd421ad39e7bab79b11e548e336e9dd1cfb902bdfbb78a8afb102ae5684fbd6ac4b01b12603a1011a1faa21cfd0702bb25a300364b17ff84
+DIST errno-0.3.8.crate 10645 BLAKE2B 4a7af10845f11b3d8f177a75a692be468e8ef0ee53fb84a4d212335f1499456b6739a59af260894b5c3853d3bf21ef3490d1e3a613305561203ca334a636c3b3 SHA512 29753c421c6f929760cd7565f8171696e4f70e677654a7507253f4fc495edbcf214ace27be46bdfe5c1a0d782f4b688f591476e56f4a1096471cb353c643328d
+DIST errno-dragonfly-0.1.2.crate 1810 BLAKE2B 781fc26dce5c33d83b9a1fd9be2b2ce9ac2559aaa858957ba6777e143b1e44cdfee48e1b47e3c91a95075a51921d1a421d0b45eb3d8de827cf4dd0ad744a7d8c SHA512 f853f1e1b8dd0f359a8f9a0399b3384c1103cd090d96e2b2204f91a40d40a9eb99383d4aa6a11e5470c51557afacf452d4be2049600d4235d27f59870fa3b916
+DIST expect-test-1.4.1.crate 13530 BLAKE2B bc83162a09c2493dffd45d8d8bc11d3ca86ad1d76583073792b411a5af39684d0e80e5183eeb3b87f7001cde46901b280b67ee186283d23425bcfceb6eb5730e SHA512 5665e7bc640fe56f1134fcffb9ac80e5d6df820c679b768a0d68d58198167d3ff0893592adf88299564037ce72a198c6c8cdb33f83683ca5225e329494a2ee52
+DIST fastrand-2.0.1.crate 14664 BLAKE2B 7a5812153500170dcc53ca8d66384fef46eeb5a8f970be43863f22f82bf427672d07cb053f4e04b0fea358ca89178399871235680f57223b8561c07b8d21cf13 SHA512 79a1e1b3f39264f037def236afbd87b732f5e0a2154b1d9e721b3c7990c52be45138320e2571fe628f482e0da7e3cf867abb745e3c277b19015fc031fd4410d9
+DIST fat-macho-0.4.7.crate 19320 BLAKE2B 592c3ad4ff5454625dbfb58aadf0812465a24c59fe0ef165a46def2b9de14b697e62aa72678691348fe523f409ee4db7b90aee76f50bfa9bc2cddbda37a04aae SHA512 263aa85a7f3ca1ab9e0607454028337cb6067cf8264e45196ae11b6d93fb4f6b8f37c27a8f39c2594dab4fbbce9c2fede6efbdbafde2ef34eca9d9c9a3523b6d
+DIST fat-macho-0.4.8.crate 18658 BLAKE2B 61432b0a49b9e2754222b8b02dda8fcb09d955627abcf3895ef6d2049ec6e2d448f3f2617db9dcc431ac38e56005acab7940e8a4c148be5c9f77f7d51ddf748e SHA512 159bd21cf1f321cc9bb56e08ae561d6a00e0b83de6e4096365b8ce5c29a409f5312a78ec1c5122018f9990030ddc1596dca1ba56997f460f031ff8518025fa4a
+DIST filetime-0.2.22.crate 15029 BLAKE2B 068f4a84388d04d900bc5518a94895985ecba9c618a47b6483cabc31abd267e37ce69d78c51703ec5745307800d96ac801f37ac9959c60283c3c3d6ccd349c0a SHA512 d40d8baeb57ec85bb9ccf76ff0f898915c4e6cf384020121b53f4a2a1ef2840af5b4c9e8e1ff177034273f4f7a6bf81d2dd7a02cf498b61ea31ceaa30b877067
+DIST filetime-0.2.23.crate 14942 BLAKE2B e4d2d9c11745dfa5592903f3c3c6a9871292a02f9862607b610ead7562b5d1fc3b64d37e779cad0630bde8012efda72d86af5e687cd2ef5d3627d8a89bca517c SHA512 8d5ac82482758577d1d0669abbe7b880efc44958687bba745c9ee4a5c16bddb44ec0fbe9c29cf424e7120905f3c3da607f3a7ca1e50287154c0475ddf2148bf3
+DIST flate2-1.0.28.crate 73690 BLAKE2B c9f141bde0eda6b9c42da0a3ed69322c12c6c29bc522131f51ad56f6e2758646aa5585382407409257a8301f5f07a1825d150838bbb55822f2d49037f6279aa8 SHA512 9db6f3ddc4e1e91960b07c08712beabd911b297d93db8be3ecb97a392a4262e608c75ed8e9e34d87d58c3e67d1b7987734e14ab3d45fd837a2767e8016380284
+DIST fnv-1.0.7.crate 11266 BLAKE2B 81da85889c91b6567e0f555e37dd915f1bd919719d1ca10c31a6861d7aec29a49ae9c1e8bc500791bf9d6b8dbb318c096d04872c5872a4b1f7d45fbd8e12842d SHA512 2195a4b34a78e2dd9838caf0ee556bf87cbb4a8ef5505aac663b614eb59dcfc0c40f432463ede41ecca57bfe7711f72673d39a85fe03d426f1324097d5628334
+DIST foreign-types-0.3.2.crate 7504 BLAKE2B 520818b702d990d296ecd31a8646850202509ccfa18edd0e1b260289619a6c351e758f317ec0824bd76eccb209b6f087057c25f1bd01a47897715013dd834867 SHA512 bf27b8243ed482c202d120383374f19ff09422535e24b9c1aebccc66529bf300ca17b8bbc76d67f98ac092e614497afe3add9dc68aa69c93074df05762f91232
+DIST foreign-types-shared-0.1.1.crate 5672 BLAKE2B d2e42e04b6657e7a69fe0bd20c672176629c743e49a55fd007bb30e289710b70045d445ae9cae0eeaa747ee708c90e8abd9b5fc39bad8ec0666befe1b696d4f1 SHA512 bafdb2143e136fb0818e2ffd90b5c862b7181647d6568947d4e4531012bbf7a57b597221ec7056c1b562dfc0c3b5dead26d1a4111ebc15e7863737a873518a4a
+DIST form_urlencoded-1.2.1.crate 8969 BLAKE2B 383d3a197b73fba199220b7708e16d770591ac16725faf4efc1a8c230c569c381870d4a11b8fba623e761e68f9d318630b22101d461e67dd26c67e13a73358a1 SHA512 c65104e2dc08fad572bb31f981700fd43dd29fcff42b01c7ccdbd3d4c23dec12360aed3f1b5fc4766fee386d418a65349b2941b8735f788cb0d35d631a6a8dd1
+DIST fs-err-2.11.0.crate 20449 BLAKE2B 8ffe7c49f4733edcd30ade9b75064e9fcf4ed1c87620d629fcd44dbf87e85e28d23fbaad05a50d8baca877f3eb9e088d8dd744d2ca092c443735fa7129609c9c SHA512 a8bf948b94e7325c583035a04d30c8ecf33d543ac366a550d757d65a0d7575d501e01dd1a80c8b0c278f80b9f3298f8dcd03c3c636810fbfe6a4a910ee8915a7
+DIST fs-err-2.9.0.crate 17662 BLAKE2B 9919c253ff98280eb3ae8d700ba3f878e2ffacec1d3ea69f0445921dd4084c67f3309cddfc2c4e9ba42cc9f64e201fc88313f517185e47f62c3f3023bed62e96 SHA512 b0fe36a1158a1267a10f6ca66f987448c2fe05dbc26af67cf92e2fff5af210312494823c201156f1029e3d81ec4b075a63a51770e153dad3867fdc6ee1d29126
+DIST generator-0.7.5.crate 29947 BLAKE2B d6c68ecaa48f30e3657bab1315228194c679e6bdf71cf7ea28273ac20aa34ba416309d6253ac19cb5e940e7c058eed39eff1c0a5594103389136d10148bd1338 SHA512 fb634f5fa252acc3d22ff925cfc06f02c4c82c64c567c98fde9040b457b8248a6199d0ccbdf27d759e75134318c0bc1a9d9cb351af4edf5332cc184c90c89d3e
+DIST generic-array-0.14.7.crate 15950 BLAKE2B e74c785e3127095625951da192a018281ea9976aaeb11019f9088c3f27748c5fed1ef25d577150864486dc48b5138d6892e42f99979339f711a66fc70756c82b SHA512 363a7b04e4102f9ca63d429721c1ada6272be6bf0a2e97da681faf76381f73f0e3acb86623b9ce2dae441de9fda704088391779b9769ec02b3c8c9f9f35f897d
+DIST getrandom-0.2.10.crate 34955 BLAKE2B 8e7b8554ae360484ceca2a05f834c2664b08f41cbc6c955663e1f8f22fb5750481518bf1c7b49f49223a99a66914ef013347b9186acc97a20249f3222a13f9d4 SHA512 82af9e0417bff9272ed0478be4ac90426405ce210014b21899c6b95fde1b16893bf46295388ff5f13fa712a04c99c46b770fab83f41a1343af1590a86ca8da3b
+DIST getrandom-0.2.11.crate 35391 BLAKE2B cc3af20769f8effebcd6fe4f48bb762211f78cfad016b796ce4b6b83a25d0a758ecee4352af18ef97e84c17fb4efb0c7bf113b53d2dd30eaa32067fed97978fa SHA512 2230c219e1080b4b13f207bdfd54b1acff37d9e5fec5263ec9952df9c0279939b231c722b54524deab85002caf1047a471f3fba8090428d918e99d53edf82345
+DIST getrandom-0.2.12.crate 36163 BLAKE2B 0afef8504932ea0ea051cde1d14bd5b79edde68d6ebae6fe88fa4aaa532605a16f466d0d9c0d0aa619eaa105600b6d5ee4e191865a3fa041549a78f78ca82396 SHA512 dd97d7dae1a7ba653abdaf2db719e1a9c8eb721b08b4af0f1c45b1ed5079069d1b57e4f6d9d879e7fae3a890763f4b6aea9bc2d945392b98e811e7b348589bee
+DIST glob-0.3.1.crate 18880 BLAKE2B dc89b3a664e810264dd7a01ad892e865ce35b504bfe5dba12d7ea8084da7de84feaa94c2208f1a1eefed90297e552636ad61ccebf6fc8cb4d01f27d605ad0a09 SHA512 29368160138bcb7ea5660f9f30c5711cfca8bc8ba836bbade3fbe8c424e7b4118daf27cffa677962e37e36f025fd2bb5a9c2aea865b0ff155cace455dfbb658b
+DIST globset-0.4.14.crate 25090 BLAKE2B 2c3e6f8384a066ebfa1f36bf03125b5eae79329255674e32c58963451d4b342ada10f17524232a953bee133b3c77b678a141543759ebc622b5fd659fe55622ae SHA512 e83e4f5e42a97609e2579b09f49c2cb0a76a94e7e2975c5871f2c5af5d3b809736e0a7b220404c582f4a0c7eebdbfad6cb432e89b26401b58f2b253f8c0151bc
+DIST goblin-0.6.1.crate 160490 BLAKE2B fd108e41cf3262886bd3764ba0d145d6ae849162fa7ed8fa3a1a5ff0d4c5d9378a8bd223823b08527e5186cb357ff32007a7c5e3fe0895ae6a04f44289350afd SHA512 e09f9c33089e8b0df127fb1b98992af1575400c9735c9a0bc361988c443ac9ee826999f09cfebb685a5339bccffd947fd1ddc553b3f71288827c75cfbb9709be
+DIST goblin-0.7.1.crate 163953 BLAKE2B 5b32de08d90b01413f80c419cdc85a005c826d5430d38807678045c7467a026bead4bed253b5ffca8dfd7eee4d62c010970e5f7746f6f2216ef57af6a9aef740 SHA512 4505573c29ee5775b2904b79c63a79cae7c6e3120dad68319152636fcbcd4b3d58a5a0a6d639bc34a43cd12e0e46a986086c88dcd59c2a743b2ea2bee0f16e91
+DIST goblin-0.8.0.crate 175002 BLAKE2B b8a1af5825d2f9b636c8c5cd120ddad860b7bbe6573c8ee71c48c58d1f563c34a0ce6ae7749bdc0a8ee42c00fd9531fec77cbe9f6565f03c3caa9b3498995c1b SHA512 e6334edbe8589b8ef11012588bd4c28db756aa591c3523d2868c20843211622afdee9cfb1f953212ee8b6563a6fd2f330f026f74b7a20486bd297cc2c25f6de8
+DIST hashbrown-0.12.3.crate 102968 BLAKE2B 492072f27eaec45abd2c5d7405c614c0c6a8221425e901bb6174bfa1688ee524408a618650126d6c683b7285b9bf0a21dcdbff7347e4d8f97bf7111defa1b7e5 SHA512 b3700fcd659a21a6b9b3777c18b37a83bf25542b4e8f2b963779a122f5d22e1742c064cfc03e649583e7dd5c6e90ca8407f8c51a0e8755f6a108682853022f76
+DIST hashbrown-0.14.3.crate 141425 BLAKE2B 23c63a99c6c6b7a6b9b9e8bbbc7f1e342e1eb9d7582fc9eb408d3eec50c99f34502d450170bcfef4da7f2b1e743e1d1619875ec879e4753dffcb84f3c10dc3b2 SHA512 4d344e5c89ce58e04668b80ef10e4e110a3a5daf4d610c52d980577795d0e2050c7d0b151d8ba97128117665e27b92ab0300f85b88bd6e1de943c62d49249356
+DIST heck-0.4.1.crate 11567 BLAKE2B 520aeea740cfa30b0cca12f73594ffa655f32959673b1c9caaca1ea0162e455546ae3033881394c0ba0516bcd5c9a997da02162e1585522d665813b9096eabd9 SHA512 8c80e959d2f10a2893f9a71994720f90747742bb5b61fc0a539eed3ea5679b140c48fd7f7690d7122cd6af5f7f20a19d412e3569fe741c6d31f6b2ce1e0b80e8
+DIST hermit-abi-0.3.2.crate 13783 BLAKE2B 43089507a5ca0731a9e9a54fdc8f4dd5f807244797eba5bdcc072c2c2b3761481df65b8cc65900769777d9d21f8345b502cb1915ec36747160e87f179469a661 SHA512 22901ec8976a7c96e93c9e07a2c5d3db49d7af60ce60c7ee6f61c3cbe93190d1f285e737c1c8b2236d540ab14e5d92e42828ec05f1b212332a862baf2b1b57f6
+DIST hermit-abi-0.3.3.crate 14253 BLAKE2B 9ed8b40a1cc894addcba2a45562d74359ba55156e2c3a547afce139324b1345df2f158f58978ccd7d343fac5e5d2cda86e2e0a9dafc77af36d4cd8aa0a6d4c03 SHA512 eb162d085e8e0db72571aca925fdb6094d1e5d091766dd62d6a116957459bfadc8d51f1acc67f4da3cf6a8802c0ff445f3ad2516c1df8fcdca0b751632e150a1
+DIST home-0.5.5.crate 8557 BLAKE2B b14225f6e967ccd37fa734f50991a50065047f3814c4e526f3b4605ceb9206d4d12e189b4033ab85792ffea34a30f2b0267b10b9b0ed88df52c37f6ae1ecea4d SHA512 4ba97149d8f70e9b6eefc930292c7e62fab6ad03d5e4e6bf93d40209d3a65e40932c6f3d14ca579ed19ba33195977c60fc52b3d3788629fc760f41ce90fa1e58
+DIST home-0.5.9.crate 8760 BLAKE2B 02277a6d0e54a88e62a50ceb5b50b08cd5dc1ca5ddc17a799db0f49a17fee8560df53f616ae22cd16020ae2a89ce7c6ec22e5e2c0d513405bc2859a6e3ec61f9 SHA512 3f1f7b619f1a47694cda92321a11d66ebbb2dc0b0c33446a7a4b886f547ee88231b61c038de04bb82acd50e617f19b5085893b8401206d32cd54502033e04bf1
+DIST humantime-2.1.0.crate 16749 BLAKE2B e2ae8325b037fb175b9200cc5c1944ce579056c6662cce307beb6701894552362a25e371aad65f8fb9384945b48815ca74bb8b544a32e0a5845b7edd30b918c9 SHA512 3bf29ddd1391d82897c22baa0ff3ed58ef6d6959859f1f8ed54d324caba5b6fb4422e56790511ce82f902cd11467f93c8ab7fc7b0e0bdb719308a4d0a446ae0c
+DIST humantime-serde-1.1.1.crate 7886 BLAKE2B 4c66a483276e0cc5f4bd82fd49cfa0ee40c8ceda753919cfb7a8c794d098e9e4e851643fbc42a209d6ab00c5c62d9edc81c3bb1f6da218a09eafc96da9b566f6 SHA512 0bd72554e700f89506d2d1c8191832aed0065ea02aacb99e27139a60c883d3dbabb1fc3d60f499f5aeb20bd155fdcf21dc671aec1ca68d4041bf98ddf324248d
+DIST idna-0.5.0.crate 271940 BLAKE2B 0b781c2e9bf717af429efb53bdfd18244f2b8c58e5111c3bd3bee50c8a01cc747513fe20db75c38b6b771d5845647bf6c1849ae6667766c9623e018c1f399a9b SHA512 bee6cfbfc99859b113aa8c7b487429a836dabc4e317980f132d28ff8333336f33480bf9f8b186a07115eff33024cd855bc85d346fce85e17c4132e886769c54c
+DIST ignore-0.4.20.crate 53551 BLAKE2B 9c2b8d729ac7952e84fad82935183face8f6397f925dbea37b83b438fb327534c64c565e2f5cdb98d0820413f5c50062173887f1cce93a50805ec5e2df43a807 SHA512 e90c5c356252fa1c573bb92971477f2805e4167c3e7878e7da6756ae14463cca328a6614d448cf9a3a28abc5bf0f7c62313a8cb8103a04bb1c3bac0d0924f658
+DIST ignore-0.4.22.crate 55462 BLAKE2B a9a29e5286c9a9c132f2fa319226bfa85c9555150afd18e34bd3b37915250842c46f6079208dce75674fef448450dfd23242858ee2e4e2bdb7eb65f89d689d0c SHA512 9647a4887258dd970c87798dee32a16c1cda75ce3e352829f78d97e1b786d67f74d89b2fd76d48a607fe795213965c04c9dfb47713f8fa80561f87ac465956d9
+DIST indexmap-1.9.3.crate 54653 BLAKE2B 7bc1768589e74020dc15d3dd064009edaaef39b7aeb682d0ca8e49944e3f020b9c04d64feb102e88b22feb40863479dfaf4722d6a77b5d19e7ca553f4bf64c1b SHA512 2aa8069eb07a814c8fa3e11296c9f032ef60963520d7786ad20cca5cb7e73b8f76d97722a994d65295bb713020aadce5008cd3df5e99d8bd968ef1979f910a37
+DIST indexmap-2.1.0.crate 68224 BLAKE2B 9d833570cbb63ecae138ca234b998bd0e5b11b1a7e3d5ef4a21212bb32d0998395f1fc609f66860bdbab198081687630f583f5a2e495fac1afa40ff48bee8a0f SHA512 9d303eef918b9264b9fe326cc1d71f4095f7ed5639ed8696efa3e9be65dff2c50ada4495409e109e7718997db51ae1fd865cf8e88978107d7823faba14380600
+DIST indexmap-2.2.3.crate 79019 BLAKE2B cc87bac104efd9aa565e3b8d6071f271b33501e2192b3a478120c41d015537e807bf3ae808ddab930aeb861f353022ac76522e5102e32f72722b93d36d5f2236 SHA512 ddc45ebcfb36d761d8c11b8f61bcef046a51eea71692d89495c897cf9b4cdb5e14287600285297c8a6aab543761d9f5ba3ab45442803837a810b945aa346d48a
+DIST indicatif-0.17.7.crate 63108 BLAKE2B 665bc2077207cac6ca2071d9e6ead76abb30d5f7c209d7b4a2ff5a1fcba566b331467239bd9168082839c961acf5a0522ae4c899aec141ccc649025b2eeeacc3 SHA512 412955eec523e961a20bb48f9921128004e723b405c8f1bb73abfaeb4f532ac6f883794fe6c8738a40c2e0a400a6ebf94ee17d89f7cdc98d9d0f8611d84a369e
+DIST indoc-1.0.7.crate 13716 BLAKE2B fe515fcf534a552feba188aea5d5da0febc123db24485eb887a3431592780fd468f6409167457c68a7ef6368fcad71c14fcd7922bf2de29794a341d7d4cbbf0b SHA512 b60e534953d600bc2de3d6951f9da67ca3ab3c78fdce3e9c5f91e544ca848aef0c22c35a26fe7a39c07bd916a79fdf496269fecfa5491a58e178f37b2965b348
+DIST indoc-1.0.9.crate 13475 BLAKE2B a9696788574e56dd125c3371169fd59d6947d188f76e2669b21c0304692efd6709cd048920f7822e92c6a5620fb178e0e85c7776118cef8ccee0f58398e14abf SHA512 db8aef4a7bb606452dc8ed45aa29a255c7a135357a0bd586fb4429c5f56a1aa2ca9400d6fac39956aeb486a15d25cf5d1b9524967867f2c651d9d563e3e85be8
+DIST indoc-2.0.4.crate 14311 BLAKE2B 8d604e20825ae64530014081c627abe4ecec6447e1e214408743aca79ed217531baad4bd7021137ae6628555d769a248f06acc556cc3254d2626074aab110a44 SHA512 ef1b8d19d89d848c1133f2865247e0ce23cbe5552454805910ed0478ac4acb11b11629aa4a5ce8756d0ed5cbc0644abedeac0246f433166c68f47cf58cf4487a
+DIST instant-0.1.12.crate 6128 BLAKE2B 728923f757c1ee4e4a7afb90e460eed81392068961240a538e5c6468e15a0b6491f590fb5f6cc46e6d78901ca232351f65abb9f2f230d8f4983c5e58c4011902 SHA512 fae494c00111c51c840f9dd6a10febe403e27ebb933dd16633a213e9c20f2bc11adeb431c71f8a6713bf88f270a010941e15d83df294e658791934f83a5d2407
+DIST io-lifetimes-1.0.11.crate 37346 BLAKE2B 7f278b7378a8569d3552c9b6d4be06d7908e05d77cdb964267f0b621ec4975a42fb6e48fc030a75ad5865681adf32ff747943ac559ab4ad73331a6611a1b10c6 SHA512 30c6e5ce6f5beabe0d7bee4f4522884d1316cf7d9b8d093ba0f952995997be3d0f10e1e77b9c20b7fe2b65429de0d2ec89bb35e939455795205206a3154ed544
+DIST is-terminal-0.4.9.crate 8109 BLAKE2B 0fa495da123f6fe5e3ba5f643f1ee097fc4f8e8aa54d9525b6108855a6a2e58556534a5e8dbfe7b5f8e2f1932003ac63f6aa3384317de7b385cf724bee294468 SHA512 0803ea53945715333d9b5fb18feec7230a49cb1a5f7308e2ea8d06a650e376794dd372be111e85622fd21320228706dd589423510dd010cd6ea112f185c46966
+DIST itertools-0.11.0.crate 125074 BLAKE2B 8e686f176764e92e4da3697eb781e1bc30d6c57ac61d97343b4fc3a48e4febf669d5771fa8620005c620cce52c236760ee2e1bc344cf602e878bc168a2e69cab SHA512 8ece00ba0a7cf481ad4586da24385a6f0b1719b9c3f0c25b9b5b373dd1a0ca7b9687a77cd179853392890b7bf4d31e0356a4e5fd540465b4ac62bd74ef717fd8
+DIST itertools-0.12.0.crate 133620 BLAKE2B 73c09adab9b9a621b556d0e9ca0deb9967f25f5f7cd082a65208ada2639e8154704d1df4be06505c8a6697c51b438781ce9921f70ae826a80597d5a682b99c99 SHA512 8f4c1239aa185ba21740dfda7a0c7cd47d62430db21724acdd580a8cd62df6c0adbb11fb8ffa691acd5f1b20a143d57dbf7e30d9596c38a07b5a4b3405e31ce0
+DIST itertools-0.12.1.crate 137761 BLAKE2B d7db67feb7418d6a779dc17d8a2f33481114cd81a4d53a10cffe08e13f0d3cf4525a5ef43368fe979d5a3ce230872eaf993f7065885531aeb5a6479351857708 SHA512 0d9c1849dcc0ddf7555b0aeb7e4f2ef3b101cfc6f03310ce1b6072d70ac8c8d3387ef4c726146102012e75171e0b0bf13465704b6edfc02752e349dc6af7cf68
+DIST itoa-1.0.10.crate 10534 BLAKE2B 8ffcb345d07070cc01651fd44c19f3e0659185eda733c407fd4be0955a301879ae1272dae7f425279dae8dcb7f7dc954465c9a09b5c521938a503d34fecfe2a7 SHA512 fc496be0873e31afa6ddf7f2958030f8fcb517cadb86a48280a0c50ce50460afda189af1e6c26e5ff6f85c750d772c21503864c32b526c4fe4bcdb5b07918538
+DIST itoa-1.0.9.crate 10492 BLAKE2B 0d5acef9ae72d3f4b5a387d231952e6025def69da81d38269b4882bc534be7acadc073e526fd8bebdca898a98b2c741735c541e0b6a35ed0f8f8799b906b65b1 SHA512 95f7906edb7d6a2690389167f8c4d01bc37827205bca87d527f2eb33722419ed2f2e8afaa559cc5a0a7e7fac76515c9c44c71c42b536aa34b0e2858c40946b6d
+DIST keyring-2.0.5.crate 51015 BLAKE2B ec1c870ff61febd7b8df4be0636c7a9e982f7aa009625ded72b9713f00078303b05b9b147822051f2e2faf340da0b7f64f8ff283e4d56fb25fbb034d70241004 SHA512 3a219ea810810a0543eac2309658a8b9f1330b0132e1266663720bac84073197f33270031d2c785e2e49d5a44d1a71ccc635e5485a5a42ac4e3b17d72d309c67
+DIST keyring-2.3.2.crate 54145 BLAKE2B 2d09d1bdca6b6fc32a38c178f6b6bde339a699b882beb0f0a9feefe639112d67884dac941f9a5ad1a17bb4faf348e24313282900b49dc1f2e9a3b76545da7468 SHA512 04eaed986372acf559e67453b506e27d86092e9d0be963d24074d1196fc34bc2fad89cbc8d1f227052398099a48db5b789e2c0c7ecc8d19dab000bd02fcd3b7e
+DIST lazy_static-1.4.0.crate 10443 BLAKE2B 25b2e61bbac48f0dcbc79c81d7bf01f2403d8269ecb6be3ea6147bd00f7a588df15a91f44dfc18ada19b21faa71de4637c7d493a8628cbecd0e547d74e616a23 SHA512 e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
+DIST lddtree-0.3.3.crate 11411 BLAKE2B c74e34ca45fb02c9e3815ccd26b25fad312e8d08f6cc2f6846b2cb6bb854b34a7104e878884b0318d1c3b5ea728fe1e7eff659e8eeef27ca0e5b4af270cfe335 SHA512 a8a8c07594ce856a8b965ad94516fd00bdd1dfe90a40cbad4fb42bd3dc0413a93be083163d57b2e1e3aa546dcf5b23f4375dddb441b15333e2aa94f87d3e944d
+DIST lddtree-0.3.4.crate 11469 BLAKE2B a4b152d28962380e5e0c4ad6e1e590156ef21144e6c9c8950918ad66ac5451f952e0d575f60b9c898e8c0a3c51efe1245a0f3f097f3f42606ba5f2268c9de10c SHA512 d4b4fa8acfdfa8fc344f89d29937a520be3673a27888edbeea68d1deae1f190ca7642de66784f3109b8a6bf94a1665a39a8025dabca63d401aceb4e1c92fda7a
+DIST libc-0.2.134.crate 603330 BLAKE2B afca337bf7120e933c56745a51261156f4af7cc58427f623b9cdf1b2d5fc67fb2bc7c078ccab3cf232024e5013e8edcbbb0baab6a8a3762f9b20d975ed92411d SHA512 fcc142061df7b363b2dacec5fb3c9a19e63addd8210678117f681b8e1b62e5784cb78067639df464f32e22c9ab4d0932bbe1c01cc992348cc0fad4a46cc7b1c3
+DIST libc-0.2.147.crate 686772 BLAKE2B ab2f0c65d071d46b8b88149add1c8429237ef6d9e0563d56ee1adbf23e6147dbb57fb68fbd02498f8ec75327693237a47e5e5259615ce8b0d5ed7a03bbf4fffb SHA512 bfb3c230b59d623b98726f92b7c3f897b47ba3d22fe9834c15f5b4c1b662289aba35a0ae3acfc704ad74696db8c691ee007b9cc6fa03ae65a18eb6bedc81931e
+DIST libc-0.2.149.crate 715592 BLAKE2B 21dd5d4f9351f3c75790077c7b025046db665f2d48d7a72cda7667bc60febf79d82708cf7d39a323a594397cd590bd3d2a2f85349b4473b90ea4da918382ed0a SHA512 0def64d400d473d6eed30e985522d36801ee6472b15f90e74dc4592e0a8ffbaf30b731be280de52b30255cf60aeca8efe817b67049227dc7000c807e007d7289
+DIST libc-0.2.150.crate 719359 BLAKE2B d08e17fb29992c76337bb5862cbc1cdaf7b9d7749cd65021f145fcf49fa7954d6251c8c2f3c9a796b46283c3bc014bccfd259ea52824459841911ad847fd7f5a SHA512 7ae8fe6a1db38ac6d951c0b4880d25a02f064f5e61d6057c20f7208dec8395d58efd085e41857bcf5f4da2b014d2952dc4ddaf18ac4acd3a23675bb659e70385
+DIST libc-0.2.153.crate 740614 BLAKE2B 523a41bc8cff4ebcba0edbbe9e6a2286ec7cb3ba5e90ca5926c972b68e4b34188bc077d20c22376238c3cd91b7455898a95c505ace4ededea88cc496edb4c5a7 SHA512 3f99e3a192974fffdc053ef21e9ad5fb54b7cdbd4755df176704a95dba38047138ccab76763e89c6b565f37f98fd549fe368749f84f6d1638b3209cb07eae9b4
+DIST libredox-0.0.1.crate 4212 BLAKE2B fecbb90e2842a69f3967bb2a09b0181dce1720b60c5d762a334a279b52c00a9b4b52de72c6484603981c0c3e1cd8e173ef5e15fa290ce8b8888739204956be92 SHA512 31a9234201f5128f1519e108f7424d1740a67699828265cc725304a70f6a51e139f1d0c0e626b487857a7b421f25ad93e81b95b65cf0d3e0ad912388deecfb41
+DIST linux-keyutils-0.2.3.crate 18434 BLAKE2B a31163a446ef8897be8ad73be22ae3bf56a9ddac4ddb6b89bba2360b967f0f6eab4aaea98eaee16e5fcf0ddb43fc1883bd0da2a5c85db505b7b404586ae6604b SHA512 3dd56475a93dc46f9645e60eb145c315e647e3779fb66326962b8780d3a5955fb217fbfbf56d18d0c3d4872bcc02e64f09dd7734e6df3418d82e5648fe6bfe70
+DIST linux-keyutils-0.2.4.crate 17999 BLAKE2B 8885c1e5daabce113d0e68f526d0f323603f8aa6bebd1ce37e3f64dc553239c1d8d0fa5a662190b901c42cb2ab061962697654b6abb0530333f23655911069e5 SHA512 8bcf2d3eb2c5cf49ce00b91bff578e2dac3c9390ae7b4bb0ad3ceaec9d282a1d4782cb9e642cba75429e7982e6537a72f849a1cc848a939d6e85fd6ea8e1dcb4
+DIST linux-raw-sys-0.3.8.crate 1013776 BLAKE2B 375b29d2cc700e95d94ea8dc304cb711562952742f65c9664e33560a3da862aba74f2ad2ee66b1dface8cd5371ea9cbbc452ea953a6b6c656ade7d938b7d2ff2 SHA512 cb0e5c54870dacfa513ad05f7a84e9e90dc1a42f55685fe3e252fd25cffa4b875f1b65eaf4ad132ef0a19e6677c7763b360d71ff0060fe6ce5198f38b9956375
+DIST linux-raw-sys-0.4.10.crate 1407767 BLAKE2B 8bc633d99bc1ee1a6fdfa19501fd034a4475fa9ebe18a206e4254309d91aee7a91fc70faf9775efa5157a1b2fb7e5f827bde40a770b066643356113f2cf38b5d SHA512 107f61add087bff55869798d5c71bc6ac9ecb27a603d8f9071b856189de8b7b0a7f9243fa1433700f52a0c3020eff5604dbf6e0653109d0dd277b98ab45fae21
+DIST linux-raw-sys-0.4.11.crate 1413981 BLAKE2B 45172cc348e758bf87831b47d2d52ea43e781a738a59654dffc04cd5f1726efdd8d1e2376cdc247019b64d82d756f4739815422c353f54f081a2c539df02b5f4 SHA512 befe18ab06e5248ee89f0cb8fbc192a5564c15c9873672fea62754322d3c197563d9133b839d5222e6baa522ec1fafc48176ee605ec7954c5d93e52dfb6d9772
+DIST linux-raw-sys-0.4.13.crate 1493855 BLAKE2B 1298a038276e2424eda9873c642fb43d864b343b03b7962446122d2dbea94d58d9fb2b93e890769e6fe4092378755413ed6afba81ce56fd61e512146e44148a3 SHA512 3918da6b667a08ef8a51aa0b087129e2dc5ab101669cbba7690fc98ae2659a36861bf9410a3b87d18522a7549d43ac169b995ea192d3073f7249305a809cac62
+DIST lock_api-0.4.10.crate 26713 BLAKE2B 113adf8554c65e9782e8fd0360d0398567dfbfddb1fea4928cc152fbab98dbe086e42b81170f6f5c333d61dd3261e8a1ebfbaed786e6bf6378e6afde6d7f9e5c SHA512 ffe8cad8099bc382832181c1ff95e0935993491f247114604201be7d4ddf8402fd4db8fd6499c611f95fbce7d57dc3d3738eddfab31c52f50ab8709e549697db
+DIST lock_api-0.4.11.crate 27487 BLAKE2B 87116cf908f7f1f9c300cedded989df305f855883e3df5a482de2c76814c48739582d3079d76a2bdd14a6999204b7fd31dcd8fd06d1dc7f9418f0e2f70a1450e SHA512 9946adf313a5c67a0dd87a1b679b7d9d16a86149fb95974d3f28aa57a9a1a3932e4a5ee1d332097559329c5e3b2295be2e4b655b115d9f75269f33a758b17fb3
+DIST lock_api-0.4.9.crate 25685 BLAKE2B 8adf5c3cccebdf6aff6ec977f230cd2a208b0b188ef57deacbbc6019431f0ede1a760b2384ba3cb49c96b8a589dc56c0f46a6359b3e62277e7ae1a1c3f586fa3 SHA512 9215381d9bb6b80d217c73a900db43df043b3e939b5bd7a292a02e9ab911cf0eacd8f883d35bdf72b3a0e78df8f1bc3e843ca4c775294c7a7a03091dc1a74990
+DIST log-0.4.19.crate 38073 BLAKE2B bbc8ce51ad4a01562ecd204a531ec7d82101a342ec26405dfadd1761372f7039297dc97f4899889ebdf4eccbd56345e015d4ec6d2788851e523db56eb541aab3 SHA512 8f11ca6f5a99b61a5f3baeb7a23b7a879b3a5bed666337936bd1d8794864d14a6c4f0747d03505831783f15d8c14ebcf507267915481dfb1b32188b8ab36a038
+DIST log-0.4.20.crate 38307 BLAKE2B cb9c9a401b49bd68c18d5e42f2ed94446f1aeb184caa23cefacad4ce54a2a357143af54a5595c45d6f3c3d20b054c451d9e6ccdc09c19cca99ffffdaf8bbfc72 SHA512 8661b0c71d3b7fc0d679aa3d7f06910e6d3da1c53862aa06526000e1bcaa0b0b068415a1a9ab317c318f00d15346dba8a4f5d2a60d8850790bed9cfaaf757b3e
+DIST loom-0.5.6.crate 72186 BLAKE2B 0d31e1533b954c59c7c46a3158587dff2b9ad53c73d369a9134cf731c9d4d239f0755221cec50ab15e3cd42a35f0b7eaebeccf07285b0a89675df8c0d5cffe56 SHA512 e4dfb7d4b07acd33b6db8e6fa54f66d33782060c553a71723329bc9e5c1e3afc10de882f3ce3b882c0b6b84b9eb19f4d6699e534961192e0933f88093247a4a7
+DIST lzxd-0.1.4.crate 21891 BLAKE2B 8271b79bdf6c65a17b5fe77a4d8b7d3a96ccf1752d211770dcccbd0912b0113740f5175b6d587ef5f5768b7ecd073488fca4f49e5c4bb3ec4cc9e5055e471b99 SHA512 f4fc473056dc793ee938943646416c3a93c748104093b8932c0a603a5f25820b49632f703ea4bc248b8bd612ef51dce4f5798f1f46782466c38aa69d016c2c57
+DIST mailparse-0.14.0.crate 36965 BLAKE2B 577df2a11928120ae88a8afc5781767d4ffecdc39d4f22e0771d460bfe14d68a97427fe1f45b9a8f575c549d788bd4bbed007043a2fb41a7d79580033cedf336 SHA512 0edfecbd7f2fa918c758ae5e9c5634c85b69f57e928c85fe8b2aca41641d9e3ce12770ef40b7c3a31b1fb8ac6b15003166d9b86764a282ee2bf73461014c9018
+DIST mailparse-0.14.1.crate 37264 BLAKE2B 322c5ffbb60be7a62f9169438d0678ffc37fc3055568a97ecd4673e84ca4b49d280cabe773d8dc8dc99f68a86228886bb28c56152f072748a2352dadb0ec4710 SHA512 a5b19a4612d84cbf3d89cc26033484e2ee252d0b5ac063cb6487a55f30e25a21b5108020046926858a65995c48c2dc3e5cc64f705291f1ad9cd74b16b3c6d360
+DIST matchers-0.1.0.crate 6948 BLAKE2B ec3a5d01d2fedbb4dbf5bb185afbb9401410463a61f51674e0df6a571db352b2bbabfb99cdbdcfb4e511ae783165bf0258f5163f240a229b9087f9edbd0df41a SHA512 84214c1a84952d85631aa1ab5115df7cda223ac64e2acf055b6129ba1aa26ddc87615a8b51ca890ce3fee0419053fa7fe1599ae128f1d211b58c07b0c4af3b19
+DIST maturin-1.4.0.gh.tar.gz 457791 BLAKE2B f7b03ab106b180a6b274ddee112e85197abb7518e5cc741afd653cdecbaad3ceb2225218c8f58ee45d562c168a51b69174505cef9d0b1d69cf3aed981ba7d892 SHA512 c86afdeb694c2fe4b9b94a7bf5f657f9337d3b6179a3d430a26608353d4de7c463a3860e87225356cfe66f1111240717851173403c66a8c30ed3acf7c1d2afdb
+DIST maturin-1.5.1.gh.tar.gz 454016 BLAKE2B 9d53c6510345b56b627b978d8a4e9bc873207e4097ba32b2539f27245cb4ffab8bf13a8a81036f572686e4a4721ecb5eca2d0ab3971839168260ffa96704d33a SHA512 92cca4b398f9ecf767ed7da27599cc328570e5ef18b39c0f1104438f2977395a02737c8a5c62d994490e248000cceaffbeba11cbf94e9f8756538851af8e6884
+DIST memchr-2.5.0.crate 65812 BLAKE2B 57966413a1f933dcb2d2d4ccb29c247070f65a83299b2a9f5aa83f5a48a5c5f1c4c7c632fa63bd19f9508e9291e7258db2f16e2813a56fd84e0856f70f1e67ab SHA512 444a163b484c233e78c0e2e4d51f01ce2da93d7d29f516a95e4b0866b20bdfd3f34137653abed53eb70387991ee3e2b5937d8d4360a85bbcb50a93005a75defa
+DIST memchr-2.6.4.crate 94439 BLAKE2B d1136f7105a33565214fdeecdc5a95e74d7fc7cf45997f81bf3cf389f3015fa561ab326433ddcff2db0b7259246eb6d26fc7b4e3c90c3af8b9b7ed7e8ec56ba0 SHA512 1065a67e04ec9210c70e430288e0a8d39f36ce6414722099553e99112ea2f8f710eae44bf39f8775b9850e6c8a50e634a1b1b084a8eb4f6b2eae6697dcf5b5f4
+DIST memchr-2.7.1.crate 96307 BLAKE2B f1a008fbdbfe84852a8ae1d9d9574306b1bf120dd5087903adbcca6af342c9abbb296496eb9bf6cb58915c4444b3edd6ca4e27131ac7d8aed8849815df87a944 SHA512 5120496faa31fc427c8b4178461a262b3a34d70eddb7ad17a19d6db8b9969c9e113d3625b5e6dc677087fc80907377b00ba0421aba9a92cf73ca2849d932f473
+DIST memoffset-0.9.0.crate 9033 BLAKE2B 19090c1af8b8cf54a2cf7593748aff4d3dc685ec7080aa476139c1721ef71555495e1bc513b1efaddc7e7702f83e0e1c2a8f71ff40009d266539484c9297e0ed SHA512 2f04f9b6fed31e94388c18162ad275897a835df7b9ac827f4df0f4b0ecf71064ef247f7ad11dbc27d7a6d448984a0f29d1c000e3c8d5fa6e121fa9571770ec55
+DIST mime-0.3.17.crate 15712 BLAKE2B abb892b75b40657d356b6b53b9a45b2c822a05873453e919f2bbfeed9e5c06104f24db9cef2716f302198020870eaf96b2c62aff55cc11d8ca4f4f614d7c8e17 SHA512 e6d2ca92bb58fc747c1bb65a7f9023e5dbf4b94966003a72e4913bcaaeccdd6752725cdbd5081e0fd69d9e8f364d79664fcbe70061737d5c39e5b3e3a154a0d1
+DIST mime_guess-2.0.4.crate 26399 BLAKE2B 667f9b8009bac2e1d8b835ae8825afaaa2ea6eddd4cebbf18de8f8fcde9318eacaeeb08066bdd611883bef5f8a53fa2506b57dffff543c3a57316e07b525f7f5 SHA512 acfbbfdc5bd725edde43e4915858b8d016e90a5b483664f0bcd5e8d2b0b3684bf0f6020aea147b5bf429f218a7af8080761cea4c5c04b68fa66fd6a676376908
+DIST minijinja-1.0.10.crate 135892 BLAKE2B afde553d26dd34b383c50cb08d59485656da5f5db79e7ced5354bdc23d21a8b1f1b01ef21ad63d35f7fa248b8bd5fd81bc6b165a18401ac0d65eb44464d00d90 SHA512 770f16f935a1210454b8569d55d93d816c2af151787e18a7d2ab335f887461b40c2c25034a332523b8195b810bf868a45d17c495c536e1221867b987b7322081
+DIST minijinja-1.0.12.crate 136933 BLAKE2B 594c614e22eb577405f3621efb7d02000efe4c05bc326c96427d9ca1cde40eaa1c232c71445535393ff0e3f032353e4c85977ca4ae7e98b4be16639bd3641795 SHA512 c6dd27d326a3924c7ab69dc4e5d5a498118d0e33eca059edde407823d9114eeb8e5ed57089c7fca4ab60452a676ab86d02b1fd885e77ceec9ea44be5e8380126
+DIST minimal-lexical-0.2.1.crate 94841 BLAKE2B e6b8919b80d938d0b98d60d4f5f29ce43d77ebfcf8b18bde08909141915c6ef4f0d07a543538d4f3ba8527a9f55926d4a8e83473248469d087e80b274d701d61 SHA512 385fab51884bdcc7b0f2728a219ab164d0dc8efe42160b918f2c09f79ecf853fb12bda006d11e649f097bae1499dcd41ddf2a8784ee7d178cf2c28059e46078c
+DIST miniz_oxide-0.7.1.crate 55194 BLAKE2B 56afbe0c0b3eca98105ae2d507493f365353cce29a6b04910ff26bc75899400fdbd067756cbda7b3d86f047fb8f3d737de00043a4a7348a813cc43e45824e33f SHA512 5eb6ffe34a866403273ff0267ff7838aeb50722ca57a03d5a1d842a5f19a3b4af570b133a3b9d64d78eafe49e4b9732b92dd63fd9c6b0ce59b3295daf10f6a3c
+DIST msi-0.7.0.crate 59110 BLAKE2B c0bb6d59acb79566343baffc4d40852b0a8d668c48f3c8a482065efb02e4836428167242e382ecff93a2763b4b5383023d389226619208910e44facf57536f98 SHA512 fd206129952baf8d16611d9e376089fc03f5832f237a8ffb7cb784179f226303fa464cd06034d4457bb52b49c9618fb44875c1c1f94ffd42b4d06ab44aeefec8
+DIST multipart-0.18.0.crate 62797 BLAKE2B 438abdd6041c3a52e836b7627bb0a490494b6a0c4ab47d27905480fcdde27e7c18497ef4cae550c14b8c4c34e661176ee640806cc427e3b2e570c38be31d868e SHA512 a34036e1c05c241f130ed30eb7a2d96c2590ea8c0cb7e6cf98c160ca0fc6e0f1227192b45d8166abd7221633c36c57718fdb0ccfa8ff4254d4eeb3abb5210704
+DIST native-tls-0.2.11.crate 29008 BLAKE2B 594511c364e639e309f32f37ae20ecfc5ddeeb39c3f7180c5f3f2cf304d8c323b977af933ffe70cce696a5a63e17c5fa7ddb119d46fc3db819a28e31a388640b SHA512 7e77959932f2859757f1aeb37b78fdd459b7b6fd02424f4b7399525b94c21d1f499a718775503b8f3dfe3b4b740e1cfbee77052a2ebd0994468addb3fa665e6c
+DIST nom-7.1.3.crate 117570 BLAKE2B 5643b67990b7305e101b16b8cd27c447e162a7adc6d0dfac00920b0cb50fea98c9d4edca63c34f6845cba05f8d0acb407cf3045cf64a4cb28e53c8b6bc9090cf SHA512 1ffce08dde299bc0e0367ad59c7b6a83e23decfa11115ee076ab91ec53cdd9ef37e4c2103c96eff23a7b6b8b5c3f67c83ce1917928c7d4c6462083bdfa0c9cad
+DIST normalize-line-endings-0.3.0.crate 5737 BLAKE2B 935b2d20ccd37ca7469641a37aa0ae9b6872715d6ee88d568d0ee16fb76416cb1a0c585cff861825de8cef11d864b1dc1b350911c28d64e071d8fb444bbdf740 SHA512 f8e2a6e333b0e8972febe8b9cf058c8d899c384fd177e0b6ef1c5f94e0fa18192963970cb1a2ba80e3135a8cca66cdae6796e4d84ac6b325bb369575bdfc6eea
+DIST normpath-1.1.1.crate 19786 BLAKE2B 39c955c41283051e414f8576fdaa51f11f0ab5a23bfb7f6aaaac38fd9474912721c546810c02da335a9095fdd6d8e37ff2f5fad2aa93d93c21b4be76267088fa SHA512 05f1f498f571c57c2307d201d5fa15c72fd2f297b7854757107bb27684470d43a4d40137d31c735018dd2ba50c11f23dfd5e989909e809bdedcd7bbf018385ca
+DIST nu-ansi-term-0.46.0.crate 24311 BLAKE2B d2e678e0eab5ad48534e686b1a4af344996d1b07a0fa40839072df3061bd7e5bc9341363403ea3ef8d19c7725ba3b7a8ed540c63e2209123b1b93f69418288b6 SHA512 b4f37786dc85e0596e2b7b261a5a9fe0265bf1651c39efb358dd649b926b12c3093f307b98bf0c4df3899f0a7cb1854f2596bd5c3e22fbbef42f912ab2eb5043
+DIST num-conv-0.1.0.crate 7444 BLAKE2B 4f5c4695006aa3ae77aaf5c55999a07d8ddfab294584fe10d73eb6abbb3f551846646156581599f966a28c74d80d3ac4373c49d2099991f7ed9edb56d36feec4 SHA512 7884c0c6599c66e40b9a79435e1bbcec60aa7e68b59686922dfab19ccbcac6a6e54f208cfb3d5a8a12e86e4dd67e09977d60b69ef6940e308a28256733f36100
+DIST number_prefix-0.4.0.crate 6922 BLAKE2B 81bd3b588c788e6865104e5ce87119b5e0c5a526042963d52cd582ff23c2f8c9f32b4c445ef0397fc402b6d047e031d8e2c67ac97e191bde22e17662eec3a554 SHA512 a43b668d7314218b86ca7451daa9dfef71f6c9f6616bc34c12d94ae6030f182bcca9da83905cb46f3d49d0aa81385a787e92e4f3ae239658067adc249f8174df
+DIST once_cell-1.15.0.crate 31460 BLAKE2B ae4481883865abe6a684d63520fb2e91b64d6ccdd0374464200015640122bd68b8a769309773226c8a31d0119f450ee821a2bd35c346fd86adb4474ea7c28fcf SHA512 934a7c3631e9ca4fa78d9577b6672ca0b2f926a8d6c3be9542b906c5968033446f98f76ae6f368a1a5b92ab9064c31a57d74ab6d2097108029a7ea951541ff7e
+DIST once_cell-1.18.0.crate 32969 BLAKE2B a08d5beee50a7add28bd9e50b18709e7b34574f0f55f80909d5efb7ac5917e5f30bdcf3fb43ddd0a4f420a427390c7ffe1cc1c7191a3a1d939bc6e3139e6eef7 SHA512 9328968afdf3535b2d9e0113d75afa725259d76994ef2e1948ad7efa4ec8a65bac7cfdc31b749d5cd55ad4e28d2e28ac57b871e3067b89182453c7e2413a13b8
+DIST once_cell-1.19.0.crate 33046 BLAKE2B c14b374eaf4ac0f60acc2e02f7bba270a0e8e0a6978d749cd3cb0ab3eb26907e4fbea70dd5132982f90290381ed18ff8a87fd530f1415fabffac864f157ea380 SHA512 4154876afd34a699ee650d1a8a1c5ee5a25f0ebd9388b8bef2564e33629fae68f113d7507488c68abbe7ea1acf9bbc41813cbbf3ef3e464e3f3b9cc7a51d870c
+DIST oneshot-0.1.6.crate 32968 BLAKE2B d9b73310301282e4b84978678b8a260739cce581e6a2f758caf96d3eb3d01091a6e139eef01be360eabe535f54e91d54924e2bf737a0bc22a614c548f322f843 SHA512 708a0087ea2ad77add3ad3907263762ce1a279465be0a85564937930e70adb3b7ebd1d865f0613d42faade338e38d597bd08416e8ed97210bcd345268a55695b
+DIST oneshot-uniffi-0.1.6.crate 31794 BLAKE2B d5cbb1ab31f541167692541d8f1f6c75243d5b39ff9c2357d25ca1da5d7eccc3fd2ff7ce4dbaf246e26c6741d2e78bba036388c7c1d63cf024d476737a9bd3ef SHA512 d87a9843546626ae3d0d06f347638b62b4dbd34ae3d1a9651353734d7dde120e474161f8e45bcbed2dc9c9e708cb38e9501d7e40ed62c39f48026009c20adfea
+DIST openssl-0.10.60.crate 265736 BLAKE2B a5a2386470baa5bfecfd9bf32a9965babf1c222e6e35d8652846ac342f75dc6ff022d8344350adcbd42d3313cde3831664fa9e65affb8e3825d58d4a8f5b7418 SHA512 4341098b55136862b2206091e740801c165c42f30404e4224c9d5cf3e68b5b6b26f5c4c383495a4b5b6baef232fa698f80136b0c3e86dbc9d411d3bde0d59616
+DIST openssl-0.10.63.crate 270890 BLAKE2B 0571a214347f823c9079c1f6d204c62469235ced63cbfdb8494427aed8069f45bbb26b81d1edbddb3602c0bffd54d1ca96204aef8cb85aec041edf45d89889db SHA512 47baa5f2e34b622dff0cd475dbbf6772adf48abbcec5be1cbcafe2beb9060ae46a3d873896ee4b5d864da0b132f0efd956596c49f2afc650a44cff6af001aa56
+DIST openssl-macros-0.1.1.crate 5601 BLAKE2B 69dc1c1f3b7bc4f934cae0dce64c3efa501162e5279efd6af3b74f7a7716c04b6996b306b310f1c045cfa2eff2895314a47ecbb020a817e461c6d77d0bc11e92 SHA512 57e75c84f78fb83f884eeaedb0dd135ecb40192dad2facd908e6a575c9b65b38a2c93bca4630e09ea5a82c77d8bc8364cb2f5778cbfe9d8f484cafe3346b883c
+DIST openssl-probe-0.1.5.crate 7227 BLAKE2B d1fd6a9498b3ab7f25b228f19043067604bf20790530fd0ab6fe3d4d3bc27f13e6e94d1e7ef49314c3663477d8916b8790b90427f74976143b54b95350895165 SHA512 7e560314150709a34520472698060c4f29689d4e608dc4dde146140aa690350d3603279c693367deeb0f21ab34ef61956143a3447827a2b7a3d578b9ccd6552c
+DIST openssl-sys-0.9.96.crate 67743 BLAKE2B 0336ef48841d263c7c5883f0e2c3b7224c5561c521fc15d692b56fadac50681d18ecabbea8b0d5adcdad20f3d3ba60fa29950f04ed1ed35fa3b7b4816f556af8 SHA512 b5f0290fde2198e314b8e0d3fddfe0fd6d5ea88024cd1f2a70d99a0b78905568a82e63818cd58bae7f362d663e47202e6fba8cf4fc83354dc0253d78a9dafd76
+DIST openssl-sys-0.9.99.crate 68158 BLAKE2B 59995535bc24f0ca67ea204193aee4114f88538bbd74ade7c22bc2ea1b0d7e41a79118b6d22917bd1e305a43c16f8aea095c635d27a56fc0481a2baa3092dfa3 SHA512 b91197583135c22d34814e6382dc4ad4be9c3905c979addee8688dbc52ce627815e719b9d0b365195335d4d665eaa79a406f89e4c19cef73988938d51fe2f4ee
+DIST option-ext-0.2.0.crate 7345 BLAKE2B cbfc03e7c960fe3023512a4ad816d657b4f54f8ecbde9f9c4df4c5fee3b36b68ab463c67ad650778279e01c7ffaa63a0dacbd0c080c8c3d15b1611de0e71f92d SHA512 f8539f97b01af97e0b80fc96556002251befa60f8ddd19613311e62f9dc9834d71c22f5d8e7c53c4925046e38cdcf834c3c28042a4da862d6f6a21ddff8d8e56
+DIST os_pipe-1.1.4.crate 11436 BLAKE2B 215f548a5b16854e156f785a1cc57ff16c241b50223c75159081017889cfe718d6dbdc6567dfc751d71eebda7476c95701c8ae88b1320a0cbba66a694b471d08 SHA512 8568008e30fdc47c1c89f7368654d26407fb6594cd89e2b85786c875d9dd99e77ed2bb84d281351072670e2dfe7a952d6251c6fb4d111ebe6a63cb34942b6aa3
+DIST os_pipe-1.1.5.crate 11430 BLAKE2B 45abc371ddd363d193817a339f9e1894ec6fd275b9c9d190283347bb023ec7686e3ca6a5f2bf09cd7ee6abb8843ae52410c203af2310bf3e35c280c5b9874ea5 SHA512 d862484e9a0594f31e45531fac9a892fe247c1003a9c365a28083c0b5132719fe6fcd7ed996716a4baddf1f8ec4857d62d05663d3fd7ecee5802005c55368048
+DIST overload-0.1.1.crate 24439 BLAKE2B acb2dfa6c6c22ea95cf58079f6ec56a2bb5e297a055ce717d40633b789b0d005be2bfd6616448cac61bd032e74aa6eed212f1677461907cea2f7f7cf536c157f SHA512 f79bc3321f45df5e3d0e5fa9c4e60524e4e28dd3729a09956766738adcf99ca42c187a01d48701ebe23d39aee00a19d4a07da798edc781b942e866b339613532
+DIST parking_lot-0.12.1.crate 40967 BLAKE2B 940a112a066e3cbd15e2f6df89bfff37e4ece2194118618a96fa14871813c91798f93181ab0f768d3e1f3d60805508f216724013afb7e3da95678d0d951a42d4 SHA512 07327d3b737a913508dffb66023766348ce7f9d555c224a099cabb05baefd16a28e15fec638e3a148a5169dbd980c4541b0f8820ae9d06dfe0704482838fbd5c
+DIST parking_lot_core-0.9.3.crate 32256 BLAKE2B 79a1924a983b948a5c2b0c074452a7b2b61abda973d3bc8040d9153d34b378f0ee330e36aa813f49544319c479665d6328be71481f2e1e41bc94abb9bfbd12a0 SHA512 fa30db0fc73b268ab8395adb8bda35d12dc15363b247a95b7c4bb848ff9b8dbfb971a20f320b4feff3317d5b533c59b62152e4c652c1809a422c5671310b30df
+DIST parking_lot_core-0.9.8.crate 32383 BLAKE2B 2f9666872894d1c85895437d1353f9e15be2bc8d004ffc8f0e5be95e9dd4b274797db3752eba1c0b5b6071c1b8a71e4857cae0b2aff1afdaa39e92e70be2e6fd SHA512 8d6dfdf661b0f7d0774cb9f61121f2daefd182ac8a2a0d24eab451febfbe1a664c815c163d34a7f3d15a54915a8e22e6c6cd10e89cb7d7598d48d81ad6a3c256
+DIST parking_lot_core-0.9.9.crate 32445 BLAKE2B 811d8de671bf6e0911cf0df7dcaee4fb03a3b223173a3bb8cee65a28724eeb7bac87f62aa7b1df5ea3fc93af3cee3ef30b83d06c6773d6b856a7e6fa5fa197ea SHA512 7f0df70f9f1ca8d3da0b9dcc96e49daf05d95c3a995289266b5333f68818d686d32b0c733dfe3a0f62da78fa45caa843a963923b2d0c80899c33413dc749c032
+DIST paste-1.0.14.crate 18157 BLAKE2B 35e8548611c51ee75f4d04926149e5e54870d7073d9b635d550a6fa0f85891f57f326bdbcff3dd8618cf40f8e08cf903ef87d9c034d5921d8b91e1db842cdd7c SHA512 3a793f0e5e773a7f7defc798a4c17ae9a40d715144632ea6cb0a8c785e14c4212046491df016bb9838281f8eaf327a79f01c1e2ac5f26785c028bc880faff9ee
+DIST path-slash-0.2.1.crate 8821 BLAKE2B b3564d0f689ad1b943d132fd95adf2ff654b61f182082bd22f7b8f11dc9024cae8e1b9f3551c4424509db17aef899efd3df96a67e1cd588ffe0fe385c957b361 SHA512 c046707586f25f13d2f9fa452ea340198f6d2e6333ca3af806b9d2d1a61d46b033fffad60d1632ec16062fa79a3710d695b923b831a7db52602b728ed31fc3ab
+DIST pep440_rs-0.3.12.crate 23943 BLAKE2B c2b19b4ebd4a6a5b05f35e95f6b748cfd992ae67487f775ac67d09ad2b2fa3ff17927f22d89d440e3d41906fccc05387ce0c93792ee6eb5fe1611b38892ecee1 SHA512 b405d0b2e87e18c65e8ed36d0eadd5b56d8161d8567fd1f7fd4cec6f276d2c362990571b7d069d31e80dd7cf4cff921274e82cb4211adba35a454ead0b2669d8
+DIST pep440_rs-0.5.0.crate 42582 BLAKE2B 667d172ec08237e40dbdf6e42f4ddf3b018a78e181ff50a0a240c7138f8d414a4390befa6cc7df41f489fad49703bb5e75b78e9be4d4d477b20e552ca8eaf896 SHA512 dccb69fcc8c85c3b02922964f24a0e2200e3b1649600c175d75fbf99d0a858b8d59a21d897429134199a6d2877163dcdbc1613e4eebaa174ccb26824b4458571
+DIST pep508_rs-0.2.3.crate 30088 BLAKE2B 93617fac6745084549505ba41106711e3d120688f59bb5bf22f3747a0fe9b9fffdaad18572160162f62c8e9f2ef4024303703bb3f4de11a6f79bbb2172d2bceb SHA512 9f18dd0b33f677ad512e97014ef9a8b4d785ff6dd412747ad627fe6abf3dcb8c9f04db578507025f5362a738fd6dc7b512d85bbda9c9f99eb553d4638d75a017
+DIST pep508_rs-0.4.2.crate 33741 BLAKE2B 4d80a7872300e364cd78d7d8f635e3bfc8b22113c9a3226b1467f8408e5960b68eb97cc87fe9c90e50dbd93e07fbfc567d5219ddceaa0e1c40aa47544d8a219b SHA512 4b5a437f4dadb391d9afcb7a9dfac786d0dadc9ee87cf9cbb68644243d000e21272839c3e42c0044138afea5c9d20233fe01a3166384b6a54324e03a3169faf1
+DIST percent-encoding-2.3.1.crate 10235 BLAKE2B cf8e2fd7b359a05b7bdaf731f9ae84c7fe6f468a53482eb2db7f93dfdaab64ac812b3664899db260055a93449462e6d219c695942fc5b030517b197b4df9b95f SHA512 5951ea8315e52cf3acfbaa023cb9e13a136b114c54a7da0bd44619ae24cd2159d4a96469d7572a2fdabd94e19513a033387117d7ca81d0eb409fb383e4acda44
+DIST pin-project-lite-0.2.13.crate 29141 BLAKE2B c434a336716c9cdd16ebc297fed393e9106ef167a693c4aa0b12c681e03141b8ba3cdf64c310916cb7d5cc43cbbfcaaeb39bb5fb1e8b3efb9e94a3f72af914eb SHA512 7f12595d751d315de6c0d380e2f501b74154661eb676987d2cab6fdc956091a68c9cac658df45dbff73615e982e6ae2ea138c09ebb708cd6c351f0d18dbbdbee
+DIST pin-utils-0.1.0.crate 7580 BLAKE2B 457e1287202f16d1873b24bf4f1de1828300128c4ba3131758e64f9784d36d47365f22d85493c3a85d854f0d8dbb4c6cef3a0f5b064014dc03943e58b7ba9178 SHA512 828422b8440cc82ac6b0743e0112fa7540d437aed457564999092b1462cd7672cd6b1f0201b67075431aeedd3d9c5127468a3dd028744109944f7f023c82fd70
+DIST pkg-config-0.3.27.crate 18838 BLAKE2B 1295eb4f08751b3663cb2c7c2753f29bf2ccd80f4e5856909fe10b6f006c37fb9672c9518b9b416546469faa18821512673a66543c0bd1e848bddabc456d0a90 SHA512 41e9b8d4fce6b8244c2ac8566318a001b481bd42a182f1a832c81ce93c6a023e18af03aa3500b134c30195219d35080433bdba69b2594e9665081debfbb4533a
+DIST pkg-config-0.3.29.crate 20563 BLAKE2B ed0559b0073890911fb47742743b2586123bf9e9b594aa0d5b2c419c6768cd37e25b546c21077ea6cc02823a679b302aeaaca6c7fcaf9aeec615dd08f53a1f6f SHA512 bac7dafc0e10bef40e427c1fc0271d1a26acb2f5b1cf7cc7a128f4d4f1f3110529e45057b71cea7b0f6ddff26945fe08962285ddeb22b54639e44a2e43af698f
+DIST plain-0.2.3.crate 10664 BLAKE2B b0ea38fcf6d4f4e3ff91d572b5639f01eac4f19b2c451d27bca49d994a07c6f46118cd58a1b86b3d2a61b7ac9e17e8236f1cc98414738d8c86086d37e0fe4d35 SHA512 6909e4b4b4a0a49e6a226d7393b121ec04beb8a13b1652c23337eb09b3c2e5f202b53a7663dfe7828dcb32c3d18135b514e9a982967c188e127a63b6cbeda252
+DIST platform-info-2.0.2.crate 28443 BLAKE2B f6389f76c04954189a6ee38eca506659b7597b99ccf6c4eda8b9325318de52b40447ed5474062002afc7fdd8411c8a56b9e4a0b03843ed47d54ca9b37e96227c SHA512 06f36f3091baaa502d33322e5e77d4871781144ed4ca33a3097c9611cf78e2e91852b8be59b1869e2e441ba0f8a076d4f25bdab7235e3324247d1b5bf49967da
+DIST portable-atomic-1.5.1.crate 140771 BLAKE2B 947153fd068bede928976294a3dae461cc8c463e45c8fab4e80e338e5383231ac76c369a9ed2f2b59c186cfd81f64a2215a3d206191f46e758c6ca5fb21ac570 SHA512 edd024fc752300be867aba01987d23b4b165c8fffd0d56771a0e91f1cacd2174951d855b8255c25ce5d7e4311d2ef7cff94ee04a508a6307519e184e01ac327f
+DIST portable-atomic-1.6.0.crate 140689 BLAKE2B c91d06e04a87c9a207233d8a850859aa1f5cc43dda8aed34511c3fe9641c27412796539ed045a58e649d2a0c7d71100b6b2d78a0c662fc061fd961a652ae8722 SHA512 b27cf57655a2f1e2d6ea7b45d80b4f9920a836e462f132c50dc1e4d314e162444309de1baecf45dad2defc7a5b99759165e54da9fe759b24092f8cb8755c515c
+DIST powerfmt-0.2.0.crate 15165 BLAKE2B a3e1ce63f5866f75526eeb749bec6607e42cb495bbb953082cde7e98e6aa429ecaa41889d98ff7ed4cf5031258b4f7e0553ff8fc435b3b6f8b4ef2b6d53d9b61 SHA512 0623f92e4d6ab284b3f6dae58220d79d9185df4a738999d68040c50d72fe0380d70358cb622f079c629bab53bb03c6e085e165d5bddfbeea84245864fed90029
+DIST ppv-lite86-0.2.17.crate 22242 BLAKE2B 48c4a31a3b555fa37072c4de083580bb769747c7668748541af472778b5b58c3e7ab2b5e178760f542f973774f09910bdd4058ae5fb9d6b10c103eb76cfd0d3d SHA512 539d916e7e5869d832045c1aa88aec519bd000227f9b01d4dd0bfc9ffb640d5f5eb21b05eba718174773c97192a655ad3cb31b53ceb914dd19179a6699b3583a
+DIST pretty_assertions-1.4.0.crate 78846 BLAKE2B 68583c49f81ab0cf5b90f6de10ef3aae9b525288fec25f9d006f2eed0877c0fa742dad5f878fc78233b54c0cd32dda7ac1f7161bfb475288d8858e8e40aa9e1f SHA512 f76d38c787e91b3739272e3bebeb9763d312b85a43cda5e1311ba8d6b0e4da1ef25bd66208e772b1cf56a34553ee560482b5ad19c5290608b2aaf9c0d0f0e995
+DIST proc-macro2-1.0.46.crate 41954 BLAKE2B 3bdc274c8ada8bf1a84d4480b25e0348f4ec5bfacebb74da144a36d4dc0efeb341fa24525e7e8408c3589013a048563a46f1e094944afc1726e594534e2455fa SHA512 1c2ae8dc4bebeeaa4af02f8edce18b3d159109a1639d8e9f26be2b7023ade9d09824ee0f2a60ae034967d982158196826fdb989d23a4b3bc81188a9a63e18cb9
+DIST proc-macro2-1.0.66.crate 43575 BLAKE2B 9eb3e816b00fcf625c280ba14ad269f5893d0523473a24de07c21945f6f932fbd08efb3c339b35d903245510e3f065e1478439b024a325f2bb9f97bc7bcbb18d SHA512 85f5a762f9411142e5ac28144bd380f07f0633ed2e44d8a2545be9fb8f42abaca6b5d45631b4be83b8e8b9beca7438bc52f25615c3a410a3a1249474b1aca407
+DIST proc-macro2-1.0.69.crate 44271 BLAKE2B 9d1531a0b123e6238363d574bee03ad050454b65710b9800c12597f3a9ae2f9bf50c617da0472b7ac0b549afaca19c546ccd6519e648598500efda9c0db2ef6d SHA512 d197cbe9b6100c3193a01fd7dd6b4e49d440290012ababb5d9f139409f0afe816f213d67a03abeb1f3227228e0a1f2446d1dc0a2775363a15d1237c38b45d6a1
+DIST proc-macro2-1.0.70.crate 44343 BLAKE2B fff0dec06b21e391783cc136790238acb783780eaedcf14875a350e7ceb46fdc100c8b9e3f09fb7f4c2196c25d4c6b61e574c0dad762d94533b628faab68cf5c SHA512 ae9366856853f7d96caf7a7581843d36bfc7843f8683897b19ffc666c03b0b1eff502ddb18ca4c1c1a239a368f03f6cc258b0e2795f64b61c6a31404462eec5f
+DIST proc-macro2-1.0.78.crate 47158 BLAKE2B c56a24fce3faca9e04db7965cab552d2a976c3764df0a84179b5a89d1230ab355c777a82b4c982e3945414f1f0478473a88821dd176c32d6de394d73a26adb9a SHA512 11956fe03a2e77a925cdff2c3c8bc8804dffab4fa1de963a128fa23f4189976fd2e2102bd346b92c33524beae320b71dadaa5213695a3ec638404196e14fa769
+DIST psm-0.1.21.crate 23126 BLAKE2B 5972b4bad729d3c8842d4d616b1a469fd59ac7cecac5dc5754f084b7f2c623f715f302a9132cd146f48f323982c837a63cddbabfdc97c73ba88ee60df3d036da SHA512 33e34bb30efa5ec700c135e11fe03447d56e6f0dbca5536fa8bf9ca2c605c65e2dfe0a2a79a0bbe08eb2d2a37e569e31def340e1187bc25060c2f0e6537e3e5b
+DIST pyo3-0.19.0.crate 412659 BLAKE2B f8833d39c3c8318466ee5b9010cbdce1a20f844f15a257ae41c5d8c72f645e0c14e7e5ae0b50a8aebec60afd827cd23d5b5b4b70188531e6f5b89ef191066189 SHA512 9cef7f8a73cfea32661eaf8fd8d5af6ca180e3fd71ac956d9fbb96a1d194f238116e3ab31917b15359e7f6b0b3bc4587437463a4c61bca988f16657a64440919
+DIST pyo3-0.19.2.crate 418228 BLAKE2B ee018b33383fada78cd22643aea9231a8c8a2f19d1eb297f40eec9206c5220f322fff4c926d939a93a24ac6d231a207ebb25afcc0709191151c7ed9af7465efa SHA512 58698183e0f2f0507f8f765bf3e90185c933e78d62f0a9be65c4b1ce8eea19a98fe0341abe7c58cafdacb63a012ec417876dccb7be6facc1360fcb22796fcaf9
+DIST pyo3-0.20.0.crate 431766 BLAKE2B 104bc21ce2c6931753ca0c7b2d91693f454c964260ca3c4628a899fc8e7edbe4238db913ed7356f3beff154d88a60a17c0e252b655768e75483e1d9d9b86f40b SHA512 85d9533c75f905752c62f6a4898582ae48daf085e287b44949c47260301205a5f00477927877ce46300d2801d22fbc04a958c058a37eb28374c834fff27feca1
+DIST pyo3-0.20.2.crate 434326 BLAKE2B 3114fd6f3fb8ae7d1b35c9d2ac5ba6a49c5ac911ee3a5b941c5063263ca7cce47fa4b4f7ec34cbfe3083f3d1303fd7f061639fba833a04fedb9d5098f5784028 SHA512 cc5151a116179157046ec92677e5a72318b4cdb13a7d7e3bb83778739b5758040e5020f667dd83554a66b758581a08f5de05eb38e7b339813cec85e0712e6355
+DIST pyo3-build-config-0.18.3.crate 29137 BLAKE2B 5fa645b64f50a078f38cc10a27ed52bd7e7aadd8a069c05ec2963f0b7c869b94d29eddda97cc31d200cf749ab8e2cd9cd1ea00e75620287e9187745ae0e100a5 SHA512 7ccad5f245e84895e147389f05270f32d12f81aba46bcd0dc184b8d62af2ea579efc50383502efda40601c981c4dbcf911aa7d8192364caa2e177ad939062cdb
+DIST pyo3-build-config-0.19.0.crate 29172 BLAKE2B 20904ad814ed9a22b801eb7b06851292d50f5716116a5b4a670e8c499878bf6d193525a4579b044ed413823c17ecd1ad0178baae1cab1fe3f431cc9a0f442576 SHA512 3105ce54bff87bef803f30b79d3ab2dbe440d68418f8cdc875f18ceb2bb0d06ed0923cf02af5f8293ca901f40b96c1b99a12a8a8e74813dcf70534d3aec2bfb7
+DIST pyo3-build-config-0.19.2.crate 29206 BLAKE2B 5b1cd80d643e448cf8f1d28a514333526061c178121b9a0dcb5bff6082f402ecfd166536d94d42065f6dc1f108a73f12bbb78eedf9ea053a6aa2e9c80ac00ddf SHA512 ccc73061ec1989258921c5b5800689170635fa5503d74a4ac458baef903dd31efa41995d238783f1e099ece1f66d0a0e95c4fcb4b772b9f653dbb20e838b4e28
+DIST pyo3-build-config-0.20.0.crate 29534 BLAKE2B eb1d5f75276533483c52c6fcae49b294d6d8edf504859dae18811c1ef695dc6d0a055f2a34bea305975e4c1492c312433d2dcb7753484f793376c62cd59c8e40 SHA512 a01d06ebeb4b9cfe6ff6731046101e9437498453ca5aa68ec53df3bfb2f34665a489f8072636c2da16c1e867f536032fd293f05a43561117fd131bde5fe5aac7
+DIST pyo3-build-config-0.20.2.crate 30029 BLAKE2B 846eb95d1417a658763417a2750dca1c55201105a3978d61b1db5e3962680ede188f8285dd7deec778ea9860d43e40513b88f5a54f0b1881b08416760bdbbedf SHA512 9dbc669ec69d38716c3909fa8f3b6c5be13c717b20bfd5dd11edab59b8eb35247d7996acd260fec88f92eb3e71248c86e9b40c1a700827889e2990bba20ecddf
+DIST pyo3-ffi-0.18.3.crate 64474 BLAKE2B 32bedfb4c7d88e539e958af0dd48af311934a817282a01f860af7cd824fa1e3825c505463b78cda57541bea8ccbbedacdc0f67bef686e6775fab3787c26c6d2c SHA512 55240c7824ad1e5c69e05a31ec03e2064290c89c4c98f06c3ebc38c311a10b1690571c977a103790ddcc9623ac42fbf525fb028e910baedb9acafe39fd6e4a82
+DIST pyo3-ffi-0.19.0.crate 64481 BLAKE2B 1cad9db14e9c14e2aa24eab25439f9d8f7503b5f4c3e8bc9a58370e3d63261898ea678f75d276f9d2eedd5fa90a106f30e7362262619a81bead93bf45673e144 SHA512 9e01b15153c44f13c77c28719d3ab36bb859c4a15dc936af4af3e99f44946b4b4752faf3d2320391735b205ca6c055a43e7f5ac98ce53d281fdf536ce67dfbbe
+DIST pyo3-ffi-0.19.2.crate 66500 BLAKE2B b4139fba31ef17017b6b60784e41ccda34931a072c2638af1eed8d02d7af701c46fe38b12772d2301cff41d10a433ff0f00a69d79d40233eadafe82abe585f8d SHA512 789191bca537998dd23d72dce4f185b84bbe700f4171c47de35b9bbca15a180ad214392b4f465cc1ecb0be955ebec1cf5a3c497815073be18035bd8bf8c51a32
+DIST pyo3-ffi-0.20.0.crate 64220 BLAKE2B dfe75b9459b4a564d1dd9f907166b76d00c5b50ba027db65d11540a7b993f3ef4e19e574135b538635ebb9c9eba66115c09198c7b6071b0b82fd94faccb1bb63 SHA512 a68f0b1380f2ac3d3034ac8b3788cd6573850137c6678694cbcc3e814b619510b9b21b11704c2e702d4eb7433d8b1d3a6dac663501b6db5197a409407802b714
+DIST pyo3-ffi-0.20.2.crate 64601 BLAKE2B cf1141ad34a13dcb46de0d1e15dda192ca41a7441bfc92a9295861876dcc690d1d5d6d39dafa51cd70c4627353efa91563eaefee8c39f655d12818003f9524da SHA512 ee6386b6fdb80689d104f9cd5229f02e1893d00a52be710bd36882c47305abbe24ef2f3cdef8200fddc0bb97e29001fa3a2fd9d3d2673ecd9a104a070420d01e
+DIST pyo3-macros-0.19.0.crate 7177 BLAKE2B b677a41f83d7ef42add024a956cff36ce5546d677d1d3379d963be10d8de6ca3edd55165bd8965d2991788e6a12b2609c0bbdf90cdc7020faca436e5b1366eed SHA512 0591c822cb9e1b1756ad001356659a228276dbdc499e3a92290648835f01c33b0d64378710728877a730059777012c0ca9046daeef6a35a0d4a2bda4142ff6e9
+DIST pyo3-macros-0.19.2.crate 7173 BLAKE2B 8862f42a30929579b0b0bc2ba7f0b416518724480e197fa13288e49324e851f964183e1529b7f31bf5d4fe0ae194a412723b6b401100e66fba98bbcd9c283866 SHA512 852cc2792aa3d30d9ab8802a451be5617cae6536adced1bf0dde71704a3c7c1bfe862fba751b6d045249819a8ba5d87dfc50914d142a0b662f046498c06f8c2e
+DIST pyo3-macros-0.20.0.crate 7678 BLAKE2B 03fdc0cc9c735086ca2d27e0bcd197e69538c3640ba7f87bc3d65907db374ac7283f61bdb67a1d45b66ce972072ddcb3b1daed4aeb9a66100d11bba6515cdc86 SHA512 79b61f55010dad60dda2c5061c9736bef3f6805f28db230726937340a5c40a3fcfb727a0db7779c3eb094ebd45492f7af4f40a3fcaef42f160989a8ef6174e7e
+DIST pyo3-macros-0.20.2.crate 7925 BLAKE2B 00fc60becfa39bf452786d8a612247785f1737cc3e627700d0d144ab2efaadfb34ce8a8f46e932382a1ea99caebfe1946fbc517b5c26fadb0822ecaa8b2e9df0 SHA512 dd9ea9acda95dfc53689a4c26d8c2139f8a90a05ab06737037f19b8bccd5e52b0da5f297a29194b958f5f8b59cbb566b5f409b3f17a863eddf855ecb755d2719
+DIST pyo3-macros-backend-0.19.0.crate 49921 BLAKE2B fab6bcdd92a9f421117e68c77f7bcbd92dec5c2bfe33f2fada1e433bfa3c8fa0fb91c1ed7736bea77e91d60732186e2ac1dfd53dc7bf94ff9991c790f2417d9b SHA512 68c7ecd888c11631b20500f63b8bae3509dad2cbe0f8d628541e2e1e8b32e53150640dec894ac61e8e79218377346c461542946e1726ac92ba2d1fb6076a2d2a
+DIST pyo3-macros-backend-0.19.2.crate 49962 BLAKE2B 9d8a032c2205f55d2431b6bbc40df153339e08479df3a8a65506ade7d1f3d17cfaf664cbd09eaec9acff3f5a248598e37427d0c5a531eaf527137803adf49834 SHA512 fd708e6fdbd54ef7c676bedc62070175bac6b8f7ae11231578196dbf552b163a8a2499a1266f786bb6bfb85517fe83610902137d59a5c42efcb1a27c4235a07e
+DIST pyo3-macros-backend-0.20.0.crate 49383 BLAKE2B a239042abdfcf5ad38505b57bc6b858ba346bf8681e24acf2e433f53e4a40bf0b28928b434b96f596d12acbb602b14b7e1bbf4be1e5789e6d9c754368db00a1e SHA512 c823caba48b4a30aaf84c23f80934f0172f2c76a41b538b69ebc25afcb61611b54b8fbb4ab6cac1c7a78b4e6f9f909f22748a2cd279b508d3897b74b17021d56
+DIST pyo3-macros-backend-0.20.2.crate 49710 BLAKE2B 711b18984e61219555df4b62667f7f376951c6cb47e6dd947fc24618b923c4f4f790eb1aba1901abea4761632cdb58cfa81cce91f33586da3022e6c7d126bc9f SHA512 c6ca2a2cdae8630fba3f8e4122e81b60ef2ef0905ad2a3fbcfae134456d5ca9e73690b61590e391f3b9d82c24725809f18544c5dfa0b36ffdb1914844fe65d3a
+DIST pyproject-toml-0.10.0.crate 6072 BLAKE2B 672d391f2510f9eae63431e8d3d09825f103672dacbb51c5997d6d83a229ea3a877a79adfec0924ea48cdf143e915a2ff308a5865f26826d459ee1e7f4796f6b SHA512 9e8bd5572b86b9e9a27aa67a7f6a7eedeb9c3f190512577872cbce4fb52450a3966a3576a695d3e54bbe1005f9f6f1be4d20db3af4b354e294af8e8d50b59095
+DIST pyproject-toml-0.8.1.crate 6047 BLAKE2B 11c220ea3f3a95011050942e0d23728dbb0dfb97f648827be3f6c8f85a92131612fb63d949ea6ef623266976035991f574c8c213def31bbfb5dbc14555bdc7e9 SHA512 e1980f5ee49351fb32e14ffaac3778792223d46420f3bf1bce0c7693551dad20e9434ee048442736b8ed357184437dc67963ba40e3acc28bc72107eb4c955834
+DIST python-pkginfo-0.6.0.crate 211883 BLAKE2B 3ab285b3b48961e0bd3bc746673c32217ed548dca163cb1c6ed7fbebb78a152c60eda0573d95add08f149d0279c7abfcc9e8eea2ac07444e7c1afa7926912dc7 SHA512 27c1e1a8176475a4a16517e02ad723669b0be60a7e1ccc38e0461c2143985098386e829a112e61c65f61b09c249dcd26a1b35228041c91e1face325d1d9f097f
+DIST python3-dll-a-0.2.6.crate 56866 BLAKE2B e8a83d0e02c281d8a626565fe1cde1158726c9ff718afb0888298454762832d47117d7a1bfd4e3e471e82ce684cd8c36d8d7ee036b07748cbf09aa915c2e046f SHA512 f64be4ed3b217d6905df5787afb3d403580eed1bffc17a251e2c8eab61aee6a187460894b568140c4d38369e77fb51c4d49f6df9127786f344b460951df249d5
+DIST python3-dll-a-0.2.9.crate 66092 BLAKE2B 2c4baa31df7f55da8f1c6073525b4498bae7207ee38ef0eba4dbe58088609937a7d7b851c603ae62e5eb5361881e67a05d8c112d0a76aba5d99b13cdccd59d59 SHA512 1914d3ce67284f13551a4efefaeb9c11138fcca3d5082746282f64b7a36f732c6834766d981f27d862a61410eed09b3d281e0cab8cc1a46d424d04823ffaee35
+DIST quote-1.0.21.crate 28030 BLAKE2B 547344ba9272874f5fbb4bd27a69ef5be99823e10e1318afe71971b18f37e9c73d54168f16efb82c53a332e4874c80a82ea951fb2c85fad50cdfe783622b79fc SHA512 0728eb4df7e1f7c4d32ab08c901c2c969db8eb46b03bcec3e4956a4f6b360939d32abc6b6ebd7a31058e8e9b69c3d995a24cb484f93656f05b4ee963be1c74fc
+DIST quote-1.0.32.crate 28037 BLAKE2B 7b243ac7929f3b2e1d91a51a2dc2b11dd29bc017be9db588c83bd137609e2f991a4f3ff8682c7c11c177153e517c4f818285cce3237f435aa43ad0126c4bab6d SHA512 13cae36920dcbd0ad1978be63f20b35b8424d02b4d9992032fa78c7770d61d1fa7ec1532a48793cab48e703236b7bee7843041253b9e83700903228078b4c025
+DIST quote-1.0.33.crate 28090 BLAKE2B 77c4b166f1200e1ee2ab94a5014acd334c1fe4b7d72851d73768d491c56c6779a0882a304c1f30c88732a6168351f0f786b10516ae537cff993892a749175848 SHA512 c1e76c3c017e8554eebe309f8167fd56fce931981c06798aa85a0cc6d64a9cba6ab103f5a1324e69c6f9ca5dc47a8e31ff2e847850542748697afcd265b5939c
+DIST quote-1.0.35.crate 28136 BLAKE2B 81424245e1e2b94459df68bb3a9a866c6a364102b5e1d010ede9c5f8278f8406d7b651957d091c5914e936b494b0f6e9a6a1dd8b7d35cd7d7100f86dee4ec12e SHA512 f5314fb6af17cf36c228e1970c569c29ec248954a450a5f90ba9e2896d04f74904c9cec5a1f74325f2489295a94491eee4ce8fb461e22cd4b34e53f1f881efd2
+DIST quoted_printable-0.4.8.crate 7132 BLAKE2B 8258519be27b010f73fc1835bff917442963601f22cd026d09b8bd12c5c66e691a1e6857432f1b47aa5e044a4ef890d60725e6229f7ce54cbe450900625199e1 SHA512 e889b18c92e34aa6403cad66c6fca00de75cbbda1b41d30f14c27154d93961c973dc77991e36f869a6996117cb3bb08176a4c85f7f5e0a06fa09ab02e75a7460
+DIST quoted_printable-0.5.0.crate 7604 BLAKE2B 470c2668e1778805ca855f3c65ce4b9f35148bbf4b4556e846f04b0fc263dfe237f65f5d00d64472dcf384003ff077a13ff0c36a1ead38cf0e1073707add9bac SHA512 90e4d03590b678ae39a9be7157d1943e670e44df11a69ef5866b06d8eda772943370c66e41d1d25aaf877fb3a55ea3c20b990a243666ab934e168feb9a12442c
+DIST rand-0.8.5.crate 87113 BLAKE2B 516f26bb2a969d0d79e957818133f35d2c0b4d9f1b401098ea23c5b80d27599e842b9298c0c5e46e2a6cb6953857bf8a9fb71ec9366c5ce6708cf17df14f179c SHA512 8b33a8988906ba5e2057a9a84bdd11f867a5536c22f5056eec59ed4ec4e3a6da2fd773da4c0510d343762e5a4ea0f007db4c4a7cef87a47f90e36c1a84d86fb2
+DIST rand_chacha-0.3.1.crate 15251 BLAKE2B 645771b2c3e274f085e0837a20306b1d59f6e9032fba8eb38a6d1b30180d15e2f89ffa2a162bf6358da41e030098242d81e71dab4321980d0a4f6ddfc2974ce3 SHA512 8198c580b1b9b0429758ffa49cd8138fa3ce724f0dcf73c767ea7e55611d6a2e4c7cad9950896510def500ce4062b594386c947ac3d89425b4e5c9b04d0b8075
+DIST rand_core-0.6.4.crate 22666 BLAKE2B 8b6b66d50aade877f2779c006f8038db450f808c66d73d79efa66c4178dc03db06f12201bf0e7930181c4b0f4030c49b20cce6eb7839763cf2217cad9710789a SHA512 36c67eb845aa2ccca49d6d680f28d418229bbc5a050729e487fe6b9f9f384fdd7b8d67fc6508b90b79ffb3c26688e72feceb3ecae57d3d7f59338aeb62296f79
+DIST rayon-1.8.0.crate 170172 BLAKE2B e2df52c64435926a13f4f275c4f25a9694316aeb02b73856c600a1a813686ceb20828676d8272393d1aec18eac4f05bfcdc5ef02ff1e19245c547c0313a2a03c SHA512 ab1cef238530d81c255b6631ecfed9cc4f3f8d7cb6a74701d29c1dcb022cc5b859db1d246cf8247d47702fdadcedfe64a6749e24cf6c7258e8c9411af7e4524a
+DIST rayon-1.8.1.crate 170448 BLAKE2B 982f7ba7d6a43956e6f438921fea2e40d3b398f4f72a4c89f55657aba6aa0d99912a7240b1c32c1dadafa9852adf440e3153a3f0cc56f6582867fa2794bb5144 SHA512 a83304be8334f5aa1c63468ddc749d8e8124c6947f1472320ba0bd4351c9ae582dba31ff369e9efdafdab439571fbf91b497c2370ec15406cfa810f5161cfb32
+DIST rayon-core-1.12.0.crate 70081 BLAKE2B ef1bb1d430776b0ad49aa523cfe83bb0aa3a381b2e571db74cb8de04bbff884b8c269de31d7afbfd609118c445bf079afd2d4920842c8a8b312d329e4675cfc0 SHA512 588fa479c499e1620e25c5818996f0376d3bf526272af6c50a17ca0ccf0f8f67b03a3a665938575a86a8edc1f101a37ab01133b27f904eb5c291bbfc581135b2
+DIST rayon-core-1.12.1.crate 70701 BLAKE2B a32eb9ae9a71b4f0881f7bfd5375aa7db5681f20f7e0b25e6ecb3161f2aad36b93026c1691d02bf298a48ea07ec9475a237fba457ed0b0b8624aebab2b4988df SHA512 33d0297b682f131c50e1eabc3be583211a5abe790301cbca91bf510e43d6714b7564ca39fab7c4bf6f02aa0df6bb394f386a61320f21ddb6bd7aea1372b5e99e
+DIST redox_syscall-0.2.16.crate 24012 BLAKE2B 9497a52044458b1435ea16e86ee072e379b6b11ee31602ea72d6b6072a4a99426f409c2e58108a4e9c36dc193fa49c83951e71f4fd4e158eafff18c594dc01ad SHA512 63b5d876baaf99f5cf737679bc6ac7a9e3d8a41aa93f5c59416ce7e3841e2513bff678773553cfe62fb452707f82acc384ea63aec932a31bf94679cd1caddd27
+DIST redox_syscall-0.3.5.crate 23404 BLAKE2B 85aa4299d9816666bf576f523da5cdeae87b3c8fbb2af103e82258d23f73303c068a4b6c3ef4117ad67958cb31e41f836a9f59f2ce1bc52c23605e34399afcf1 SHA512 16f8f4766932bb54e4740cfdb4f0802f76246c0bf88c1d76c69c115949b124b625d8c3b85d8947073c2e9544f425aa16c10f71fabe3c03d29e424c47fe4ccdde
+DIST redox_syscall-0.4.1.crate 24858 BLAKE2B c3301137a0b84e03b09d28dfa377ab3bea74d574a08cee21d35713b278d8b5b30ca2a1d73a0981baeb4644cbb88c86c8eb15ab3bb2692e38b93e6b35fab4e0da SHA512 073ed9d96090cf46eab9877742277a013c62d8da86d9caf2310b4fa868af306511936553579e01309f27067d344226cc8dc5e3aef01d9b900da2febd33848f8d
+DIST redox_users-0.4.4.crate 15438 BLAKE2B 5f44e9ef20f1a6c8b22239838f8f6a6648dbebd5b4386b3a2c417e39add8c4a0dc32e4369b8bb4e0ea17678140f596b9bc981b1d56f06de6a38a503600420481 SHA512 7c208116d1171b1f52f22aedcf8ad00076a3d1f062f4018f4a9f5fb2c38d7ed83258589062d1559f64e43f3e2a9ddf789799f57cf87a49ad8a37463ea09aa269
+DIST regex-1.10.2.crate 252839 BLAKE2B 4be7bede72d41634c52eea25566fb13337a84a055aae6fb73d3b18ab9168085ed04ffbfd5b6f87c2f85c9922893b9c9a253a8c874eae9185b2100850443b1517 SHA512 e594f70cc540586e4039e7b905ede9e507757b531f22a94aae185e47732ae0d54bceb2c6aceb815819a9652c01ccf697798d372631f2f864c04ca2eec59759d3
+DIST regex-1.10.3.crate 253101 BLAKE2B 390ebb00bf5430048412883b672d80737e783fd36f40895343cb38ef2e26e2713418c2fb4d66792bfd3be4c990b4518ba120de229a72cbeb7fd5c2af325fbcaf SHA512 d090898465013b0975a6de87fbdcdf76b4896578056f4da83424bd5e7832547a3d8ace643c379c4f14700a0a88dc95950a38645508d1675306c377879a90cf5d
+DIST regex-1.9.4.crate 253112 BLAKE2B 434a56ab97d988d0121407f4b49825807c639cbd9c498249da9fdd186a40340157adfeadfb8b0f442fbd63968f4c9fb36c487d9472cacacd1fdba9c357bb9218 SHA512 4c7c478c74dd6a470ff89320a6944ea301967543a5ab281341cb4c8abf1dbbf909f329e73082ff5157db8108eb61b7a1a8b1e88555f848a876bcc5072d23e894
+DIST regex-automata-0.1.10.crate 114533 BLAKE2B 0e357229f6825f14339b1d7c40730b83e62bba12115d01ed20313320766e769a653a2fcd2c9d19af51a82c38e9e42c1a31d005e1f44f5b6fbb3ead7c9c74027f SHA512 56d64da361afce82c6cb49e70b99ce1fca3e1969c54bba5f9971db135f8544c65f49feb8827789947b3d1dcefc9c49a7a434a7ffe0d09c5900345a1733723c5f
+DIST regex-automata-0.3.7.crate 607421 BLAKE2B ed040e37e24979118edfe37ddd25443986cab4ab96e6391f9a6f70c6ac308678d5773a14bc2d10e809d7bd26d2725bc45d01493efaaef7e6038152de6fc7fc08 SHA512 967f5d0b452ba782b7e5edcb3e7f1e730407cd65f072eecf9d28d1e4c2cec9954a891a3fb4d69310d299a287a5c6afd22f71f7403dc65e07b7be207a2eac83d9
+DIST regex-automata-0.4.3.crate 617011 BLAKE2B e685724eb037411c1a73d6d355c76e9e32c40f1c9029acaf86477796d3f5ad092b0c5619f4df2fc1ce34243f2ad8af147aa31f83a435e5b5adf55b4c9c8a9359 SHA512 4fc82fe3556f829956c3172447589555ef286fd66ee9a445cbdcdbe57970655e35b6eb0895ba02c344d826609257e0c95d3f7f51858aa260103bed7b08d8c1a8
+DIST regex-automata-0.4.5.crate 617406 BLAKE2B 21826731ed5439a12cdda5a1ef217dc3239a0884d038170855985bf830f2782bdf4dbfd1b1a8812812db3a2399dadf8c173e75db635dfabc97382fda0561bba3 SHA512 0e9681d5c4529d49ff2555b7b73cf234b1f321a7fc634beccdf76c2bce5094e8501403e8caee2b3a16ac299cbe4701d891f1efa380b54f9dc2d92bbacd4de611
+DIST regex-syntax-0.6.29.crate 299752 BLAKE2B 2408ebfe5f0dd6578c33f18e8ea9a0a7a84388420c5b67adcaedde477f3f67fb3e39ba9fab1f6892c7ae7fff754c4aca51314601529cabc6a8fc43af38a11f88 SHA512 28a58950d15df1f0ac4ff4185c05b535e8f5bf0b75f79fad24e40e17a02570d1c9bd9cfc919eed8756a1069bc489c5fdccfd04f6b8266c83e3412b7b4bdc262e
+DIST regex-syntax-0.7.5.crate 343366 BLAKE2B af07596e45e3525ffd253d6070ddad08dffc8f0409ea14843a135646da8b37a7a568c12ede809d9fa47eec2329f68da7a3b3c0e0cabfa200de64affe6ecefee3 SHA512 6388dbf68c8c86d8a5bd8cfb13a86e9ab2da1a339fd607c1a16848f85dd21c85d744d694c7b918954ea27eeefc90b589926c9da464343fb78ab639a5e2925efd
+DIST regex-syntax-0.8.2.crate 347228 BLAKE2B 211fd1c35ad0f28874d4b4d276e0fb0a27e5a1608f2f16ba2333641b154624e378419daf8d1c955f21ff5f40f6d49c89569b7e11ea5649850846d0fe447a675c SHA512 301dde555f300298f2594490ccd8b92033e4917fe9b8671b8a97db6c827793c73969be85a92999964dcaf3177edda51abeb576811ad6cab9772964dc0a77e728
+DIST rfc2047-decoder-0.2.2.crate 12045 BLAKE2B c6b43d386cacfec23859ac04f276348efed831028f0454668c5701f79c8f0d6af43b529a9054138ba609a76181bf96583781653b6220e59a1d33e707b8972e93 SHA512 e81b276a7be47962a2591e7c39447d42b0ef52443f6473ccb18d8430b506f087358dca8fcf70daa2e9005d311a7d233e2dcadcf12799e9d6dd9e6da5d1dc559d
+DIST ring-0.17.6.crate 4146892 BLAKE2B b1e608fd4b60d2e936c4df318215f7b53246557575535664436ba9857af33a730e9de5d69789d74ec1f5eb9a99b371a13043a2b42a596bb7257d79c8bed394b1 SHA512 863f7cedaa6f6ae6e2c384e6bdfe91e28db2bdde78f3650ccbd7e41654efc38f1f742f4842a6d52b608706e71111114943139294773a1d687911eb25522228b4
+DIST ring-0.17.7.crate 4146482 BLAKE2B e08a879db4b3c8577bf20d79ba9dcc9a6dc906fa65005334be4f79b040200cda506ca5114aa0de12c309e483694f4a7ee9bf44efdeedbe12ac82edf4afdd91c9 SHA512 1b75cdcf51ebaa8684410e753e1766b88f95c27559baf88601db2cb267340fa03d7e4db38a2a91632993238be1913261cd116e0e8d8b541c3c8a6ca811d19b36
+DIST rustc_version-0.4.0.crate 12175 BLAKE2B 6fda2ce03eab45d7193fa0d70175cc7ffb56b7be85fb1314092bdcfd3948ea145420569ace3a47218a4a2a6e44a818862cea6dd8cfb945475496f63b591c29da SHA512 f66da7c6efe431db06cd01180d84ba67fcd38f8cd6ef693762957c00ccc2211f23c08079d7f184776e08f28d2d6ca3bdb5f5016f7de245c6193d4722891ba1db
+DIST rustix-0.37.27.crate 324534 BLAKE2B 65fc8317c5aa86236b2099104b6841a7d35d4567977218f5e59a85d199aee7d6b9f0278083d93f575b31d77ef8685576b7cba06ce8da6e96a164af30c854ace3 SHA512 e1c648cf11379509b732b9e9ed88ebd36006d8e73755528a09aed4f46df08e23a705696c5e6ff7ea0e4382513edb487f9859a8f1673150d60d70c698216fec3e
+DIST rustix-0.38.21.crate 358962 BLAKE2B b3e4915385aaa1783e0024caee2c454d9ce66542ffdb9ab0f0ef02f07b6d583a49b29b25a604832903f7909a0362bcd2260958cfe3fe045af4df2ea5c62c1da8 SHA512 f3b147706e1befb9d743bb57c7f8dc0a1ca8f244ed98069dfc757ee9d7281f097531bf7d1028d21ac798ee27bfb07b2ea6ac395dd0bc6caef4647fac88669833
+DIST rustix-0.38.32.crate 376999 BLAKE2B 681ea50f5405b3a749a26a481995d3a85800378067734bb857e32e5d3764687b0da4b3749d227174440e432b374ae9ada154a8288e4353ca2ff1b851698477f4 SHA512 8f028b4df785aa78fc798f3e053d0a4fb9b3c552a47f66f52f1666f4c1324441be6581ed643c4ef0f56d92e1a078c6d3b45be183fc3df0ed1fc89de0d610cad6
+DIST rustls-0.21.9.crate 283537 BLAKE2B 38db2b38f33223591571af2829017b64c1f319d03295281773a70c4419f1072cb4651e0d4969eb19be467fe6f09039eb0ede2b315b4cb047f0dd3ecf9352f8b1 SHA512 b2be86d232ee32855872bf08d17b325c91b90ef7557154cb9042b072060ef2183e3d106420fa20d3887d0981c810094fe801c66aad407d1bd735b1b443625069
+DIST rustls-0.22.2.crate 332080 BLAKE2B e384541cb737c17af63b494b13533256ac15692124e64db7c3939e61c1097b5ee9ca96ab3e2336500d2554c9fcd8244e76a4f72d05e0791e16432f37ff8cdf39 SHA512 c25f71a3291420ccc33ad21f2495296d092f7d01365f1ce27c71343d9fb5f50c45024d84fdd25791d7ac9aa0dd53d6b7e25f31f35f9a7e823fac8117560ea6c1
+DIST rustls-pemfile-2.0.0.crate 23799 BLAKE2B a2bf833c75ca986ce95dd1adbf42e4741411342c7b479c87afde6287d4f62002a0a6c2489f1a62a8d31f838d2966db3b6d0dc56a534c71f266d8496fe3015c24 SHA512 b96143a5861dfe71f6f2d3ffb4cc63e057a2e6ae8e72cdc5d59fd7b7f55ef58e4e025bd9600b3752a1bdd97e2c7ba1166400712f1c2ba787cbf64b2a57af3e1e
+DIST rustls-pemfile-2.1.0.crate 24757 BLAKE2B f356e6b29ae360ad55a7d70e78d053982762f190b88fd569cf2d0e9481537ecaf01afd5a1c40a3a840eb0e2a49fca8665c68eb931229afcb39430d7096210b16 SHA512 0a4ba2f275b715bcb13f9afe7c24aba58b8f283cc7fb683c1c338c02eee3aa80aaf0c8133d6f469b1aa2c8c48e0ff616fa4bd1e6d527f99ad984f2facd38fd30
+DIST rustls-pki-types-1.0.0.crate 20933 BLAKE2B 2d9a01cbf9639f9c33db410520f561f323c05229e839f6ccb886c9e9bd6691d86e9016457631fa86555703c6191939f53ee27cb29aa5cdd7ea7aaf991c48f3fb SHA512 6be24b8b0cefdce0bf67d904464990aed1cae4572e3a02b4c4d6e7c4dc0e423a453fedbbf45c7edc1aa55a355d2fe3e2ac80cef8dfbd462c27242fac49763901
+DIST rustls-pki-types-1.3.1.crate 21637 BLAKE2B 7734df5facdf21120d0dba9d6e2c0e30ac36d4368048e89639d53e68d6cb72a03cab08dc64e443f6d5b43c3f25020016bb2010ec8d20c329fb60d6cd93c9134b SHA512 741cf0def113336865320aecde54a56cd5bbc7f3aad6e71dd209b4e38b642f42d0244b6fabf03a55467aa42fc3d1582bfa1fd5fda6402ae2ca11191f21158939
+DIST rustls-webpki-0.101.7.crate 168808 BLAKE2B ab7177449be359e17f1f4553193e96e71b8e26e1298a0937af658b1a6f9485f051183d1bf8262d52430ea4c3b96263d1fd903c7a5f046bfe5f87b6b97ebb0672 SHA512 680e3d52f699c9d6200e2e738a4245a5114fc7122546c07d3f15f1e6741a52275061b3e016c2240f1dc3eb9f701f7346193bd82e827274fb73b8e9e0d5af4e68
+DIST rustls-webpki-0.102.1.crate 196873 BLAKE2B bc0c573369bfca4ddbf3a8f8cd7f62cad3e4f9bd225a4221355697e82f913b11078417167575204523068da1e1b3543e028969d524851dfea31c0a1da8576d0e SHA512 cee1d6b0251bbc554607415142d1cac78e978b6005d375394e8cb09016cf6f14da5e08fca1a8f19f0add505a1129ef81f37ba14f86eb1ff78823290873a9423e
+DIST rustversion-1.0.14.crate 17261 BLAKE2B db30d01914059a893bdb4c448ed0bf04852085c2d948bfbed8819a1d2317c34133cf609abdd806ad628b86974a9c1ab9d09f79743cb8e13257ef32cd444f49c6 SHA512 466d753c28c4899ab3da3e9f3366f7ecc435d484f51e0c07acfa5f3367af0de27ea3bc75efda22159b4990c976b1466a27e7c31c834c72a87d8234318357454b
+DIST ryu-1.0.15.crate 46906 BLAKE2B 6d6949e43aaa27fba0ec6002fa11ba859af8d867f87c90d88413267186abbf6302b817985bca3d577ab3fab2e319e11756f144473a16330dfd8fc7b604cdc4b3 SHA512 4655b5647f919082a9b84b889539ae7fb23a1201057cf280efe79c58cb5f040864efb7812cda5021bf6d34838a15d173ac8bdb0fb9fa2dba85173d3efa5a826b
+DIST ryu-1.0.16.crate 47351 BLAKE2B 13c72ec8aa608f6c53cf27c95d06b90839c5bec5e54b0441e9c4f779af3dece30d01a2276c717a733f92406a5a02b09c045b2b5f92714fe492d7263b6c6808e6 SHA512 89e3e18346ae6e4035787766f286a6eb62f5294e39ad902cc29e95c53781c4e5dd629f567f22ecc7e9fe9d1c273323da9b867aadc9cd8a066727c58330b51b10
+DIST same-file-1.0.6.crate 10183 BLAKE2B a320c8343e0b38078ba81c4f0159d886bf47764c74efe0d7cd2b3218426e8341b51e523c00a9e5fbc2ee1057618296bd70b576c68751bd55d6ddb352defaca15 SHA512 3ba35309742c8db63210d9ea78bff4ecd80471d69e6238eb96c7bf0673814f221e2d838fe6311bfc5a0e71b4a7ccba33e07859c0b9cff2171969ff08a4214a7c
+DIST schannel-0.1.22.crate 41642 BLAKE2B ccb512f6c6765e5245dcee607b7886411710aa89d317cbaed2f511f74a927a0083042653e070c9d4b976ec83a74f3f37218f3ecb621781ee367b774596227f68 SHA512 6ec962cbd25f25dcee5e31b5012e61d38b97a7e8651a5439ab4cbc8ab33a0e2ce04fa22e06a82ef8750001c6659937ffd8dccb0cbd6971f68b0c354d0075aaa0
+DIST schannel-0.1.23.crate 41667 BLAKE2B 3f34ecf4cc519f5302f0ab5207907a275c68e6fcbb47630aec4ed5d5f1a1cc7475f6d7a8c22361e9878002f9f54314c1f630ab0c1f77ea309714bdb7ada6c9af SHA512 dfce25e3b8bc09d8dd1fce2783fe02ec83f74697cb24aa212ef9369a628685ba488f821cb3e5f863798e0e59995038c8d748f74b89f7929eb8cfd804d5066b84
+DIST scoped-tls-1.0.1.crate 8202 BLAKE2B 20be49f0546691bcff3f0fc257345e432e200836a60b297ff3fe698699ef6a2fe8a5dc6977902a08f7dc63c578aa27607dae0f1889b849c257c59c48a458e1ed SHA512 342f43d53edd33ea3e2197faf5dce37bfbeb0b20b6f0febad4dc6244c3185df127b2c10488e95561260a0ef968f32707460f2d0d23667cebece19b167c0a0c25
+DIST scopeguard-1.1.0.crate 11470 BLAKE2B f774eb90b7d3ffb2efba47518e9d1dead4017ab4b38a4bd74914daa84a5af4bf9eb63da0496e3924499d79cd0439c37447aeda4a21226f95645bddcd6becfabe SHA512 368fa5726df8f42b599993681579a9ffd0196480ee3cd0f9f671e8493f3bedd1e1779bdf2beb329e77e0005fa09b816e3385f309490c0f2781568db275d4d17d
+DIST scopeguard-1.2.0.crate 11619 BLAKE2B 8b7e9ed6cefef9ee55407fb9690d57a2a98bb93e5105aeebdb475a52485e9e185255249e1dce8f83cd80534e7402d485aac3efa7e8493b13135de27550cd4bc4 SHA512 6247719a15fe1e4e2d179127b9a934bd2f99367724f41175ed9522f58824b6bc69b35002eae66b35880375ff61d77ac43ddaa78cbde7160a35183a1da32d3fbb
+DIST scroll-0.11.0.crate 27354 BLAKE2B 21c885468642a77d6871ccf2bb748972f33c8abd504b2c0232bad9ec21228c3ecc9bc267b44898fc1dc5ab3ec494a8c6e01dfc5bee0dbe93117231de9f056b37 SHA512 84a9b1eb8a10c2bb14b718984ebdbac4a02620a65d6ced24f5346a762d92cc22a69fd204de1ed97044076d098a5ff9b7e20f7f00deca2b1302eb0910934265af
+DIST scroll-0.12.0.crate 24145 BLAKE2B 93f070ad4d0656b6cbbbca78d27269e8fd5895c515bcfd51152bf5ce2756d43ff0bf13dd63201f4f1207feb993bfa853c9567a298a040369dc6be91324570deb SHA512 475a9b3f09d4164a7192c9d2fbc209354b9442e669c3cb318bd3f31d1a407aa328543bfe315c12ddd962bf8518ac378476d6b5677ecea170e6d507c70c4ca935
+DIST scroll_derive-0.11.1.crate 4802 BLAKE2B 0d0a7cd3e76bd86c192578091a7d04f0871eda73ffacabc73a45132d49cf4f6de3e4f0a384910ba9b7fe10d26efe40243db1fd03ddb10229e9d3c8114d027e43 SHA512 731bc93c5dd10b9a40d0f5cce5233ed7df3cba386b5d6f769a63abafbb4a856a9222b60f44a5c8a3565711ccf0240710a64a620f257ec836516f8c65583ffae9
+DIST scroll_derive-0.12.0.crate 4693 BLAKE2B 957aa96820cf40ea49562dbc12a419c7b8b06bd94a759aa5494f4ea4fa08a5f154a7dba8acc3d8bd41c1a2f259bfdd2d3f4b4dfd3dabfc30fffa021b4aee4930 SHA512 db2ede0f6d16783915f5f155174fc0cb700cd054a0ec54fddeb899f74da4dc2ad5acd6f0784701f93a95a42cb04c82e7a7de9680ba0fdaf4dbc51a2358610bc2
+DIST sct-0.7.1.crate 27501 BLAKE2B 12f63e62f49a0ed0c5a62c1c9b42a83c1df43401ed1de85f993167d8fc52733908e58ea1fe76cd7ff6128d4d6046d7c0335434672ed1865c8ddb1b3fbaecb590 SHA512 6030295b3b11411f5a7e518db1066282bf11a279c27414c5e959cd430e9fcbb7358e5d69bcc68c8bf696d4c1d9579ed7218b7f9dfbb61de2271c4c3d3316fb7e
+DIST security-framework-2.9.2.crate 79295 BLAKE2B 96be139f2d2b9bc2fec7805c9e90f19f68fb6cf3f09a879f1d5952b502951900fd6889451c6866e53394859a0f8a842b4a674c4bfa82cd71f48195c0af365475 SHA512 fdc58c1c12ff849af3acf34208411caee50f30b9d55e20ef9d3922ee37664c606abcf90c4b415e5c22498dff2116fe2b2f374a0bd382c837ae7d281cd1a0a54a
+DIST security-framework-sys-2.9.1.crate 18284 BLAKE2B f1484b6b691f3616192ab363c81eb3d6279ad0bae6bb7fbc4eadfd9fc6b6bcd5ce42fb8edab1eb8934f40a1d42714eeb8ca3616871e8f80c90318834901e8ca6 SHA512 3118d1e982d94c5fc6e8ad6270ba398da98a042c7a2060eafb3b78a54491091c46529bec30d4f871744431f01b828ba2a795f695cd20d008441839f3c4350462
+DIST semver-1.0.18.crate 29703 BLAKE2B b1867f552ac87968d895c5e49123bcce0f8aa0ad384e421e5ac88bd04ae203ed6b731d5c77fb8488ec6601f1f02a8f2a207a9d21f1cc66d433032628f5d7beda SHA512 698dcd37b354cfd6ee452dce02d16051f23088ce53f0b4d099e1e4ad0f9350996f0b9b2e1c3ac7d5ed258accd92773266892e945fcae28055d4671c7ae5aac02
+DIST semver-1.0.20.crate 30451 BLAKE2B 7a08bd65749e99d0a881ef315f611f9f02215991aafb317294925e0b88b125acf33e713a45113d229646401520fba22c6f6527015c12b9859d7a65d126de647b SHA512 35a55f1d1e4dc8674d48053da36b7152b5e3bfeb72eebf7d307c491b02d77e6bd4552212551be29e2a2c3951afde292c2614829e668d9382fec0f258dc6484fe
+DIST semver-1.0.22.crate 30446 BLAKE2B b77a951d959a3685b0373c80b9991a8567f8926d093b23b7b8fab48595b5d565acf7408fbfc8f4d58331f39e316a8068885d28bcd70c1476d1cda436a2dd88b2 SHA512 7dcf9b6a02650d71d6c9ab3c29e44fdef95af296208f26aa7be6fd6e16773e5e5e66418c303a0589d1165df6dbfd46ad6ebf9eb5b3adab25a51f340947b2d949
+DIST serde-1.0.182.crate 77171 BLAKE2B 54e3f0bb182cb1d9389d176ce504d6a2720b3868df0bd810e9eb1e730efe47c0f2035fd0b5c021da2d476d005206e3a44be1813477516c872844ecc00752cb89 SHA512 94a0f0e2eab1820d398647f79ce060d23112ff256722d395252d4225c5bd7bcccd79f944e761241df4e862c44ff94ffc3cfab160733f301545e4ea2cae7fd967
+DIST serde-1.0.183.crate 77210 BLAKE2B 280e3d253a29b664b4e2d17f41397b17fe22af64417facca42d6ca0c839f1def745380a5402d7a87345bb16f4fdacf9a8c01966579b8c08fb06c05f097a87e68 SHA512 3a27efdff92cb1f6b50449a761efde781af91584b8410fbf5ce37b20005e7d46dc4c750fd1730e15468ea22aac7799421c4e60c74243c65ef7916d3cbadd0ef8
+DIST serde-1.0.193.crate 76863 BLAKE2B 163097e85b5542451896d7381607aa297e3b0342a2641887a01689b13122c6c1ca566fcb7f32f51bb0ecc861aed014f1467edfe21338223d5361555f870425a3 SHA512 82259ca302f42116ecffca3c88bc1212785ce5430f9d29390a9041d4e5943c13b13de119fde644a583960102c4b6e850a16f962d36dc76ac69fc2297ed65a506
+DIST serde-1.0.197.crate 77087 BLAKE2B 4a4e04ededf5fefaabfcc4e17457db823239e8eeee7631a905ed47800ca10d26a93632e3a9d1b784b83f84168d0d649cfa2e6f5f1e68ab15a68e837cd5b6c699 SHA512 69e42825fce6a0a5d109979785daceacfd6afc5641e202fe83da32e2b1f968416557cce97fa014839e873e65f85c27494c8f8e20e6e9e4fbedf20d0291880410
+DIST serde_derive-1.0.182.crate 376750 BLAKE2B 56bff75add8bdcdc7d887eab1d4b0d7d8016a8e6069850e11b07319590aa42bc2fbd57ce69fc4866d62c56768ba236a0642dcae24efa67e2e67be8f9bb2161f5 SHA512 c523b31d92597dc2d80ff0efe491f78fc45663db1f5a86769f8e4d90738ee67c1d7a0f09ae8bd0a9cac2c59c88fe4373bb5e5285ed7227ed983a47aa0f0e6552
+DIST serde_derive-1.0.183.crate 377265 BLAKE2B 041dff0dd5822b3be992cc65c8d789c86f8dda3a42ac77dc1a6c44cad4412c8c9fbb02f7572cc1ec4e4ca731d5f57a765d30f9357827ecf8210ae7f54c26d8f7 SHA512 c19cd2c9665b88b70a12b972c5b30d9ac6c604c77578bda5d7c6c5dbe01f097c1d6d165f1d73c204768427042b7521f43e40ee295c173e685c9ab1b4c23c8fcb
+DIST serde_derive-1.0.193.crate 55692 BLAKE2B eeb2a2fbcd0daf5fee1bd6a4f584fed330db58cbd786073311d6a94308c63dfc6b7c2dfbc4b8980064ed66509f0127525b79d99aa96ca0134226fe21715999bb SHA512 05efb144aeee293a0e7dc7540106eb8c4920b2d8dfc25771d73afa8ffcba330104643430a6e396ea2adabbed4ccb23591251479b75449b9c8322799f91d38c41
+DIST serde_derive-1.0.197.crate 55771 BLAKE2B 73708908b6d1e104af4c63b498bd25c5a728e07e22afdf92f15754c0f17636efe44c0560c1f0df1b9a30708e8e8894a62f1ea57c234b6dd861cb9c8dc044eb4b SHA512 669376e248b76a5ee8b9c93fd9fe6d35372e7267fbabc14730539ef28a94e405ee5e9c2cc2846897d59d6153742cdc6799f9e2c87f20b9dad119bd3a86c28994
+DIST serde_json-1.0.104.crate 146130 BLAKE2B 62a613eba9c39bc3f007404995528ac101df3e74d90049e9aca699029f55ce4cee54a1bbfdd9e69cda9ab3e7ba9893fc66f3f9bbbc1eb358d570dd292ae77216 SHA512 06b2f3c818fa5819ff936d2f456fccded743ccc336359bfd1371aecebae9ca2d4f77879f61d1cda510b7a1aaa47b0010688b8e8c656388950e79fa5d007c7f6f
+DIST serde_json-1.0.108.crate 146476 BLAKE2B 9c0ceae5566a4e0ce7a6264939862f9dd920bb47d18acebb179798b036c376d97a4e9b0717092903ab90cfbf6fb73d37518e3cc25f3217af010296f5644de396 SHA512 7d8d1b74515388d99983ffbc5696cba022305cf4c797d3ff5d2959fc8fc8f4ce01cc4c9e7ccae7097b06b5acf5307027f6b7315df1fd8f58e681cc5968e79fb6
+DIST serde_json-1.0.114.crate 146986 BLAKE2B 229f0a8e2c0bc35435b49774fab9d4cec4e2323e85e2f97ccaa2a18277ecfb9cff9e9b165786e782cba043e9ac670717364b0f9c145254eefd74582b728f2186 SHA512 2c35cd0e29ee2af6046ce849b5854b82b90f402b51c04ea86b32ce7d67869736f17a4d028dd8245c31201036bcca7a1d3df11d842a92a45b0eaebd809687d436
+DIST serde_spanned-0.6.4.crate 7756 BLAKE2B 58b8bfa3b39368f4bec795bf1bf1b0e19554efa9cbf44a8f5deaef79c926c8cafb4eabd6230b56acd77c75b924b8642a141e3f7827a5fea16633edb764b54124 SHA512 10a71df5cf84abd5c658de0321a4813ce582735fa5cc349694d979acd8c8228fcf69b3c65bba803d706089b49b053c15a8b1c4fc4c19a586596b8cc58cc2ce04
+DIST serde_spanned-0.6.5.crate 8349 BLAKE2B f4f8f798ae3a02c0d5178aa12a94bd1bc08fef88b6a81d782ba07ba36fb0d89927ecf621087faf376b6e53de12f6a96e0880ce0cd01ecc31c5dab7dadc6f3ff4 SHA512 bffe2398629ae5a5a5bb6d5fc2fa0f4b94d02c96e25d1be2fb9ad95d8ca2fa9bfdeb3af11049ee9c050e497f3beca108f03020f88f6de29b208063c3898af354
+DIST sha2-0.10.8.crate 26357 BLAKE2B 1d01b381223a931dc631ad3a1191f5378b1d2f3f9f20474c5f020e366624c73b08330ce8dc4bdd3e63b15f647276f533de655b545b77f70fbedc1a1846f44f0a SHA512 3be73133a6b7690e14acaead47914dc92395dca4191fb657a2ea186fefd0ccd94d12a1121d63a26027d9a9c62b775c53202473edc461587b9dcd75472af77785
+DIST sharded-slab-0.1.7.crate 58227 BLAKE2B 9b4c4e4849ed324cf48c2b905f21139d1d65aa5ab13e7fb11817cac9a32ad09f8dbb1e50a93d40cafa0aba872792bc92f7bd2e219f62f80695409e949c07978b SHA512 3be7438d4a75debb14463477f34de6db1ac38abe958ada5d5dae7ae8d5993e245da69fcb989d91aaaffda5f2b085d4bcc88d10e07ec567b7f40a21437de6d4cb
+DIST shell-words-1.1.0.crate 9871 BLAKE2B 7923b36f0ba50c17ac4eebfdda34566b615291253b7b41879b3f64b3fc1325e63948d3d44801e40748b11ddd2ab201b81d238af2a2007c7a57d71f5dcd0667f6 SHA512 05c280a8e1f65b205746560a82e397689a3b5ec934219b558ece3a25efbfdefe903f9172319240e96039b38fb2c4be6e070805aedbdfd10344d9144b9c93de00
+DIST shlex-1.2.0.crate 6584 BLAKE2B ac07c648d9affe62512edab307fe07436dce69b428570ba6455aaf21c178145b1026e35704f920fc177b334cf190f57e393e4dd9e522dd26d133f80fb2c15f47 SHA512 cf48c0c47aac44654a48047fed3568c30f53f19cd131615cabbc247dbdf1eb1b7540b0d188f341251b4876dd0d5fcc13792800f0160f7907e8d8fe9a5e75083f
+DIST shlex-1.3.0.crate 18713 BLAKE2B 18800c364d3a628f1a3125097ea82fe6286550c2997235df0bf8483a3906aacabc81308cb239887d46ba2f457cc6f8acd5aca78316707eea5098cd5666aea67d SHA512 5c8cedbe666a14b8a0874defb9208146ce64579cde52ed483e4a794cac5dde6a24bf8d684404edff582f842e1fd4fa3fbeddbe074f191e4ec4aa517aa456fe8a
+DIST similar-2.3.0.crate 51082 BLAKE2B 47115ea6a8e10ca7b70dda65673f40350a82ab33928a2d875b37a486806f265c917715170de44100d1caa177cd9ae9453ae8b861bca82472851af0b62a91217a SHA512 d0b8fe77d03a94f9ca3b21bbc481c22055c16930931ef73240c1cccc6a47c5f8133b2921fa88aa290ef9257a9238afea8168f3b4a0d3e5b679cfbb9493c05b14
+DIST similar-2.4.0.crate 53147 BLAKE2B b30771e3c26300f9ad691566af22faf4592225de44dd55abb1231aa3641a32ca71c83fe9253dfcfb0c438b6f599c77358595fa03125d5f343cc617e99354dfbf SHA512 6c8f1cb194c165ff6ad64298d37deb6bab0abdd51921e29395e1c86268c65db1b4a67ac03ba37dbc69a0ea35c0f3770e894de7253f0e410be7bfc7845a45ce7a
+DIST siphasher-0.3.10.crate 9889 BLAKE2B e5dd6d265340b4c9e4266ab1ff3a20f1fb87fd493b2d7b5fba32d26421cc858b38929e4ab96941d0c055375b8acebbd04236d994cadca324500ed05064b9bfc9 SHA512 f90425a2cccc9575d377bb92a765d34653ddef1ac12b7c63dc6d700aaa74b525787e11609061c2d3e44ea56fe0e4b8f93f7b13f0279b5de2e0f710c5caffd4ce
+DIST smallvec-1.10.0.crate 31564 BLAKE2B e3e46a0781d3a7892a739b001592d462d0704f010363984c439e3fe4f75aecb9720648aa1e9bcc56bb3be848dd40cee578212439f78f07a807c9441c3c3e0147 SHA512 a09110184582dcc01d7a0d3fa8f74c17bf726935126d3654667b8e9c4bc43ad16ccfd8fa94feae7d9b31913aa7ee030fe5936e4b44a36302b6ce5fe37372a7ae
+DIST smallvec-1.11.0.crate 34680 BLAKE2B e54d56f6bbffbfa7ce5fe5f04e325b2e5cf19d290e4be278bc00a136e26284625b9c18c7c2b10b7fb8fad0ea7e3770f3cdbcfbaa913f5ac08d0a2f8b4e0de188 SHA512 41bfbecbc2c244497568a41724d65791ec3fd6d8057813d521367cca316c09c2b28fb3973826236b01c1f5d2f905d8d22b0c3c47f957a9ff5d7685591f15ccd7
+DIST smallvec-1.11.1.crate 34831 BLAKE2B bad85ddb1d3a1fcec0cb6aba413f90695e0aa0c16b2b231d6d15095bdd6de1731720ea2b394c3f9a444d6d4763bbf44cff389a01aef3488dc599d2ea63ddbc36 SHA512 d4ed45e8867366072e77f23ebe8b31be96be37e5beed30fc2b5ffea81ab04a2ad2aa34fb4f29724b02a5eb90f8b1d8c40b800ee915453947f90758ce999704b5
+DIST smallvec-1.11.2.crate 34801 BLAKE2B 58645e99db8f02db64d02c75860c7ea41836c427c03ee3b0b23365e73a406e4fd6ac312bf13fc5faef8bb6111c10fcfd5f839d5b3686e9b34d1626f8469fc327 SHA512 5cfb427c3b99b0dbd71f6154ed899abcde9d7d2992977ac7b2ef3a4c3ff51e4efafd133071a69609b4ed6cb269bdc26b79eb72e1988f10dfcaef8185d950cd1d
+DIST smallvec-1.13.1.crate 34952 BLAKE2B e0dcf1d26883564cd4f5d20a588562404e193075b1ae011f7f7542009a9466e5df3ade7768e1a8feb8806774b2cee5f15d31779928f83714e7d4b6ed46af9ab9 SHA512 1259ef947400470b8c9e74c5582dbc1a49753aa46420883c1f7d66f320f67bebe733a15a23cd57ba461020fad4ff337a5b298de82754602a78f5e6cec969652d
+DIST smawk-0.3.2.crate 13831 BLAKE2B 551ed3406db797765034e2ba53d5aa75eec57cce608097eaf0f1a94fd1df8aa8bd248087a8a3b037d844fc91773f74501686180802a6d75165f771ea1f20ba96 SHA512 39f3cab5a6eaaef6f4e7703a6840ce7a805f6175e02968090a58a12d3420f0a144533e5d6542f1e9ec0e36902046a180386548713ef6148064922ff837fa1602
+DIST snapbox-0.4.14.crate 40833 BLAKE2B 585c3c0926b25d60a437d884c740fe38c2fbe9602248c30a5ce2a7d415bd53213cd5225ce46d799f09e6c6cc45b5e021c72f97c38f0d9cf2cb965ac309d63cb5 SHA512 e9b31e9ced124b220350848df7a747e8be161d9cbae6160f967f789b5675ca4c8df472fd1b0e0d6fc22193b4b539264b390f36a4f981bb8920180dbe3608c12d
+DIST snapbox-0.5.7.crate 49447 BLAKE2B 9958ac5a7f5bfe3e3ff523c4774855b60ad94f8d0862cda693397333a8f9d0ca1000e7db01f8a0f55cf9bc88112c52087e3322c506f6cb23e726e3aabe997225 SHA512 d081815dc650b8ec1d565feaed21e88fbd006142bc7de8925d3936b9a80ba7c9e7f2c764f970780d7622107205d8f0414d82f1a7653254d7e1d128dee2913420
+DIST snapbox-macros-0.3.6.crate 6328 BLAKE2B 33dc3953c8ca50e43a75c717314bebaf75edc3463846577e2f2e4db3059b351e7498fdcc0cf6e06c233a927ac933a8de2aac49ff3ee8f2c7d11a462faa88269b SHA512 c1163e70342d0140ccad8a7c02065307ea23e585afa31985704d1eb2c06764e28d5f27b7b98e04698a92c7905606a7c85de9aefeadd1035b8e3a9adb7c9d9da7
+DIST snapbox-macros-0.3.8.crate 6328 BLAKE2B 217515d52debafcda4bbd3cca583c4e029758a54640d726c2c0230062cbbbf4c4b0e97a82fe56a2813a793f799879d8284c62b3cf985ae72e399db7556f317e1 SHA512 a0d4d923a5b64db9794b51c553e011af80ea7f86d797a4af8a81c7ac097808f42c00579225cecace46aea9e818d3b4fe00ebeddaae291c3a4bed61c77e6bbfe4
+DIST socks-0.3.4.crate 13172 BLAKE2B 02fa5e950aae0ae6fadb11f27c455da2ca3ce5db3b63f27ea720bb748e03652038a599c036941240edba0286b61a35699bef8db07716ada851c1077b0592b7dc SHA512 531ab43f277e2dfc6aaefcb584c5fdf910cba51cc5fee73256ef00dae714ace844251cb53ca090fd3e8258115cebbcf65843476913fadba8535cb44166294eb8
+DIST spin-0.9.8.crate 38958 BLAKE2B 8648bf2e48fc618758e3de67f0a493bf3cd22a8d18666164b0d850ed7c0d73650f7b0af783019dd361116bd60c61d24895cdd2c579383cd2700de0e32a23cdae SHA512 b15ad66ba9b308937f34ea166b799676fa45c67224e10cb57530fe33d2a8317ff3e3db3223a3249fa2862cc141c964d2130d3f39910a86ac5ef8aaf8ff4bc6ee
+DIST stacker-0.1.15.crate 14656 BLAKE2B 972e5872b402d0572686a617ad72af69a3a19406f41bfde3990949a86a4410594838b0a1e7929102bbd529dcf74fcf2413ae4f9d1cdb48d1c069b8cb4319c0b3 SHA512 536cf41f4dea57541941dc89c61e82af3008d0d847243238d622d2e64bff595ebbe077368de87b3844ed0f06ced6cf5b03100e07534f6f5dde7219994369c988
+DIST static_assertions-1.1.0.crate 18480 BLAKE2B 358dd5ac413d06f62da0388e2016c5fcb8ec68fd7dceb0dbbcb97665c032b7509b7e083c20701648b6a9174485f117c02682ae4bde7ef037e80a85cdf6a0c86e SHA512 46d0e35f77941dee6f60f574c130472248063dc38494c1c4f84f7c048244cc2a58a86fe17c0990e3f0f01406b75ed385a13d00058612b27cf0e867c8d31c92ee
+DIST strsim-0.10.0.crate 11355 BLAKE2B bcb25ad0a7284e24e4f17ebe0ccb621bdc4118e499b50b094d98aa7e8fcc0b96716c9953c3516ce7ea78309d41d424892ded595259696a5bbffdcb07802b5c2f SHA512 78b318532addfcf5c1ccc1e14539e258aab9d3cd893cc45d82342549bde838c177d90f13c560671f8f32929af47d0b467db35e6876bd7697d8b3f9e055aeeac1
+DIST subtle-2.5.0.crate 13909 BLAKE2B 660c3a472ca54c9843ce3feea74b802e27fd7f62dd37a30e2a4ba82e4b3a71df63562e8865d5fc675d31d0900998a8730503f91a61450884446a3bdd6af0041b SHA512 f150b1e2037554f8cd3213a54ddbc258f8f670cc4f39e7084cdea4b47538dbc58b834bc93b443d58a4b9087224efc003234042aaf366687dbd32b1e7174082a0
+DIST syn-1.0.102.crate 235699 BLAKE2B b29d1b0ab878eda45c486bce03e1b341eb2c69718201e662d81c131ead2bb5c5abffad848d9cd8d2e45a995dbb4d6a185173b5680973971e0c33bdd9fe43dfe8 SHA512 c9a2b2cf216c3d821decd488ebb49743f2f43940a879856e3a15d2352843c405e6f164c11225e904d18b32a5cd2bd7fcdfa74df40ec5567faeedffe5f523989c
+DIST syn-1.0.109.crate 237611 BLAKE2B e827445d00c79a8eeb91eacde472f1987addd6ce9e1df95d7abf6446a77ff4173a8006845f3ae71c1da47193cfb72e0ead9a6d6bad2573be12c17e90735d9ad9 SHA512 12816b9e8cf984024b2fbce9f0ae14cf94d4d2c06f08cc54fb793ce78770bb4cc1288eb7df0ba5e8e937756e1e8e295c53fe07a0c5dde1ea8ddba03b6203b37d
+DIST syn-2.0.28.crate 241635 BLAKE2B 5784468a0dd04eb298821ae5a3facf72c5fe5907cc469919b0a0b636bb55bd15e9e3a31c9ceb05b7b0f88e7a53e5891e6874641b61e5fde247a91361ae37047f SHA512 96e83979e70e2e1e46ca2af45d10fb259847d61e327809a51351a988282be9688a8c4942a284504674c8684970082dc15cd9ab9b3584bbfa68ac9716e071f9c5
+DIST syn-2.0.32.crate 242504 BLAKE2B 2c2938c0d711c684c9baf95538e2e76220418646590474b2b654d9242d2818aa7c3e5990208fe231ef64903df17edbbf6cc930e6224c964cad4eae5aeaeae781 SHA512 609f125f8138d17b1185760b1a63f3713079f5214fb56c23012229a56d10ac1c12654466c9ad1ecd6b2aff1126d125abfb0a42bd7f669635e5024b962b0cb0af
+DIST syn-2.0.39.crate 244129 BLAKE2B 2cff6626624d03f70f1662af45a8644c28a9f92e2dfe38999bef3ba4a4c1ce825ae598277e9cb7abd5585eebfb17b239effc8d0bbf1c6ac196499f0d288e5e01 SHA512 96cc347cfdb0f9ca0b6c7289279a1cad8fc401625783742292564f7ceca8237ced8d9a3f62069696f6132ed06092dff2baaf4be09ef53b21260d93785b0e27c3
+DIST syn-2.0.40.crate 245201 BLAKE2B 70876ef8e459f582d8045e46fbee7cc00088693d7d6feef1c07bd14dad3f6a555fa97762b8df018847bddbd2e9ad432a2640153adc6eb0e6d9bac821910c74c1 SHA512 27f9bda7df0549142ac0f732387182d5372f1a49facb2c5f20cfafd9b03afa0ed8c1e35b9b6f2659add33f01f00a2bee24de3b5709bb9238503e0064b791e612
+DIST syn-2.0.48.crate 250566 BLAKE2B e46b0863af76c3116c84d01b654a9820b7edc51f75c9c5301a7967d12284f78da602409f34fc40524728350dc6b998a4d738f08b8868f95236b3e5d24c460580 SHA512 926c0ad55cc743df20f9166b6d71fd44421aeb1f073fd86b6ddb53e13cd508b539c0360ce64b07b65597bb14639c8f33acf7e60951e1e9128624517aa3aee325
+DIST tar-0.4.40.crate 51844 BLAKE2B b51c771611c2c1bc6a36d25493dd775bcb5891a2e4a8ae918781abe66c0335a3da30c5e44281fa5282dace34c09754fd2df840c0d74e5b0b4624a519fd455a8b SHA512 90bde0dfca91b6c304d5bcd4c93c653c066b76592927f5ed3025752d6d0244c0d5786c44af99df94dd6cc7a417663205d86f406a3b60f7307ca3c1757239bc12
+DIST target-lexicon-0.12.11.crate 24594 BLAKE2B cf06720caecb5b5758f05c6375fa600da9260aac04017458060406a042dc578d51a2c5b6f189345d45dacea42ba01fbe46853d07f70d7b37cba17d87aa101f9a SHA512 f38701a8e9dd17b7db591b1b4c82c3b75d317e003262bb7b09b9cabd3afab5ab79c02a7dd524910b6941ada3a8f1378ea9e199b2b5938f8f01ee75bb0eae8718
+DIST target-lexicon-0.12.12.crate 25156 BLAKE2B f3803596c75f6c89438592a1176c3748fc2c0524d7d50a20056de1cd26d40c572b05bafcdf6dd702752864bea37c8b4f28f96dadc12a5b3bb1d279b25e489f85 SHA512 6147295c43ba1b7b087a3c5ab51534b2985e4e77e5e15687978cfb9d07e21c4fd9bc7191576d6cabd268d08a44dc733c4a957e59dba8b948c2055d8bb433aeca
+DIST target-lexicon-0.12.14.crate 25508 BLAKE2B 5ebb6b49e5c3b0057959557651287d4bf5ffe5b499340019ff64d5fc3b64e780e344982e358c94b1b25a20bf0f526a584aeecc704695b50a55cc268dd65edb97 SHA512 3410ecc0faf854f49c41c99f83972960e67065b1e0e78557a7c4996d996109bfd167d2121a019f5256f996c896cd45af032038ab7918fdcc6ee6311693ce951a
+DIST target-lexicon-0.12.7.crate 24402 BLAKE2B 3715b15649566b9f26fe02aad818325a43b54512008e4ea9fcda9ea15a87b8f4baf4ffd7343fc12456c97d8a6b1e121158c4cb61997de0e2d24d1bce93d86850 SHA512 0f3cdbd7515141315934b6ca61c5666f3bf60e259711f68ed3c33468e2bd400cedf824db7158a80fa07e78cc7ac2a0a1eed2df199352176148e9df34b06511a2
+DIST tempfile-3.8.1.crate 32164 BLAKE2B abccff7939df8cd223a5a8ee61e5af7c35335f1cd61b3e72fed9a8565465c293e99938d57b50743141aace3cd20422ad5d3090507ed66561cb0155771fe0a5ec SHA512 b257bfb70793575d59ec4cf4b7492aff83dafb68b367a48594211f476a3b1d4800b69bddc405d8749d8b320c30cbe71be1261a60b4bbc862663b37a6c7d97a3a
+DIST tempfile-3.9.0.crate 32182 BLAKE2B 4e802990988aff3ab5173bd96dbd906651a8df46b2619e6a500a3b9e7f4a3cd01dc7ee977791343f7875afdc4793a845000bb363d8c1a6599aeb6b1efcce5d56 SHA512 04e06c966bfa7a1567e7185ebd5c2876b96e46e36af14931bf0eba63795cd20d1c3427b6709a4cab2a68b8d289fdabd5537a50e5407a76e3a9fa0dcc7d3ce6d7
+DIST termcolor-1.4.0.crate 18765 BLAKE2B d7286fcc84843296e2edf074e316ee8fcceb018c08deda7f1048e38108bf1a7c5f6b90dd3150078c413322eda08a1c58300b4adb963d9f51f307ecd08b5b7e10 SHA512 36c8550fe85cb90c4fdd1a6e3f60b42b6c71f65b6128da97d5ad6aac8350d907410899ad4a47bb4dc72ea6d00bc69e5a1ccc80ee9b0e80a1a27912e233f3e416
+DIST termcolor-1.4.1.crate 18773 BLAKE2B 34676efbde8e242415857d6d40a287ae3459678d8222f5144faefb8c84d635686f640e79588d98635c8f25b7628ec6663a01b16e1e462705b5cba7e8b8e61f44 SHA512 b66aad157c4fa2985f764321d157dfb1f0325fd633811870db7919b5579bf7bc19fefe99e1c706cdfa67504c37dc2ca3d283e11d1bb516edcfaf1eb7747a778a
+DIST terminal_size-0.2.6.crate 10585 BLAKE2B 8696b9046c717eec8bf7246346af84a5d0cb740ac6e1335a4d8c20476628f4c0dd7c6106cde33513681466e9701d4b05d73f22a3bd2dfabc4d22045a69d31345 SHA512 95f38bc00f8c5e1a6913bb2a0a7c46d96e02a4f3234af1623ad3d7be41eae677e77f1b5d5d005d1e9d778fcc6c87196f67a51ab37caab5b4d299da79c85d06ed
+DIST terminal_size-0.3.0.crate 10096 BLAKE2B 097ef50a85945128dcfa36d8ea0fb15f11142c206462a32980dbbba4fe2872abd214823fe3c75e804f3159a97d6e929ec338860e9c89587da509fb9e6da5d339 SHA512 f3bc9144aa8a87556543584a2495df6267ce3bb017f3ed3d00fa43e89b5de783e1285ca62dbad9dd9c3b37e3a476a6f3ab0804eba2411cb594a569bbdb310681
+DIST textwrap-0.16.0.crate 53722 BLAKE2B 44140aa2dfd5076005749449a56e920418e71e34cb92f1d697eb3f3e7f6fe87b0a3861c8a4050a4a62e03187b6cadc4495e4200bee52ee183541431c73e47209 SHA512 97ae8acece5663e1a6b08b827179e96d5ad0ee67d635888cc3d83454b52cf48fce97eb0eba374ba4747834099c74f43d66d9fec868e84be45369a42c1aaec2c3
+DIST textwrap-0.16.1.crate 56012 BLAKE2B 9b5a7c76eca64d089f4fab7095f2d35624527ca223e53b03cc807c6bfe913a99b55197b973a3102e3e5c4055bcd6ab580a0c9d67657180b61435bd6eb7631211 SHA512 3a8d2036c8e4b88866d68b8066a2991756f6bd4ac5c726e63fdffbc894fbdc03bf8b6e0ece4b96684c8e1facb6413190768d51a8539094efe47977c120d31f1b
+DIST thiserror-1.0.44.crate 18760 BLAKE2B 4afb9d1cae98afff52c2e9cb67b8bd75815092f87d51ab5afcbf3366ee6ae8fde33c0bfab9458c9c452aee3b324894fddce327475ee754afb9b27794fcd9d279 SHA512 3a8e9346e69216510337e2c27e91e08e7a42a8b6b2abaa776df3937ad4dbfd857fcaff26e97d89965dcfb2003df1f1d1ff88eb239d334e62c806e8d637eb149e
+DIST thiserror-1.0.50.crate 19414 BLAKE2B a093f66ad191a8c4b15356f8d29578273b36f9f11b5843195eaa15b70bd4c8eaf6dffb631564386acf35a9ddf856e05055b419af52d4e008f582ae444f3dd5d2 SHA512 65605a9cfbc43447a50980739259a45d933f1eb315926dce909892f7162c79bd04bfcee7b38b5a9fa71b24fbe4416d050ae8e2443932577541513a23ebeeac46
+DIST thiserror-1.0.57.crate 20993 BLAKE2B 4eb90b8ee027e39102d6c030176db94510180f2bd2966503501ff89ca6b49afd61e6d9e1ebf18c08d374ff9de4e958dfcb3da8740fdfe31cceace5be456bfe4b SHA512 0ff7e48c3696f4f4c6af29f3142f0a7bb88a07b7a9877ec243e3ea15d89c48f1898b731311da5d4a7c88060628cae3eeea6a4eccf25bd851cb3075920cb1a936
+DIST thiserror-impl-1.0.44.crate 15086 BLAKE2B 664be3bca31bbcdd2bd8170e5e769d25e0a27c135067c84404d94bb51b5ef02daac76538898969281b0b0309c26b5ac4198e7bc819dec457dcec09e65530f75c SHA512 fe9211f50dc922b957ec3b9b5f132f812fc51fc68d23ad39837dfc174220dafb2b29d66822f34b05f1cd27cd473598d43e17979ccd9c70b056d509cd5c5c9ad7
+DIST thiserror-impl-1.0.50.crate 15357 BLAKE2B 41309507014a2c628b7e91d250335070e4cca6c6c452c90ee7e6173bed049df83ca197b37c16537cf15415550919c248e0f6c798aead760e7bbcd25eab701d50 SHA512 8555e010f94390e93ba757bce9ef25d066ed542f23b843db431a66fbab722584ea0ce6c9d4b6f4d92cea3d91c190336abd567c4a0aa4a27893db25720c5b89c9
+DIST thiserror-impl-1.0.57.crate 15639 BLAKE2B 2838235c5536fcb16d19382fe286850d6fb882b1d77ca4ade6a62e1d4727ef89f69cf0383cf330996f9e2303226d5fd709557331a45c9a91393db1788fbf4422 SHA512 a850806f09b232546d1e0df5e35cd961a8aa32f1d8ac3b24df360981da53b75325a46dc788c994042c95a5887fdc77234b9f6ee5851242f734a613e579548e3c
+DIST thread_local-1.1.7.crate 13585 BLAKE2B f497dbcdfaf7dbc8b4b0dd97f77ba93df15b63303e7894c9032c9822a5b8111e0a21db2fa8cfdce5a503f70959ac9cdf48c840b925bdd850dc15e8436ba72379 SHA512 3772452c2a349fb564d29bb06e13c8ae64807db27c3ee217fa04fd0e9847e94adeea582b82ffc2d9116f31ff478eb088550caf1346c263de49b55fa17b431c31
+DIST time-0.3.30.crate 120289 BLAKE2B 917b71ea8362ca14f2564706919e7e62ebd3e8024d48ebcd9ac9799368a12f425b982a7739a73c025155d5dd0650ef8c9fd4642c60a9111294cad7ac2e30672c SHA512 268f0c779e2a44431932aa407f39878ff1412e287f9678574537fe7185f12faf7605c5ef433aa6d364bf77894e819ff3953f870ef7ad208b7203f1c58eccc4e5
+DIST time-0.3.34.crate 118430 BLAKE2B 6d04a20596c9b0961ca104748d9d360f07b16059719d7410fdf1a7a0d5f2aa02aaebf640999464835964bbded2d3257d79c4b0ca3080fbecf13dd2d0aa6962fc SHA512 3997e1b8d9be2f54184ebc9e1355d4b65f0b7bc9439b2b29e4a4acd86ad3a3aa019261112a24d998d76a7f66b266a86536fa50412279911b14d4d7aa7078c116
+DIST time-core-0.1.2.crate 7191 BLAKE2B c477ad3410ff29f3bf4a38fc6ac4a043d49b6d2bdf5cf309ffcd2eec3bb6e4c4b62156ee7f069f0b37ea31c163bc75ccbf35abc1db2833cdd4912135e60ddfc9 SHA512 3861724c23cb806829a01186deb5217ae8252c20af622975264e6670cff528f42155039e4937756a9eb312a5580ffab07949437d5504d684a0e70755046cac52
+DIST time-macros-0.2.15.crate 23568 BLAKE2B ed16207f302e03095e726f0087f9f7c1514cd71b68a17ac804424c526349838171f3bda62d442b8429a89adb084cca1a4117828c3d66d20f2ff8272d7cb2d3a6 SHA512 d6da54996ab99a46b2b2cef83cec62eca2462490db439ba9814502f7d5ecc3018eb266b29453d601677a0ef39797da77a106d407e0e5de3b110ec1c5ae2f3c6b
+DIST time-macros-0.2.17.crate 24443 BLAKE2B 5045af9352961db0c97cae2f6ca3e8d2c4f89a129c7ac2ec1d8d20804292aa9f2901a61f910a564954614b68f39311bd381deeb66fed8bdac423227d077f3d14 SHA512 c81747f0b74e68d3b3f36d378ac5911dece8c6b511e5ac793807f854cc31c812b927d0df941f55ff90d3d67512d0ac6a5f63f2de4322c81b05da42f46b4a661c
+DIST tinyvec-1.6.0.crate 45991 BLAKE2B e9699d4d80a78978f0ebfd049f5b33d7f23d401cf4f4439ccb168e8c0e322473ad0ea7e2ff0ff69e9aac3e5c4c9ae5a7102185533bfbf96dbe77b3526e700bc9 SHA512 e5acaf353c58c60ae5556130a934f1048abb79cf6668ae467d308bac44b689d8a9997227ea879f4b5fe50f29cde8761801b088d7149bcd063b973056c381921c
+DIST tinyvec_macros-0.1.1.crate 5865 BLAKE2B 2bf4f68ca11dc19c72232951605a4c809b34ff38ee365ee4f592a3c41360e23c9330cfba961e2692a0ad568fef4aaaac51c40808d491178cf7a0c4b5a1c5d484 SHA512 10008c7b3a3d50c94b9c370015b76ee082f5dfb6dcacf014dc2f2dbe92f903618d10d0202b21f48fcf98a94ae76fb712db55a5e8ad353645d378cf0e6ec74f7e
+DIST toml-0.5.11.crate 54910 BLAKE2B 9ecd5103b33ab47d4be23c897c7095ca381cb79bedcaac4918cddc36fc7cf5d34ab664da52c2273d935f04486e9325241d6b66785d50aac78453c219aab49e1e SHA512 eddb82aeb8fdeb5436579292c6f7a64a90a2c7bb54070beb437bc7890b99795d0505faa8d6451a99e8bcf440f78db8a1b273a697c8ad44275cc4163a9ee49317
+DIST toml-0.8.10.crate 50667 BLAKE2B 815c850d4e2b8f107729c24ff82a6be81160649fff726f07a2c6e2af0283298fd5eadcc5811ba4ef20ce12914ecb43da79fa1840fea8d1572ca59f02f9e2c310 SHA512 24f3b44244d7e91ae50eaf20bde40c177352592aadd2dac697a831a5de9305ac1c93c8dc407579b9bbd8d9984fe34cfdc42c3243cd0057ad83db14bd899bb546
+DIST toml-0.8.8.crate 50451 BLAKE2B 96d5411e8806c9021409ce232a11fd6d81269ef2f56b2a64d7217c9af8d0b31258b8c650e2bce9ca1d561a5fc58d1e556493d06199842a4d81884085622ae3c9 SHA512 6a583ce29d8179b480d29ca5e4624a4d6a8212cc741cd0c27c88ce46526f664a2f32eafd322b648f145f5ee5024d522a126f56befab5f1d68c32f2fb9866c7e5
+DIST toml_datetime-0.6.5.crate 10910 BLAKE2B 93a21ab2784e96ee2e6b56c7b4f733f6ac4c68c1e7d7dac3fbd8aceedb3580e25b4a9c7d9c3f9b5ed152560353b3e80906e37824956dc4ea90bc6f039768f6cb SHA512 502bdedbcbd2ac9fbaa5f4b51f2e409af185f3633f01f8845de5e3b007f2400215ddeb82ac588bc915ed5a5f9d7251ccf93fe2a57cd40fca2927f4c0966357e6
+DIST toml_edit-0.20.7.crate 101056 BLAKE2B 76c8ba87b0acfe74fb225bb1f1ef92ccee3e58e0dff64025e8d0727710e1362ccfe2f6d4625d0f1de7c14db318857c0e24e87831a82ce514bcb21f84d77dfade SHA512 fb6ef6e495e18b5d6eb96eee5c2a39b5539a8cebbaa8b93c3995d1e14d1db26488200633c7368f67ff5f982ab20dce0977601314c643fb2671c3caaae8e584af
+DIST toml_edit-0.21.0.crate 101265 BLAKE2B 8cf4fcd93fdc99082c3c43e6629348b67c1e2bb4a3605ea119816b4b3c473bb3b9bf9baed8b189a0dda6d92ff5f08ec58e3cce19fe2667bcdb2ca3dee88d06ec SHA512 6889b7c3b6679db874b9ef099e3bfbce75b7f15cf47860e542af42d449d0795113bf7dc84a7f2d394ee0fe037d7f4c0857c3eeba6902a8b42bb9cbfc96f0f324
+DIST toml_edit-0.22.6.crate 103304 BLAKE2B 93f14ec5e0765673b4621216707605d7c2afef82d0ad9fe1e0c660be62fb65a59e91db3144c7bf04c71cf5848dc970447b3b31255125d3a2be94ababb3d82692 SHA512 9816338008f2727fd53d34164c0be16621b61e22ac4838752839af4bd09e4d361f319bbd188c5732c1af140358d73d645e05faf4d655eb295d6c331293b7f2d2
+DIST tracing-0.1.40.crate 79459 BLAKE2B 33693ee71564fe5925a63dca351e838dfd8612b4b1e49a33a70095e56ca63287c13c772661ace0e540d08c92942d7cbdc51ff2cce4f4b372164d9aa20ec05dee SHA512 5622188a45dddc0d6d3a8244a9b12db6221f4180944ce1019d18f4e613e4bd113dae5d45fb57dd0754f6e8e153b047cdf00c8f200782bb2b868bc2d423d99275
+DIST tracing-attributes-0.1.27.crate 32241 BLAKE2B a20af0f50a90dcd64e5318e55779142da294ba18d1cd40059a8aa964fd3c92834e03ee563e41caaeef71a30e3f027e5c8d167d90e2844da79e0774b267e179b4 SHA512 7dc59f4234c3bf3434fb352baed2b81db4e931eeb3ed207c4a204e480da734be40847b167b808058d2807b5583815625bcd5153e2bbe79804cfa6f069a74ffa0
+DIST tracing-core-0.1.32.crate 61221 BLAKE2B a7815c46af9852ce62498083103c6d359351f4d33609b4291330073b6abf4b63f5e1bb1a7dfed3bbf4d6913ad5217e96999416261af8a70609408a29109e4db6 SHA512 164f79cacfcca533a53b7dbbdc2015aaf851a16e00c72fbc4e5f515b6a6dedfa464e964810009b54f08cbcdc5a314e50245ac7b1b01a71fce4c63db135bf5521
+DIST tracing-log-0.1.4.crate 20640 BLAKE2B 7384a9b564e155248e668c8c3c24911bb437a880397735b89eeb31b09519a3d4fa76abefcfe6d2231972231d0336f42456f720c43ea84614d92052575607e7a8 SHA512 0706f5351cd940639a9a910c3b50099f742ed6880a503ad3c317d4ca318c3ddb54d04790badbf4ba0d968997a1490d2f325b99a842bdad5283006eb55674a998
+DIST tracing-log-0.2.0.crate 17561 BLAKE2B 701bdadd40f1343f3c4901bd8dd188f1dbc0afcdf50807bd0f6df7539635e239b5095696872103125a4d4cfec24af6336fce6f3931363dd5be4f53a09fa584f2 SHA512 0c1f060e8ffb9ff24cee7b85cc2d7d42c69b2f7623a7faecd7422b23b11ae8d5c7691e4635bae76861d444c369d9701ccb147904668023642b223e442e3c8285
+DIST tracing-serde-0.1.3.crate 7329 BLAKE2B 55d924fc3acfd496abca8b42bf3fa4a2511340cf2ebb060fb31bc0b5d81dcbbaa299daef3cddc3647625afd124b9c83efc1ef104f55dc6d4cd4d91e0e667c160 SHA512 3822ac747df404c33573ad2a5c722f9708066a72c2893dbf507563ef29bebcab79cec17515fa87c0fa64be8a08073c38ab57ccc463c74df8caf3df69c72e131b
+DIST tracing-subscriber-0.3.17.crate 191711 BLAKE2B f55c8e8c70ca67f57cb3c8a411519f317b9961620e3f7db3a3933d549cb64a5871624c21231bd6a0974c94ecaee2904d2304ac9fde3aa8463f0fcbf99f94b5f9 SHA512 53a2a760d833f729e042b4f76b56c93ff7c50ddba968dfa9294f24425fe9a3dfc6c3b95a526ebd78df852b48b76c85d2f4f7be9170d75a6eea8734f77218e727
+DIST tracing-subscriber-0.3.18.crate 196312 BLAKE2B bc2f04da63b0313d26073eb4a39b549ae37701e4dbf1fe06a2483279a03d9dde981f0efea6ceb5cd441ab313bfe7eaf812971c3ca60dfd4b5d9cf0d2eb7bacd4 SHA512 72f91855637aa476f03077d5f523cbc94989d40b12d7328167f88b081869ed096e6370450831f6cd5f0686cae5628f14eed4696c06a2ec75f56808b64445e0c1
+DIST trycmd-0.14.19.crate 33453 BLAKE2B 528663bd9cf8bad5fad6375c81acab18a8471860407505a85bdbf32f1fb2cea201eec6c1a051f8e63f0ff32507a17a5602b7c7c384290069539ad6cde0e16854 SHA512 6d6eae6bc1617a4ab5846716f6c1c800143c01e84f24df413bd7962e350f964976bf0583d399405dc6df638760e6fed3e418c1056239e9e39d00ea1355485672
+DIST trycmd-0.15.0.crate 33990 BLAKE2B a206f2adca22972ba59b348db7b62b4beba111c300a7faef80483c9458221b25d2f6dc0f63ae75b0f6fa896dfda6487065374a2312ae493b5b912c099b81639e SHA512 4b63bac98a5c609e17d7bb6cad6b052a512799fe3fb49e68e4e19bb0a031f0098356a6a72582c115de636681b6826ed277ab47547f28bef2da692560c0c95743
+DIST twox-hash-1.6.3.crate 21842 BLAKE2B 67c261b2b0a93293717a4e2e07dc11df2abde09da6fe713b9d04917ace73de1b59b8d4fd9449ab46cb7cf496fad1e440effdfa1fae6f5cae4ca78af8cd019c42 SHA512 f7ce63e6e5ca79ce9330caf40b32578a5d2088c5d8ed371604268760d6e212d447d9e3a95378378a283024155bccdaea47597902c488a94c5d5f79770baec8fc
+DIST typenum-1.17.0.crate 42849 BLAKE2B a6d1162050679e2c4ab2467f3a77d301f6861882eb7c9749f31d047f383dd5bd2ed5846ad63eed99ccc04d6ac36cc697a305861e1d65880b4d2ef04ee0a79b94 SHA512 99773d5d9f850c0602db4bb67dd062b0ade6f086e155216f1bb2fb6569461ba7e1b7c2f2af81ea8833bc3bfcf3fe5033edecb7c438adae63f59d3e30cf63a508
+DIST unicase-2.6.0.crate 23478 BLAKE2B 6e580108ac81b1cbee70e5bd331f43b12f266dae4f4f758bb8f5f073bd1af61943ee0de34cc27769525b19da8c24f8dea4941d0f5454594ab0cc8b78071ff053 SHA512 7e76a5f344e32c56cf87223585d87a56c79627b52bba0b29eb6de82de874b2964accededa8e9b5741f57944b6750fba5c61e679a50d4fd5a5646f431e2f4f188
+DIST unicase-2.7.0.crate 23783 BLAKE2B 2b74b932b45c9d5b984b57bfe8249496c192944e2e66916919177eac81c509e2d7a5d30a85ea58e8cd5a0b47fec746bdb18723f3f14002fc64af3a0d320a9e7d SHA512 c2b05a3bbd8996e1cf65d7458f5ad95de9797c8349484f8db04967bde15c1f057f62b2f7a60e7367871512071ed5076c0da042169dbbdcaf4d6c16cae62da828
+DIST unicode-bidi-0.3.13.crate 44477 BLAKE2B 90d80e7c57e93aa9aaa83e7c3c1a93bb6e4d51047803e61ed3f7c80361987947b2029a2b679bd301e8a0766ee8ea7f080e9b9b6ebcbb4354e19813a0f7da2abc SHA512 fb094fcfd907d90fa7232432aca0143209446e4c5c73d8a0fe6d2dc44b9dbb5b8b926c59b5e3f9a5a0a36f91c04613509b6e430c9c4adf526e7445e6e8d7a3d9
+DIST unicode-bidi-0.3.15.crate 56811 BLAKE2B 1f1d372c86ec7444f13eb32baf13dfc8699b52156b265a2b53f40c0d771064876405451120fe54739a2679e6991caaf4f63e0644f03729cab814079fef4868c8 SHA512 7a21d5eb05ea8d691dfd54ce4cf7d3693d08067f7a88ef17b8c3044634f46411176b1bde1516c442577910b254007b247f5e40f9932eb601cd96cd574f9d9db8
+DIST unicode-ident-1.0.11.crate 42067 BLAKE2B 3c7cac3d2bf1cbf1cf04716a482f130123e8e6940f7a90a17bc62fca44ac0069688165538f5329b95a72f735b594cfb85e3250738393ffd1b53cb0cd95077d89 SHA512 9682bbee339fb987c9d0bb6a54406d37b28b5c3587372d406402e4341900fec97e3234cd03b5c98b90b6378fd533dc452cac3de90d3ade19c4b09657e4abf6df
+DIST unicode-ident-1.0.12.crate 42168 BLAKE2B 4cede03c08758ccd6bf53a0d0057d7542dfdd0c93d342e89f3b90460be85518a9fd24958d8b1da2b5a09b5ddbee8a4263982194158e171c2bba3e394d88d6dac SHA512 bc1824e1e4452a40732fc69874d7e1a66f7803717a314790dcf48867eba34bc9441331ef031e386912e52c385645c25b6ed39d4f149973b5b97371b1b96b1920
+DIST unicode-ident-1.0.5.crate 35455 BLAKE2B 7e14ce97ac53a88ccec015dea690918a673dc5b49e44de7fdcb5421871da35c4f514c6db9a363d6f4bfcf2e9a61a50a593d345d0b6f388ea882b17a00cd0335d SHA512 d355370daac356d900cd4c0a792d6c0eff114524c4bffce4d7e74469fe2117883ee00bf0e27d950b72e88739473f2045d5f83440a0aedfede97b4d9163b64a6c
+DIST unicode-linebreak-0.1.5.crate 15324 BLAKE2B dc560d5b36ed01357c22750feb7f09fd0f57fb0ea543180f6e31c0b71b51df4faaa70ac8482f9cd60e5d1faa5bfd4bebfbfd628dd5913c2c4a858ec04beeca3f SHA512 f37be2f7b04b886e95bb7d0f33bd392b78bb940ef9a01cec487062cf31ec0367306650fad7004df556887a324c714eeb28f697044aad9a429ce07b7b7344af60
+DIST unicode-normalization-0.1.22.crate 122604 BLAKE2B 3f3430b279cc0ce1595392c869442ce676ab097154c688779ebcf726e10c497df59be2cd7bb2f84f99499a9df0654760a10ac92224c17d74775aeebe291241e1 SHA512 a5810d5e9cd93dbb80e013997aa9d38e60834619483a6623eb2859ec5d59a5aec3fc4db123dc7f4e2fe9f2b8799cf6af48bdff22d69a00a23707240e8bf3bb3c
+DIST unicode-width-0.1.11.crate 19187 BLAKE2B 6baf7f3b32eb838925e591792abfe11968206d177facefb89ef51daf44c18f3fef1e41c19a47b88b81be50667af626af2024ccc540b240fb6e1d83fdea57076f SHA512 ee06f4144525424327a17578642565f396802f0eea539b3bebc8d9627376a8bc6c5376d83a6ee577068e99fe75815bd765e6d49fb9ab9b253d00594bb15a5ffe
+DIST unicode-xid-0.2.4.crate 15352 BLAKE2B 80c327b39f3b8f2cdb5747cde968cfa1efe7b65b6bee9136adc881fa19f66aa5b1010d9d08de55a61b322d665b5b0cb0395e9ac471f6333c40d8dca5d97e123c SHA512 e67bd1258e1961807d9d5fe583a89ab5b82b2a529ecd32cadfc79aa5331380eb4a2db9fd96b74c8eace47f2f29021587d69bcdbf79f7e2650e92a25f7839d03c
+DIST uniffi-0.25.0.crate 4244 BLAKE2B a3dc2878a8c6fd0d153a8e27695ea88f453edbbf9c2b3a9831a926e911031632f617451a7aa76a01716ea89bb7af619dbb4ecbc71be9537109e66335d5560b52 SHA512 bdff06b8c89a97d97b504681e30a45387a50a5732577a2240820858ffe0088d88b9e6c76008eb290af52a88f9be28230f4e7abdd8150edaa1976989f57d5821d
+DIST uniffi-0.26.1.crate 6042 BLAKE2B 2a54b48da541be31a1c26e20191da1e3af8219be97094757adf356e9a308d223fa57c20ab8e6b7062203e9482b84ef22e6a2c4577ac8a35b247c99d7d73a91e8 SHA512 d668f4a8a992ff99d7272fa6993c606ae9ef1ef873741db1c92d30d4a7e26b0096c60500330e784bfa68ed104598b4e4e5a64c88b0b72b74929607dbb4922481
+DIST uniffi_bindgen-0.25.0.crate 130448 BLAKE2B 3ba2b9db922fcd5b1f75cc012056610a87527189dbec508903160fc4624e08fdf0ddff88a99d9f5980ad2041de5e4b7ba9ca00e47d8995d9298b3cf4a4e0316c SHA512 df9c6defe7edb320a25c446a57409fd32531ab693b2401f9efdba3d28ae93dc1e6c86ba71abcf74618ea74acafc1f9c1c9e0a978ab7733c05edf8cd792db861d
+DIST uniffi_bindgen-0.26.1.crate 136172 BLAKE2B af3f086f2ba42e20b7bba21008374f22b344a847274edd5bb2238580ab269bd2243ba1292b1a578ae0511d5005bbb803b56a95b05f1c785a6d00cc4840a47dc8 SHA512 76078ee3c75f8ed2b97954f4e19302928cfbf6c6c4e5a5bc3aab4bc7bee9be28b83b250903ba7d7012aeacd6d02cf4e2d922357853d3715cba5a7f8208062bc4
+DIST uniffi_build-0.25.0.crate 2037 BLAKE2B acac297035d3fd56c4c7ef021290b06feb24c146d53ac69ba63918d2d00ea63ac6593dab4370fcdc508d901d94fc395d1cde5495e8e556be1a51f8d20f12cd27 SHA512 8ba8444f0112b939a56a9826e167ba66d49ec40fdb2763d32f8a3e1eb38539a91a8298f9a66b36e79990afc5a1f5009b488d2f229785bee9edfced6315fed328
+DIST uniffi_build-0.26.1.crate 3883 BLAKE2B f1a31f8aaedd7b194f8aa08f7c633b8c58ed668509226a17051968f826e5bf426aaede99641457b318691380ce33026f01639313e575e3b2bc58402ee2416397 SHA512 c9b0c3cc1b036c5f21ab1c215b19bc35e202c016ad34e432c5acb9cf4388da305f67d5da6f86fa3d278285c97cdaac594ad296751f0a6a8f712aab9168994596
+DIST uniffi_checksum_derive-0.25.0.crate 2396 BLAKE2B 95d35b5dc830c0e1aa71faa035edd1372562817daabd7564edcaad1428fca5558f887c9453fad51bb66be4e9b19994a4661dd89131fff2e555bbba1cbb301db4 SHA512 060c8bad8d34008abd5cf570c4c4e7a1bcc003a4cb22e3cade1f6ef64ea9d053d709d4847f5e699f6c16a0ca4ae5c7d27f6ccd8bf59d6b5dc39e72fc5630b916
+DIST uniffi_checksum_derive-0.26.1.crate 4305 BLAKE2B 21fe2cd7672425934e690480371ea5553296eac72b42fac06673de9c426383d4386c419ecb5210a7addea8505c18087753ee10c6ae5ac86ff5c59b8a7fc5ab65 SHA512 fe08a52ccd9aa79ee51dfd2d816a751859b76914ba2fbed74f61e0113260e730c98672a8a429d8056eaf6aa3b21e3ccc83769b96ebf48a40497a07e20b1d737b
+DIST uniffi_core-0.25.0.crate 40850 BLAKE2B 229cc7f99adb2d4f42b462d6451fa5b8c0f863c09e02c3d1a56ee54c547c8d703642318b5c7da7b6eeec45d2ed6a8ff9a15637d043274f07be3b7b38bccb1002 SHA512 e3231d9f7b014eaff1ff9fdcc91b7f7c417b3712718310f321bea0301507746699cad32444fe5f5ebb01f2d82f5ba5389ff567789ecbfa4b959e36df1517929f
+DIST uniffi_core-0.26.1.crate 37698 BLAKE2B 7f15c62317f6e3efebb671b277db37545bf915afd9569b9d73f534a687dd4b697d6d3ba2e91e42e5f958da6f2f814cd1f87ca41c5b87795dbcee49db42e593db SHA512 42114ca9b93d8604cc1fc8c166db2d08dbb66f8e86556fb1bc4623a97a7071c1615d2a707924eb83beac79afd59d1acdf98f6fdc087a25ad12801a9a894c513a
+DIST uniffi_macros-0.25.0.crate 27745 BLAKE2B 0a96523f794b4c369f7bf7e766c8ee2e28d8b5facb415fc409a85a397d5c9a81409580067821974f27f80d24c4641af70dbdbb9a02accf53ff54c088357a5a3a SHA512 0602d1d6c53d1034f6f50c1160757b6c9fff46589dd0ca9e0f0ddb158c8ab90bb7e05b118b106875f0101858df110dc2ff5e511a5f392ec2874c87fb642b25f0
+DIST uniffi_macros-0.26.1.crate 32582 BLAKE2B c9687b4ec67bf47900ca7ed1bad2d0b289f17dba8800e9f0685067b4692ac564d7e6d3162a409c4f0818b2ae9b16f8ff1495b71114caf9615d374000ca19647f SHA512 0c781a4c7b668492f29eeeea4c56824b556e3079ea6dbce10d7027bd923a68e38adde32ef77a1c7e7817d63bdd355cc74a434c162659fee951d11c45d0da40ab
+DIST uniffi_meta-0.25.0.crate 11780 BLAKE2B 09353a27a7af801e8a45cdb338fdb4e6b0cc8f05619b387dd23f15edb62ac22eeec3fb622296b67c67547e7e893215432d069997396adb208108922c9fbc2b00 SHA512 285ceabf6c24a380382ad4e232b1f3f18c0afdd2f5aecdce821820282d414d760bfb2d708772bbb5167013825f23ce6c999e9b979f9ba04226033cb22532581a
+DIST uniffi_meta-0.26.1.crate 13951 BLAKE2B 77697d457be106c98616d197f1df318587fcb840fda184740753d913cbb578a5d565400d26369d190c03dcfeba8efdd0bcb23749a2a95ed6b5edc14a0e73c851 SHA512 ecf5616d93e9429ca60fa55d504df9dff4449e4c993029f94ff3e6f52c04b92ea9d29d18c2c1f02055c31ace8c9cc906b9c3d97100e7f6e629d8309a766e1e71
+DIST uniffi_testing-0.25.0.crate 3508 BLAKE2B 72f238af8c8144e79b70f09441e8ee3e3bea8796cb77fa6e78ef3f849b46d4a2089ea922a36c8d586d76779c3c5488978f40164377edb3bfd644313221ab1953 SHA512 b987104a54ef5e2d9b2e1f7cbb6d338213a1e4c26157355907396f802b254088b7584f5a53e710df0f2d5c7cdba3e6f08f0467facaac7265b7f096de38cf8ef7
+DIST uniffi_testing-0.26.1.crate 3511 BLAKE2B df82a0adf8d9e3f69ec4727919377810f4d1a7b141a31a2d10318ed2d663f167a0cbae1be6045c9236af1932c8c4f1f606be474b1c374b231133f819f4c02382 SHA512 286df9fd4ef26ef585904f655eb08359af10935cbc2801ac4d71dba67aa96522ccc8af31d3f8f8523a8aa90fa7dc2880b5a3d8d23690bcbf05c5c2b503101bce
+DIST uniffi_udl-0.25.0.crate 18373 BLAKE2B ab06df1f4848d3b8b2783a16291352b3debf01fd0ca22cf53d71a693830eea3124fdfbd1314ba7010193ba38d31fad186a651eae21edef88f5050b703cae1599 SHA512 677195e8f268d2a4fde39518d51a79194e23bd08e279362e1049fd5981c3a56781d499cd7b49a7cc9d72a494c8536674d0ab6c5a11d129ae3e679612e7ac2d61
+DIST uniffi_udl-0.26.1.crate 21484 BLAKE2B 3c7626b4a36655f44986482a2bf5c1867295e5062e9acad3fa42adee923dffe4d7b73fa64e8c2883a03584449e113e0cb5b6436cdecf0d95be87aab60bb7ecc9 SHA512 9d2cb50a5ed1fb69afe963aa7bf6467757e699af53cea9fd725a405611def330490793c87e467377cde3db4be3c3752e3d8e7b75ca0e474e8e2035056fa526ff
+DIST unindent-0.1.10.crate 7703 BLAKE2B 75458d7f21ded1eca4bb3f7f55b2fa73bf92b2309316eca1b2ffaa0c9f8d7cd8c7851b96688f6597f4af6973f70e9053c2708c1228fa6a9784e41c778488c4b7 SHA512 46ff1a2c042972af2fe5958677b2fa5adf3b9edbb168bd66cc93baf9d1b128f583d9502b83f174b35866343b57a57c8a91a465eab267dddae919af24095bf6bd
+DIST unindent-0.1.11.crate 7700 BLAKE2B d4d1dde410c4194acb51f74f374cf11fa872e49fad8f5f24b596d72476403e5e312fedf7b0bcb1027384d53c8de565368d63c30eaf70a6e6cd958b82e5288ca3 SHA512 f800d6c37fe72477908c91457a738a73d2b8085bb5ae303d6d954405d6ccd98833b5da16a12c3ad1ab75d32a68dedc706dfaacc0fcbb95571dd829cdc03a356a
+DIST unindent-0.2.3.crate 7306 BLAKE2B a57407b117e99c230750c7d4a2a0899586c8271e4ba88ecb409c976905c014f42885372c234a75fbfbedf71dbed779f95f735975d150adacdcb61152a49db4c2 SHA512 2f1eb420ea3653b00d3e5fa0c2c105da8fd8a37cb3e699373c168604b799fccd5f0faf0cddce4212d119c2afb0c86b41efc3a50752b83ff7beda2bd84d360505
+DIST unscanny-0.1.0.crate 10338 BLAKE2B fd725928107d4d2ed2686709335ef01136bcd54d34180189906b7c2436e3f77496328484c623dec4920738f4a07e92be7e7581387c4f5b6996fa34c03efd7b0f SHA512 8267e327e4e852d627d416d58ebad5ba937ab6a2477b265fd5f79a98d43ade2d1780e67696b801cae8a4af10da8f7c0c257d2c878289eb6cf7e711dcf357d87c
+DIST untrusted-0.9.0.crate 14447 BLAKE2B 8e9c3ae09435af0885bc4a6e3c8943805b48cfc00bdae228c7c43093254e1be15d7005d1026561ff369ec37865d8458203f421a9c89ae3db077f655449621aed SHA512 5929e4079c1c2ff933ae8d8f59a2ecc7a424e71a20d1b8821f75925af68bdf82604b024c008e5464b02e25ff093e561a352b685e755b3d0b27e4c30254689416
+DIST ureq-2.9.1.crate 114348 BLAKE2B d605db0134ead8a77c9b9fc8b06573e82d701ded485f0d88bcd64f6ea1a5232d67bcab47d0b430bb13c79ce249304ecbb7f67d4a3c789f451b9639ada5b3f0a4 SHA512 a8c580f624300e6e1d068814c38719f3624ed63274bc0c4fe06d6ea30023b3e79ad3241fed2ed9f008a8040b49fd2d2271fb0221db1e657369f37060251e3eb6
+DIST ureq-2.9.6.crate 113677 BLAKE2B a795b9a3b0985daf2bb27e489b32387693bbcaf32a126b083d584693a921c8b3dc900987846209497d468b655d30c9b364112905cbad870c6758aec28a5c3268 SHA512 c2c860006e33146589107aa191552530749c143ab93a60ff3fa959dd53bbd03c48d7f4b410ecc4c92c28c2b483ec3c2c720373a6ee54ef8f9c31b069da205f9e
+DIST url-2.5.0.crate 78605 BLAKE2B f3fec3477248cbbe67866577eebb03f517c284a5e5cb783132b11ef3ad156a03524f4730f188d822dec85169d7474e265099296d6bdd4adf5ffaa0a118821617 SHA512 4aedbc48b85bcc2853189f5fe8265a01c76516b5507f4e958d8d0b860fe2590c69c95f0f4b9fd6fac9b8d5911bcb0a5e9ab7f8e8b600f37a12db1438976ee5c3
+DIST urlencoding-2.1.3.crate 6538 BLAKE2B 65777b0990aa6b3d27a47f36114da8622026ac8946b5ffb6e04172b666ec7244a55c250a7fb626472bb2b636eb32ee945599cee5ce7351c3cef2322366db15ff SHA512 035848d9243ed6a4528377b56edd7f8bcb5f824381b420dc8f5c4bfc3f1246655c54eaa7de0e4aaa7138e0b08fd796b9ace140ab919aed2d94f6952b577386ac
+DIST utf8parse-0.2.1.crate 13435 BLAKE2B a1c111d7ffc60690f2aaa86f034c66ba1abe4e126f1774a4377d41eba3269369862f57515af387ea785d69a8adf46338b5e53761b5ee6f4f4380473f4d9cab0a SHA512 51fba8f1e7eb74b7020fd831e30a67fc8353ac2ee07335c8c3374a5570ac8117f165f6905d4b7f0360095b7b5ed3e739001d02a8cc3c89195baf2cd679136050
+DIST uuid-1.6.1.crate 55554 BLAKE2B f9b8eb34f9197734ae9a1437ded396f5e5a8551b54e532053016e0c00c8007644f4fbbd3827c9878cdbf8acaa981d8ae9c94739af7edb6939ec299075ee4b443 SHA512 b9f3dbad176b3640b4b943d127ac8fcd0938e7bc750430626cc603efdcf5faf479f8de7940d64ed1b5b6e6378b42a1aaf3c1e791ee59b9db9394409261cf3c55
+DIST uuid-1.7.0.crate 42627 BLAKE2B 493f6a3a643d3493a2bd7e0e92a1ccfb7bd722e3a1fc8deb7df0ddc875a822daead1cdd35dc3ac6f26346844100a671318d71e5ad760c9587471d4f05bbb0c69 SHA512 2ea704d082b725d98717d772e1af84fe743929ee32658ebeb111c6fa2395ff5f44558b7e375087617f91c6f7bc242f2db96e80a631071722de6fe15af845e856
+DIST valuable-0.1.0.crate 27718 BLAKE2B ef5ded994c9a6dd302bed27f0d757447b0c86dfefa499c1ef0d25c3a6745ce61cfa2c926826534c9f605f9b89b4a19f91f06f94ae7c03f1ddc4c58fab3ae58bb SHA512 a97f65db1f1c5049a276dbb0e45e25c6fc6ce9d27ac1fcd77c945324cd8216ef60344065c79799ca04e338455e4f7422c44078eea32d5fc359dd0211ee7eb387
+DIST vcpkg-0.2.15.crate 228735 BLAKE2B 6b6bacd9a7fa38919241f45a97f58cae957e58d3aac99df208a26aa718e4f1644f4ccefa31b09151e5c1952288e0e5837c363918b98c7f55079a948a952c1c50 SHA512 7322a21e8811b2fe4e79e09dc321458068ecdf1953f05d36233f3278ecc0b1dfc64194db7010dd46fcf692285f42475beb090c6c6cac0c8f9fe0eb5c770e3172
+DIST version_check-0.9.4.crate 14895 BLAKE2B fa1fa4008af165bfc1fdbe560488afd9d232cfafee94104fbcc4cbc52f234849bff9ddfa88109a1ac682f6d9c1d86b0459893d223f64e65adc08966aaf93dc89 SHA512 b172dc9a3759a4a683ffc39b9a40b03b9974b626a088217de87090466cef695226557c226cf3e469b2b25ee7297b7eb0d7719878cab42457f80146a81943c0c8
+DIST versions-5.0.1.crate 15850 BLAKE2B bad495d74d67d1dc60e2b3d62ed765ade0dae63e99a10b9f28c456deea555ff20e2a28ab28730ee5150266757da54cb3f237506ccdf4ca960f2c89a8a8035e1c SHA512 2b2c4b60b53b7b4e6f69a36a798f74353fe75b952dad5d3fc3f83ac353ad5545332f34d81cb43fef48020dd6e8e0ff4c0fd8b69e262d67ba38e80c1311fff5ab
+DIST wait-timeout-0.2.0.crate 12441 BLAKE2B a99d3f57bc6e784ac06167f98b2dc2841f730dfab4fb9772b15e67707f756d6ba7daeb3e992d32291bed3daa85eaa8a8ddde64db5e1acf1cc4031fc9bdc82212 SHA512 db3b7aa2acfd44e64451042b8ba98eecab77a82aa5c58ed08dadb119ab36dee4e26d62baad7978ed56d5ad03019c96be5021455362290f56043981137bac8066
+DIST walkdir-2.4.0.crate 23550 BLAKE2B b4298c01cb38be0479b7ddfee627af01f889b6b6ff432e368bb67f65134c3958a4fe271a5a7dd61b19259ae88f5680e5ce8e12e50a872b05fcba68f59b7073ec SHA512 09e1bc852c01b452c95b26a369831a97bc5c9e0ada3111c73774570dd73bb5b9e4735317d5572304fb48dca44ce7b9f77bbd17c418b6b047b2ab17b8bb42d9d9
+DIST wasi-0.11.0+wasi-snapshot-preview1.crate 28131 BLAKE2B fe501889f25d65e2d032f885cc50c4f8bf7dd70fd5cbc438de349838370d8699e9627b0a4fc76030ea9fe6d508f41d0c9928a875fdbc47e73bfb17241cf7b155 SHA512 043500ab28cd9cb779475255da5d109ebab7fccca72b64873dc28d77bc5a157ba8d96b9e8f05223b5b36c7089bb7b4ba87657fc69bac16b78972f897294a865f
+DIST webpki-roots-0.25.3.crate 251565 BLAKE2B dad09323767a29df528fea7fbf58f4f7e4e2c01ad86672b3236774122fdca97279a11aa5e96abbb6405348ed383504bebc5fb654ef84f50ec819a52803380faf SHA512 53770d6b4f7c0f25de31d9658261c1fed57e0ff9c3246a39f257646bec088b0f9a6975fd5505c0fac52dee3eb00df8291c3d5a5aef86899442f5626b5cd8478a
+DIST webpki-roots-0.26.0.crate 251778 BLAKE2B ca16fd806c1904a91aa0a3758c0cc96600877c3ed50680f57d85b3fd6b0336b02a70c1e582bc05ea768519bb1459bf642f99ba660ad41e1c9289fda45dafa1c2 SHA512 56b21f5be94d9e34b50f01a4baa647f3d2ecd60a61b8a97edb45d625d0393a4460bcde29b889bdb52c3f44bf3f25ee875730e133c21a65fea68b1b3d106d0a77
+DIST weedle2-4.0.0.crate 17394 BLAKE2B 408f9d0ba07c02bfce7a0403607ff803878ede4d61d7b9114cb51a1140539350bd4f7287d22266ab4771b2c551a188bc7c37c332667f90485889a1dcb831be32 SHA512 ed0cb9328a8f653e22c33dc7f62c135a9bad4deb598769b6c4c5afe1bc059df5d1ac95aa2d21481d56d9a75e3bdc9d46f4467c410a4c9818ff3694cee913cafc
+DIST weedle2-5.0.0.crate 17777 BLAKE2B f31cf97f698008ac978a93dbd746c9094bd726bf976a9a68d6702c31b11d5cd3dce148d4cda1a5dbbc0ffce3c3704444e81e691880347021a575530142e1aa1a SHA512 29d722cd3d210dcfdaecc4f430cb115ec3a73cccfb860c98f784b4ef91b07bb33ebc02a7a31f67fb13c9bfff836cf85f183a5f24fb60d963607738c386fbc4c0
+DIST which-5.0.0.crate 16635 BLAKE2B 5319f2effea2b86ed865be31efbb66035670cb80245f212268a9d3b4798b97fb658ef02b4db3ba85aaf82007e0498e98f35f67128bd9a6796accbbb37161fadd SHA512 cf2b6ec2f156f4d6af0bdb8b468965784000158bc7ab8f76fa1b1d7a1a2c732a7392c8ea09d3cc79259411e3ed7ed2d448a6aa94fe7c2fae077186086b0f826a
+DIST which-6.0.0.crate 16751 BLAKE2B f681600f2e2af626273e4b189d43dee9ca5c09f1808870c49aa0974d56ea1f944e83a0078656ef519d6c172c0b22a56f5d0adba21ef640afb2665bf9b58a0d54 SHA512 f0da2731701a33a07704672490e53e3b1476f3b06856e7b9e00aecf92dde5b6ae13199780ffe202a19205cc61ba1eeacd519f6a132307d8d2d07d0577cb73b50
+DIST wild-2.2.0.crate 8067 BLAKE2B 628902dd8c2d252397bb0677b59295f37ab088df79cbc92c32d3a17023535d9c192b49bffe23c74a49145e0e3c57cbb84c0db7d41923adc204b291d19d9f3272 SHA512 12a3484f372b5979715d56afdadc6d9b152ee75c1961fd0352f5cfb500691b526d4fc32bee32af7548cb7e6bb20288a5eae710a473bde9d2065fcbfc3f8de851
+DIST wild-2.2.1.crate 8080 BLAKE2B 489a2a625aa8091fdef9f4d49747db7816d82c01384672bd12ff9e4c906f3418fa5a5fa8951b625f6d22a9c1977c523f1b54d7c4252c241413ef6f63d327cb29 SHA512 8f92b83cb2568fed7841ad372111138d9ea5806c21a0affaecc639f0556ab879ca42fe205fe3c1e55a1b5c1c4fb0b705a5566b06bad5c119a1d41df9c01ed2c9
+DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
+DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
+DIST winapi-util-0.1.6.crate 12234 BLAKE2B b8db8ec9d7ada5532a22a2d070320174c32ece1f48890e9b028708e194fe72a04287b11910dc2ddc7f9c9674a9d8d39449b3e100725e1f59e59e3047a7e3650b SHA512 b1c949f9bcd34c1949a9d3a7bde6ce62fcf3d2cb66df60af41fe67a9d1acb24e571cdd5ac721be9f1ee4b3af5ef5149b5724ad6e02b558e124ef2a4412d12db9
+DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
+DIST windows-0.48.0.crate 11864177 BLAKE2B 39c0e4f058f68a829ee08721818a0b04287af20dfe6e03a125b75566b4c8a58b56557d685600f1f9c215811154f9782f12368d42848445d54dcf9bfd6471349d SHA512 7c906f885fa0a730f1cb1ef4e62f5b602a49d44343febe1d38fcd4cbc28e0342766983796042585fe457aa229333558715b6270e378946faa8f398a7ecc2af8c
+DIST windows-sys-0.36.1.crate 3347053 BLAKE2B 818f7812bd9a55a4e95b3d461fa5fcc14569a159882f950d20fd5a6b7d2a2841f082c0bccaab657f5830549e6286a37d9f8fdf825a42403f543b51e35b2d20d4 SHA512 80973e461bef3be0d0d0c13d02b2129aeb0d0700768d637544315654126f101b39f980738035fe325bd96f549493a2245bd7b82511f833efa7bbcb2f62266001
+DIST windows-sys-0.45.0.crate 2568659 BLAKE2B 6f2d634d121a9bf41e2887e277a73f33aee69b04c7fcfc6ff973d21902787997f1e186f530e9226cddc003ffc3f85a179c069c8a8688de459f617df92d33f94f SHA512 f239346c0141b95aa76e0771e2f4e38b9a592f3cd92c6001de353637cd65cd73b94cbf9917a4eaa9b0c0b2e6e2af920b9cf6b3fccb52770df5160254cffc1c47
+DIST windows-sys-0.48.0.crate 2628884 BLAKE2B 551e900de4f67187ef034b60df9fd0e0d8f82a3100ef28e1eabd543ac129d882dc86ffcc1714071aba09e4cb2ae2d2f07ace1a32b99fd989ce525cf05991edab SHA512 bdf534bcf3face31e9ebe11427a911a53f89f4ff5eaea8cccd094e139bfe14b2aec602b1cab1df774794d999477439d9adc6b627a8e33c20334fc348ba2c47ed
+DIST windows-sys-0.52.0.crate 2576877 BLAKE2B 69d6b560ccfc8f679e2678663ba606060d71fa28efa82c8aef8cceaa2c63b06f2052764d60163964f939649a26bbec6361ee4b094555e941fae92070db566980 SHA512 24ee0df246c2b456a4987a9124786a28acd358768cc7d1305bccd81bc5bb8822b81a03fb18d35174a520b911c6d9b685f81a34ab319fee13da3b985273584f03
+DIST windows-targets-0.42.2.crate 5492 BLAKE2B 42fc4a7d3e287fe2a70637e890304b49737776596f4a94a6d216668247092135e84322bd04caddd19c83b7700b0f27278e600ce8ed326957fabc21bffcae89b0 SHA512 84fbaffcad9a80beca77506aac26d0c5cb75aa0f21a5a70bcd3f6a16e71e8753ae00d3b89da9262c99756624163dcc0d6074fa9f99dfaae0dc098018209025f9
+DIST windows-targets-0.48.1.crate 6902 BLAKE2B 8e6cd47dea52131c66983cbf4982e88f7bd30416dfae4e380f7afb39f67ee0ac88d40769668dd5aba40d4415f9f00cbc2ac98d598506fed26029f5ec4df3a2c5 SHA512 e48179620cce528292167f1d5ee2deea0659569c996dc90eb4ab62b9ea8baee6c0bea3ab739e06d8793c9690bfc895545ed0039cb633ca39293de79c42ea9de2
+DIST windows-targets-0.48.5.crate 6904 BLAKE2B 7396bb210f37bd51da86f39fca3425c8f6610721d5c4e94f9fafa0a8a8046303b3fcc6979146bcfaa32f4406d242a0455f6cbb220f84c6ff84650e755acf5223 SHA512 e079eeef255a046be7f8e6a31c14f7b230254ebcf05eed2944827bb3d2a0dc30940d87593cf544d5e7ef35f6312b99430efcfb01421d91b02bb9c4bef7d98709
+DIST windows-targets-0.52.0.crate 6229 BLAKE2B 4b1efdd32202f112d3782b586ce60667f5d3b6f97ccae0d7da833aee2ae81ceece88b5ef4126db2448c9019de3f77e4fe66ed4286bb6275d9a5e8ab74725b804 SHA512 0ea09552d89b802ec0d419b640fa02d0af7af602704a0e88ba10f81d123dee0c907460f6ec91224177ec9a948970abd7414740eb219148a4d66c269c2362740e
+DIST windows_aarch64_gnullvm-0.42.2.crate 364071 BLAKE2B 97c4e3b2a2dd3f936f9bfcdad23639c9c4c499eed220aec361d26d6013d798efa118e6b298f9cf841ac149d2ae5d58ca653731718450fcf2910bb5f6fa39159f SHA512 75cd7eb1def8ce9d0ff3d7468d2b1cc31cc76c08f981a2460c3d1eb09cff7100d7442863a3591621c1f5f3b3f4badf0b5c95285b6ed583e37283a8403f1095f1
+DIST windows_aarch64_gnullvm-0.48.0.crate 366543 BLAKE2B 9b10f65089fe6da3ff38a1061783f635644ae84f567f891eaced280af68f7ff3919b34289e8850aa34554bb0346903273ff0a7fa743ca8794c2d23a9f1b0185f SHA512 80c5aa74c5669f7acff3882a8e7575f15e8d7cc58c11a1cb731ff423eb9cc9ba43cc6b80e52803c0d44e6a9001655ba87de6f43a9fe858da6d6e3a5c983a2711
+DIST windows_aarch64_gnullvm-0.48.5.crate 418492 BLAKE2B 5c6f7d73ad05740f0bac304ed1ef9b2ea63b0d6ca8f875552ae299a0b73b1557e8fe996f1c2b69be9f2df350c9288690f49ee62239a2896991364331d6c55462 SHA512 20158d31454488f6053d3ad7b97d7fc6eae6cf37e4ba0e50c28bd29b368505eed64199ae31104d5f97b66846be54e5ed25c0ad31ea850819205c573a31ac0996
+DIST windows_aarch64_gnullvm-0.52.0.crate 430182 BLAKE2B f23370c62c4ab3fd885e3ee22e8ec2fb5a3a837a57044c1df3f9986dd4e7e9d0a44ec58be1648a41e1ea4d037afa3077f0f03de0204199a82fb8395731815a4a SHA512 b7c3fe0a2ad5149be0df48fc7a4d15879eb130bd9441c58c25fc71b8a91483f0b553fb1bf29a9302acd348e9083a547430a840b059b0cfe19867ecaffcae986f
+DIST windows_aarch64_msvc-0.36.1.crate 661960 BLAKE2B d503150a05c4aa6ec376d1094ad24a7a4b3579d8f60cae65f4a98adfe830dd776c8996d5c3acfbfca1a69598475b918b5de2a162e3253b0b28cd6aa17de2dc13 SHA512 d0c352c78caec9c71bbaa1a688baab8f39a33c903c0492b19398c76e08194183e254ecd3a8b24af3e7e5e1d9d97373dcbab54499236829898a4fd153cfde2ccf
+DIST windows_aarch64_msvc-0.42.2.crate 666981 BLAKE2B 9f3cc5592cdede08bcdc1e7c455325279e3b763d96942695e10dccf1dfc37a81c749b69a7d6de883d4c0fa6e8a0d2f578fe2a8d6c42ad8ef6282590bf8fc87b7 SHA512 d2dafa8c94d01c1b65ca1bd631d31f2ef842f1db7accb132ff78c3f8483221b991afd3391563e03dcec42bbc9cbdc0ebdab47b991d25af85b5ba2ac1bbf8db63
+DIST windows_aarch64_msvc-0.48.0.crate 671479 BLAKE2B 0c80f210437628e1d878d1d14e884fea532c7539b3030aa76d46f27d02372c715c6e33d7efdbbd770666472b44a66c30711a33d819ede9cdcd51c96355802d45 SHA512 617e47a7202f1db4dbd3ecea509682135ccd85e3a458c0331b9bc7aa1d84e5756b59c881cb098d5c6d4c951248d13c8253a8e8a50938e1997bd19ceba77262df
+DIST windows_aarch64_msvc-0.48.5.crate 798483 BLAKE2B 60c466d6536426425a34b5ca20da97c8127ebeb4fb9b1363911165bada484f8913fcd50e90410b5661e0c27dbfe8f4eeaa62fb17d1f3566bfc82b6255e11619b SHA512 223f016c6f1a44dbc5c8a8428b39438f75380ea06951b7c26ed0877b19d79410c6fde5e4c7f2c839b6e76159131f39a1230e0e3a208dfc425ba9117e3665c4ff
+DIST windows_aarch64_msvc-0.52.0.crate 821663 BLAKE2B e6f772858205f7cd871722136aec4d00daea4793ff9dcae53e6311e74526c46aa11c2b3df7a85e6c577757254cbfa5a713e68c694625ca274b64e7a1c5532c23 SHA512 8446bfe5b9fe538415762c8129ab3bf2fe45482e045bce367475747786602ad4ae1187c6e508dd9d7b6be81bfc8d430e0db9c624e35c7cc52e823023e46f5cf1
+DIST windows_i686_gnu-0.36.1.crate 818115 BLAKE2B fdb78cf88e1049d1ed6c474f870dfd1ff37b48bc24726d754cfec5b3e77075162f291f93aa709c07c9fa38ccb21a6c31cb5149dabc2cc8ad8a85c03408384a0b SHA512 e2c60e6639beb879472a06ed4462667eb4a78385df6bcde1ca579af759cf2b4ac70e84f7dd7b736e7fbd1b129061555671fed4b83bcd81a6083cc013963194a5
+DIST windows_i686_gnu-0.42.2.crate 736236 BLAKE2B 4ef0496462afc73d9d72af7e5da1e6d3506a92f8172930e88ae64ab97596ffd31c4f97fb969e9b677e30159c27f00a8e756deb006b630fb98ce83f03c8b762e2 SHA512 ad09d650a05cb91cb6b40f59025c023a4c286bc1194586697c506016df2b9b0d5b02606b81687bc634795a0d9a9b8a73e486599328ae09c853e8e5ba662fc59c
+DIST windows_i686_gnu-0.48.0.crate 741490 BLAKE2B 5a4a584f8d8ee5bbd2d4c5b6749a66f2d43fc9e4ef90faab2227709b270f0d46fc26578c029edd96877c71309316ddb32d91c39f46d88f9a484c614f866e3dbe SHA512 15149fdd48b61b6d993acd392dbd353d0280d984ea88745217e4207937174bb90cdd9701f69ff0fe06a842f03607cbb57937d20d79ab577181e605a8a8fadc68
+DIST windows_i686_gnu-0.48.5.crate 844891 BLAKE2B fdc37cd74a4982056bf22fdb7b84e1c55dc838f3cb19ff3648730a77e673ef4ecc0380b3e4277bb8df2fcfa25f57b69014713d9e3ed27c28e19b25b3ea2ab774 SHA512 931ba5c1e4eb8ae73248e00d9611298d1c4b4b0dae719fdeb9243930cd420a103a7bc2738e0a4887c42c8f25728d6c5d64ad141dc092bc3f1d0f35dbe37d303a
+DIST windows_i686_gnu-0.52.0.crate 870285 BLAKE2B a7688062a128a1b1394b3978210334e4e2aaa10dce131457c4a11ce0cb3f551e7f4962d1ece1846d8e9526983ced0e0a3ee8c933858e9314b62e76381e086ef9 SHA512 fe993f5bb6e039c257be9b35337e0221f718d23866818bfd19c76aaae236aafc2de4bb5014fcdf919563b5901cdaa14a2136cd086eeed3c83e46a5d02f6aa77e
+DIST windows_i686_msvc-0.36.1.crate 724575 BLAKE2B cf964bec007d8432e2009644cf7f89ea7d910ccf9512c067b7bf5c6c825208ce4a36e9864c0cbca137f523983eb46e58e4bd01054cecd7ac7126d2ba9f67ac0c SHA512 02bb1507981229422498ce29f6c777d5e412358040128f84b09d948ccddf0461b078a0a20cc7f6ab7da8595121bb369453ae9ea1f0506aab715662e8c631e737
+DIST windows_i686_msvc-0.42.2.crate 724951 BLAKE2B b084286cd4927efd2889b149abf8a9fe9d3d777130db9e592982660dbf9a96a0f5e723ca121465787aa11877d2d29a5a7d7cf066cdc8fa7e90d7ca7dcb7677f1 SHA512 c1706fc36d4b157c020744a11b3eb5d7dfbf05a0b56775bc717e94b7fd725816b20154fdbcd69ac08dbfb8b8bbfa74fab72d7a9c10399aad6a1cc54cf597e804
+DIST windows_i686_msvc-0.48.0.crate 730056 BLAKE2B 4e4ad6ed94948145199c2ed50fc65e4af08455a0fd058bb0f763d481f30b029f99a2b8dbac087b29e762500a19270f6683baf62ba99d141eb002a5b0b5c8ea05 SHA512 11a50800e709712dbea907275bc0faa46d2eb2969118445ed5b932d9c5957a09592a5b26a40e554c1f5fd56c6d074a07637e6f88eedd2224e1001e62df7b469b
+DIST windows_i686_msvc-0.48.5.crate 864300 BLAKE2B 3d3ea8be55e2d6ced0eeda18abe1dffb925a1a78f456d683e4450d9f2fd287ad2e8494d65b2b770c677a12b3a60d10f0435e16c61880e3867c3657fd44892442 SHA512 70e2fb4fdb006a4cbd43ab2c7e940b277a15fb1790dfa2d1fc1f1fd18bead4886f6dc046e44326603e4894d988578917b8932aba5d9a6a4cc8424911cad9dc7e
+DIST windows_i686_msvc-0.52.0.crate 888693 BLAKE2B 7a6e9d03e503c8f543e80a8c7bcf3f50cfa7eed462e487ae7b581746d7cc4d871b33e307110d3a3a75226d88e837f9452ac56bf3baf71b66cfab2626cc15558a SHA512 817ac796fd00bed51d80133ec873cf3d3d582ba41fec8a6f6407fbd7544f198e928aa5d710f70c13bbf74a1dde4c91c54e65eb9d3b7518a7f011ea42725eb671
+DIST windows_x86_64_gnu-0.36.1.crate 790934 BLAKE2B 9dec5d966bdc89efbc81989acca242d519f51676ec37487df2bfacd6bfbc5a8de2871be72c5b96a073a899c666e3a39aa60d493e7df39fa90efe869fb744a332 SHA512 598b69e4f2cd3d68f910d526a66dadb465ff30a8c261c9a4455aa1c5b952d23c04f8edaa063cd16fb43564c116a13f06d607f3a0a9c7495054b8bfe1c04d1865
+DIST windows_x86_64_gnu-0.42.2.crate 699373 BLAKE2B 01c70809d564b16b268656e47295e99c992d8f9839fac8a51338a0e7c3b9cdcd0429c456ca8c1c139a8c687ed7ed6c43a82250889d881aadaa65bd037223e0a6 SHA512 5767af3c86e717f93137a89d442230e6b60a649057edb3ab104b1f82c0bcd64fe089dcdf2f4fd486a799bece1ddb5f0449641536b678211945e749ae24f35c1f
+DIST windows_x86_64_gnu-0.48.0.crate 703595 BLAKE2B b227efb78a99c43d0538cceadada3fa1840df29adc665787fdcf845b73e77d782da8a9f9aa602e1da61401b550d0107176feb6c397c922a6240b38cc8f04a180 SHA512 38eff1164fb37dbd2bbe53404b20cba92de84cbbd5e4eb9ad60d51fb43d6fdb8b87a1488e2c88ebd4b3ff3b708f93fdc05df4b14a285d3ff11c33ff0d9828602
+DIST windows_x86_64_gnu-0.48.5.crate 801619 BLAKE2B aa7e7e6a6ff9f9553ada3a0a39a9aa798e9d995a8eef36e0b6fdb2a0db93ddecee5548970575271fe43aec74797a420d0ee231d503b5bad1bd999059261e0e33 SHA512 1d6056fae430b3d042bdff3c6217c76be4b8b9f5dada9bad06beaac2db7d7ab9b0a82e44f498ec88e61afa73e99f56d84d445dc3847732b9ce5d947e08485f74
+DIST windows_x86_64_gnu-0.52.0.crate 826213 BLAKE2B 3ca03285ef289fc844261142154e710e996c29940b1c0a7dc3016906ff6452fa50b24f8668fce0ca44bf169ab1228c217fece9f7bddac9ab8bdc54fddafaf8a8 SHA512 2d81af56ad0bc9536f6e066776642a546ce6c6d99551edc0603ffcafe6db15d5d5a32a642b204bbfadf34231daa3894ad7897a9c0c575c2b6bc1e3e58a9a3eb7
+DIST windows_x86_64_gnullvm-0.42.2.crate 364068 BLAKE2B 64bc53e98eb3fc649c9b43a6e734de4e65088e41edacabd49f7afcc5dc6e1065c563ecfc682747dda05978dea2dba4f45c16fcc18c3b00684c3d93681e5a7deb SHA512 d39a8bc948110fe612d3f8d6628b3f0d56620df11d8a49e0fabb6c90389ad407582b3af10e4eab46c79b3d11d2e10753d73d9e55963fbeac085f41e9749bdba3
+DIST windows_x86_64_gnullvm-0.48.0.crate 366536 BLAKE2B 295dc3aef18c604d1579978045f4058b1a315083a8ab842bddf5800ec3460b1530ad88c3464acab712a229290aca235810de8a3b6a253859a354d9fa97277e58 SHA512 8d82fad4c8445030844708aa026a62f1ca43362b8e15f14b0d226c7e9cda04ffa0715087b6a025dbb738e8891de24fcc4a2df071a532917cf03c4a46f934f396
+DIST windows_x86_64_gnullvm-0.48.5.crate 418486 BLAKE2B 12a2199d434617c1df1a839e9f435620ad64b40c579f6d0c3677553ad7a48e5765d12c266b04946402e15c92cff2e4ac4979ce2130750ef426e2672119680284 SHA512 c016d5b5e73832b61ff67929d92fa8c16e154656294357266ad29ce1f44db4ca2d2935dba31a6b571187dc838b1d22f1e3b41fefffd1d719a338439adf1646aa
+DIST windows_x86_64_gnullvm-0.52.0.crate 430165 BLAKE2B af9345a1f6e0ed1392ca1534c68d23f3be0fbb6a42b3c5518cee14373e645038526da15e849d14abe45c53766a30c6c2042a626482ba4a05409f325eb6aa36b1 SHA512 e88af35fd1c694dc189783e5c81aafa61aeffbddce4d7130e1125d0ce3d932fafeb345990ffd98477c41b578b7f5090f4f9c0457b02146309b95549c9f8f44f0
+DIST windows_x86_64_msvc-0.36.1.crate 661999 BLAKE2B 4cf967f10d4ce148bac967598168752d1996b4ddf5278a8fca53360566c37c1a014bfb4dfdc0ae2d96e01196c42eb4906ea80d8e9dd23b9e9f3163631c9e253e SHA512 89c22ed51a74f531662d80ae0fa5e0215728db1e6caf3c13eaeba95a93548b43c00b8474f52553ac866ac83c203b6c22dc44fbc870e882a4c9c97ba54b87c631
+DIST windows_x86_64_msvc-0.42.2.crate 666936 BLAKE2B bc3a456e7f8bc272f8978ec69506ec9d89f97b7582ebbe05d8bd57bdf8156ef62d0d2dc6137a97e81d54059d70db97a24af9a038adff357f5dfd28805d6193b5 SHA512 53a35f438903fceb59e36bd2ac331773fb8e6c8c5a6d984e79021761f91b3b4a23efe49d219667a4d0d23dcdbf906da9c24e74fb1cff93395b5c55ff524e3788
+DIST windows_x86_64_msvc-0.48.0.crate 671422 BLAKE2B abb063610dcc38581657133182b7d9efeed5553df67bd2bd6f30f1668a645186e4824f9ef556a5abc84ace10b1b437b6325bbda6df5a64ce880d7dcb743ac786 SHA512 6e598b8e3ac54912a8ebac01b0dd2c58fd282072527d7fedc7f6ebecdfb7dcb09ae46c22293bc0117849437f8b053db5e90406e7a38276f0f0afd06be3966795
+DIST windows_x86_64_msvc-0.48.5.crate 798412 BLAKE2B 8abc0721e2fb337fe17c91d278947d36122d9045b839ba0cf3e690202d242265b676f23cc301da5f9d98c56ca4ecb76f7d6f072ee71bf986a1deca87020b90e5 SHA512 fa1c5cd14ca2ff0082e2504cf59d317dc4dc6f7138d35c12f95d4476a9c13d8b7f5537d0ee251eee7c99411ad31b22263171b7fbd391daa5d3ea3488ceaa61a0
+DIST windows_x86_64_msvc-0.52.0.crate 821600 BLAKE2B cc448b65f98fc0fc4949ae622b7020d2dae927ae45310649f6ef71809740eda9d3db0fc035676c201fd9ab9639e9e7f21e2e992b4c789542f12b419d2c752179 SHA512 3aaee31533a1a48a6ab5cd15b3cadfbd906a93a153e53919d0aa74e440d11e29830554e4e014c215f5b88a475bb733fa8ba4ce9d773d3e23a40ea9ad37ddd0a7
+DIST winnow-0.5.19.crate 147982 BLAKE2B 99b9625ee4c8b6236b1acfd29c267ac4d17c5f911e291d39f71f85a097222a4fbe48606c02acab6d70eccab710852782096bcda90ebe6cefb44ed9d48923ce0b SHA512 dee415c9e901d91d2a4646d1198c5b959c8e7a9ee5b3bfcb5c78159d57fc3905dda80e1c5b45a8a18e024a3e2394022772fecbdb8158ea1513a953c93f48d9a0
+DIST winnow-0.6.2.crate 157140 BLAKE2B 2cb9e63875403fe525739e2e20d4351f51b6f52dc03928af6de4531f388ec5cd0af7e21ef2f621330f7c91b01eb644fafd0618a246ce3c3dfe61d801e8f8e0e3 SHA512 dd54d69f7ce91f7ac2503ec79bf5bc3e45d2e8b0a3fc593487af33396f819c9df145eacd5ab43ecedca592a89ef259351314335de3fe740a05af5889f24fa8a5
+DIST xattr-1.0.1.crate 12258 BLAKE2B 5f7614de3e7179983c9767953b7713fa387ffb011ced680c93edf4a8ce2b0273a10bac6a968f67d7636beafe3c8ceb3015aa97b2b607d591c7cd68f5eaa07725 SHA512 f26860cf452e158ddded144d96b80614068dc6271f38ec3794ced4272c9ad01b9baf4938cf7a249e9716947b9c1b2700266bbd6ec9bc7645a3a2fbca9ab67c67
+DIST xattr-1.3.1.crate 12580 BLAKE2B 25c414d761a7fcd23bbe057add62c6da971cf33149066aa024320ab80e0ec8e8e8d5d3d0506e8de954b8f8c178d34c52a00a5fa9aa109510678098a3e3564b7f SHA512 4047abda42b949cf58f820e15ee99850de483857bbaaef737eeee48e1a2132972470f15bb2ddda56438f6a934918be96607a8de518a5a3dcec7c8ee6c00ad280
+DIST xwin-0.5.0.crate 65006 BLAKE2B 8b4f979120ecfe1e1b38830b2230b1e195a88a91cb1b56c43da211dfa9f7b41ca48aa3dda12b65ba1b3b7e3bfec989433f7b743875c780dfee49c1d2cf38cea9 SHA512 1268bb25e7ae98f97a608acb23997799fbd84a097be35f403b4f2c5a55058960852c8d3e96a509f0022ee7ff79f8671c563a93e8f0fa699d461c5faf41c17730
+DIST yansi-0.5.1.crate 16525 BLAKE2B 3b5a93b98293daae72f53bf3f13bfc05feba8d5b27921f79595f7448fbcb9a0dfa6cd70f467c5735b914c46b7d3592e6cce080c540a458a904308525eb3aa839 SHA512 7b33005a066cc612408a65df6533e8718d1de43efc0fd57416a19dc2b811497570e6e18f100fb26073565e395e711518c27de7d644ae64777713f1a102eb16d2
+DIST zerocopy-0.7.28.crate 147263 BLAKE2B 06a5895cc82f05c749f3630ec1987de363e8e5cbf6b8ff958c7d3ee80ebceffe9652415dfd702dbd7f73a224cfc8b13e119593314d2d98fdcbd7c53fbe3ff34a SHA512 34ed0ef56c007d25982b925db5bf3abb7a19ffbee93306d8369803ce0cfb7c10c2ca27fa2aee64be6e1925f830b7d4476b20603d82c7b6558fbf9134a25afca2
+DIST zerocopy-0.7.32.crate 151096 BLAKE2B 12c7c329ec0e0865467af08306ff4b55ce1e39fd77b094ee48ed9c6e266dfa807bda9ea72a3f7ea989916327f4d9e803d8868995728bfe2fb1c2dc1e5ecff78e SHA512 6729b05eb88029555b88c75feff4f8bc28ad9675edb02b07486381f775c8650c95e2e59612906bd9c34c5e390fd339857ca91573ee9f9ca7948572cff4171c82
+DIST zerocopy-derive-0.7.28.crate 533073 BLAKE2B 588e4eda234d39c702402f71aab6824d34c9bad42e9c28b140dfec3f745b89b0dc2c986118022d5cb3678fce800220c60e52f6ac101994af94558b9be32f8755 SHA512 d34bea0f61e19f723d56c45c5ac526ae73ff810a8b8613c6891ef70f7efe0de2d62d83184e76b5cfe42f4fd3a982f49e27320ec735ad60a6aeb3882e6fe5c156
+DIST zerocopy-derive-0.7.32.crate 37623 BLAKE2B 8b583d39d7bf9c3dbbba578120751c664f87363c5ba3fc45f6506a4059b9e599c43d9fc7bd498a257ff7c9d872af77d39bebdb0e65fb8009eaa2ae9903dece46 SHA512 3ce8528871fd18d6abe92b98503927451d25791c9c4af0ba39a3b6ba2006030bdc137084d080e9b1ac8b5ddf5f2121e0a3ef34bb2033a040f2c72c8149a9fc0d
+DIST zeroize-1.7.0.crate 19039 BLAKE2B 2f94a5025f409bd2b96a456d2f78a34c6b05b5554abe7ef3fad2a55a8fcff8a6a1b971be660aa4c2954ab7d6e89bebc431036e349edef74711292f9f64b1dbae SHA512 9d31e3e76e8c861309a3579c21f6da5fd6b056c7d7a350427445a1a832e8827204804783f7f9b808acaa2148efef883d9078bf84943b1db55526bba5bf5a2756
+DIST zip-0.6.6.crate 65789 BLAKE2B acefc076297468d72cb20d8c6234fe5406875056fbf78fc0eac3ac430af78f320ed839f8683bd96fa1a03c457d6ac568d42bd703a902bc37bd126791d8b4c709 SHA512 affd46c17ceaa0545a155250dfd16756f8706dda43bae8a322ec0481dbfb41e4cf3166bf9662fc139ef9d0ab3b0f9f158535b21d2a61b21d38b8b2407813eeef
diff --git a/dev-util/maturin/files/maturin-1.4.0-libressl-openssl-sys.patch b/dev-util/maturin/files/maturin-1.4.0-libressl-openssl-sys.patch
new file mode 100644
index 0000000..2ab1efd
--- /dev/null
+++ b/dev-util/maturin/files/maturin-1.4.0-libressl-openssl-sys.patch
@@ -0,0 +1,10 @@
+--- a/build/main.rs.orig
++++ b/build/main.rs
+@@ -293,6 +293,7 @@
+ (3, 8, 0) => ('3', '8', '0'),
+ (3, 8, 1) => ('3', '8', '1'),
+ (3, 8, _) => ('3', '8', 'x'),
++ (_, _, _) => ('_', '_', 'x'),
+ _ => version_error(),
+ };
+
diff --git a/dev-util/maturin/maturin-1.4.0.ebuild b/dev-util/maturin/maturin-1.4.0.ebuild
new file mode 100644
index 0000000..2db4115
--- /dev/null
+++ b/dev-util/maturin/maturin-1.4.0.ebuild
@@ -0,0 +1,554 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+ adler@1.0.2
+ ahash@0.8.6
+ aho-corasick@1.1.2
+ allocator-api2@0.2.16
+ anstream@0.3.2
+ anstream@0.6.4
+ anstyle-parse@0.2.1
+ anstyle-query@1.0.0
+ anstyle-wincon@1.0.2
+ anstyle-wincon@3.0.1
+ anstyle@1.0.2
+ anyhow@1.0.75
+ autocfg@1.1.0
+ base64@0.13.1
+ base64@0.21.5
+ bitflags@1.3.2
+ bitflags@2.4.1
+ block-buffer@0.10.4
+ bstr@1.8.0
+ byteorder@1.5.0
+ bytesize@1.3.0
+ bytes@1.5.0
+ bzip2-sys@0.1.11+1.0.8
+ bzip2@0.4.4
+ cab@0.4.1
+ camino@1.1.6
+ cargo-config2@0.1.16
+ cargo-options@0.7.2
+ cargo-platform@0.1.5
+ cargo-xwin@0.16.2
+ cargo-zigbuild@0.18.0
+ cargo_metadata@0.18.1
+ cbindgen@0.26.0
+ cc@1.0.83
+ cfb@0.9.0
+ cfg-if@1.0.0
+ charset@0.1.3
+ chumsky@0.9.3
+ clap@4.3.24
+ clap_builder@4.3.24
+ clap_complete@4.3.2
+ clap_complete_command@0.5.1
+ clap_complete_fig@4.3.1
+ clap_complete_nushell@0.1.11
+ clap_derive@4.3.12
+ clap_lex@0.5.0
+ cli-table@0.4.7
+ colorchoice@1.0.0
+ configparser@3.0.3
+ console@0.15.7
+ content_inspector@0.2.4
+ core-foundation-sys@0.8.4
+ core-foundation@0.9.3
+ cpufeatures@0.2.11
+ crc32fast@1.3.2
+ crossbeam-channel@0.5.8
+ crossbeam-deque@0.8.3
+ crossbeam-epoch@0.9.15
+ crossbeam-utils@0.8.16
+ crypto-common@0.1.6
+ data-encoding@2.5.0
+ deranged@0.3.9
+ dialoguer@0.11.0
+ diff@0.1.13
+ digest@0.10.7
+ dirs-sys@0.4.1
+ dirs@5.0.1
+ dissimilar@1.0.7
+ dunce@1.0.4
+ either@1.9.0
+ encode_unicode@0.3.6
+ encoding_rs@0.8.33
+ equivalent@1.0.1
+ errno@0.3.8
+ expect-test@1.4.1
+ fastrand@2.0.1
+ fat-macho@0.4.7
+ filetime@0.2.22
+ flate2@1.0.28
+ fnv@1.0.7
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ form_urlencoded@1.2.1
+ fs-err@2.11.0
+ generic-array@0.14.7
+ getrandom@0.2.11
+ globset@0.4.14
+ glob@0.3.1
+ goblin@0.7.1
+ hashbrown@0.12.3
+ hashbrown@0.14.3
+ heck@0.4.1
+ hermit-abi@0.3.3
+ home@0.5.5
+ humantime-serde@1.1.1
+ humantime@2.1.0
+ idna@0.5.0
+ ignore@0.4.20
+ indexmap@1.9.3
+ indexmap@2.1.0
+ indicatif@0.17.7
+ indoc@2.0.4
+ instant@0.1.12
+ io-lifetimes@1.0.11
+ is-terminal@0.4.9
+ itertools@0.11.0
+ itertools@0.12.0
+ itoa@1.0.9
+ keyring@2.0.5
+ lazy_static@1.4.0
+ lddtree@0.3.3
+ libc@0.2.150
+ libredox@0.0.1
+ linux-keyutils@0.2.3
+ linux-raw-sys@0.3.8
+ linux-raw-sys@0.4.11
+ lock_api@0.4.11
+ log@0.4.20
+ lzxd@0.1.4
+ mailparse@0.14.0
+ matchers@0.1.0
+ memchr@2.6.4
+ memoffset@0.9.0
+ mime@0.3.17
+ mime_guess@2.0.4
+ minijinja@1.0.10
+ minimal-lexical@0.2.1
+ miniz_oxide@0.7.1
+ msi@0.7.0
+ multipart@0.18.0
+ native-tls@0.2.11
+ nom@7.1.3
+ normalize-line-endings@0.3.0
+ normpath@1.1.1
+ number_prefix@0.4.0
+ nu-ansi-term@0.46.0
+ once_cell@1.18.0
+ openssl-macros@0.1.1
+ openssl-probe@0.1.5
+ openssl-sys@0.9.96
+ openssl@0.10.60
+ option-ext@0.2.0
+ os_pipe@1.1.4
+ overload@0.1.1
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ paste@1.0.14
+ path-slash@0.2.1
+ pep440_rs@0.3.12
+ pep508_rs@0.2.3
+ percent-encoding@2.3.1
+ pin-project-lite@0.2.13
+ pkg-config@0.3.27
+ plain@0.2.3
+ platform-info@2.0.2
+ portable-atomic@1.5.1
+ powerfmt@0.2.0
+ ppv-lite86@0.2.17
+ pretty_assertions@1.4.0
+ proc-macro2@1.0.70
+ psm@0.1.21
+ pyproject-toml@0.8.1
+ python-pkginfo@0.6.0
+ quoted_printable@0.4.8
+ quote@1.0.33
+ rand@0.8.5
+ rand_chacha@0.3.1
+ rand_core@0.6.4
+ rayon-core@1.12.0
+ rayon@1.8.0
+ redox_syscall@0.3.5
+ redox_syscall@0.4.1
+ redox_users@0.4.4
+ regex-automata@0.1.10
+ regex-automata@0.4.3
+ regex-syntax@0.6.29
+ regex-syntax@0.8.2
+ regex@1.10.2
+ rfc2047-decoder@0.2.2
+ ring@0.17.6
+ rustc_version@0.4.0
+ rustix@0.37.27
+ rustix@0.38.21
+ rustls-pemfile@2.0.0
+ rustls-pki-types@1.0.0
+ rustls-webpki@0.101.7
+ rustls@0.21.9
+ rustversion@1.0.14
+ ryu@1.0.15
+ same-file@1.0.6
+ schannel@0.1.22
+ scopeguard@1.2.0
+ scroll@0.11.0
+ scroll_derive@0.11.1
+ sct@0.7.1
+ security-framework-sys@2.9.1
+ security-framework@2.9.2
+ semver@1.0.20
+ serde@1.0.193
+ serde_derive@1.0.193
+ serde_json@1.0.108
+ serde_spanned@0.6.4
+ sha2@0.10.8
+ sharded-slab@0.1.7
+ shell-words@1.1.0
+ shlex@1.2.0
+ similar@2.3.0
+ smallvec@1.11.2
+ smawk@0.3.2
+ snapbox-macros@0.3.6
+ snapbox@0.4.14
+ socks@0.3.4
+ spin@0.9.8
+ stacker@0.1.15
+ static_assertions@1.1.0
+ strsim@0.10.0
+ syn@1.0.109
+ syn@2.0.39
+ target-lexicon@0.12.12
+ tar@0.4.40
+ tempfile@3.8.1
+ termcolor@1.4.0
+ terminal_size@0.2.6
+ textwrap@0.16.0
+ thiserror-impl@1.0.50
+ thiserror@1.0.50
+ thread_local@1.1.7
+ time-core@0.1.2
+ time-macros@0.2.15
+ time@0.3.30
+ tinyvec@1.6.0
+ tinyvec_macros@0.1.1
+ toml@0.5.11
+ toml@0.8.8
+ toml_datetime@0.6.5
+ toml_edit@0.20.7
+ toml_edit@0.21.0
+ tracing-attributes@0.1.27
+ tracing-core@0.1.32
+ tracing-log@0.2.0
+ tracing-serde@0.1.3
+ tracing-subscriber@0.3.18
+ tracing@0.1.40
+ trycmd@0.14.19
+ twox-hash@1.6.3
+ typenum@1.17.0
+ unicase@2.7.0
+ unicode-bidi@0.3.13
+ unicode-ident@1.0.12
+ unicode-linebreak@0.1.5
+ unicode-normalization@0.1.22
+ unicode-width@0.1.11
+ untrusted@0.9.0
+ ureq@2.9.1
+ url@2.5.0
+ utf8parse@0.2.1
+ uuid@1.6.1
+ valuable@0.1.0
+ vcpkg@0.2.15
+ versions@5.0.1
+ version_check@0.9.4
+ wait-timeout@0.2.0
+ walkdir@2.4.0
+ wasi@0.11.0+wasi-snapshot-preview1
+ webpki-roots@0.25.3
+ which@5.0.0
+ wild@2.2.0
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.6
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-sys@0.45.0
+ windows-sys@0.48.0
+ windows-sys@0.52.0
+ windows-targets@0.42.2
+ windows-targets@0.48.5
+ windows-targets@0.52.0
+ windows_aarch64_gnullvm@0.42.2
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_gnullvm@0.52.0
+ windows_aarch64_msvc@0.42.2
+ windows_aarch64_msvc@0.48.5
+ windows_aarch64_msvc@0.52.0
+ windows_i686_gnu@0.42.2
+ windows_i686_gnu@0.48.5
+ windows_i686_gnu@0.52.0
+ windows_i686_msvc@0.42.2
+ windows_i686_msvc@0.48.5
+ windows_i686_msvc@0.52.0
+ windows_x86_64_gnullvm@0.42.2
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_gnullvm@0.52.0
+ windows_x86_64_gnu@0.42.2
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnu@0.52.0
+ windows_x86_64_msvc@0.42.2
+ windows_x86_64_msvc@0.48.5
+ windows_x86_64_msvc@0.52.0
+ winnow@0.5.19
+ xattr@1.0.1
+ xwin@0.5.0
+ yansi@0.5.1
+ zerocopy-derive@0.7.28
+ zerocopy@0.7.28
+ zeroize@1.7.0
+ zip@0.6.6
+"
+# additional crates used by test-crates/* test packages,
+# `grep test-crates tests/run.rs` to see which are needed
+CRATES_TEST="
+ anstyle@1.0.1
+ anyhow@1.0.72
+ askama@0.12.0
+ askama_derive@0.12.1
+ askama_escape@0.10.3
+ basic-toml@0.1.4
+ bincode@1.3.3
+ bitflags@2.4.0
+ bytes@1.4.0
+ cargo-platform@0.1.3
+ cargo_metadata@0.15.4
+ cc@1.0.73
+ cc@1.0.81
+ cc@1.0.82
+ clap@4.3.21
+ clap_builder@4.3.21
+ errno-dragonfly@0.1.2
+ errno@0.3.2
+ fs-err@2.9.0
+ generator@0.7.5
+ getrandom@0.2.10
+ goblin@0.6.1
+ hermit-abi@0.3.2
+ indoc@1.0.7
+ indoc@1.0.9
+ libc@0.2.134
+ libc@0.2.147
+ libc@0.2.149
+ linux-raw-sys@0.4.10
+ lock_api@0.4.9
+ lock_api@0.4.10
+ log@0.4.19
+ loom@0.5.6
+ memchr@2.5.0
+ once_cell@1.15.0
+ oneshot@0.1.6
+ parking_lot_core@0.9.3
+ parking_lot_core@0.9.8
+ pin-utils@0.1.0
+ proc-macro2@1.0.46
+ proc-macro2@1.0.66
+ proc-macro2@1.0.69
+ pyo3-build-config@0.18.3
+ pyo3-build-config@0.19.0
+ pyo3-build-config@0.19.2
+ pyo3-ffi@0.18.3
+ pyo3-ffi@0.19.0
+ pyo3-ffi@0.19.2
+ pyo3-macros-backend@0.19.0
+ pyo3-macros-backend@0.19.2
+ pyo3-macros@0.19.0
+ pyo3-macros@0.19.2
+ pyo3@0.19.0
+ pyo3@0.19.2
+ python3-dll-a@0.2.6
+ python3-dll-a@0.2.9
+ quote@1.0.21
+ quote@1.0.32
+ redox_syscall@0.2.16
+ regex-automata@0.3.7
+ regex-syntax@0.7.5
+ regex@1.9.4
+ scoped-tls@1.0.1
+ scopeguard@1.1.0
+ semver@1.0.18
+ serde@1.0.182
+ serde@1.0.183
+ serde_derive@1.0.182
+ serde_derive@1.0.183
+ serde_json@1.0.104
+ siphasher@0.3.10
+ smallvec@1.10.0
+ smallvec@1.11.0
+ smallvec@1.11.1
+ syn@1.0.102
+ syn@2.0.28
+ target-lexicon@0.12.7
+ target-lexicon@0.12.11
+ thiserror-impl@1.0.44
+ thiserror@1.0.44
+ tracing-log@0.1.4
+ tracing-subscriber@0.3.17
+ unicase@2.6.0
+ unicode-ident@1.0.5
+ unicode-ident@1.0.11
+ uniffi@0.25.0
+ uniffi_bindgen@0.25.0
+ uniffi_build@0.25.0
+ uniffi_checksum_derive@0.25.0
+ uniffi_core@0.25.0
+ uniffi_macros@0.25.0
+ uniffi_meta@0.25.0
+ uniffi_testing@0.25.0
+ uniffi_udl@0.25.0
+ unindent@0.1.10
+ unindent@0.1.11
+ weedle2@4.0.0
+ windows-sys@0.36.1
+ windows-targets@0.48.1
+ windows@0.48.0
+ windows_aarch64_gnullvm@0.48.0
+ windows_aarch64_msvc@0.36.1
+ windows_aarch64_msvc@0.48.0
+ windows_i686_gnu@0.36.1
+ windows_i686_gnu@0.48.0
+ windows_i686_msvc@0.36.1
+ windows_i686_msvc@0.48.0
+ windows_x86_64_gnullvm@0.48.0
+ windows_x86_64_gnu@0.36.1
+ windows_x86_64_gnu@0.48.0
+ windows_x86_64_msvc@0.36.1
+ windows_x86_64_msvc@0.48.0
+"
+DISTUTILS_EXT=1 #926507
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( pypy3 python3_{10..12} )
+inherit cargo distutils-r1 edo shell-completion toolchain-funcs
+
+DESCRIPTION="Build and publish crates with pyo3, rust-cpython and cffi bindings"
+HOMEPAGE="https://www.maturin.rs/"
+SRC_URI="
+ https://github.com/PyO3/maturin/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+ ${CARGO_CRATE_URIS}
+ test? ( $(cargo_crate_uris ${CRATES_TEST}) )
+"
+
+# note: ring is unused, so openssl license can be skipped
+LICENSE="|| ( Apache-2.0 MIT ) doc? ( CC-BY-4.0 OFL-1.1 )"
+LICENSE+="
+ 0BSD Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD ISC MIT MPL-2.0
+ Unicode-DFS-2016
+" # crates
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~s390 sparc x86"
+IUSE="doc +ssl test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="$(python_gen_cond_dep 'dev-python/tomli[${PYTHON_USEDEP}]' 3.10)"
+DEPEND="ssl? ( dev-libs/openssl:= )"
+BDEPEND="
+ dev-python/setuptools-rust[${PYTHON_USEDEP}]
+ virtual/pkgconfig
+ doc? ( app-text/mdbook )
+ test? (
+ ${RDEPEND}
+ $(python_gen_cond_dep 'dev-python/cffi[${PYTHON_USEDEP}]' 'python*')
+ dev-python/boltons[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ dev-vcs/git
+ )
+"
+RDEPEND+=" ${DEPEND}"
+
+QA_FLAGS_IGNORED="usr/bin/${PN}"
+
+src_prepare() {
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.96 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-1.4.0-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ distutils-r1_src_prepare
+
+ if use test; then
+ # used to prevent use of network during tests, and silence pip
+ # if it finds unrelated issues with system packages (bug #913613)
+ cat > "${T}"/pip.conf <<-EOF || die
+ [global]
+ quiet = 2
+
+ [install]
+ no-index = yes
+ no-dependencies = yes
+ EOF
+
+ # used by *git_sdist_generator tests
+ git init -q || die
+ git config --global user.email "larry@gentoo.org" || die
+ git config --global user.name "Larry the Cow" || die
+ git add . || die
+ git commit -qm init || die
+ fi
+}
+
+src_configure() {
+ local cargoargs=(
+ # TODO: try switching to `--profile gentoo` then should be able to
+ # remove all `use debug` checks and --release in tests, but needs:
+ # https://github.com/gentoo/gentoo/pull/29510
+ $(usev debug '--profile dev')
+ --no-default-features
+ # like release.yml + native-tls for better platform support than rustls
+ --features full,password-storage$(usev ssl ,native-tls)
+ )
+
+ export MATURIN_SETUP_ARGS=${cargoargs[*]}
+ export OPENSSL_NO_VENDOR=1
+}
+
+python_compile_all() {
+ use !doc || mdbook build -d html guide || die
+
+ if ! tc-is-cross-compiler; then
+ local maturin=target/$(usex debug{,} release)/maturin
+ ${maturin} completions bash > "${T}"/${PN} || die
+ ${maturin} completions fish > "${T}"/${PN}.fish || die
+ ${maturin} completions zsh > "${T}"/_${PN} || die
+ else
+ ewarn "shell completion files were skipped due to cross-compilation"
+ fi
+}
+
+python_test() {
+ local -x COLUMNS=100 # what tests/cmd was generated for
+ local -x MATURIN_TEST_PYTHON=${EPYTHON}
+ local -x PIP_CONFIG_FILE=${T}/pip.conf
+ local -x VIRTUALENV_SYSTEM_SITE_PACKAGES=1
+
+ local skip=(
+ # avoid need for wasm over a single hello world test
+ --skip integration_wasm_hello_world
+ # fragile depending on rust version, also wants libpypy*-c.so for pypy
+ --skip pyo3_no_extension_module
+ )
+
+ edo cargo test $(usev !debug --release) ${MATURIN_SETUP_ARGS} -- "${skip[@]}"
+}
+
+python_install_all() {
+ dodoc Changelog.md README.md
+ use doc && dodoc -r guide/html
+
+ if ! tc-is-cross-compiler; then
+ dobashcomp "${T}"/${PN}
+ dofishcomp "${T}"/${PN}.fish
+ dozshcomp "${T}"/_${PN}
+ fi
+}
diff --git a/dev-util/maturin/maturin-1.5.1-r1.ebuild b/dev-util/maturin/maturin-1.5.1-r1.ebuild
new file mode 100644
index 0000000..0602d2f
--- /dev/null
+++ b/dev-util/maturin/maturin-1.5.1-r1.ebuild
@@ -0,0 +1,556 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+ adler@1.0.2
+ ahash@0.8.7
+ aho-corasick@1.1.2
+ allocator-api2@0.2.16
+ anstream@0.6.11
+ anstyle-parse@0.2.3
+ anstyle-query@1.0.2
+ anstyle-wincon@3.0.2
+ anstyle@1.0.4
+ anyhow@1.0.80
+ autocfg@1.1.0
+ base64@0.13.1
+ base64@0.21.7
+ bitflags@1.3.2
+ bitflags@2.4.2
+ block-buffer@0.10.4
+ bstr@1.9.0
+ byteorder@1.5.0
+ bytesize@1.3.0
+ bytes@1.5.0
+ bzip2-sys@0.1.11+1.0.8
+ bzip2@0.4.4
+ cab@0.4.1
+ camino@1.1.6
+ cargo-config2@0.1.19
+ cargo-options@0.7.2
+ cargo-platform@0.1.6
+ cargo-xwin@0.16.4
+ cargo-zigbuild@0.18.3
+ cargo_metadata@0.18.1
+ cbindgen@0.26.0
+ cc@1.0.88
+ cfb@0.9.0
+ cfg-if@1.0.0
+ charset@0.1.3
+ chumsky@0.9.3
+ clap@4.4.18
+ clap_builder@4.4.18
+ clap_complete@4.4.9
+ clap_complete_command@0.5.1
+ clap_complete_nushell@0.1.11
+ clap_derive@4.4.7
+ clap_lex@0.6.0
+ cli-table@0.4.7
+ colorchoice@1.0.0
+ configparser@3.0.4
+ console@0.15.8
+ content_inspector@0.2.4
+ core-foundation-sys@0.8.6
+ core-foundation@0.9.4
+ cpufeatures@0.2.12
+ crc32fast@1.3.2
+ crossbeam-channel@0.5.11
+ crossbeam-deque@0.8.5
+ crossbeam-epoch@0.9.18
+ crossbeam-utils@0.8.19
+ crypto-common@0.1.6
+ data-encoding@2.5.0
+ deranged@0.3.11
+ derivative@2.2.0
+ dialoguer@0.11.0
+ diff@0.1.13
+ digest@0.10.7
+ dirs-sys@0.4.1
+ dirs@5.0.1
+ dissimilar@1.0.7
+ dunce@1.0.4
+ either@1.9.0
+ encode_unicode@0.3.6
+ encoding_rs@0.8.33
+ equivalent@1.0.1
+ errno@0.3.8
+ expect-test@1.4.1
+ fastrand@2.0.1
+ fat-macho@0.4.8
+ filetime@0.2.23
+ flate2@1.0.28
+ fnv@1.0.7
+ foreign-types-shared@0.1.1
+ foreign-types@0.3.2
+ form_urlencoded@1.2.1
+ fs-err@2.11.0
+ generic-array@0.14.7
+ getrandom@0.2.12
+ globset@0.4.14
+ glob@0.3.1
+ goblin@0.8.0
+ hashbrown@0.12.3
+ hashbrown@0.14.3
+ heck@0.4.1
+ home@0.5.9
+ humantime-serde@1.1.1
+ humantime@2.1.0
+ idna@0.5.0
+ ignore@0.4.22
+ indexmap@1.9.3
+ indexmap@2.2.3
+ indicatif@0.17.7
+ indoc@2.0.4
+ instant@0.1.12
+ itertools@0.11.0
+ itertools@0.12.1
+ itoa@1.0.10
+ keyring@2.3.2
+ lazy_static@1.4.0
+ lddtree@0.3.4
+ libc@0.2.153
+ libredox@0.0.1
+ linux-keyutils@0.2.4
+ linux-raw-sys@0.4.13
+ lock_api@0.4.11
+ log@0.4.20
+ lzxd@0.1.4
+ mailparse@0.14.1
+ matchers@0.1.0
+ memchr@2.7.1
+ mime@0.3.17
+ mime_guess@2.0.4
+ minijinja@1.0.12
+ minimal-lexical@0.2.1
+ miniz_oxide@0.7.1
+ msi@0.7.0
+ multipart@0.18.0
+ native-tls@0.2.11
+ nom@7.1.3
+ normalize-line-endings@0.3.0
+ normpath@1.1.1
+ number_prefix@0.4.0
+ num-conv@0.1.0
+ nu-ansi-term@0.46.0
+ once_cell@1.19.0
+ openssl-macros@0.1.1
+ openssl-probe@0.1.5
+ openssl-sys@0.9.99
+ openssl@0.10.63
+ option-ext@0.2.0
+ os_pipe@1.1.5
+ overload@0.1.1
+ parking_lot@0.12.1
+ parking_lot_core@0.9.9
+ paste@1.0.14
+ path-slash@0.2.1
+ pep440_rs@0.5.0
+ pep508_rs@0.4.2
+ percent-encoding@2.3.1
+ pin-project-lite@0.2.13
+ pkg-config@0.3.29
+ plain@0.2.3
+ platform-info@2.0.2
+ portable-atomic@1.6.0
+ powerfmt@0.2.0
+ ppv-lite86@0.2.17
+ pretty_assertions@1.4.0
+ proc-macro2@1.0.78
+ psm@0.1.21
+ pyproject-toml@0.10.0
+ python-pkginfo@0.6.0
+ quoted_printable@0.4.8
+ quoted_printable@0.5.0
+ quote@1.0.35
+ rand@0.8.5
+ rand_chacha@0.3.1
+ rand_core@0.6.4
+ rayon-core@1.12.1
+ rayon@1.8.1
+ redox_syscall@0.4.1
+ redox_users@0.4.4
+ regex-automata@0.1.10
+ regex-automata@0.4.5
+ regex-syntax@0.6.29
+ regex-syntax@0.8.2
+ regex@1.10.3
+ rfc2047-decoder@0.2.2
+ ring@0.17.7
+ rustc_version@0.4.0
+ rustix@0.38.32
+ rustls-pemfile@2.1.0
+ rustls-pki-types@1.3.1
+ rustls-webpki@0.102.1
+ rustls@0.22.2
+ rustversion@1.0.14
+ ryu@1.0.16
+ same-file@1.0.6
+ schannel@0.1.23
+ scopeguard@1.2.0
+ scroll@0.12.0
+ scroll_derive@0.12.0
+ security-framework-sys@2.9.1
+ security-framework@2.9.2
+ semver@1.0.22
+ serde@1.0.197
+ serde_derive@1.0.197
+ serde_json@1.0.114
+ serde_spanned@0.6.5
+ sha2@0.10.8
+ sharded-slab@0.1.7
+ shell-words@1.1.0
+ shlex@1.3.0
+ similar@2.4.0
+ smallvec@1.13.1
+ smawk@0.3.2
+ snapbox-macros@0.3.8
+ snapbox@0.5.7
+ socks@0.3.4
+ spin@0.9.8
+ stacker@0.1.15
+ static_assertions@1.1.0
+ strsim@0.10.0
+ subtle@2.5.0
+ syn@1.0.109
+ syn@2.0.48
+ target-lexicon@0.12.14
+ tar@0.4.40
+ tempfile@3.9.0
+ termcolor@1.4.1
+ terminal_size@0.3.0
+ textwrap@0.16.1
+ thiserror-impl@1.0.57
+ thiserror@1.0.57
+ thread_local@1.1.7
+ time-core@0.1.2
+ time-macros@0.2.17
+ time@0.3.34
+ tinyvec@1.6.0
+ tinyvec_macros@0.1.1
+ toml@0.5.11
+ toml@0.8.10
+ toml_datetime@0.6.5
+ toml_edit@0.22.6
+ tracing-attributes@0.1.27
+ tracing-core@0.1.32
+ tracing-log@0.2.0
+ tracing-serde@0.1.3
+ tracing-subscriber@0.3.18
+ tracing@0.1.40
+ trycmd@0.15.0
+ twox-hash@1.6.3
+ typenum@1.17.0
+ unicase@2.7.0
+ unicode-bidi@0.3.15
+ unicode-ident@1.0.12
+ unicode-linebreak@0.1.5
+ unicode-normalization@0.1.22
+ unicode-width@0.1.11
+ unicode-xid@0.2.4
+ unscanny@0.1.0
+ untrusted@0.9.0
+ ureq@2.9.6
+ urlencoding@2.1.3
+ url@2.5.0
+ utf8parse@0.2.1
+ uuid@1.7.0
+ valuable@0.1.0
+ vcpkg@0.2.15
+ versions@5.0.1
+ version_check@0.9.4
+ wait-timeout@0.2.0
+ walkdir@2.4.0
+ wasi@0.11.0+wasi-snapshot-preview1
+ webpki-roots@0.26.0
+ which@5.0.0
+ which@6.0.0
+ wild@2.2.1
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.6
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-sys@0.48.0
+ windows-sys@0.52.0
+ windows-targets@0.48.5
+ windows-targets@0.52.0
+ windows_aarch64_gnullvm@0.48.5
+ windows_aarch64_gnullvm@0.52.0
+ windows_aarch64_msvc@0.48.5
+ windows_aarch64_msvc@0.52.0
+ windows_i686_gnu@0.48.5
+ windows_i686_gnu@0.52.0
+ windows_i686_msvc@0.48.5
+ windows_i686_msvc@0.52.0
+ windows_x86_64_gnullvm@0.48.5
+ windows_x86_64_gnullvm@0.52.0
+ windows_x86_64_gnu@0.48.5
+ windows_x86_64_gnu@0.52.0
+ windows_x86_64_msvc@0.48.5
+ windows_x86_64_msvc@0.52.0
+ winnow@0.6.2
+ xattr@1.3.1
+ xwin@0.5.0
+ yansi@0.5.1
+ zerocopy-derive@0.7.32
+ zerocopy@0.7.32
+ zeroize@1.7.0
+ zip@0.6.6
+"
+# additional crates used by test-crates/* test packages,
+# `grep test-crates tests/run.rs` to see which are needed
+CRATES_TEST="
+ anstream@0.3.2
+ anstyle-parse@0.2.1
+ anstyle-query@1.0.0
+ anstyle-wincon@1.0.2
+ anstyle@1.0.1
+ anyhow@1.0.72
+ askama@0.12.0
+ askama_derive@0.12.1
+ askama_escape@0.10.3
+ basic-toml@0.1.4
+ bincode@1.3.3
+ bitflags@2.4.0
+ bytes@1.4.0
+ cargo-platform@0.1.3
+ cargo_metadata@0.15.4
+ cc@1.0.73
+ cc@1.0.81
+ cc@1.0.82
+ cc@1.0.83
+ clap@4.3.21
+ clap_builder@4.3.21
+ clap_derive@4.3.12
+ clap_lex@0.5.0
+ errno-dragonfly@0.1.2
+ errno@0.3.2
+ fs-err@2.9.0
+ getrandom@0.2.10
+ hermit-abi@0.3.2
+ is-terminal@0.4.9
+ itoa@1.0.9
+ libc@0.2.134
+ libc@0.2.147
+ libc@0.2.149
+ linux-raw-sys@0.4.10
+ lock_api@0.4.9
+ lock_api@0.4.10
+ log@0.4.19
+ memchr@2.5.0
+ memoffset@0.9.0
+ once_cell@1.15.0
+ once_cell@1.18.0
+ oneshot-uniffi@0.1.6
+ parking_lot_core@0.9.3
+ parking_lot_core@0.9.8
+ proc-macro2@1.0.66
+ proc-macro2@1.0.69
+ proc-macro2@1.0.70
+ pyo3-build-config@0.18.3
+ pyo3-build-config@0.20.0
+ pyo3-build-config@0.20.2
+ pyo3-ffi@0.18.3
+ pyo3-ffi@0.20.0
+ pyo3-ffi@0.20.2
+ pyo3-macros-backend@0.20.0
+ pyo3-macros-backend@0.20.2
+ pyo3-macros@0.20.0
+ pyo3-macros@0.20.2
+ pyo3@0.20.0
+ pyo3@0.20.2
+ python3-dll-a@0.2.6
+ python3-dll-a@0.2.9
+ quote@1.0.32
+ quote@1.0.33
+ redox_syscall@0.2.16
+ redox_syscall@0.3.5
+ rustix@0.38.21
+ ryu@1.0.15
+ scopeguard@1.1.0
+ semver@1.0.18
+ serde@1.0.182
+ serde@1.0.183
+ serde_derive@1.0.182
+ serde_derive@1.0.183
+ serde_json@1.0.104
+ siphasher@0.3.10
+ smallvec@1.10.0
+ smallvec@1.11.0
+ smallvec@1.11.1
+ syn@2.0.28
+ syn@2.0.32
+ syn@2.0.40
+ target-lexicon@0.12.7
+ target-lexicon@0.12.11
+ target-lexicon@0.12.12
+ textwrap@0.16.0
+ thiserror-impl@1.0.44
+ thiserror@1.0.44
+ unicase@2.6.0
+ unicode-ident@1.0.5
+ unicode-ident@1.0.11
+ uniffi@0.26.1
+ uniffi_bindgen@0.26.1
+ uniffi_build@0.26.1
+ uniffi_checksum_derive@0.26.1
+ uniffi_core@0.26.1
+ uniffi_macros@0.26.1
+ uniffi_meta@0.26.1
+ uniffi_testing@0.26.1
+ uniffi_udl@0.26.1
+ unindent@0.2.3
+ weedle2@5.0.0
+ windows-sys@0.36.1
+ windows-targets@0.48.1
+ windows_aarch64_gnullvm@0.48.0
+ windows_aarch64_msvc@0.36.1
+ windows_aarch64_msvc@0.48.0
+ windows_i686_gnu@0.36.1
+ windows_i686_gnu@0.48.0
+ windows_i686_msvc@0.36.1
+ windows_i686_msvc@0.48.0
+ windows_x86_64_gnullvm@0.48.0
+ windows_x86_64_gnu@0.36.1
+ windows_x86_64_gnu@0.48.0
+ windows_x86_64_msvc@0.36.1
+ windows_x86_64_msvc@0.48.0
+"
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( pypy3 python3_{10..12} )
+inherit cargo distutils-r1 flag-o-matic shell-completion toolchain-funcs
+
+DESCRIPTION="Build and publish crates with pyo3, rust-cpython and cffi bindings"
+HOMEPAGE="https://www.maturin.rs/"
+SRC_URI="
+ https://github.com/PyO3/maturin/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+ ${CARGO_CRATE_URIS}
+ test? ( $(cargo_crate_uris ${CRATES_TEST}) )
+"
+
+# note: ring is unused, so openssl license can be skipped
+LICENSE="|| ( Apache-2.0 MIT ) doc? ( CC-BY-4.0 OFL-1.1 )"
+LICENSE+="
+ 0BSD Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD ISC MIT MPL-2.0
+ Unicode-DFS-2016
+" # crates
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ~ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="doc +ssl test"
+RESTRICT="!test? ( test )"
+
+# TODO: cleanup after CRATES_TEST's pyo3 is >=0.20.3 (bug #922236)
+RESTRICT+=" ppc? ( test )"
+
+RDEPEND="$(python_gen_cond_dep 'dev-python/tomli[${PYTHON_USEDEP}]' 3.10)"
+DEPEND="ssl? ( dev-libs/openssl:= )"
+BDEPEND="
+ virtual/pkgconfig
+ doc? ( app-text/mdbook )
+ test? (
+ ${RDEPEND}
+ $(python_gen_cond_dep 'dev-python/cffi[${PYTHON_USEDEP}]' 'python*')
+ dev-python/boltons[${PYTHON_USEDEP}]
+ dev-python/virtualenv[${PYTHON_USEDEP}]
+ dev-vcs/git
+ )
+"
+RDEPEND+=" ${DEPEND}"
+
+QA_FLAGS_IGNORED="usr/bin/${PN}"
+
+src_prepare() {
+ pushd "${ECARGO_HOME}"/gentoo/openssl-sys-0.9.99 > /dev/null || die
+ eapply "${FILESDIR}/${PN}-1.4.0-libressl-openssl-sys.patch"
+ popd > /dev/null || die
+
+ distutils-r1_src_prepare
+
+ [[ ${CRATES_TEST} == *pyo3@0.20.[0-2]* ]] || die "drop ppc test restrict"
+
+ # we build the Rust executable (just once) via cargo_src_compile
+ sed -i -e '/setuptools_rust/d' -e '/rust_extensions/d' setup.py || die
+
+ if use test; then
+ # used to prevent use of network during tests, and silence pip
+ # if it finds unrelated issues with system packages (bug #913613)
+ cat > "${T}"/pip.conf <<-EOF || die
+ [global]
+ quiet = 2
+
+ [install]
+ no-index = yes
+ no-dependencies = yes
+ EOF
+
+ # used by *git_sdist_generator tests
+ git init -q || die
+ git config --global user.email "larry@gentoo.org" || die
+ git config --global user.name "Larry the Cow" || die
+ git add . || die
+ git commit -qm init || die
+ fi
+}
+
+src_configure() {
+ export OPENSSL_NO_VENDOR=1
+
+ # https://github.com/rust-lang/stacker/issues/79
+ use s390 && ! is-flagq '-march=*' &&
+ append-cflags $(test-flags-CC -march=z10)
+
+ local myfeatures=(
+ # like release.yml + native-tls for better platform support than rustls
+ full
+ password-storage
+ $(usev ssl native-tls)
+ )
+
+ cargo_src_configure --no-default-features
+}
+
+python_compile_all() {
+ cargo_src_compile
+
+ use !doc || mdbook build -d html guide || die
+
+ if ! tc-is-cross-compiler; then
+ local maturin=target/$(usex debug{,} release)/maturin
+ ${maturin} completions bash > "${T}"/${PN} || die
+ ${maturin} completions fish > "${T}"/${PN}.fish || die
+ ${maturin} completions zsh > "${T}"/_${PN} || die
+ else
+ ewarn "shell completion files were skipped due to cross-compilation"
+ fi
+}
+
+python_test() {
+ local -x COLUMNS=100 # match clap_builder crate default
+ local -x MATURIN_TEST_PYTHON=${EPYTHON}
+ local -x PIP_CONFIG_FILE=${T}/pip.conf
+ local -x VIRTUALENV_SYSTEM_SITE_PACKAGES=1
+
+ local skip=(
+ # avoid need for wasm over a single hello world test
+ --skip integration_wasm_hello_world
+ # fragile depending on rust version, also wants libpypy*-c.so for pypy
+ --skip pyo3_no_extension_module
+ )
+
+ cargo_src_test -- "${skip[@]}"
+}
+
+python_install_all() {
+ cargo_src_install
+
+ dodoc Changelog.md README.md
+ use doc && dodoc -r guide/html
+
+ if ! tc-is-cross-compiler; then
+ dobashcomp "${T}"/${PN}
+ dofishcomp "${T}"/${PN}.fish
+ dozshcomp "${T}"/_${PN}
+ fi
+}
diff --git a/dev-util/maturin/metadata.xml b/dev-util/maturin/metadata.xml
new file mode 100644
index 0000000..8f5c9c7
--- /dev/null
+++ b/dev-util/maturin/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ionen@gentoo.org</email>
+ <name>Ionen Wolkens</name>
+ </maintainer>
+ <upstream>
+ <changelog>https://www.maturin.rs/changelog.html</changelog>
+ <remote-id type="github">PyO3/maturin</remote-id>
+ <remote-id type="pypi">maturin</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/mail-mta/postfix/Manifest b/mail-mta/postfix/Manifest
new file mode 100644
index 0000000..d72f7ae
--- /dev/null
+++ b/mail-mta/postfix/Manifest
@@ -0,0 +1 @@
+DIST postfix-3.5.22.tar.gz 4634825 BLAKE2B af8c0d1ef546ef2d69987501aab1aa2371cc60cadb6748ceab752fe635d7dbecc3b678d4acae8e014d12a514283a6923c39c5770c4bddda5e141461ce9073e6f SHA512 ed14c8fb565c8dc05049e169a253260739fa1866c00aa25de90444ffca885dc515ff6b262b608cf28031a0b17a16a4d691d0273dcbd4a21ad7f21db4d19b6d38
diff --git a/mail-mta/postfix/files/postfix-3.5.8-libressl.patch b/mail-mta/postfix/files/postfix-3.5.8-libressl.patch
new file mode 100644
index 0000000..757101e
--- /dev/null
+++ b/mail-mta/postfix/files/postfix-3.5.8-libressl.patch
@@ -0,0 +1,55 @@
+see https://bugs.gentoo.org/678874
+
+--- a/src/tls/tls_certkey.c.orig 2019-03-07 23:57:10 UTC
++++ b/src/tls/tls_certkey.c
+@@ -144,7 +144,7 @@ static void init_pem_load_state(pem_load
+
+ /* use_chain - load cert, key and chain into ctx or ssl */
+
+-#if OPENSSL_VERSION_NUMBER >= 0x1010100fUL
++#if OPENSSL_VERSION_NUMBER >= 0x1010100fUL && !defined(LIBRESSL_VERSION_NUMBER)
+ static int use_chain(pem_load_state_t *st)
+ {
+ int ret;
+see https://bugs.gentoo.org/678874
+
+--- a/src/tls/tls_server.c.orig 2018-12-26 19:21:49 UTC
++++ b/src/tls/tls_server.c
+@@ -518,7 +518,9 @@ TLS_APPL_STATE *tls_server_init(const TL
+ * ticket decryption callback already (since 2.11) asks OpenSSL to
+ * avoid issuing new tickets when the presented ticket is re-usable.
+ */
++#ifndef LIBRESSL_VERSION_NUMBER
+ SSL_CTX_set_num_tickets(server_ctx, 1);
++#endif
+ }
+ #endif
+ if (!ticketable)
+--- a/src/tls/tls_misc.c.orig
++++ b/src/tls/tls_misc.c
+@@ -657,7 +657,7 @@ void tls_param_init(void)
+
+ int tls_library_init(void)
+ {
+- OPENSSL_INIT_SETTINGS *init_settings;
++ // OPENSSL_INIT_SETTINGS *init_settings;
+ char *conf_name = *var_tls_cnf_name ? var_tls_cnf_name : 0;
+ char *conf_file = 0;
+ unsigned long init_opts = 0;
+@@ -681,6 +681,7 @@ int tls_library_init(void)
+ msg_info("tls_library_init: using backwards-compatible defaults");
+ return (init_res = TLS_LIB_INIT_OK);
+ }
++#if 0
+ if ((init_settings = OPENSSL_INIT_new()) == 0) {
+ msg_warn("error allocating OpenSSL init settings, "
+ "disabling TLS support");
+@@ -763,6 +764,8 @@ int tls_library_init(void)
+ TLS_LIB_INIT_RETURN(TLS_LIB_INIT_ERR);
+ }
+ TLS_LIB_INIT_RETURN(TLS_LIB_INIT_OK);
++#endif
++ return init_res = TLS_LIB_INIT_OK;
+ }
+
+ /* tls_pre_jail_init - Load TLS related pre-jail tables */
diff --git a/mail-mta/postfix/files/postfix.rc6.2.7 b/mail-mta/postfix/files/postfix.rc6.2.7
new file mode 100644
index 0000000..62f6dda
--- /dev/null
+++ b/mail-mta/postfix/files/postfix.rc6.2.7
@@ -0,0 +1,85 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+extra_started_commands="reload abort flush"
+
+description_reload="Re-read configuration files. Running processes terminate at their earliest convenience."
+description_abort="Stop the Postfix mail system abruptly. Running processes are signaled to stop immediately."
+description_flush="Force delivery: attempt to deliver every message in the deferred mail queue."
+
+# Please read http://www.postfix.org/MULTI_INSTANCE_README.html for multi instance support
+CONF_DIR="/etc/postfix"
+CONF_OPT="${SVCNAME##*.}"
+if [ -n ${CONF_OPT} -a ${SVCNAME} != "postfix" ]; then
+ CONF_DIR="${CONF_DIR}.${CONF_OPT}"
+fi
+if [ "${CONF_DIR}" = "/etc/postfix" ]; then
+ CONF_PARAM=""
+ CONF_MESSAGE=""
+else
+ CONF_PARAM="-c ${CONF_DIR}"
+ CONF_MESSAGE="(${CONF_DIR})"
+fi
+
+depend() {
+ use logger dns ypbind amavisd antivirus postfix_greylist net saslauthd
+ if [ "${SVCNAME}" = "postfix" ]; then
+ provide mta
+ fi
+}
+
+start() {
+ if [ ! -z "${CONF_PARAM}" ]; then
+ einfo "Please consider updating your config for postmulti support."
+ fi
+ ebegin "Starting postfix ${CONF_MESSAGE}"
+ if [ ! -d ${CONF_DIR} ]; then
+ eend 1 "${CONF_DIR} does not exist"
+ return 1
+ fi
+ /usr/sbin/postfix ${CONF_PARAM} start >/dev/null 2>&1
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping postfix ${CONF_MESSAGE}"
+ /usr/sbin/postfix ${CONF_PARAM} stop >/dev/null 2>&1
+ eend $?
+}
+
+status() {
+ local _retval
+ einfon ""
+ /usr/sbin/postfix ${CONF_PARAM} status
+ _retval=$?
+ if [ x${_retval} = 'x0' ]; then
+ mark_service_started "${SVCNAME}"
+ eend 0
+ else
+ mark_service_stopped "${SVCNAME}"
+ eend 3
+ fi
+}
+
+reload() {
+ ebegin "Reloading postfix ${CONF_MESSAGE}"
+ /usr/sbin/postfix ${CONF_PARAM} reload >/dev/null 2>&1
+ eend $?
+}
+
+abort() {
+ ebegin "Aborting postfix ${CONF_MESSAGE}"
+
+ if service_started "${SVCNAME}"; then
+ mark_service_stopped "${SVCNAME}"
+ fi
+ /usr/sbin/postfix ${CONF_PARAM} abort >/dev/null 2>&1
+ eend $?
+}
+
+flush() {
+ ebegin "Flushing postfix ${CONF_MESSAGE}"
+ /usr/sbin/postfix ${CONF_PARAM} flush >/dev/null 2>&1
+ eend $?
+}
diff --git a/mail-mta/postfix/files/postfix.service b/mail-mta/postfix/files/postfix.service
new file mode 100644
index 0000000..7a72aaa
--- /dev/null
+++ b/mail-mta/postfix/files/postfix.service
@@ -0,0 +1,26 @@
+[Unit]
+Description=Postfix Mail Transport Agent
+After=network.target
+
+[Service]
+Type=forking
+ExecStartPre=-/usr/bin/newaliases
+ExecStart=/usr/sbin/postfix start
+ExecStop=/usr/sbin/postfix stop
+ExecReload=/usr/sbin/postfix reload
+# Hardening
+PrivateTmp=yes
+PrivateDevices=yes
+ProtectSystem=full
+ReadWritePaths=-/etc/mail/aliases.db -/etc/mail/aliases.cdb -/etc/mail/aliases.lmdb
+CapabilityBoundingSet=~ CAP_NET_ADMIN CAP_SYS_ADMIN CAP_SYS_BOOT CAP_SYS_MODULE
+MemoryDenyWriteExecute=true
+ProtectKernelModules=true
+ProtectKernelTunables=true
+ProtectControlGroups=true
+RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX
+RestrictNamespaces=true
+RestrictRealtime=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/mail-mta/postfix/files/smtp.pass b/mail-mta/postfix/files/smtp.pass
new file mode 100644
index 0000000..f9b5120
--- /dev/null
+++ b/mail-mta/postfix/files/smtp.pass
@@ -0,0 +1,2 @@
+#
+# remotehost user:password
diff --git a/mail-mta/postfix/files/smtp.sasl b/mail-mta/postfix/files/smtp.sasl
new file mode 100644
index 0000000..82f2945
--- /dev/null
+++ b/mail-mta/postfix/files/smtp.sasl
@@ -0,0 +1,2 @@
+pwcheck_method:saslauthd
+mech_list: PLAIN
diff --git a/mail-mta/postfix/metadata.xml b/mail-mta/postfix/metadata.xml
new file mode 100644
index 0000000..bfcda1f
--- /dev/null
+++ b/mail-mta/postfix/metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>eras@gentoo.org</email>
+ <name>Eray Aslan</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>williamh@gentoo.org</email>
+ <name>William Hubbs</name>
+ </maintainer>
+ <use>
+ <flag name="dovecot-sasl">Enable <pkg>net-mail/dovecot</pkg> protocol
+ version 1 (server only) SASL implementation</flag>
+ <flag name="eai">Add support for SMTPUTF8</flag>
+ <flag name="ldap-bind">Add support for binding to LDAP backend
+ using <pkg>dev-libs/cyrus-sasl</pkg></flag>
+ <flag name="memcached">Add support for using <pkg>net-misc/memcached</pkg>
+ for lookup tables</flag>
+ <flag name="lmdb">Add support for using <pkg>dev-db/lmdb</pkg>
+ for lookup tables</flag>
+ </use>
+</pkgmetadata>
diff --git a/mail-mta/postfix/postfix-3.5.22.ebuild b/mail-mta/postfix/postfix-3.5.22.ebuild
new file mode 100644
index 0000000..4c1af31
--- /dev/null
+++ b/mail-mta/postfix/postfix-3.5.22.ebuild
@@ -0,0 +1,310 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic pam systemd toolchain-funcs
+
+MY_PV="${PV/_rc/-RC}"
+MY_SRC="${PN}-${MY_PV}"
+MY_URI="ftp://ftp.porcupine.org/mirrors/postfix-release/official"
+RC_VER="2.7"
+
+DESCRIPTION="A fast and secure drop-in replacement for sendmail"
+HOMEPAGE="http://www.postfix.org/"
+SRC_URI="${MY_URI}/${MY_SRC}.tar.gz"
+
+LICENSE="|| ( IBM EPL-2.0 )"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86"
+IUSE="+berkdb cdb dovecot-sasl +eai hardened ldap ldap-bind lmdb memcached mbox mysql nis pam postgres sasl selinux sqlite ssl"
+
+DEPEND="
+ acct-group/postfix
+ acct-group/postdrop
+ acct-user/postfix
+ >=dev-libs/libpcre-3.4
+ dev-lang/perl
+ berkdb? ( >=sys-libs/db-3.2:* )
+ cdb? ( || ( >=dev-db/tinycdb-0.76 >=dev-db/cdb-0.75-r4 ) )
+ eai? ( dev-libs/icu:= )
+ ldap? ( net-nds/openldap )
+ ldap-bind? ( net-nds/openldap[sasl] )
+ lmdb? ( >=dev-db/lmdb-0.9.11 )
+ mysql? ( dev-db/mysql-connector-c:0= )
+ nis? ( net-libs/libnsl )
+ pam? ( sys-libs/pam )
+ postgres? ( dev-db/postgresql:* )
+ sasl? ( >=dev-libs/cyrus-sasl-2 )
+ sqlite? ( dev-db/sqlite:3 )
+ ssl? ( dev-libs/openssl:0= )"
+
+RDEPEND="${DEPEND}
+ memcached? ( net-misc/memcached )
+ net-mail/mailbase
+ !mail-mta/courier
+ !mail-mta/esmtp
+ !mail-mta/exim
+ !mail-mta/msmtp[mta]
+ !mail-mta/netqmail
+ !mail-mta/nullmailer
+ !mail-mta/sendmail
+ !mail-mta/opensmtpd
+ !mail-mta/ssmtp[mta]
+ selinux? ( sec-policy/selinux-postfix )"
+
+REQUIRED_USE="ldap-bind? ( ldap sasl )"
+
+S="${WORKDIR}/${MY_SRC}"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.5.8-libressl.patch"
+)
+
+src_prepare() {
+ default
+ sed -i -e "/^#define ALIAS_DB_MAP/s|:/etc/aliases|:/etc/mail/aliases|" \
+ src/util/sys_defs.h || die "sed failed"
+ # change default paths to better comply with portage standard paths
+ sed -i -e "s:/usr/local/:/usr/:g" conf/master.cf || die "sed failed"
+}
+
+src_configure() {
+ for name in CDB LDAP LMDB MYSQL PCRE PGSQL SDBM SQLITE
+ do
+ local AUXLIBS_${name}=""
+ done
+
+ # Make sure LDFLAGS get passed down to the executables.
+ local mycc="-DHAS_PCRE" mylibs="${LDFLAGS} -ldl"
+ AUXLIBS_PCRE="$(pcre-config --libs)"
+
+ use pam && mylibs="${mylibs} -lpam"
+
+ if use ldap; then
+ mycc="${mycc} -DHAS_LDAP"
+ AUXLIBS_LDAP="-lldap -llber"
+ fi
+
+ if use mysql; then
+ mycc="${mycc} -DHAS_MYSQL $(mysql_config --include)"
+ AUXLIBS_MYSQL="$(mysql_config --libs)"
+ fi
+
+ if use postgres; then
+ mycc="${mycc} -DHAS_PGSQL -I$(pg_config --includedir)"
+ AUXLIBS_PGSQL="-L$(pg_config --libdir) -lpq"
+ fi
+
+ if use sqlite; then
+ mycc="${mycc} -DHAS_SQLITE"
+ AUXLIBS_SQLITE="-lsqlite3 -lpthread"
+ fi
+
+ if use ssl; then
+ mycc="${mycc} -DUSE_TLS"
+ mylibs="${mylibs} -lssl -lcrypto"
+ fi
+
+ if use lmdb; then
+ mycc="${mycc} -DHAS_LMDB"
+ AUXLIBS_LMDB="-llmdb -lpthread"
+ fi
+
+ if ! use eai; then
+ mycc="${mycc} -DNO_EAI"
+ fi
+
+ # broken. and "in other words, not supported" by upstream.
+ # Use inet_protocols setting in main.cf
+ #if ! use ipv6; then
+ # mycc="${mycc} -DNO_IPV6"
+ #fi
+
+ if use sasl; then
+ if use dovecot-sasl; then
+ # Set dovecot as default.
+ mycc="${mycc} -DDEF_SASL_SERVER=\\\"dovecot\\\""
+ fi
+ if use ldap-bind; then
+ mycc="${mycc} -DUSE_LDAP_SASL"
+ fi
+ mycc="${mycc} -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl"
+ mylibs="${mylibs} -lsasl2"
+ elif use dovecot-sasl; then
+ mycc="${mycc} -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\\\"dovecot\\\""
+ fi
+
+ if ! use nis; then
+ mycc="${mycc} -DNO_NIS"
+ fi
+
+ if ! use berkdb; then
+ mycc="${mycc} -DNO_DB"
+ if use cdb; then
+ # change default hash format from Berkeley DB to cdb
+ mycc="${mycc} -DDEF_DB_TYPE=\\\"cdb\\\""
+ fi
+ fi
+
+ if use cdb; then
+ mycc="${mycc} -DHAS_CDB -I/usr/include/cdb"
+ # Tinycdb is preferred.
+ if has_version dev-db/tinycdb ; then
+ einfo "Building with dev-db/tinycdb"
+ AUXLIBS_CDB="-lcdb"
+ else
+ einfo "Building with dev-db/cdb"
+ CDB_PATH="/usr/$(get_libdir)"
+ for i in cdb.a alloc.a buffer.a unix.a byte.a ; do
+ AUXLIBS_CDB="${AUXLIBS_CDB} ${CDB_PATH}/${i}"
+ done
+ fi
+ fi
+
+ # Robin H. Johnson <robbat2@gentoo.org> 17/Nov/2006
+ # Fix because infra boxes hit 2Gb .db files that fail a 32-bit fstat signed check.
+ mycc="${mycc} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
+ filter-lfs-flags
+
+ # Workaround for bug #76512
+ if use hardened; then
+ [[ "$(gcc-version)" == "3.4" ]] && replace-flags -O? -Os
+ fi
+
+ # Remove annoying C++ comment style warnings - bug #378099
+ append-flags -Wno-comment
+
+ sed -i -e "/^RANLIB/s/ranlib/$(tc-getRANLIB)/g" "${S}"/makedefs
+ sed -i -e "/^AR/s/ar/$(tc-getAR)/g" "${S}"/makedefs
+
+ emake makefiles shared=yes dynamicmaps=no pie=yes \
+ shlib_directory="/usr/$(get_libdir)/postfix/MAIL_VERSION" \
+ DEBUG="" CC="$(tc-getCC)" OPT="${CFLAGS}" CCARGS="${mycc}" AUXLIBS="${mylibs}" \
+ AUXLIBS_CDB="${AUXLIBS_CDB}" AUXLIBS_LDAP="${AUXLIBS_LDAP}" \
+ AUXLIBS_LMDB="${AUXLIBS_LMDB}" AUXLIBS_MYSQL="${AUXLIBS_MYSQL}" \
+ AUXLIBS_PCRE="${AUXLIBS_PCRE}" AUXLIBS_PGSQL="${AUXLIBS_PGSQL}" \
+ AUXLIBS_SQLITE="${AUXLIBS_SQLITE}"
+}
+
+src_install() {
+ LD_LIBRARY_PATH="${S}/lib" \
+ /bin/sh postfix-install \
+ -non-interactive \
+ install_root="${D}" \
+ config_directory="/etc/postfix" \
+ manpage_directory="/usr/share/man" \
+ command_directory="/usr/sbin" \
+ mailq_path="/usr/bin/mailq" \
+ newaliases_path="/usr/bin/newaliases" \
+ sendmail_path="/usr/sbin/sendmail" \
+ || die "postfix-install failed"
+
+ # Fix spool removal on upgrade
+ rm -Rf "${D}"/var
+ keepdir /var/spool/postfix
+
+ # Install rmail for UUCP, closes bug #19127
+ dobin auxiliary/rmail/rmail
+
+ # Provide another link for legacy FSH
+ dosym ../sbin/sendmail /usr/$(get_libdir)/sendmail
+
+ # Install qshape, posttls-finger and collate
+ dobin auxiliary/qshape/qshape.pl
+ doman man/man1/qshape.1
+ dobin bin/posttls-finger
+ doman man/man1/posttls-finger.1
+ dobin auxiliary/collate/collate.pl
+ newdoc auxiliary/collate/README README.collate
+
+ # Performance tuning tools and their manuals
+ dosbin bin/smtp-{source,sink} bin/qmqp-{source,sink}
+ doman man/man1/smtp-{source,sink}.1 man/man1/qmqp-{source,sink}.1
+
+ # Set proper permissions on required files/directories
+ keepdir /var/lib/postfix
+ fowners -R postfix:postfix /var/lib/postfix
+ fperms 0750 /var/lib/postfix
+ fowners root:postdrop /usr/sbin/post{drop,queue}
+ fperms 02755 /usr/sbin/post{drop,queue}
+
+ keepdir /etc/postfix
+ keepdir /etc/postfix/postfix-files.d
+ if use mbox; then
+ mypostconf="mail_spool_directory=/var/spool/mail"
+ else
+ mypostconf="home_mailbox=.maildir/"
+ fi
+ LD_LIBRARY_PATH="${S}/lib" \
+ "${D}"/usr/sbin/postconf -c "${D}"/etc/postfix \
+ -e ${mypostconf} || die "postconf failed"
+
+ insinto /etc/postfix
+ newins "${FILESDIR}"/smtp.pass saslpass
+ fperms 600 /etc/postfix/saslpass
+
+ newinitd "${FILESDIR}"/postfix.rc6.${RC_VER} postfix
+ # do not start mysql/postgres unnecessarily - bug #359913
+ use mysql || sed -i -e "s/mysql //" "${D}/etc/init.d/postfix"
+ use postgres || sed -i -e "s/postgresql //" "${D}/etc/init.d/postfix"
+
+ dodoc *README COMPATIBILITY HISTORY PORTING RELEASE_NOTES*
+ mv "${S}"/examples "${D}"/usr/share/doc/${PF}/
+ # postfix set-permissions expects uncompressed man files
+ docompress -x /usr/share/man
+
+ pamd_mimic_system smtp auth account
+
+ if use sasl; then
+ insinto /etc/sasl2
+ newins "${FILESDIR}"/smtp.sasl smtpd.conf
+ fi
+
+ # header files
+ insinto /usr/include/postfix
+ doins include/*.h
+
+ if has_version mail-mta/postfix; then
+ # let the sysadmin decide when to change the compatibility_level
+ sed -i -e /^compatibility_level/"s/^/#/" "${D}"/etc/postfix/main.cf || die
+ fi
+
+ systemd_dounit "${FILESDIR}/${PN}.service"
+}
+
+pkg_preinst() {
+ if has_version '<mail-mta/postfix-3.4'; then
+ elog
+ elog "Postfix-3.4 introduces a new master.cf service 'postlog'"
+ elog "with type 'unix-dgram' that is used by the new postlogd(8) daemon."
+ elog "Before backing out to an older Postfix version, edit the master.cf"
+ elog "file and remove the postlog entry."
+ elog
+ fi
+}
+
+pkg_postinst() {
+ if [[ ! -e /etc/mail/aliases.db ]] ; then
+ ewarn
+ ewarn "You must edit /etc/mail/aliases to suit your needs"
+ ewarn "and then run /usr/bin/newaliases. Postfix will not"
+ ewarn "work correctly without it."
+ ewarn
+ fi
+
+ # check and fix file permissions
+ "${EROOT}"/usr/sbin/postfix set-permissions
+
+ # configure tls
+ if use ssl ; then
+ if "${EROOT}"/usr/sbin/postfix tls all-default-client; then
+ elog "To configure client side TLS settings:"
+ elog "${EROOT}"/usr/sbin/postfix tls enable-client
+ fi
+ if "${EROOT}"/usr/sbin/postfix tls all-default-server; then
+ elog "To configure server side TLS settings:"
+ elog "${EROOT}"/usr/sbin/postfix tls enable-server
+ fi
+ fi
+}
diff --git a/net-analyzer/nmap/Manifest b/net-analyzer/nmap/Manifest
new file mode 100644
index 0000000..b89708f
--- /dev/null
+++ b/net-analyzer/nmap/Manifest
@@ -0,0 +1,3 @@
+DIST nmap-7.94-patches.tar.xz 4112 BLAKE2B 0720242bf507f2a1502cf854592d94a57a33d5ac1e520c752e548092f91bbffeb0f6f762f4da27ff445419ff3845060242aa43aba53d0161ae2bebccf728cc97 SHA512 d47e2215e1923af65e3a392c3d990d650e68135f139013c311a26d12cfd0b27d9d5c3cbc27bb8583251a353a6284fb9d518373f17624db242be7060b8bfa0ba5
+DIST nmap-7.94.tar.bz2 11102195 BLAKE2B 5819b458b50e33f6a507ad3c32a731c13e730c40d31a61731c3cfcd41fad8e3fdfcbb721ef46b05a80e406d0a646d0966d4b645551711144822551ef374a443a SHA512 a55cddf9c1d9272243d01251eb3315b26f232d0596818857083222a385398618b428dc2bd8282c3e832527e135a74aeb020ca8609d83d8337342f5d8a04d7f2c
+DIST nmap-7.94.tar.bz2.asc 198 BLAKE2B 38a363499fe236f675238ecf015a7e597d66cdd84eef13bed4986b4081c4f1f7a288121e3666e0f31a9282fd84f30cbceb65341f1c173086c7421a8ea719afe9 SHA512 dcbaf88e9ead21f303a7ee5390de0d2bd67477c2628858dc3380b0ac7d73d4d1b330f3b303ff32b0cb9a22eaa37af535bd7aa622531451e404a8c9a256a98eec
diff --git a/net-analyzer/nmap/files/nls.m4 b/net-analyzer/nmap/files/nls.m4
new file mode 100644
index 0000000..93df8d3
--- /dev/null
+++ b/net-analyzer/nmap/files/nls.m4
@@ -0,0 +1,32 @@
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
diff --git a/net-analyzer/nmap/files/nmap-7.92-libressl.patch b/net-analyzer/nmap/files/nmap-7.92-libressl.patch
new file mode 100644
index 0000000..e61ee1f
--- /dev/null
+++ b/net-analyzer/nmap/files/nmap-7.92-libressl.patch
@@ -0,0 +1,67 @@
+https://github.com/nmap/nmap/pull/2485
+
+From 9d4d29979c8a24a17cd05968ecf1c42f913051c5 Mon Sep 17 00:00:00 2001
+From: Kyryl Melekhin <k.melekhin@gmail.com>
+Date: Thu, 9 Jun 2022 18:52:43 +0000
+Subject: [PATCH] Fix libressl >= 3.5.0 build
+
+diff --git a/ncat/ncat_ssl.c b/ncat/ncat_ssl.c
+index 7749b2964c..76209bc2d6 100644
+--- a/ncat/ncat_ssl.c
++++ b/ncat/ncat_ssl.c
+@@ -74,7 +74,9 @@
+ #include <openssl/x509.h>
+ #include <openssl/x509v3.h>
+
+-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined LIBRESSL_VERSION_NUMBER
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
++ ((!defined LIBRESSL_VERSION_NUMBER) || \
++ (defined LIBRESSL_VERSION_NUMBER && LIBRESSL_VERSION_NUMBER >= 0x30500000L))
+ #define HAVE_OPAQUE_STRUCTS 1
+ #define FUNC_ASN1_STRING_data ASN1_STRING_get0_data
+ #else
+diff --git a/nping/Crypto.cc b/nping/Crypto.cc
+index 850438352b..d5e537eef2 100644
+--- a/nping/Crypto.cc
++++ b/nping/Crypto.cc
+@@ -70,7 +70,9 @@
+ #include <openssl/evp.h>
+ #include <openssl/err.h>
+
+-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined LIBRESSL_VERSION_NUMBER
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
++ ((!defined LIBRESSL_VERSION_NUMBER) || \
++ (defined LIBRESSL_VERSION_NUMBER && LIBRESSL_VERSION_NUMBER >= 0x30500000L))
+ #define HAVE_OPAQUE_EVP_PKEY 1
+ #define FUNC_EVP_MD_CTX_init EVP_MD_CTX_reset
+ #define FUNC_EVP_MD_CTX_cleanup EVP_MD_CTX_reset
+diff --git a/nse_openssl.cc b/nse_openssl.cc
+index 92dea3ac8e..97987ca1a0 100644
+--- a/nse_openssl.cc
++++ b/nse_openssl.cc
+@@ -21,7 +21,9 @@
+ #include <openssl/ripemd.h>
+ #include <openssl/sha.h>
+
+-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined LIBRESSL_VERSION_NUMBER
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
++ ((!defined LIBRESSL_VERSION_NUMBER) || \
++ (defined LIBRESSL_VERSION_NUMBER && LIBRESSL_VERSION_NUMBER >= 0x30500000L))
+ #define HAVE_OPAQUE_STRUCTS 1
+ #define FUNC_EVP_MD_CTX_init EVP_MD_CTX_reset
+ #define FUNC_EVP_MD_CTX_cleanup EVP_MD_CTX_reset
+diff --git a/nse_ssl_cert.cc b/nse_ssl_cert.cc
+index 53f3ddaf5a..f63d77b829 100644
+--- a/nse_ssl_cert.cc
++++ b/nse_ssl_cert.cc
+@@ -81,7 +81,9 @@
+ #include <openssl/evp.h>
+ #include <openssl/err.h>
+
+-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined LIBRESSL_VERSION_NUMBER
++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
++ ((!defined LIBRESSL_VERSION_NUMBER) || \
++ (defined LIBRESSL_VERSION_NUMBER && LIBRESSL_VERSION_NUMBER >= 0x30500000L))
+ /* Technically some of these things were added in 0x10100006
+ * but that was pre-release. */
+ #define HAVE_OPAQUE_STRUCTS 1
diff --git a/net-analyzer/nmap/files/nmap-7.94-autoconf-2.72.patch b/net-analyzer/nmap/files/nmap-7.94-autoconf-2.72.patch
new file mode 100644
index 0000000..bf6affb
--- /dev/null
+++ b/net-analyzer/nmap/files/nmap-7.94-autoconf-2.72.patch
@@ -0,0 +1,33 @@
+https://github.com/nmap/nmap/pull/2763
+https://bugs.gentoo.org/920712
+--- a/libdnet-stripped/config/acinclude.m4
++++ b/libdnet-stripped/config/acinclude.m4
+@@ -201,6 +201,8 @@
+ dnl
+ AC_DEFUN(AC_DNET_IOCTL_ARP,
+ [AC_MSG_CHECKING(for arp(7) ioctls)
++ AC_PROG_EGREP
++ AC_PROG_CPP
+ AC_CACHE_VAL(ac_cv_dnet_ioctl_arp,
+ AC_EGREP_CPP(werd, [
+ # include <sys/types.h>
+--- a/libdnet-stripped/configure.in
++++ b/libdnet-stripped/configure.in
+@@ -211,7 +211,7 @@
+ AC_REPLACE_FUNCS(err strlcpy strsep)
+
+ dnl Checks for other system-specific jonks.
+-if test "$CYGWIN" != yes ; then
++AS_IF([test "$CYGWIN" != yes], [
+ AC_DNET_BSD_BPF
+ AC_DNET_LINUX_PROCFS
+ AC_DNET_LINUX_PF_PACKET
+@@ -221,7 +221,7 @@
+ AC_DNET_RAWIP_HOST_OFFLEN
+ AC_DNET_RAWIP_COOKED
+ AC_DNET_GETKERNINFO
+-fi
++])
+
+ dnl Check for arp interface.
+ if test "$ac_cv_header_Iphlpapi_h" = yes ; then
diff --git a/net-analyzer/nmap/metadata.xml b/net-analyzer/nmap/metadata.xml
new file mode 100644
index 0000000..c93c9fd
--- /dev/null
+++ b/net-analyzer/nmap/metadata.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>sam@gentoo.org</email>
+ <name>Sam James</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>dilfridge@gentoo.org</email>
+ <name>Andreas K. Hüttel</name>
+ </maintainer>
+ <use>
+ <flag name="libssh2">Enable SSH support through <pkg>net-libs/libssh2</pkg></flag>
+ <flag name="ncat">Install the ncat utility</flag>
+ <flag name="ndiff">Install the ndiff utility</flag>
+ <flag name="nping">Install the nping utility</flag>
+ <flag name="nse">Include support for the Nmap Scripting Engine (NSE)</flag>
+ <flag name="symlink">Install symlink to nc</flag>
+ <flag name="zenmap">Install the GTK+ based nmap GUI, zenmap</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">nmap/nmap</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-analyzer/nmap/nmap-7.94.ebuild b/net-analyzer/nmap/nmap-7.94.ebuild
new file mode 100644
index 0000000..9971b2a
--- /dev/null
+++ b/net-analyzer/nmap/nmap-7.94.ebuild
@@ -0,0 +1,189 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-4 )
+LUA_REQ_USE="deprecated"
+PYTHON_COMPAT=( python3_{10..11} )
+PLOCALES="de es fr hi hr hu id it ja pl pt_BR pt_PR ro ru sk zh"
+PLOCALE_BACKUP="en"
+inherit autotools lua-single plocale python-single-r1 toolchain-funcs
+
+DESCRIPTION="Network exploration tool and security / port scanner"
+HOMEPAGE="https://nmap.org/"
+if [[ ${PV} == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/nmap/nmap"
+
+else
+ VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/nmap.asc
+ inherit verify-sig
+
+ SRC_URI="https://nmap.org/dist/${P}.tar.bz2"
+ SRC_URI+=" verify-sig? ( https://nmap.org/dist/sigs/${P}.tar.bz2.asc )"
+
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
+fi
+
+SRC_URI+=" https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${PN}-7.94-patches.tar.xz"
+
+# https://github.com/nmap/nmap/issues/2199
+LICENSE="NPSL-0.95"
+SLOT="0"
+IUSE="ipv6 libssh2 ncat ndiff nping nls +nse ssl symlink zenmap"
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ nse? ( ${LUA_REQUIRED_USE} )
+ symlink? ( ncat )
+"
+
+RDEPEND="
+ dev-libs/liblinear:=
+ dev-libs/libpcre
+ net-libs/libpcap
+ ndiff? ( ${PYTHON_DEPS} )
+ libssh2? (
+ net-libs/libssh2[zlib]
+ sys-libs/zlib
+ )
+ nls? ( virtual/libintl )
+ nse? (
+ ${LUA_DEPS}
+ sys-libs/zlib
+ )
+ ssl? ( dev-libs/openssl:= )
+ symlink? (
+ ncat? (
+ !net-analyzer/netcat
+ !net-analyzer/openbsd-netcat
+ )
+ )
+ zenmap? (
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ )
+"
+DEPEND="${RDEPEND}"
+# Python is always needed at build time for some scripts
+BDEPEND="
+ ${PYTHON_DEPS}
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+"
+
+if [[ ${PV} != *9999* ]] ; then
+ BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-nmap )"
+fi
+
+PATCHES=(
+ "${WORKDIR}"/${PN}-7.94-patches
+ "${FILESDIR}"/${PN}-7.94-autoconf-2.72.patch
+ "${FILESDIR}"/${PN}-7.92-libressl.patch
+)
+
+pkg_setup() {
+ python-single-r1_pkg_setup
+
+ use nse && lua-single_pkg_setup
+}
+
+src_unpack() {
+ if [[ ${PV} == *9999 ]] ; then
+ git-r3_src_unpack
+ elif use verify-sig ; then
+ # Needed for downloaded patch (which is unsigned, which is fine)
+ verify-sig_verify_detached "${DISTDIR}"/${P}.tar.bz2{,.asc}
+ fi
+
+ default
+}
+
+src_prepare() {
+ default
+
+ # Drop bundled libraries
+ rm -r liblinear/ libpcap/ libpcre/ libssh2/ libz/ || die
+
+ cat "${FILESDIR}"/nls.m4 >> "${S}"/acinclude.m4 || die
+
+ delete_disabled_locale() {
+ # Force here as PLOCALES contains supported locales for man
+ # pages and zenmap doesn't have all of those
+ rm -rf zenmap/share/zenmap/locale/${1} || die
+ rm -f zenmap/share/zenmap/locale/${1}.po || die
+ }
+ plocale_for_each_disabled_locale delete_disabled_locale
+
+ sed -i \
+ -e '/^ALL_LINGUAS =/{s|$| id|g;s|jp|ja|g}' \
+ Makefile.in || die
+
+ cp libdnet-stripped/include/config.h.in{,.nmap-orig} || die
+
+ eautoreconf
+
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ # We need the original for a Darwin-specific fix, bug #604432
+ mv libdnet-stripped/include/config.h.in{.nmap-orig,} || die
+ fi
+}
+
+src_configure() {
+ export ac_cv_path_PYTHON="${PYTHON}"
+ export am_cv_pathless_PYTHON="${EPYTHON}"
+
+ local myeconfargs=(
+ $(use_enable ipv6)
+ $(use_enable nls)
+ $(use_with libssh2)
+ $(use_with ncat)
+ $(use_with ndiff)
+ $(use_with nping)
+ $(use_with nse liblua)
+ $(use_with ssl openssl)
+ $(use_with zenmap)
+ $(usex libssh2 --with-zlib)
+ $(usex nse --with-zlib)
+ --cache-file="${S}"/config.cache
+ # The bundled libdnet is incompatible with the version available in the
+ # tree, so we cannot use the system library here.
+ --with-libdnet=included
+ --with-pcre="${ESYSROOT}"/usr
+ --without-dpdk
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ local directory
+ for directory in . libnetutil nsock/src $(usev ncat) $(usev nping) ; do
+ emake -C "${directory}" makefile.dep
+ done
+
+ emake \
+ AR="$(tc-getAR)" \
+ RANLIB="$(tc-getRANLIB)"
+}
+
+src_install() {
+ # See bug #831713 for return of -j1
+ LC_ALL=C emake \
+ -j1 \
+ DESTDIR="${D}" \
+ STRIP=: \
+ nmapdatadir="${EPREFIX}"/usr/share/nmap \
+ install
+
+ dodoc CHANGELOG HACKING docs/README docs/*.txt
+
+ if use ndiff || use zenmap ; then
+ python_optimize
+ fi
+
+ use symlink && dosym /usr/bin/ncat /usr/bin/nc
+}
diff --git a/net-dialup/freeradius/Manifest b/net-dialup/freeradius/Manifest
new file mode 100644
index 0000000..387fe37
--- /dev/null
+++ b/net-dialup/freeradius/Manifest
@@ -0,0 +1,2 @@
+DIST freeradius-server-3.2.2.tar.bz2 3418998 BLAKE2B 584d1ff79cf3a75c79f5b24f9e47d7c8d8caee0d706eb47bb387300172f0699f904804d963aab8c252a21fe67f7885a47659b8cd9db5292a6d4db087d72e8e38 SHA512 91dc574560a1f75cafa8bc78c0676f0e3dae7154ecbb395e0e1f6738f78d8bcfe1bff122364452798fd0434c4056fd946799b8f29a1141398bf0542a37870689
+DIST freeradius-server-3.2.3.tar.bz2 3454869 BLAKE2B 525204331a5b123dac7457c6adb755cbe9794dbff4a536ea665fc7d1cac97553e392b7b598741c2a9dd00c81decd00608499d6f25208e389b9f213f54977de84 SHA512 06767153e262a2baa2d0cc74099bc13c23b33c2316348b5dc8ec0f5834c028571bd09b8c01726a6eabeaab8fdc3050f40bfeba2d5b1c299585d1689abad365ce
diff --git a/net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch b/net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch
new file mode 100644
index 0000000..0422365
--- /dev/null
+++ b/net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch
@@ -0,0 +1,57 @@
+diff --git a/debian/freeradius.service b/debian/freeradius.service
+index 378702d184..ee33c2a294 100644
+--- a/debian/freeradius.service
++++ b/debian/freeradius.service
+@@ -7,7 +7,6 @@ Documentation=man:radiusd(8) man:radiusd.conf(5) http://wiki.freeradius.org/ htt
+ Type=notify
+ WatchdogSec=60
+ NotifyAccess=all
+-EnvironmentFile=-/etc/default/freeradius
+
+ # FreeRADIUS can do static evaluation of policy language rules based
+ # on environmental variables which is very useful for doing per-host
+@@ -25,16 +24,15 @@ MemoryLimit=2G
+ # Ensure the daemon can still write its pidfile after it drops
+ # privileges. Combination of options that work on a variety of
+ # systems. Test very carefully if you alter these lines.
+-RuntimeDirectory=freeradius
++RuntimeDirectory=radiusd
+ RuntimeDirectoryMode=0775
+ # This does not work on Debian Jessie:
+-User=freerad
+-Group=freerad
+-# This does not work on Ubuntu Bionic:
+-ExecStartPre=/bin/chown freerad:freerad /var/run/freeradius
++User=radius
++Group=radius
+
+-ExecStartPre=/usr/sbin/freeradius $FREERADIUS_OPTIONS -Cx -lstdout
+-ExecStart=/usr/sbin/freeradius -f $FREERADIUS_OPTIONS
++ExecStartPre=/usr/sbin/radiusd $RADIUSD_OPTIONS -Cx -lstdout
++ExecStart=/usr/sbin/radiusd -f $RADIUSD_OPTIONS
++ExecReload=/bin/kill -HUP $MAINPID
+ Restart=on-failure
+ RestartSec=5
+
+@@ -42,7 +40,7 @@ RestartSec=5
+ NoNewPrivileges=true
+
+ # Allow binding to secure ports, broadcast addresses, and raw interfaces.
+-#CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SETUID CAP_SETGID CAP_CHOWN CAP_DAC_OVERRIDE
++CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SETUID CAP_SETGID CAP_CHOWN CAP_DAC_OVERRIDE
+
+ # Private /tmp that isn't shared by other processes
+ PrivateTmp=true
+@@ -60,10 +58,10 @@ ProtectKernelTunables=true
+ SystemCallArchitectures=native
+
+ # We shouldn't be writing to the configuration directory
+-ReadOnlyDirectories=/etc/freeradius/
++ReadOnlyDirectories=/etc/raddb/
+
+ # We can read and write to the log directory.
+-ReadWriteDirectories=/var/log/freeradius/
++ReadWriteDirectories=/var/log/radius/
+
+ [Install]
+ WantedBy=multi-user.target
diff --git a/net-dialup/freeradius/files/freeradius-3.2.1-libressl.patch b/net-dialup/freeradius/files/freeradius-3.2.1-libressl.patch
new file mode 100644
index 0000000..2c5297b
--- /dev/null
+++ b/net-dialup/freeradius/files/freeradius-3.2.1-libressl.patch
@@ -0,0 +1,127 @@
+From OpenBSD:
+
+https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/net/freeradius/patches/patch-src_main_cb_c
+https://github.com/openbsd/ports/blob/master/net/freeradius/patches/patch-src_main_tls_c
+https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/net/freeradius/patches/patch-src_modules_rlm_eap_types_rlm_eap_fast_rlm_eap_fast_c
+https://github.com/openbsd/ports/blob/master/net/freeradius/patches/patch-src_modules_rlm_pap_rlm_pap_c
+
+Index: src/main/cb.c
+--- a/src/main/cb.c.orig
++++ b/src/main/cb.c
+@@ -64,7 +64,7 @@ void cbtls_info(SSL const *s, int where, int ret)
+ /*
+ * After a ClientHello, list all the proposed ciphers from the client
+ */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ if (SSL_get_state(s) == TLS_ST_SR_CLNT_HELLO) {
+ int i;
+ int num_ciphers;
+@@ -192,7 +192,7 @@ void cbtls_msg(int write_p, int msg_version, int conte
+ state->info.alert_level = 0x00;
+ state->info.alert_description = 0x00;
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ } else if (content_type == SSL3_RT_INNER_CONTENT_TYPE && buf[0] == SSL3_RT_APPLICATION_DATA) {
+ /* let tls_ack_handler set application_data */
+ state->info.content_type = SSL3_RT_HANDSHAKE;
+Index: src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c
+--- a/src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c.orig
++++ b/src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c
+@@ -200,7 +200,7 @@ static void eap_fast_session_ticket(tls_session_t *tls
+ }
+
+ // hostap:src/crypto/tls_openssl.c:tls_sess_sec_cb()
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static int _session_secret(SSL *s, void *secret, int *secret_len,
+ UNUSED STACK_OF(SSL_CIPHER) *peer_ciphers,
+ UNUSED SSL_CIPHER **cipher, void *arg)
+@@ -224,7 +224,7 @@ static int _session_secret(SSL *s, void *secret, int *
+
+ RDEBUG("processing PAC-Opaque");
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ eap_fast_session_ticket(tls_session, s->s3->client_random, s->s3->server_random, secret, secret_len);
+ #else
+ uint8_t client_random[SSL3_RANDOM_SIZE];
+Index: src/main/tls.c
+--- a/src/main/tls.c.orig
++++ b/src/main/tls.c
+@@ -696,7 +696,7 @@ tls_session_t *tls_new_session(TALLOC_CTX *ctx, fr_tls
+ /*
+ * Swap empty store with the old one.
+ */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ conf->old_x509_store = SSL_CTX_get_cert_store(conf->ctx);
+ /* Bump refcnt so the store is kept allocated till next store replacement */
+ X509_STORE_up_ref(conf->old_x509_store);
+@@ -2042,7 +2042,7 @@ done:
+ return 0;
+ }
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static SSL_SESSION *cbtls_get_session(SSL *ssl, unsigned char *data, int len, int *copy)
+ #else
+ static SSL_SESSION *cbtls_get_session(SSL *ssl, const unsigned char *data, int len, int *copy)
+@@ -2426,7 +2426,7 @@ static int cbtls_cache_refresh(SSL *ssl, SSL_SESSION *
+ return 0;
+ }
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static SSL_SESSION *cbtls_cache_load(SSL *ssl, unsigned char *data, int len, int *copy)
+ #else
+ static SSL_SESSION *cbtls_cache_load(SSL *ssl, const unsigned char *data, int len, int *copy)
+@@ -2962,7 +2962,7 @@ int cbtls_verify(int ok, X509_STORE_CTX *ctx)
+ char cn_str[1024];
+ char buf[64];
+ X509 *client_cert;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ const STACK_OF(X509_EXTENSION) *ext_list;
+ #else
+ STACK_OF(X509_EXTENSION) *ext_list;
+@@ -3197,7 +3197,7 @@ int cbtls_verify(int ok, X509_STORE_CTX *ctx)
+ }
+
+ if (lookup == 0) {
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ ext_list = X509_get0_extensions(client_cert);
+ #else
+ X509_CINF *client_inf;
+@@ -3250,7 +3250,7 @@ int cbtls_verify(int ok, X509_STORE_CTX *ctx)
+ value[0] = '0';
+ value[1] = 'x';
+ const unsigned char *srcp;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ const ASN1_STRING *srcasn1p;
+ srcasn1p = X509_EXTENSION_get_data(ext);
+ srcp = ASN1_STRING_get0_data(srcasn1p);
+@@ -4274,7 +4274,7 @@ post_ca:
+ }
+ }
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER) /* SSL_CTX_set1_sigalgs_list */
+ if (conf->sigalgs_list) {
+ char *list;
+
+Index: src/modules/rlm_pap/rlm_pap.c
+--- a/src/modules/rlm_pap/rlm_pap.c.orig
++++ b/src/modules/rlm_pap/rlm_pap.c
+@@ -930,7 +930,7 @@ static inline rlm_rcode_t CC_HINT(nonnull) pap_auth_pb
+ digest_len = SHA512_DIGEST_LENGTH;
+ break;
+
+-# if OPENSSL_VERSION_NUMBER >= 0x10101000L
++# if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ case PW_SSHA3_224_PASSWORD:
+ evp_md = EVP_sha3_224();
+ digest_len = SHA224_DIGEST_LENGTH;
diff --git a/net-dialup/freeradius/files/freeradius-3.2.3-configure-c99.patch b/net-dialup/freeradius/files/freeradius-3.2.3-configure-c99.patch
new file mode 100644
index 0000000..395e97d
--- /dev/null
+++ b/net-dialup/freeradius/files/freeradius-3.2.3-configure-c99.patch
@@ -0,0 +1,38 @@
+https://src.fedoraproject.org/rpms/freeradius/c/1793f410aa789704b5ac0be9cf7d0eaece906d1a?branch=rawhide
+https://github.com/FreeRADIUS/freeradius-server/pull/5246
+
+The backtrace_symbols function expects a pointer to an array of void *
+values, not a pointer to an array of a single element. Removing the
+address operator ensures that the right type is used.
+
+This avoids an unconditional failure of this probe with compilers that
+treat incompatible pointer types as a compilation error.
+
+Submitted upstream: <https://github.com/FreeRADIUS/freeradius-server/pull/5246>
+
+diff --git a/configure b/configure
+index ed01ee2bdd912f63..1e6d2284779cdd58 100755
+--- a/configure
++++ b/configure
+@@ -13390,7 +13390,7 @@ main (void)
+ {
+
+ void *sym[1];
+- backtrace_symbols(&sym, sizeof(sym))
++ backtrace_symbols(sym, sizeof(sym))
+ ;
+ return 0;
+ }
+diff --git a/configure.ac b/configure.ac
+index 76320213b51d7bb4..6a689711d6c90483 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2168,7 +2168,7 @@ if test "x$ac_cv_header_execinfo_h" = "xyes"; then
+ #include <execinfo.h>
+ ]], [[
+ void *sym[1];
+- backtrace_symbols(&sym, sizeof(sym)) ]])],[
++ backtrace_symbols(sym, sizeof(sym)) ]])],[
+ AC_MSG_RESULT(yes)
+ ac_cv_lib_execinfo_backtrace_symbols="yes"
+ ],[
diff --git a/net-dialup/freeradius/files/radius.conf-r6 b/net-dialup/freeradius/files/radius.conf-r6
new file mode 100644
index 0000000..50d2a1c
--- /dev/null
+++ b/net-dialup/freeradius/files/radius.conf-r6
@@ -0,0 +1,22 @@
+# Config file for /etc/init.d/radiusd
+
+# see man pages for radiusd run `radiusd -h`
+# for valid cmdline options
+#RADIUSD_OPTS=""
+
+# Change this value if you change it in /etc/raddb/radiusd.conf
+pidfile=/run/radiusd/radiusd.pid
+
+# Change these values if you change them in /etc/raddb/radiusd.conf
+RADIUSD_USER=radius
+RADIUSD_GROUP=radius
+
+RADIUSD_LOGPATH=/var/log/radius
+
+# If you set up logging to syslog in /etc/raddb/radiusd.conf, you want
+# to uncomment the following line.
+#rc_use="logger"
+
+# If you use ldap, start the ldap server prior to FreeRADIUS to avoid
+# startup crashes.
+#rc_use="ldap"
diff --git a/net-dialup/freeradius/files/radius.init-r4 b/net-dialup/freeradius/files/radius.init-r4
new file mode 100644
index 0000000..dee1842
--- /dev/null
+++ b/net-dialup/freeradius/files/radius.init-r4
@@ -0,0 +1,31 @@
+#!/sbin/openrc-run
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command=/usr/sbin/radiusd
+command_args="${RADIUSD_OPTS}"
+pidfile="${pidfile:-/run/radiusd/radiusd.pid}"
+extra_started_commands="reload"
+
+depend() {
+ need localmount
+ use dns
+}
+
+start_pre() {
+ if [ ! -f /etc/raddb/radiusd.conf ] ; then
+ eerror "No /etc/raddb/radiusd.conf file exists!"
+ return 1
+ fi
+
+ checkpath -m0750 -o "${RADIUSD_USER:-root}:${RADIUSD_GROUP:-root}" -d \
+ $(dirname ${pidfile}) "${RADIUSD_LOGPATH:-/var/log/radius}"
+ checkpath -m0750 -o "${RADIUSD_USER:-root}:${RADIUSD_GROUP:-root}" -d \
+ $(dirname ${pidfile}) /run/radiusd
+}
+
+reload() {
+ ebegin "Reloading radiusd"
+ kill -HUP $(cat ${pidfile})
+ eend $?
+}
diff --git a/net-dialup/freeradius/freeradius-3.2.2.ebuild b/net-dialup/freeradius/freeradius-3.2.2.ebuild
new file mode 100644
index 0000000..d25e02d
--- /dev/null
+++ b/net-dialup/freeradius/freeradius-3.2.2.ebuild
@@ -0,0 +1,315 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..11} )
+AUTOTOOLS_DEPEND=">=dev-build/autoconf-2.69"
+inherit autotools pam python-single-r1 systemd
+
+MY_PN=${PN}-server
+MY_P=${MY_PN}-${PV}
+MY_PV=$(ver_rs 1- "_")
+
+DESCRIPTION="Highly configurable free RADIUS server"
+HOMEPAGE="https://freeradius.org/"
+SRC_URI="https://github.com/FreeRADIUS/freeradius-server/releases/download/release_${MY_PV}/${MY_P}.tar.bz2"
+S="${WORKDIR}"/${MY_P}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~ppc ~ppc64 ~sparc x86"
+
+IUSE="
+ debug firebird iodbc kerberos ldap memcached mysql mongodb odbc oracle pam
+ postgres python readline redis samba selinux sqlite ssl systemd
+"
+
+RESTRICT="firebird? ( bindist )"
+
+# NOTE: Temporary freeradius doesn't support linking with mariadb client
+# libs also if code is compliant, will be available in the next release.
+# (http://lists.freeradius.org/pipermail/freeradius-devel/2018-October/013228.html)a
+
+# TODO: rlm_mschap works with both samba library or without. I need to avoid
+# linking of samba library if -samba is used.
+
+# TODO: unconditional json-c for now as automagic dep despite efforts to stop it
+# ditto libpcap. Can restore USE=rest, USE=pcap if/when fixed.
+
+DEPEND="
+ acct-group/radius
+ acct-user/radius
+ !net-dialup/cistronradius
+ dev-libs/libltdl
+ dev-libs/libpcre
+ dev-libs/json-c:=
+ dev-lang/perl:=
+ net-libs/libpcap
+ net-misc/curl
+ sys-libs/gdbm:=
+ sys-libs/libcap
+ sys-libs/talloc
+ virtual/libcrypt:=
+ firebird? ( dev-db/firebird )
+ iodbc? ( dev-db/libiodbc )
+ kerberos? ( virtual/krb5 )
+ ldap? ( net-nds/openldap:= )
+ memcached? ( dev-libs/libmemcached )
+ mysql? ( dev-db/mysql-connector-c:= )
+ mongodb? ( >=dev-libs/mongo-c-driver-1.13.0-r1 )
+ odbc? ( dev-db/unixODBC )
+ oracle? ( dev-db/oracle-instantclient[sdk] )
+ pam? ( sys-libs/pam )
+ postgres? ( dev-db/postgresql:= )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline:= )
+ redis? ( dev-libs/hiredis:= )
+ samba? ( net-fs/samba )
+ sqlite? ( dev-db/sqlite:3 )
+ ssl? ( >=dev-libs/openssl-1.0.2:=[-bindist(-)] )
+ systemd? ( sys-apps/systemd:= )
+"
+RDEPEND="
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-radius )
+"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+# bug #721040
+QA_SONAME="usr/lib.*/libfreeradius-.*.so"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.2.1-libressl.patch
+ "${FILESDIR}"/${PN}-3.0.20-systemd-service.patch
+)
+
+pkg_setup() {
+ if use python ; then
+ python-single-r1_pkg_setup
+ export PYTHONBIN="${EPYTHON}"
+ fi
+}
+
+src_prepare() {
+ default
+
+ # Most of the configuration options do not appear as ./configure
+ # switches. Instead it identifies the directories that are available
+ # and run through them. These might check for the presence of
+ # various libraries, in which case they are not built. To avoid
+ # automagic dependencies, we just remove all the modules that we're
+ # not interested in using.
+ # TODO: shift more of these into configure args below as things
+ # are a bit better now.
+ use ssl || { rm -r src/modules/rlm_eap/types/rlm_eap_{tls,ttls,peap} || die ; }
+ use ldap || { rm -r src/modules/rlm_ldap || die ; }
+ use kerberos || { rm -r src/modules/rlm_krb5 || die ; }
+ use memcached || { rm -r src/modules/rlm_cache/drivers/rlm_cache_memcached || die ; }
+ use pam || { rm -r src/modules/rlm_pam || die ; }
+
+ # Drop support for python2
+ rm -r src/modules/rlm_python || die
+
+ use python || { rm -r src/modules/rlm_python3 || die ; }
+ #use rest || { rm -r src/modules/rlm_rest || die ; }
+ # Do not install ruby rlm module, bug #483108
+ rm -r src/modules/rlm_ruby || die
+
+ # These are all things we don't have in portage/I don't want to deal
+ # with myself.
+ #
+ # Requires TNCS library
+ rm -r src/modules/rlm_eap/types/rlm_eap_tnc || die
+ # Requires libeap-ikev2
+ rm -r src/modules/rlm_eap/types/rlm_eap_ikev2 || die
+ # Requires some membership.h
+ rm -r src/modules/rlm_opendirectory || die
+ # ?
+ rm -r src/modules/rlm_sql/drivers/rlm_sql_{db2,freetds} || die
+
+ # SQL drivers that are not part of experimental are loaded from a
+ # file, so we have to remove them from the file itself when we
+ # remove them.
+ usesqldriver() {
+ local flag=$1
+ local driver=rlm_sql_${2:-${flag}}
+
+ if ! use ${flag} ; then
+ rm -r src/modules/rlm_sql/drivers/${driver} || die
+ sed -i -e /${driver}/d src/modules/rlm_sql/stable || die
+ fi
+ }
+
+ sed -i \
+ -e 's:^#\tuser = :\tuser = :g' \
+ -e 's:^#\tgroup = :\tgroup = :g' \
+ -e 's:/var/run/radiusd:/run/radiusd:g' \
+ -e '/^run_dir/s:${localstatedir}::g' \
+ raddb/radiusd.conf.in || die
+
+ # - Verbosity
+ # - B uild shared libraries using jlibtool -shared
+ sed -i \
+ -e 's|--silent ||g' \
+ -e 's:--mode=\(compile\|link\):& -shared:g' \
+ scripts/libtool.mk || die
+
+ # Crude measure to stop jlibtool from running ranlib and ar
+ sed -i \
+ -e '/LIBRARIAN/s|".*"|"true"|g' \
+ -e '/RANLIB/s|".*"|"true"|g' \
+ scripts/jlibtool.c || die
+
+ usesqldriver mysql
+ usesqldriver postgres postgresql
+ usesqldriver firebird
+ usesqldriver iodbc
+ usesqldriver odbc unixodbc
+ usesqldriver oracle
+ usesqldriver sqlite
+ usesqldriver mongodb mongo
+
+ eautoreconf
+}
+
+src_configure() {
+ # Do not try to enable static with static-libs; upstream is a
+ # massacre of libtool best practices so you also have to make sure
+ # to --enable-shared explicitly.
+ local myeconfargs=(
+ # Revisit confcache when not needing to use ac_cv anymore
+ # for automagic deps.
+ #--cache-file="${S}"/config.cache
+
+ --enable-shared
+ --disable-ltdl-install
+ --disable-silent-rules
+ --with-system-libtool
+ --with-system-libltdl
+
+ --enable-strict-dependencies
+ --without-rlm_couchbase
+ --without-rlm_securid
+ --without-rlm_unbound
+ --without-rlm_idn
+ #--without-rlm_json
+ #$(use_with rest libfreeradius-json)
+
+ # Our OpenSSL should be patched. Avoid false-positive failures.
+ --disable-openssl-version-check
+ --with-ascend-binary
+ --with-udpfromto
+ --with-dhcp
+ --with-pcre
+ --with-iodbc-include-dir=/usr/include/iodbc
+ --with-experimental-modules
+ --with-docdir=/usr/share/doc/${PF}
+ --with-logdir=/var/log/radius
+
+ $(use_enable debug developer)
+ $(use_with ldap edir)
+ $(use_with redis rlm_cache_redis)
+ $(use_with redis rlm_redis)
+ $(use_with redis rlm_rediswho)
+ $(use_with ssl openssl)
+ $(use_with systemd systemd)
+ )
+
+ # bug #77613
+ if has_version app-crypt/heimdal ; then
+ myeconfargs+=( --enable-heimdal-krb5 )
+ fi
+
+ if use python ; then
+ myeconfargs+=(
+ --with-rlm-python3-bin=${EPYTHON}
+ --with-rlm-python3-config-bin=${EPYTHON}-config
+ )
+ fi
+
+ if ! use readline ; then
+ export ac_cv_lib_readline=no
+ fi
+
+ #if ! use pcap ; then
+ # export ac_cv_lib_pcap_pcap_open_live=no
+ # export ac_cv_header_pcap_h=no
+ #fi
+
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ # Verbose, do not generate certificates
+ emake \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS=''
+}
+
+src_install() {
+ dodir /etc
+
+ diropts -m0750 -o root -g radius
+ dodir /etc/raddb
+
+ diropts -m0750 -o radius -g radius
+ dodir /var/log/radius
+
+ keepdir /var/log/radius/radacct
+ diropts
+
+ # - Verbose, do not install certificates
+ # - Parallel install fails (bug #509498)
+ emake -j1 \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS='' \
+ R="${D}" \
+ install
+
+ if use pam ; then
+ pamd_mimic_system radiusd auth account password session
+ fi
+
+ # bug #711756
+ fowners -R radius:radius /etc/raddb
+ fowners -R radius:radius /var/log/radius
+
+ dodoc CREDITS
+
+ rm "${ED}"/usr/sbin/rc.radiusd || die
+
+ newinitd "${FILESDIR}"/radius.init-r4 radiusd
+ newconfd "${FILESDIR}"/radius.conf-r6 radiusd
+
+ if ! use systemd ; then
+ # If systemd builtin is not enabled we need use Type=Simple
+ # as systemd .service
+ sed -i -e 's:^Type=.*::g' \
+ -e 's:^WatchdogSec=.*::g' -e 's:^NotifyAccess=all.*::g' \
+ "${S}"/debian/freeradius.service
+ fi
+
+ systemd_dounit "${S}"/debian/freeradius.service
+
+ find "${ED}" \( -name "*.a" -o -name "*.la" \) -delete || die
+}
+
+pkg_config() {
+ if use ssl ; then
+ cd "${ROOT}"/etc/raddb/certs || die
+
+ ./bootstrap || die "Error while running ./bootstrap script."
+ chown root:radius "${ROOT}"/etc/raddb/certs || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/ca.pem || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/server.{key,crt,pem} || die
+ fi
+}
+
+pkg_preinst() {
+ if ! has_version ${CATEGORY}/${PN} && use ssl ; then
+ elog "You have to run \`emerge --config =${CATEGORY}/${PF}\` to be able"
+ elog "to start the radiusd service."
+ fi
+}
diff --git a/net-dialup/freeradius/freeradius-3.2.3.ebuild b/net-dialup/freeradius/freeradius-3.2.3.ebuild
new file mode 100644
index 0000000..00eeeee
--- /dev/null
+++ b/net-dialup/freeradius/freeradius-3.2.3.ebuild
@@ -0,0 +1,322 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..11} )
+AUTOTOOLS_DEPEND=">=dev-build/autoconf-2.69"
+inherit autotools pam python-single-r1 systemd
+
+MY_PN=${PN}-server
+MY_P=${MY_PN}-${PV}
+MY_PV=$(ver_rs 1- "_")
+
+DESCRIPTION="Highly configurable free RADIUS server"
+HOMEPAGE="https://freeradius.org/"
+SRC_URI="https://github.com/FreeRADIUS/freeradius-server/releases/download/release_${MY_PV}/${MY_P}.tar.bz2"
+S="${WORKDIR}"/${MY_P}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~sparc ~x86"
+
+IUSE="
+ debug firebird iodbc kerberos ldap memcached mysql mongodb odbc oracle pam
+ postgres python readline redis samba selinux sqlite ssl systemd
+"
+
+RESTRICT="firebird? ( bindist )"
+
+# NOTE: Temporary freeradius doesn't support linking with mariadb client
+# libs also if code is compliant, will be available in the next release.
+# (http://lists.freeradius.org/pipermail/freeradius-devel/2018-October/013228.html)a
+
+# TODO: rlm_mschap works with both samba library or without. I need to avoid
+# linking of samba library if -samba is used.
+
+# TODO: unconditional json-c for now as automagic dep despite efforts to stop it
+# ditto libpcap. Can restore USE=rest, USE=pcap if/when fixed.
+
+DEPEND="
+ acct-group/radius
+ acct-user/radius
+ !net-dialup/cistronradius
+ dev-libs/libltdl
+ dev-libs/libpcre
+ dev-libs/json-c:=
+ dev-lang/perl:=
+ net-libs/libpcap
+ net-misc/curl
+ sys-libs/gdbm:=
+ sys-libs/libcap
+ sys-libs/talloc
+ virtual/libcrypt:=
+ firebird? ( dev-db/firebird )
+ iodbc? ( dev-db/libiodbc )
+ kerberos? ( virtual/krb5 )
+ ldap? ( net-nds/openldap:= )
+ memcached? ( dev-libs/libmemcached )
+ mysql? ( dev-db/mysql-connector-c:= )
+ mongodb? ( >=dev-libs/mongo-c-driver-1.13.0-r1 )
+ odbc? ( dev-db/unixODBC )
+ oracle? ( dev-db/oracle-instantclient[sdk] )
+ pam? ( sys-libs/pam )
+ postgres? ( dev-db/postgresql:= )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline:= )
+ redis? ( dev-libs/hiredis:= )
+ samba? ( net-fs/samba )
+ sqlite? ( dev-db/sqlite:3 )
+ ssl? ( >=dev-libs/openssl-1.0.2:=[-bindist(-)] )
+ systemd? ( sys-apps/systemd:= )
+"
+RDEPEND="
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-radius )
+"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+# bug #721040
+QA_SONAME="usr/lib.*/libfreeradius-.*.so"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ # Not available on Linux (bug #900048)
+ htonll
+ htonlll
+)
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.2.1-libressl.patch
+ "${FILESDIR}"/${PN}-3.0.20-systemd-service.patch
+ "${FILESDIR}"/${PN}-3.2.3-configure-c99.patch
+)
+
+pkg_setup() {
+ if use python ; then
+ python-single-r1_pkg_setup
+ export PYTHONBIN="${EPYTHON}"
+ fi
+}
+
+src_prepare() {
+ default
+
+ # Most of the configuration options do not appear as ./configure
+ # switches. Instead it identifies the directories that are available
+ # and run through them. These might check for the presence of
+ # various libraries, in which case they are not built. To avoid
+ # automagic dependencies, we just remove all the modules that we're
+ # not interested in using.
+ # TODO: shift more of these into configure args below as things
+ # are a bit better now.
+ use ssl || { rm -r src/modules/rlm_eap/types/rlm_eap_{tls,ttls,peap} || die ; }
+ use ldap || { rm -r src/modules/rlm_ldap || die ; }
+ use kerberos || { rm -r src/modules/rlm_krb5 || die ; }
+ use memcached || { rm -r src/modules/rlm_cache/drivers/rlm_cache_memcached || die ; }
+ use pam || { rm -r src/modules/rlm_pam || die ; }
+
+ # Drop support for python2
+ rm -r src/modules/rlm_python || die
+
+ use python || { rm -r src/modules/rlm_python3 || die ; }
+ #use rest || { rm -r src/modules/rlm_rest || die ; }
+ # Do not install ruby rlm module, bug #483108
+ rm -r src/modules/rlm_ruby || die
+
+ # These are all things we don't have in portage/I don't want to deal
+ # with myself.
+ #
+ # Requires TNCS library
+ rm -r src/modules/rlm_eap/types/rlm_eap_tnc || die
+ # Requires libeap-ikev2
+ rm -r src/modules/rlm_eap/types/rlm_eap_ikev2 || die
+ # Requires some membership.h
+ rm -r src/modules/rlm_opendirectory || die
+ # ?
+ rm -r src/modules/rlm_sql/drivers/rlm_sql_{db2,freetds} || die
+
+ # SQL drivers that are not part of experimental are loaded from a
+ # file, so we have to remove them from the file itself when we
+ # remove them.
+ usesqldriver() {
+ local flag=$1
+ local driver=rlm_sql_${2:-${flag}}
+
+ if ! use ${flag} ; then
+ rm -r src/modules/rlm_sql/drivers/${driver} || die
+ sed -i -e /${driver}/d src/modules/rlm_sql/stable || die
+ fi
+ }
+
+ sed -i \
+ -e 's:^#\tuser = :\tuser = :g' \
+ -e 's:^#\tgroup = :\tgroup = :g' \
+ -e 's:/var/run/radiusd:/run/radiusd:g' \
+ -e '/^run_dir/s:${localstatedir}::g' \
+ raddb/radiusd.conf.in || die
+
+ # - Verbosity
+ # - B uild shared libraries using jlibtool -shared
+ sed -i \
+ -e 's|--silent ||g' \
+ -e 's:--mode=\(compile\|link\):& -shared:g' \
+ scripts/libtool.mk || die
+
+ # Crude measure to stop jlibtool from running ranlib and ar
+ sed -i \
+ -e '/LIBRARIAN/s|".*"|"true"|g' \
+ -e '/RANLIB/s|".*"|"true"|g' \
+ scripts/jlibtool.c || die
+
+ usesqldriver mysql
+ usesqldriver postgres postgresql
+ usesqldriver firebird
+ usesqldriver iodbc
+ usesqldriver odbc unixodbc
+ usesqldriver oracle
+ usesqldriver sqlite
+ usesqldriver mongodb mongo
+
+ eautoreconf
+}
+
+src_configure() {
+ # Do not try to enable static with static-libs; upstream is a
+ # massacre of libtool best practices so you also have to make sure
+ # to --enable-shared explicitly.
+ local myeconfargs=(
+ # Revisit confcache when not needing to use ac_cv anymore
+ # for automagic deps.
+ #--cache-file="${S}"/config.cache
+
+ --enable-shared
+ --disable-ltdl-install
+ --disable-silent-rules
+ --with-system-libtool
+ --with-system-libltdl
+
+ --enable-strict-dependencies
+ --without-rlm_couchbase
+ --without-rlm_securid
+ --without-rlm_unbound
+ --without-rlm_idn
+ #--without-rlm_json
+ #$(use_with rest libfreeradius-json)
+
+ # Our OpenSSL should be patched. Avoid false-positive failures.
+ --disable-openssl-version-check
+ --with-ascend-binary
+ --with-udpfromto
+ --with-dhcp
+ --with-pcre
+ --with-iodbc-include-dir=/usr/include/iodbc
+ --with-experimental-modules
+ --with-docdir=/usr/share/doc/${PF}
+ --with-logdir=/var/log/radius
+
+ $(use_enable debug developer)
+ $(use_with ldap edir)
+ $(use_with redis rlm_cache_redis)
+ $(use_with redis rlm_redis)
+ $(use_with redis rlm_rediswho)
+ $(use_with ssl openssl)
+ $(use_with systemd systemd)
+ )
+
+ # bug #77613
+ if has_version app-crypt/heimdal ; then
+ myeconfargs+=( --enable-heimdal-krb5 )
+ fi
+
+ if use python ; then
+ myeconfargs+=(
+ --with-rlm-python3-bin=${EPYTHON}
+ --with-rlm-python3-config-bin=${EPYTHON}-config
+ )
+ fi
+
+ if ! use readline ; then
+ export ac_cv_lib_readline=no
+ fi
+
+ #if ! use pcap ; then
+ # export ac_cv_lib_pcap_pcap_open_live=no
+ # export ac_cv_header_pcap_h=no
+ #fi
+
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ # Verbose, do not generate certificates
+ emake \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS=''
+}
+
+src_install() {
+ dodir /etc
+
+ diropts -m0750 -o root -g radius
+ dodir /etc/raddb
+
+ diropts -m0750 -o radius -g radius
+ dodir /var/log/radius
+
+ keepdir /var/log/radius/radacct
+ diropts
+
+ # - Verbose, do not install certificates
+ # - Parallel install fails (bug #509498)
+ emake -j1 \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS='' \
+ R="${D}" \
+ install
+
+ if use pam ; then
+ pamd_mimic_system radiusd auth account password session
+ fi
+
+ # bug #711756
+ fowners -R radius:radius /etc/raddb
+ fowners -R radius:radius /var/log/radius
+
+ dodoc CREDITS
+
+ rm "${ED}"/usr/sbin/rc.radiusd || die
+
+ newinitd "${FILESDIR}"/radius.init-r4 radiusd
+ newconfd "${FILESDIR}"/radius.conf-r6 radiusd
+
+ if ! use systemd ; then
+ # If systemd builtin is not enabled we need use Type=Simple
+ # as systemd .service
+ sed -i -e 's:^Type=.*::g' \
+ -e 's:^WatchdogSec=.*::g' -e 's:^NotifyAccess=all.*::g' \
+ "${S}"/debian/freeradius.service
+ fi
+
+ systemd_dounit "${S}"/debian/freeradius.service
+
+ find "${ED}" \( -name "*.a" -o -name "*.la" \) -delete || die
+}
+
+pkg_config() {
+ if use ssl ; then
+ cd "${ROOT}"/etc/raddb/certs || die
+
+ ./bootstrap || die "Error while running ./bootstrap script."
+ chown root:radius "${ROOT}"/etc/raddb/certs || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/ca.pem || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/server.{key,crt,pem} || die
+ fi
+}
+
+pkg_preinst() {
+ if ! has_version ${CATEGORY}/${PN} && use ssl ; then
+ elog "You have to run \`emerge --config =${CATEGORY}/${PF}\` to be able"
+ elog "to start the radiusd service."
+ fi
+}
diff --git a/net-dialup/freeradius/metadata.xml b/net-dialup/freeradius/metadata.xml
new file mode 100644
index 0000000..f88a6ec
--- /dev/null
+++ b/net-dialup/freeradius/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <use>
+ <flag name="memcached">
+ Include <pkg>dev-libs/libmemcached</pkg> in caching drivers
+ </flag>
+ <flag name="redis">
+ Include support for Redis database
+ </flag>
+ <flag name="mongodb">
+ Include support for MongoDB database
+ </flag>
+ </use>
+ <upstream>
+ <remote-id type="github">FreeRADIUS/freeradius-server</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-libs/ldns/Manifest b/net-libs/ldns/Manifest
new file mode 100644
index 0000000..ad02f5a
--- /dev/null
+++ b/net-libs/ldns/Manifest
@@ -0,0 +1 @@
+DIST ldns-1.8.3.tar.gz 1299856 BLAKE2B 2250445da3beec76c96fbb5cbc00f8d6a5bb6ed5867da7f23511d46ac73d6101303eb6ad85def426b7f9287f6a629a95117bcfa6eb46b775d07ed84048162c7f SHA512 c318747bd975ade389d048680b80495fb083b46507d8dcea7d4d42c75823f56a35b438dcc5320803d39583e5a1e515a51686f7f9010c061a6e8199e1a5505ae9
diff --git a/net-libs/ldns/files/ldns-1.7.1-libressl.patch b/net-libs/ldns/files/ldns-1.7.1-libressl.patch
new file mode 100644
index 0000000..916380b
--- /dev/null
+++ b/net-libs/ldns/files/ldns-1.7.1-libressl.patch
@@ -0,0 +1,84 @@
+From OpenBSD.
+
+Fix build with opaque DSA/RSA in LibreSSL 3.5.
+https://github.com/NLnetLabs/ldns/pull/151
+
+Index: dnssec.c
+--- a/dnssec.c.orig
++++ b/dnssec.c
+@@ -380,7 +380,7 @@ ldns_key_buf2dsa_raw(const unsigned char* key, size_t
+ BN_free(Y);
+ return NULL;
+ }
+-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ #ifndef S_SPLINT_S
+ dsa->p = P;
+ dsa->q = Q;
+@@ -466,7 +466,7 @@ ldns_key_buf2rsa_raw(const unsigned char* key, size_t
+ BN_free(modulus);
+ return NULL;
+ }
+-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ #ifndef S_SPLINT_S
+ rsa->n = modulus;
+
+Fix build with opaque DSA/RSA in LibreSSL 3.5.
+https://github.com/NLnetLabs/ldns/pull/151
+
+Index: host2str.c
+--- a/host2str.c.orig
++++ b/host2str.c
+@@ -2207,7 +2207,7 @@ ldns_key2buffer_str(ldns_buffer *output, const ldns_ke
+ const BIGNUM *n=NULL, *e=NULL, *d=NULL,
+ *p=NULL, *q=NULL, *dmp1=NULL,
+ *dmq1=NULL, *iqmp=NULL;
+-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ n = rsa->n;
+ e = rsa->e;
+ d = rsa->d;
+@@ -2259,7 +2259,7 @@ ldns_key2buffer_str(ldns_buffer *output, const ldns_ke
+ if(1) {
+ const BIGNUM *p=NULL, *q=NULL, *g=NULL,
+ *priv_key=NULL, *pub_key=NULL;
+-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ #ifndef S_SPLINT_S
+ p = dsa->p;
+ q = dsa->q;
+
+Fix build with opaque DSA/RSA in LibreSSL 3.5.
+https://github.com/NLnetLabs/ldns/pull/151
+
+Index: keys.c
+--- a/keys.c.orig
++++ b/keys.c
+@@ -860,7 +860,7 @@ ldns_key_new_frm_fp_rsa_l(FILE *f, int *line_nr)
+ }
+ #endif /* splint */
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ # ifndef S_SPLINT_S
+ rsa->n = n;
+ rsa->e = e;
+@@ -980,7 +980,7 @@ ldns_key_new_frm_fp_dsa_l(FILE *f, ATTR_UNUSED(int *li
+ }
+ #endif /* splint */
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ # ifndef S_SPLINT_S
+ dsa->p = p;
+ dsa->q = q;
+@@ -1657,7 +1657,7 @@ ldns_key_rsa2bin(unsigned char *data, RSA *k, uint16_t
+ if (!k) {
+ return false;
+ }
+-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ n = k->n;
+ e = k->e;
+ #else
diff --git a/net-libs/ldns/files/ldns-1.8.1-pkgconfig.patch b/net-libs/ldns/files/ldns-1.8.1-pkgconfig.patch
new file mode 100644
index 0000000..7731ff6
--- /dev/null
+++ b/net-libs/ldns/files/ldns-1.8.1-pkgconfig.patch
@@ -0,0 +1,10 @@
+--- a/packaging/libldns.pc.in
++++ b/packaging/libldns.pc.in
+@@ -8,6 +8,6 @@
+ URL: http://www.nlnetlabs.nl/projects/ldns
+ Version: @PACKAGE_VERSION@
+ Requires:
++Requires.private: libcrypto libssl
+ Libs: -L${libdir} -lldns
+-Libs.private: @LDFLAGS@
+ Cflags: -I${includedir}
diff --git a/net-libs/ldns/files/ldns-1.8.3-configure-strict.patch b/net-libs/ldns/files/ldns-1.8.3-configure-strict.patch
new file mode 100644
index 0000000..37b8095
--- /dev/null
+++ b/net-libs/ldns/files/ldns-1.8.3-configure-strict.patch
@@ -0,0 +1,139 @@
+https://github.com/NLnetLabs/ldns/commit/59af7359ed744327aaf0deb2e6ac90fe9e191ba6
+
+From 59af7359ed744327aaf0deb2e6ac90fe9e191ba6 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Sat, 19 Nov 2022 01:31:57 +0000
+Subject: [PATCH] acx_nlnetlabs.m4: fix -Wstrict-prototypes
+
+Fix -Wstrict-prototypes as it's easy to do and avoids future warnings. Noticed
+when doing Clang 16 / GCC 14 / C23 work.
+
+For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2],
+or the (new) c-std-porting mailing list [3].
+
+[0] https://lwn.net/Articles/913505/
+[1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213
+[2] https://wiki.gentoo.org/wiki/Modern_C_porting
+[3] hosted at lists.linux.dev.
+
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/acx_nlnetlabs.m4
++++ b/acx_nlnetlabs.m4
+@@ -183,7 +183,7 @@ dnl cache=`echo $1 | sed 'y%.=/+- %___p__%'`
+ AC_CACHE_VAL(cv_prog_cc_flag_needed_$cache,
+ [
+ echo '$2' > conftest.c
+-echo 'void f(){}' >>conftest.c
++echo 'void f(void){}' >>conftest.c
+ if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
+ eval "cv_prog_cc_flag_needed_$cache=no"
+ else
+@@ -229,7 +229,7 @@ dnl DEPFLAG: set to flag that generates dependencies.
+ AC_DEFUN([ACX_DEPFLAG],
+ [
+ AC_MSG_CHECKING([$CC dependency flag])
+-echo 'void f(){}' >conftest.c
++echo 'void f(void){}' >conftest.c
+ if test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then
+ DEPFLAG="-MM"
+ else
+@@ -268,7 +268,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAUL
+ #include <getopt.h>
+ #endif
+
+-int test() {
++int test(void) {
+ int a;
+ char **opts = NULL;
+ struct timeval tv;
+@@ -305,7 +305,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAUL
+ #include <getopt.h>
+ #endif
+
+-int test() {
++int test(void) {
+ int a;
+ char **opts = NULL;
+ struct timeval tv;
+@@ -331,7 +331,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG,
+ [
+ #include <stdbool.h>
+ #include <ctype.h>
+-int test() {
++int test(void) {
+ int a = 0;
+ return a;
+ }
+@@ -341,7 +341,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_BSD_SOURCE -D_DEFAULT_SOURCE,
+ [
+ #include <ctype.h>
+
+-int test() {
++int test(void) {
+ int a;
+ a = isascii(32);
+ return a;
+@@ -352,7 +352,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE,
+ [
+ #include <netinet/in.h>
+
+-int test() {
++int test(void) {
+ struct in6_pktinfo inf;
+ int a = (int)sizeof(inf);
+ return a;
+@@ -366,7 +366,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE -D_FRSRESGID,
+ [
+ #include <unistd.h>
+
+-int test() {
++int test(void) {
+ int a = setresgid(0,0,0);
+ a = setresuid(0,0,0);
+ return a;
+@@ -381,7 +381,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_POSIX_C_SOURCE=200112,
+ #endif
+ #include <netdb.h>
+
+-int test() {
++int test(void) {
+ int a = 0;
+ char *t;
+ time_t time = 0;
+@@ -409,7 +409,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D__EXTENSIONS__,
+ #include <getopt.h>
+ #endif
+
+-int test() {
++int test(void) {
+ int a;
+ char **opts = NULL;
+ struct timeval tv;
+@@ -809,7 +809,7 @@ dnl try to see if an additional _LARGEFILE_SOURCE 1 is needed to get fseeko
+ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_LARGEFILE_SOURCE=1,
+ [
+ #include <stdio.h>
+-int test() {
++int test(void) {
+ int a = fseeko(stdin, 0, 0);
+ return a;
+ }
+@@ -834,7 +834,7 @@ char* (*f) () = getaddrinfo;
+ #ifdef __cplusplus
+ }
+ #endif
+-int main() {
++int main(void) {
+ ;
+ return 0;
+ }
+@@ -898,7 +898,7 @@ cache=`echo $1 | sed 'y%.=/+-%___p_%'`
+ AC_CACHE_VAL(cv_cc_deprecated_$cache,
+ [
+ echo '$3' >conftest.c
+-echo 'void f(){ $2 }' >>conftest.c
++echo 'void f(void){ $2 }' >>conftest.c
+ if test -z "`$CC $CPPFLAGS $CFLAGS -c conftest.c 2>&1 | grep -e deprecated -e unavailable`"; then
+ eval "cv_cc_deprecated_$cache=no"
+ else
+
diff --git a/net-libs/ldns/files/ldns-1.8.3-docs.patch b/net-libs/ldns/files/ldns-1.8.3-docs.patch
new file mode 100644
index 0000000..6b4e758
--- /dev/null
+++ b/net-libs/ldns/files/ldns-1.8.3-docs.patch
@@ -0,0 +1,95 @@
+https://bugs.gentoo.org/892065
+https://github.com/NLnetLabs/ldns/commit/5d5c95a947d98dd292ba81e95ca90ba6aeccb1d0
+
+From 5d5c95a947d98dd292ba81e95ca90ba6aeccb1d0 Mon Sep 17 00:00:00 2001
+From: Willem Toorop <willem@nlnetlabs.nl>
+Date: Mon, 5 Sep 2022 10:01:18 +0200
+Subject: [PATCH] Fix building documentation in build directory.
+
+Thanks Michael Tokarev
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -270,7 +270,7 @@ doxygen:
+ @if test ! -e doc/header.html ; then \
+ $(INSTALL) -c -m 644 $(srcdir)/doc/header.html doc/ ; \
+ fi ;
+- $(doxygen) $(srcdir)/libdns.doxygen
++ $(doxygen) libdns.doxygen
+
+ doc: manpages $(doxygen)
+ @$(INSTALL) -d doc
+--- a/ldns/net.h.in
++++ b/ldns/net.h.in
+@@ -91,13 +91,12 @@ int ldns_tcp_bgsend(ldns_buffer *qbin, const struct sockaddr_storage *to, sockle
+
+ /**
+ * Sends a buffer to an ip using tcp and return the response as a ldns_pkt
+- * \param[in] qbin the ldns_buffer to be send
++ * \param[out] result packet with the answer
+ * \param[in] qbin the ldns_buffer to be send
+ * \param[in] to the ip addr to send to
+ * \param[in] tolen length of the ip addr
+ * \param[in] timeout the timeout value for the network
+ * \param[out] answersize size of the packet
+- * \param[out] result packet with the answer
+ * \return status
+ */
+ ldns_status ldns_tcp_send(uint8_t **result, ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout, size_t *answersize);
+--- a/libdns.doxygen.in
++++ b/libdns.doxygen.in
+@@ -51,7 +51,7 @@ PROJECT_BRIEF =
+ # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+ # the logo to the output directory.
+
+-PROJECT_LOGO = doc/images/LogoInGradientBar2-y100.png
++PROJECT_LOGO = @srcdir@/doc/images/LogoInGradientBar2-y100.png
+
+ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+ # into which the generated documentation will be written. If a relative path is
+@@ -854,12 +854,12 @@ WARN_LOGFILE =
+ # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+ # Note: If this tag is empty the current directory is searched.
+
+-INPUT = . \
+- ldns/ \
+- doc/ \
+- examples/ldns-mx.c \
+- examples/ldns-read-zone.c \
+- examples/ldns-signzone.c
++INPUT = ldns/ \
++ @srcdir@/doc/ \
++ @srcdir@/examples/ldns-mx.c \
++ @srcdir@/examples/ldns-read-zone.c \
++ @srcdir@/examples/ldns-signzone.c \
++ @srcdir@
+
+ # This tag can be used to specify the character encoding of the source files
+ # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+@@ -936,7 +936,7 @@ EXCLUDE_SYMBOLS =
+ # that contain example code fragments that are included (see the \include
+ # command).
+
+-EXAMPLE_PATH = examples
++EXAMPLE_PATH = @srcdir@/examples
+
+ # If the value of the EXAMPLE_PATH tag contains directories, you can use the
+ # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+@@ -956,7 +956,7 @@ EXAMPLE_RECURSIVE = NO
+ # that contain images that are to be included in the documentation (see the
+ # \image command).
+
+-IMAGE_PATH = doc/images
++IMAGE_PATH = @srcdir@/doc/images
+
+ # The INPUT_FILTER tag can be used to specify a program that doxygen should
+ # invoke to filter for each input file. Doxygen will invoke the filter program
+@@ -1798,7 +1798,7 @@ COMPACT_LATEX = NO
+ # The default value is: a4.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+
+-PAPER_TYPE = a4wide
++PAPER_TYPE = a4
+
+ # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+ # that should be included in the LaTeX output. The package can be specified just
+
diff --git a/net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch b/net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch
new file mode 100644
index 0000000..8165371
--- /dev/null
+++ b/net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch
@@ -0,0 +1,101 @@
+https://bugs.gentoo.org/921302
+https://github.com/NLnetLabs/ldns/pull/232
+https://github.com/NLnetLabs/ldns/pull/233
+
+From daf38095763f758c77be538da25c267dc5cb73c8 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Fri, 26 Jan 2024 11:30:39 +0100
+Subject: [PATCH] SWIG_Python_str_AsChar removal in SWIG 4.2.0
+
+The replacement, SWIG_PyUnicode_AsUTF8AndSize, has different
+memory management requirements.
+---
+ contrib/python/ldns_rdf.i | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/contrib/python/ldns_rdf.i b/contrib/python/ldns_rdf.i
+index 5d7448fd..60daf1a7 100644
+--- a/contrib/python/ldns_rdf.i
++++ b/contrib/python/ldns_rdf.i
+@@ -56,7 +56,11 @@
+ */
+ %typemap(arginit, noblock=1) const ldns_rdf *
+ {
++#if SWIG_VERSION >= 0x040200
++ PyObject *$1_bytes = NULL;
++#else
+ char *$1_str = NULL;
++#endif
+ }
+
+ /*
+@@ -66,11 +70,17 @@
+ %typemap(in, noblock=1) const ldns_rdf * (void* argp, $1_ltype tmp = 0, int res)
+ {
+ if (Python_str_Check($input)) {
++ const char *argstr;
++#if SWIG_VERSION >= 0x040200
++ argstr = SWIG_PyUnicode_AsUTF8AndSize($input, NULL, &$1_bytes);
++#else
+ $1_str = SWIG_Python_str_AsChar($input);
+- if ($1_str == NULL) {
++ argstr = $1_str;
++#endif
++ if (argstr == NULL) {
+ %argument_fail(SWIG_TypeError, "char *", $symname, $argnum);
+ }
+- tmp = ldns_dname_new_frm_str($1_str);
++ tmp = ldns_dname_new_frm_str(argstr);
+ if (tmp == NULL) {
+ %argument_fail(SWIG_TypeError, "char *", $symname, $argnum);
+ }
+@@ -90,10 +100,17 @@
+ */
+ %typemap(freearg, noblock=1) const ldns_rdf *
+ {
++#if SWIG_VERSION >= 0x040200
++ if ($1_bytes != NULL) {
++ /* Is not NULL only when a conversion form string occurred. */
++ Py_XDECREF($1_bytes);
++ }
++#else
+ if ($1_str != NULL) {
+ /* Is not NULL only when a conversion form string occurred. */
+ SWIG_Python_str_DelForPy3($1_str); /* Is a empty macro for Python < 3. */
+ }
++#endif
+ }
+
+ %nodefaultctor ldns_struct_rdf; /* No default constructor. */
+
+From f91f61e10be595a6a46845112aaed7da24551bf9 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Fri, 26 Jan 2024 11:57:03 +0100
+Subject: [PATCH] 32-bit compatibility for Python SWIG bindings
+
+The ssize_t type can be int instead of long, and the pointer
+types are incompatible.
+---
+ contrib/python/ldns.i | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/contrib/python/ldns.i b/contrib/python/ldns.i
+index 881ba5e85..b4a740820 100644
+--- a/contrib/python/ldns.i
++++ b/contrib/python/ldns.i
+@@ -99,12 +99,14 @@
+ %typemap(in, noblock=1) (ssize_t)
+ {
+ int $1_res = 0;
+- $1_res = SWIG_AsVal_long($input, &$1);
++ long val;
++ $1_res = SWIG_AsVal_long($input, &val);
+ if (!SWIG_IsOK($1_res)) {
+ SWIG_exception_fail(SWIG_ArgError($1_res), "in method '"
+ "$symname" "', argument " "$argnum" " of type '"
+ "$type""'");
+ }
++ $1 = val;
+ }
+
+
diff --git a/net-libs/ldns/ldns-1.8.3-r1.ebuild b/net-libs/ldns/ldns-1.8.3-r1.ebuild
new file mode 100644
index 0000000..e927b84
--- /dev/null
+++ b/net-libs/ldns/ldns-1.8.3-r1.ebuild
@@ -0,0 +1,95 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{9..11} )
+inherit autotools python-single-r1 multilib-minimal
+
+DESCRIPTION="A library with the aim to simplify DNS programming in C"
+HOMEPAGE="https://www.nlnetlabs.nl/projects/ldns/"
+SRC_URI="https://www.nlnetlabs.nl/downloads/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0/3"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="doc examples python static-libs"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+RESTRICT="test" # missing test directory
+
+BDEPEND="
+ python? ( dev-lang/swig )
+ doc? ( app-text/doxygen )
+"
+DEPEND="
+ python? ( ${PYTHON_DEPS} )
+ >=dev-libs/openssl-1.1.1l-r1:0=[${MULTILIB_USEDEP},static-libs?]
+ examples? ( net-libs/libpcap )
+"
+RDEPEND="
+ ${DEPEND}
+ !<net-dns/ldns-utils-1.8.0-r2
+"
+
+MULTILIB_CHOST_TOOLS=(
+ /usr/bin/ldns-config
+)
+
+PATCHES=(
+ "${FILESDIR}/ldns-1.8.1-pkgconfig.patch"
+ "${FILESDIR}/${P}-docs.patch"
+ "${FILESDIR}/${P}-configure-strict.patch"
+)
+
+pkg_setup() {
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # Drop after 1.8.3
+ eautoreconf
+}
+
+multilib_src_configure() {
+ # "OpenSSL does not support offline DANE verification (Needed for the
+ # DANE-TA usage type). Please upgrade OpenSSL to version >= 1.1.0 or rerun
+ # with --disable-dane-verify or --disable-dane-ta-usage"
+
+ ECONF_SOURCE="${S}" econf \
+ $(use_enable static-libs static) \
+ $(multilib_native_use_with python pyldns) \
+ $(multilib_native_use_with python pyldnsx) \
+ --with-ssl="${EPREFIX}"/usr \
+ $(multilib_native_with drill) \
+ $(multilib_native_use_with examples) \
+ --disable-dane-ta-usage \
+ --disable-rpath
+}
+
+multilib_src_compile() {
+ default
+
+ if multilib_is_native_abi && use doc ; then
+ emake doxygen
+ fi
+}
+
+multilib_src_install() {
+ default
+
+ if multilib_is_native_abi && use doc ; then
+ dodoc -r doc/html
+ fi
+}
+
+multilib_src_install_all() {
+ dodoc Changelog README*
+
+ find "${D}" -name '*.la' -delete || die
+ use python && python_optimize
+
+ insinto /usr/share/vim/vimfiles/ftdetect
+ doins libdns.vim
+}
diff --git a/net-libs/ldns/ldns-1.8.3-r2.ebuild b/net-libs/ldns/ldns-1.8.3-r2.ebuild
new file mode 100644
index 0000000..24228b9
--- /dev/null
+++ b/net-libs/ldns/ldns-1.8.3-r2.ebuild
@@ -0,0 +1,96 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..11} )
+inherit autotools python-single-r1 multilib-minimal
+
+DESCRIPTION="A library with the aim to simplify DNS programming in C"
+HOMEPAGE="https://www.nlnetlabs.nl/projects/ldns/"
+SRC_URI="https://www.nlnetlabs.nl/downloads/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0/3"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="doc examples python static-libs"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+RESTRICT="test" # missing test directory
+
+BDEPEND="
+ python? ( dev-lang/swig )
+ doc? ( app-text/doxygen )
+"
+DEPEND="
+ python? ( ${PYTHON_DEPS} )
+ >=dev-libs/openssl-1.1.1l-r1:0=[${MULTILIB_USEDEP},static-libs?]
+ examples? ( net-libs/libpcap )
+"
+RDEPEND="
+ ${DEPEND}
+ !<net-dns/ldns-utils-1.8.0-r2
+"
+
+MULTILIB_CHOST_TOOLS=(
+ /usr/bin/ldns-config
+)
+
+PATCHES=(
+ "${FILESDIR}/ldns-1.8.1-pkgconfig.patch"
+ "${FILESDIR}/${P}-docs.patch"
+ "${FILESDIR}/${P}-configure-strict.patch"
+ "${FILESDIR}/${PN}-1.8.3-swig-4.2.0.patch"
+)
+
+pkg_setup() {
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # Drop after 1.8.3
+ eautoreconf
+}
+
+multilib_src_configure() {
+ # "OpenSSL does not support offline DANE verification (Needed for the
+ # DANE-TA usage type). Please upgrade OpenSSL to version >= 1.1.0 or rerun
+ # with --disable-dane-verify or --disable-dane-ta-usage"
+
+ ECONF_SOURCE="${S}" econf \
+ $(use_enable static-libs static) \
+ $(multilib_native_use_with python pyldns) \
+ $(multilib_native_use_with python pyldnsx) \
+ --with-ssl="${EPREFIX}"/usr \
+ $(multilib_native_with drill) \
+ $(multilib_native_use_with examples) \
+ --disable-dane-ta-usage \
+ --disable-rpath
+}
+
+multilib_src_compile() {
+ default
+
+ if multilib_is_native_abi && use doc ; then
+ emake doxygen
+ fi
+}
+
+multilib_src_install() {
+ default
+
+ if multilib_is_native_abi && use doc ; then
+ dodoc -r doc/html
+ fi
+}
+
+multilib_src_install_all() {
+ dodoc Changelog README*
+
+ find "${D}" -name '*.la' -delete || die
+ use python && python_optimize
+
+ insinto /usr/share/vim/vimfiles/ftdetect
+ doins libdns.vim
+}
diff --git a/net-libs/ldns/metadata.xml b/net-libs/ldns/metadata.xml
new file mode 100644
index 0000000..8fe7da4
--- /dev/null
+++ b/net-libs/ldns/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>mschiff@gentoo.org</email>
+ <name>Marc Schiffbauer</name>
+ </maintainer>
+ <longdescription lang="en">
+ ldns is a library with the aim to simplify DNS programming in C. All
+ lowlevel DNS/DNSSEC operations are supported. We also define a higher
+ level API which allows a programmer to (for instance) create or sign
+ packets.
+ </longdescription>
+ <upstream>
+ <remote-id type="github">NLnetLabs/ldns</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-misc/aria2/Manifest b/net-misc/aria2/Manifest
deleted file mode 100644
index f26538b..0000000
--- a/net-misc/aria2/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-DIST aria2-1.34.0.tar.xz 1525908 BLAKE2B 479145af229f5fe864e54c511197bedb306199dbda608416aa295930a8392c7a118993b5a1634db20b380ab448cc8a397a351b6b64560ca263a0818d47a1ae64 SHA512 80bc43e242c06acc95030021cb347b4ec230729f3d7e512ca1932941b34ef95c312a34007a226869e5d720839a400e66cdb072ccab5d42228d8cf3d828723dcc
diff --git a/net-misc/aria2/aria2-1.34.0-r1.ebuild b/net-misc/aria2/aria2-1.34.0-r1.ebuild
deleted file mode 100644
index ceac9fc..0000000
--- a/net-misc/aria2/aria2-1.34.0-r1.ebuild
+++ /dev/null
@@ -1,158 +0,0 @@
-# Copyright 1999-2019 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="6"
-
-inherit bash-completion-r1
-
-DESCRIPTION="A download utility with segmented downloading with BitTorrent support"
-HOMEPAGE="https://aria2.github.io/"
-SRC_URI="https://github.com/aria2/${PN}/releases/download/release-${PV}/${P}.tar.xz"
-
-LICENSE="GPL-2"
-KEYWORDS="amd64 ~arm ~ppc ~ppc64 ~sparc x86 ~amd64-linux ~x86-linux"
-SLOT="0"
-IUSE="adns bittorrent +gnutls jemalloc libressl libuv +libxml2 metalink +nettle nls sqlite scripts ssh ssl tcmalloc test xmlrpc"
-
-CDEPEND="sys-libs/zlib:0=
- ssl? (
- app-misc/ca-certificates
- gnutls? ( >=net-libs/gnutls-1.2.9:0= )
- !gnutls? (
- !libressl? ( dev-libs/openssl:0= )
- libressl? ( dev-libs/libressl:0= ) ) )
- adns? ( >=net-dns/c-ares-1.5.0:0= )
- bittorrent? (
- ssl? (
- gnutls? (
- nettle? ( >=dev-libs/nettle-2.4:0=[gmp] >=dev-libs/gmp-6:0= )
- !nettle? ( >=dev-libs/libgcrypt-1.2.2:0= ) ) )
- !ssl? (
- nettle? ( >=dev-libs/nettle-2.4:0=[gmp] >=dev-libs/gmp-6:0= )
- !nettle? ( >=dev-libs/libgcrypt-1.2.2:0= ) ) )
- jemalloc? ( dev-libs/jemalloc )
- libuv? ( >=dev-libs/libuv-1.13:0= )
- metalink? (
- libxml2? ( >=dev-libs/libxml2-2.6.26:2= )
- !libxml2? ( dev-libs/expat:0= ) )
- sqlite? ( dev-db/sqlite:3= )
- ssh? ( net-libs/libssh2:= )
- tcmalloc? ( dev-util/google-perftools )
- xmlrpc? (
- libxml2? ( >=dev-libs/libxml2-2.6.26:2= )
- !libxml2? ( dev-libs/expat:0= ) )"
-
-DEPEND="${CDEPEND}
- app-arch/xz-utils
- virtual/pkgconfig
- nls? ( sys-devel/gettext )
- test? ( >=dev-util/cppunit-1.12.0:0 )"
-RDEPEND="${CDEPEND}
- nls? ( virtual/libiconv virtual/libintl )
- scripts? ( dev-lang/ruby )"
-
-# xmlrpc has no explicit switch, it's turned out by any XML library
-# so metalink implicitly forces it on
-REQUIRED_USE="?? ( jemalloc tcmalloc )
- metalink? ( xmlrpc )"
-RESTRICT="!test? ( test )"
-
-pkg_setup() {
- if use scripts && ! use xmlrpc; then
- ewarn "Please note that you may need to enable USE=xmlrpc to run the aria2rpc"
- ewarn "and aria2mon scripts against the local aria2."
- fi
-}
-
-src_prepare() {
- eapply "${FILESDIR}"/${P}-make_unique.patch
- # https://bugs.gentoo.org/674622 (CVE-2019-3500)
- eapply "${FILESDIR}"/${P}-mask-headers.patch
- eapply "${FILESDIR}"/aria2-libressl.patch
- default
- sed -i -e "s|/tmp|${T}|" test/*.cc test/*.txt || die "sed failed"
-}
-
-src_configure() {
- local myconf=(
- # threads, epoll: check for best portability
-
- # do not try to compile and run a test LIBXML program
- --disable-xmltest
- # enable the shared library
- --enable-libaria2
- # zlib should always be available anyway
- --with-libz
- --with-ca-bundle="${EPREFIX}/etc/ssl/certs/ca-certificates.crt"
-
- # optional features
- $(use_enable bittorrent)
- $(use_enable metalink)
- $(use_enable nls)
- $(use_with adns libcares)
- $(use_with jemalloc)
- $(use_with libuv)
- $(use_with sqlite sqlite3)
- $(use_with ssh libssh2)
- $(use_with tcmalloc)
- )
-
- # SSL := gnutls / openssl
- # USE=ssl
- # + USE=gnutls -> gnutls
- # + USE=-gnutls -> openssl
-
- if use ssl; then
- myconf+=( $(use_with gnutls) $(use_with !gnutls openssl) )
- else
- myconf+=( --without-gnutls --without-openssl )
- fi
-
- # message-digest := nettle / gcrypt / openssl
- # bignum := nettle+gmp / gcrypt / openssl
- # bittorrent := message-digest + bignum
- # USE=bittorrent
- # + USE=(ssl -gnutls) -> openssl
- # + USE=nettle -> nettle+gmp
- # + USE=-nettle -> gcrypt
-
- if use !bittorrent || use ssl && use !gnutls; then
- myconf+=( --without-libgcrypt --without-libnettle --without-libgmp )
- else
- myconf+=( $(use_with !nettle libgcrypt)
- $(use_with nettle libnettle) $(use_with nettle libgmp) )
- fi
-
- # metalink+xmlrpc := libxml2 / expat
- # USE=(metalink || xmlrpc)
- # + USE=libxml2 -> libxml2
- # + USE=-libxml2 -> expat
-
- if use metalink || use xmlrpc; then
- myconf+=( $(use_with !libxml2 libexpat) $(use_with libxml2) )
- else
- myconf+=( --without-libexpat --without-libxml2 )
- fi
-
- # Note:
- # - always enable gzip/http compression since zlib should always be available anyway
- # - always enable epoll since we can assume kernel 2.6.x
- # - other options for threads: solaris, pth, win32
- econf "${myconf[@]}"
-}
-
-src_install() {
- default
- rm -rf "${D}"/usr/share/doc/aria2 \
- "${D}"/usr/share/doc/${PF}/README{,.html}
-
- dobashcomp doc/bash_completion/aria2c
- use scripts && dobin doc/xmlrpc/aria2{mon,rpc}
-}
-
-pkg_postinst() {
- if use xmlrpc; then
- elog "If you would like to use the additional aria2mon and aria2rpc tools,"
- elog "you need to have \033[1mdev-lang/ruby\033[0m installed."
- fi
-}
diff --git a/net-misc/aria2/files/aria2-1.34.0-make_unique.patch b/net-misc/aria2/files/aria2-1.34.0-make_unique.patch
deleted file mode 100644
index 448d6cf..0000000
--- a/net-misc/aria2/files/aria2-1.34.0-make_unique.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From e8e04d6f22a507e8374651d3d2343cd9fb986993 Mon Sep 17 00:00:00 2001
-From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
-Date: Thu, 17 May 2018 18:39:44 +0900
-Subject: [PATCH] Fix build failure when InternalDHKeyExchange is used
-
----
- src/bignum.h | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/src/bignum.h b/src/bignum.h
-index e59ab6bbf..5fb4402bc 100644
---- a/src/bignum.h
-+++ b/src/bignum.h
-@@ -19,6 +19,8 @@
- #include <memory>
- #include <stdint.h>
-
-+#include "a2functional.h"
-+
- namespace bignum {
-
- template <size_t dim> class ulong {
-@@ -31,17 +33,17 @@ template <size_t dim> class ulong {
- std::unique_ptr<char_t[]> buf_;
-
- public:
-- inline ulong() : buf_(make_unique<char_t[]>(dim)) {}
-- inline ulong(size_t t) : buf_(make_unique<char_t[]>(dim))
-+ inline ulong() : buf_(aria2::make_unique<char_t[]>(dim)) {}
-+ inline ulong(size_t t) : buf_(aria2::make_unique<char_t[]>(dim))
- {
- memcpy(buf_.get(), (char_t*)&t, sizeof(t));
- }
-- inline ulong(const ulong<dim>& rhs) : buf_(make_unique<char_t[]>(dim))
-+ inline ulong(const ulong<dim>& rhs) : buf_(aria2::make_unique<char_t[]>(dim))
- {
- memcpy(buf_.get(), rhs.buf_.get(), dim);
- }
- explicit inline ulong(const char_t* data, size_t size)
-- : buf_(make_unique<char_t[]>(dim))
-+ : buf_(aria2::make_unique<char_t[]>(dim))
- {
- if (size > dim) {
- throw std::bad_alloc();
diff --git a/net-misc/aria2/files/aria2-1.34.0-mask-headers.patch b/net-misc/aria2/files/aria2-1.34.0-mask-headers.patch
deleted file mode 100644
index 694681d..0000000
--- a/net-misc/aria2/files/aria2-1.34.0-mask-headers.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 37368130ca7de5491a75fd18a20c5c5cc641824a Mon Sep 17 00:00:00 2001
-From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
-Date: Sat, 5 Jan 2019 09:32:40 +0900
-Subject: [PATCH] Mask headers
-
----
- src/HttpConnection.cc | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/HttpConnection.cc b/src/HttpConnection.cc
-index 77cb9d27a..be5b97723 100644
---- a/src/HttpConnection.cc
-+++ b/src/HttpConnection.cc
-@@ -102,11 +102,17 @@ std::string HttpConnection::eraseConfidentialInfo(const std::string& request)
- std::string result;
- std::string line;
- while (getline(istr, line)) {
-- if (util::startsWith(line, "Authorization: Basic")) {
-- result += "Authorization: Basic ********\n";
-+ if (util::istartsWith(line, "Authorization: ")) {
-+ result += "Authorization: <snip>\n";
- }
-- else if (util::startsWith(line, "Proxy-Authorization: Basic")) {
-- result += "Proxy-Authorization: Basic ********\n";
-+ else if (util::istartsWith(line, "Proxy-Authorization: ")) {
-+ result += "Proxy-Authorization: <snip>\n";
-+ }
-+ else if (util::istartsWith(line, "Cookie: ")) {
-+ result += "Cookie: <snip>\n";
-+ }
-+ else if (util::istartsWith(line, "Set-Cookie: ")) {
-+ result += "Set-Cookie: <snip>\n";
- }
- else {
- result += line;
-@@ -154,8 +160,8 @@ std::unique_ptr<HttpResponse> HttpConnection::receiveResponse()
- const auto& proc = outstandingHttpRequests_.front()->getHttpHeaderProcessor();
- if (proc->parse(socketRecvBuffer_->getBuffer(),
- socketRecvBuffer_->getBufferLength())) {
-- A2_LOG_INFO(
-- fmt(MSG_RECEIVE_RESPONSE, cuid_, proc->getHeaderString().c_str()));
-+ A2_LOG_INFO(fmt(MSG_RECEIVE_RESPONSE, cuid_,
-+ eraseConfidentialInfo(proc->getHeaderString()).c_str()));
- auto result = proc->getResult();
- if (result->getStatusCode() / 100 == 1) {
- socketRecvBuffer_->drain(proc->getLastBytesProcessed());
diff --git a/net-misc/aria2/files/aria2-libressl.patch b/net-misc/aria2/files/aria2-libressl.patch
deleted file mode 100644
index 4c20b1b..0000000
--- a/net-misc/aria2/files/aria2-libressl.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/src/libssl_compat.h b/src/libssl_compat.h
-index 0e03bfd7..cb2e3d97 100644
---- a/src/libssl_compat.h
-+++ b/src/libssl_compat.h
-@@ -44,6 +44,7 @@
- #endif // !defined(LIBRESSL_VERSION_NUMBER)
-
- #define OPENSSL_101_API \
-- (!LIBRESSL_IN_USE && OPENSSL_VERSION_NUMBER >= 0x1010000fL)
-+ ((!LIBRESSL_IN_USE && OPENSSL_VERSION_NUMBER >= 0x1010000fL) || \
-+ (LIBRESSL_IN_USE && LIBRESSL_VERSION_NUMBER >= 0x20700000L))
-
- #endif // LIBSSL_COMPAT_H
diff --git a/net-misc/aria2/metadata.xml b/net-misc/aria2/metadata.xml
deleted file mode 100644
index e5e58f4..0000000
--- a/net-misc/aria2/metadata.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
- <maintainer type="person">
- <email>dev-zero@gentoo.org</email>
- <name>Tiziano Müller</name>
- </maintainer>
- <maintainer type="person">
- <email>mgorny@gentoo.org</email>
- <name>Michał Górny</name>
- </maintainer>
- <use>
- <flag name="bittorrent">Enable support for the bittorrent protocol.</flag>
- <flag name="libuv">Use <pkg>dev-libs/libuv</pkg> backend.</flag>
- <flag name="libxml2">Use <pkg>dev-libs/libxml2</pkg> for XML parsing (preferred) instead of <pkg>dev-libs/expat</pkg>.</flag>
- <flag name="nettle">Use <pkg>dev-libs/nettle</pkg> and <pkg>dev-libs/gmp</pkg> for bittorrent/metalink crypto instead of <pkg>dev-libs/libgcrypt</pkg> (when <pkg>dev-libs/openssl</pkg> is not being used).</flag>
- <flag name="metalink">Enable support for metalink.</flag>
- <flag name="scripts">Install additional scripts which use aria2's xmlrpc functionality.</flag>
- <flag name="ssh">Enable SFTP support.</flag>
- </use>
- <upstream>
- <remote-id type="sourceforge">aria2</remote-id>
- <remote-id type="github">tatsuhiro-t/aria2</remote-id>
- </upstream>
-</pkgmetadata>
diff --git a/net-misc/seafile-client/Manifest b/net-misc/seafile-client/Manifest
new file mode 100644
index 0000000..6014a70
--- /dev/null
+++ b/net-misc/seafile-client/Manifest
@@ -0,0 +1,2 @@
+DIST seafile-client-8.0.9.tar.gz 11716754 BLAKE2B 2087d2b31ce4696fdaaaa723da7a353c54ebebef86c84b62146d806692066165d0499f5fd6d3be108130d28c297020eafc3497be03131c8a8751f34f33eece90 SHA512 d0b55883f8d00138c092309994047652c6a5aa8b66182f83b6c852f1721794d9d8125da5fba282e9efdb92a0a97a55ecd6e225ab6a7916718a05ea2b7f4bd944
+DIST seafile-client-9.0.3.tar.gz 11718581 BLAKE2B cb2cecc9b02df4edb7b7191fd609ee5bc3548849c68b3c0cd8f59641bd0716791c2272633c0ba0f4f7b374a1302fd81a8f1396736961cb4e6e4ef1dd8db82c85 SHA512 c2d77c5f9407fd6d4ce3dfd47044de83a3c3e0bbbd1b66f1566ad54a8aa5391f51f70c7e094f16216a653a5ef0e9b8de1025ee56ce56c496c31c87983fbee4d7
diff --git a/net-misc/seafile-client/files/seafile-client-7.0.9-libressl.patch b/net-misc/seafile-client/files/seafile-client-7.0.9-libressl.patch
new file mode 100644
index 0000000..2a11455
--- /dev/null
+++ b/net-misc/seafile-client/files/seafile-client-7.0.9-libressl.patch
@@ -0,0 +1,31 @@
+https://github.com/haiwen/seafile-client/pull/1452
+https://github.com/haiwen/seafile-client/pull/1314
+
+From b5b1719c5b69c5c9f2396782ced71523d013446d Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Sat, 8 Apr 2023 18:25:37 -0700
+Subject: [PATCH] rsa: Fix the build with libressl 3.7
+
+Newer versions of libressl no longer need this legacy code path.
+
+Patch from OpenBSD:
+
+https://github.com/openbsd/ports/blob/26afb45924c9faa3bbd31e76a21130bbad474994/net/seafile/client/patches/patch-src_utils_rsa_cpp
+---
+ src/utils/rsa.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/utils/rsa.cpp b/src/utils/rsa.cpp
+index 350b79012..943a55f3b 100644
+--- a/src/utils/rsa.cpp
++++ b/src/utils/rsa.cpp
+@@ -13,7 +13,8 @@ namespace {
+
+ /* Forward compatibility functions if libssl < 1.1.0. */
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
+
+ int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
+ {
diff --git a/net-misc/seafile-client/files/seafile-client-7.0.9-qt-5.15.patch b/net-misc/seafile-client/files/seafile-client-7.0.9-qt-5.15.patch
new file mode 100644
index 0000000..ef9c2f7
--- /dev/null
+++ b/net-misc/seafile-client/files/seafile-client-7.0.9-qt-5.15.patch
@@ -0,0 +1,37 @@
+https://github.com/haiwen/seafile-client/pull/1297
+
+From 86ebea086c6b78738b3140c922c909331d2b9a94 Mon Sep 17 00:00:00 2001
+From: Joffrey <j-off@live.fr>
+Date: Fri, 29 May 2020 15:59:11 +0000
+Subject: [PATCH] Fix build with Qt5 v5.15.0
+
+---
+ src/ui/events-list-view.cpp | 1 +
+ src/ui/private-share-dialog.cpp | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/src/ui/events-list-view.cpp b/src/ui/events-list-view.cpp
+index b1d04abb..09536b9e 100644
+--- a/src/ui/events-list-view.cpp
++++ b/src/ui/events-list-view.cpp
+@@ -1,4 +1,5 @@
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QApplication>
+ #include <QPixmap>
+ #include <QToolTip>
+diff --git a/src/ui/private-share-dialog.cpp b/src/ui/private-share-dialog.cpp
+index 511d476b..284cc043 100644
+--- a/src/ui/private-share-dialog.cpp
++++ b/src/ui/private-share-dialog.cpp
+@@ -2,6 +2,7 @@
+ #include <QCompleter>
+ #include <QLineEdit>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QResizeEvent>
+ #include <QStringList>
+ #include <QStringListModel>
+--
+2.26.2
+
diff --git a/net-misc/seafile-client/files/seafile-client-8.0.6-select-qt5.patch b/net-misc/seafile-client/files/seafile-client-8.0.6-select-qt5.patch
new file mode 100644
index 0000000..4d3a3d1
--- /dev/null
+++ b/net-misc/seafile-client/files/seafile-client-8.0.6-select-qt5.patch
@@ -0,0 +1,23 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1c4a4447..5747df46 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -133,14 +133,12 @@ ENDIF()
+ ####################
+ ###### BEGIN: QT configuration
+ ####################
+-FIND_PROGRAM(qmake_executable NAMES qmake qmake.exe)
+-EXECUTE_PROCESS(COMMAND
+- bash -c "${qmake_executable} --version | grep -iE '^using qt version [0-9.]+' | awk '{print $4}'"
+- OUTPUT_VARIABLE DETECTED_QT_VERSION
+- OUTPUT_STRIP_TRAILING_WHITESPACE)
++FIND_PACKAGE(Qt5Core)
++SET(DETECTED_QT_VERSION ${Qt5Core_VERSION})
+ MESSAGE("Qt version: ${DETECTED_QT_VERSION}")
++GET_TARGET_PROPERTY(QMAKE_EXECUTABLE_PATH Qt5::qmake IMPORTED_LOCATION)
+ EXECUTE_PROCESS(COMMAND
+- bash -c "qmake --version|grep -iE '^using qt version [0-9]'|awk '{print $4}'|grep -iE '^[0-9]'|awk -F . '{print $1}'"
++ bash -c "${QMAKE_EXECUTABLE_PATH} --version|grep -iE '^using qt version [0-9]'|awk '{print $4}'|grep -iE '^[0-9]'|awk -F . '{print $1}'"
+ OUTPUT_VARIABLE QT_VERSION_MAJOR
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ MESSAGE("QT_VERSION_MAJOR: ${QT_VERSION_MAJOR}")
diff --git a/net-misc/seafile-client/metadata.xml b/net-misc/seafile-client/metadata.xml
new file mode 100644
index 0000000..1e23f1b
--- /dev/null
+++ b/net-misc/seafile-client/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <use>
+ <flag name="shibboleth">Build support for Shibboleth single sign-on</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">haiwen/seafile-client</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-misc/seafile-client/seafile-client-8.0.9.ebuild b/net-misc/seafile-client/seafile-client-8.0.9.ebuild
new file mode 100644
index 0000000..7b9668c
--- /dev/null
+++ b/net-misc/seafile-client/seafile-client-8.0.9.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Upstream is moving tags repeatedly, then we use commit hash.
+RELEASE_COMMIT="5701514e89114b97795d4cfcbc3b59a1fd2f91e8"
+
+inherit xdg cmake
+
+DESCRIPTION="Seafile desktop client"
+HOMEPAGE="https://www.seafile.com/ https://github.com/haiwen/seafile-client/"
+SRC_URI="https://github.com/haiwen/${PN}/archive/${RELEASE_COMMIT}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="amd64 ~x86"
+IUSE="shibboleth test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="dev-db/sqlite:3
+ dev-libs/glib:2
+ dev-libs/jansson:=
+ dev-libs/openssl:=
+ dev-qt/qtcore:5
+ dev-qt/qtdbus:5
+ dev-qt/qtgui:5
+ dev-qt/qtnetwork:5
+ dev-qt/qtwidgets:5
+ >=net-libs/libsearpc-3.2.0_p1
+ ~net-misc/seafile-${PV}
+ sys-libs/zlib
+ virtual/opengl
+ elibc_musl? ( sys-libs/fts-standalone )
+ shibboleth? ( dev-qt/qtwebengine:5[widgets] )"
+DEPEND="${RDEPEND}
+ test? ( dev-qt/qttest:5 )"
+BDEPEND="dev-qt/linguist-tools:5"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-8.0.6-select-qt5.patch"
+ "${FILESDIR}/${PN}-7.0.9-qt-5.15.patch"
+ "${FILESDIR}/${PN}-7.0.9-libressl.patch"
+)
+
+S="${WORKDIR}/${PN}-${RELEASE_COMMIT}"
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_SHIBBOLETH_SUPPORT="$(usex shibboleth)"
+ -DBUILD_TESTING="$(usex test)"
+ )
+ # 863554
+ use elibc_musl && mycmakeargs+=( -DCMAKE_CXX_STANDARD_LIBRARIES="-lfts" )
+ cmake_src_configure
+}
diff --git a/net-misc/seafile-client/seafile-client-9.0.3.ebuild b/net-misc/seafile-client/seafile-client-9.0.3.ebuild
new file mode 100644
index 0000000..6868c4a
--- /dev/null
+++ b/net-misc/seafile-client/seafile-client-9.0.3.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Upstream is moving tags repeatedly, then we use commit hash.
+RELEASE_COMMIT="57aa79cf4d1175a39cde20a38167db4fd3e12293"
+
+inherit xdg cmake
+
+DESCRIPTION="Seafile desktop client"
+HOMEPAGE="https://www.seafile.com/ https://github.com/haiwen/seafile-client/"
+SRC_URI="https://github.com/haiwen/${PN}/archive/${RELEASE_COMMIT}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="shibboleth test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="dev-db/sqlite:3
+ dev-libs/glib:2
+ dev-libs/jansson:=
+ dev-libs/openssl:=
+ dev-qt/qtcore:5
+ dev-qt/qtdbus:5
+ dev-qt/qtgui:5
+ dev-qt/qtnetwork:5
+ dev-qt/qtwidgets:5
+ >=net-libs/libsearpc-3.2.0_p1
+ ~net-misc/seafile-${PV}
+ sys-libs/zlib
+ virtual/opengl
+ elibc_musl? ( sys-libs/fts-standalone )
+ shibboleth? ( dev-qt/qtwebengine:5[widgets] )"
+DEPEND="${RDEPEND}
+ test? ( dev-qt/qttest:5 )"
+BDEPEND="dev-qt/linguist-tools:5"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-8.0.6-select-qt5.patch"
+ "${FILESDIR}/${PN}-7.0.9-qt-5.15.patch"
+ "${FILESDIR}/${PN}-7.0.9-libressl.patch"
+)
+
+S="${WORKDIR}/${PN}-${RELEASE_COMMIT}"
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_SHIBBOLETH_SUPPORT="$(usex shibboleth)"
+ -DBUILD_TESTING="$(usex test)"
+ )
+ # 863554
+ use elibc_musl && mycmakeargs+=( -DCMAKE_CXX_STANDARD_LIBRARIES="-lfts" )
+ cmake_src_configure
+}
diff --git a/net-misc/socat/Manifest b/net-misc/socat/Manifest
new file mode 100644
index 0000000..13d9ff4
--- /dev/null
+++ b/net-misc/socat/Manifest
@@ -0,0 +1 @@
+DIST socat-1.7.4.4.tar.bz2 522127 BLAKE2B 221b1c7c1ef0ac9c2402a6917ce7740a7ed857ceae4f4c346ed3c69c261fd0f9ca667e21cab5f97427d3947b06fdb0ac6d090852465878db968a24b8ece587ad SHA512 3eedfbf599ecf1d6fd391d03d710044bc5e18a762395bc4cb151b96fe673d405a6630da3070ecddd5ac558126b56aa65feaa74d528eeb755a04aa0ec61690651
diff --git a/net-misc/socat/metadata.xml b/net-misc/socat/metadata.xml
new file mode 100644
index 0000000..001f8b0
--- /dev/null
+++ b/net-misc/socat/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>sam@gentoo.org</email>
+ <name>Sam James</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>netmon@gentoo.org</email>
+ <name>Gentoo network monitoring and analysis project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:dest-unreach:socat</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-misc/socat/socat-1.7.4.4-r1.ebuild b/net-misc/socat/socat-1.7.4.4-r1.ebuild
new file mode 100644
index 0000000..e7c8d89
--- /dev/null
+++ b/net-misc/socat/socat-1.7.4.4-r1.ebuild
@@ -0,0 +1,52 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs
+
+MY_P=${P/_beta/-b}
+DESCRIPTION="Multipurpose relay (SOcket CAT)"
+HOMEPAGE="http://www.dest-unreach.org/socat/ https://repo.or.cz/socat.git"
+SRC_URI="http://www.dest-unreach.org/socat/download/${MY_P}.tar.bz2"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
+IUSE="ipv6 readline ssl tcpd"
+
+DEPEND="ssl? ( >=dev-libs/openssl-3:0= )
+ readline? ( sys-libs/readline:= )
+ tcpd? ( sys-apps/tcp-wrappers )"
+RDEPEND="${DEPEND}"
+
+# Tests are a large bash script
+# Hard to disable individual tests needing network or privileges
+# in 1.7.4.2: FAILED: 59 329
+RESTRICT="test"
+
+DOCS=( BUGREPORTS CHANGES DEVELOPMENT EXAMPLES FAQ FILES PORTING README SECURITY )
+
+src_configure() {
+ # bug #293324
+ filter-flags '-Wno-error*'
+
+ tc-export AR
+
+ # libressl doesn't have OPENSSL_INIT_new()
+ export ac_cv_func_OPENSSL_init_ssl=no
+
+ econf \
+ $(use_enable ssl openssl) \
+ $(use_enable readline) \
+ $(use_enable ipv6 ip6) \
+ $(use_enable tcpd libwrap)
+}
+
+src_install() {
+ default
+
+ docinto html
+ dodoc doc/*.html doc/*.css
+}
diff --git a/net-misc/stunnel/Manifest b/net-misc/stunnel/Manifest
new file mode 100644
index 0000000..de88c81
--- /dev/null
+++ b/net-misc/stunnel/Manifest
@@ -0,0 +1,4 @@
+DIST stunnel-5.64.tar.gz 869088 BLAKE2B c6be054b825e57c1ac44adf28d4546ab78250cf9d7b17bc9e039d2715ca2316fef674a3ed2c4419a5a7ad6fa85b56809f736d0dca0bc672521347d5f51d2ed23 SHA512 85ed22664420db3c97b871f1afeb6483e547f421f0419fed1ccb4f3563ea154b6aeb6ae7221f001557c786a3406ada4c7b0d44b208dcf98f16209229aee4e0aa
+DIST stunnel-5.65.tar.gz 872293 BLAKE2B 45cc4dd0ec91cb9a99c10d26910b05325af29ec2609c0b86d5aceb07fbd495ff6fe39b0fe2c5895358596ee34ed822870c6eb1a538e30557f4485d042f5ae781 SHA512 96ca0535a07d5ea050a5d985c0ab6299bb92e551715120f536869a7b408b795fdc251782aaa7a4a282749d3146726d71c8b3c25430969aa55745a863abe5728a
+DIST stunnel-5.68.tar.gz 884989 BLAKE2B e2551b2052db0719203b24dcf16a2ef74c078dccd1200d25502defcef1301456e755a71a1a2b6ab7b43fc9ddc04cd031fca83ffb760528133a0e22ae22e64d40 SHA512 cdc3b8ab4cd35ba722b5248c005ae58a39d79a80600447417b1d0d01fd3aa9e8b22f8568c3177423be99d7395bb15a8754e975fb953556cd80a9cc11e185e9fb
+DIST stunnel-5.71.tar.gz 895646 BLAKE2B d323363c7bfdd6c0b7931b84a6069cf9a8337e967c31e14d15976d7932f0c0d6f40f7a1cbf5abbdff0e9edc52176cdcead4f848653088193b2debf4e77443b42 SHA512 c7004f48b93b3415305eec1193d51b7bf51a3bdd2cdc9f6ae588f563b32408b1ecde83b9f3f5b658f945ab5bcc5124390c38235394aad4471bf5b666081af2a2
diff --git a/net-misc/stunnel/files/stunnel-5.59-libressl.patch b/net-misc/stunnel/files/stunnel-5.59-libressl.patch
new file mode 100644
index 0000000..1e61881
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel-5.59-libressl.patch
@@ -0,0 +1,237 @@
+From OpenBSD.
+
+Index: src/common.h
+--- a/src/common.h.orig
++++ b/src/common.h
+@@ -454,7 +454,7 @@ extern char *sys_errlist[];
+ #define OPENSSL_NO_TLS1_2
+ #endif /* OpenSSL older than 1.0.1 || defined(OPENSSL_NO_TLS1) */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #ifndef OPENSSL_NO_SSL2
+ #define OPENSSL_NO_SSL2
+ #endif /* !defined(OPENSSL_NO_SSL2) */
+Index: src/client.c
+--- a/src/client.c.orig
++++ b/src/client.c
+@@ -750,7 +750,7 @@ NOEXPORT void print_cipher(CLI *c) { /* print negotiat
+ NOEXPORT void transfer(CLI *c) {
+ int timeout; /* s_poll_wait timeout in seconds */
+ int pending; /* either processed on unprocessed TLS data */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ int has_pending=0, prev_has_pending;
+ #endif
+ int watchdog=0; /* a counter to detect an infinite loop */
+@@ -797,7 +797,7 @@ NOEXPORT void transfer(CLI *c) {
+
+ /****************************** wait for an event */
+ pending=SSL_pending(c->ssl);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* only attempt to process SSL_has_pending() data once */
+ prev_has_pending=has_pending;
+ has_pending=SSL_has_pending(c->ssl);
+@@ -1202,7 +1202,7 @@ NOEXPORT void transfer(CLI *c) {
+ s_log(LOG_ERR,
+ "please report the problem to Michal.Trojnara@stunnel.org");
+ stunnel_info(LOG_ERR);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ s_log(LOG_ERR, "protocol=%s, SSL_pending=%d, SSL_has_pending=%d",
+ SSL_get_version(c->ssl),
+ SSL_pending(c->ssl), SSL_has_pending(c->ssl));
+Index: src/ctx.c
+--- a/src/ctx.c.orig
++++ b/src/ctx.c
+@@ -91,7 +91,7 @@ NOEXPORT void set_prompt(const char *);
+ NOEXPORT int ui_retry();
+
+ /* session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int generate_session_ticket_cb(SSL *, void *);
+ NOEXPORT int decrypt_session_ticket_cb(SSL *, SSL_SESSION *,
+ const unsigned char *, size_t, SSL_TICKET_STATUS, void *);
+@@ -179,7 +179,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init T
+ }
+ current_section=section; /* setup current section for callbacks */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* set the security level */
+ if(section->security_level>=0) {
+ /* set the user-specified value */
+@@ -265,7 +265,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init T
+ #endif
+
+ /* setup session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CTX_set_session_ticket_cb(section->ctx, generate_session_ticket_cb,
+ decrypt_session_ticket_cb, NULL);
+ #endif /* OpenSSL 1.1.1 or later */
+@@ -539,7 +539,7 @@ NOEXPORT int ecdh_init(SERVICE_OPTIONS *section) {
+ /**************************************** initialize OpenSSL CONF */
+
+ NOEXPORT int conf_init(SERVICE_OPTIONS *section) {
+-#if OPENSSL_VERSION_NUMBER>=0x10002000L
++#if OPENSSL_VERSION_NUMBER>=0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CONF_CTX *cctx;
+ NAME_LIST *curr;
+ char *cmd, *param;
+@@ -1045,7 +1045,7 @@ NOEXPORT int ui_retry() {
+
+ /**************************************** session tickets */
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+
+ typedef struct {
+ void *session_authenticated;
+@@ -1538,7 +1538,7 @@ NOEXPORT void info_callback(const SSL *ssl, int where,
+
+ c=SSL_get_ex_data((SSL *)ssl, index_ssl_cli);
+ if(c) {
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OSSL_HANDSHAKE_STATE state=SSL_get_state(ssl);
+ #else
+ int state=SSL_get_state((SSL *)ssl);
+Index: src/options.c
+--- a/src/options.c.orig
++++ b/src/options.c
+@@ -38,7 +38,7 @@
+ #include "common.h"
+ #include "prototypes.h"
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #define DEFAULT_CURVES "X25519:P-256:X448:P-521:P-384"
+ #else /* OpenSSL version < 1.1.1 */
+ #define DEFAULT_CURVES "prime256v1"
+Index: src/prototypes.h
+--- a/src/prototypes.h.orig
++++ b/src/prototypes.h
+@@ -736,7 +736,7 @@ int getnameinfo(const struct sockaddr *, socklen_t,
+ extern CLI *thread_head;
+ #endif
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -787,7 +787,7 @@ typedef enum {
+
+ extern CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+ /* Emulate the OpenSSL 1.1 locking API for older OpenSSL versions */
+ CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);
+ int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *);
+Index: src/ssl.c
+--- a/src/ssl.c.orig
++++ b/src/ssl.c
+@@ -44,7 +44,7 @@ NOEXPORT void cb_new_auth(void *parent, void *ptr, CRY
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp);
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp);
+ #else
+@@ -87,7 +87,7 @@ int fips_available() { /* either FIPS provider or cont
+ }
+
+ int ssl_init(void) { /* init TLS before parsing configuration file */
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OPENSSL_INIT_SETTINGS *conf=OPENSSL_INIT_new();
+ #ifdef USE_WIN32
+ OPENSSL_INIT_set_config_filename(conf, "..\\config\\openssl.cnf");
+@@ -161,7 +161,7 @@ NOEXPORT void cb_new_auth(void *parent, void *ptr, CRY
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp) {
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp) {
+ #else
+Index: src/sthreads.c
+--- a/src/sthreads.c.orig
++++ b/src/sthreads.c
+@@ -120,7 +120,7 @@ void thread_id_init(void) {
+ /**************************************** locking */
+
+ /* we only need to initialize locking with OpenSSL older than 1.1.0 */
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_PTHREAD
+
+@@ -279,7 +279,7 @@ NOEXPORT int s_atomic_add(int *val, int amount, CRYPTO
+
+ CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -387,7 +387,8 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret,
+
+ void locking_init(void) {
+ size_t i;
+-#if defined(USE_OS_THREADS) && OPENSSL_VERSION_NUMBER<0x10100004L
++#if defined(USE_OS_THREADS) && \
++ (OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER))
+ size_t num;
+
+ /* initialize the OpenSSL static locking */
+Index: src/tls.c
+--- a/src/tls.c.orig
++++ b/src/tls.c
+@@ -41,7 +41,7 @@
+ volatile int tls_initialized=0;
+
+ NOEXPORT void tls_platform_init();
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *);
+ #endif
+
+@@ -52,7 +52,7 @@ void tls_init() {
+ tls_platform_init();
+ tls_initialized=1;
+ ui_tls=tls_alloc(NULL, NULL, "ui");
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ CRYPTO_set_mem_functions(str_alloc_detached_debug,
+ str_realloc_detached_debug, str_free_debug);
+ #else
+@@ -184,7 +184,7 @@ TLS_DATA *tls_get() {
+
+ /**************************************** OpenSSL allocator hook */
+
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *ptr) {
+ /* CRYPTO_set_mem_ex_functions() needs a function rather than a macro */
+ /* unfortunately, OpenSSL provides no file:line information here */
+Index: src/verify.c
+--- a/src/verify.c.orig
++++ b/src/verify.c
+@@ -351,7 +351,7 @@ NOEXPORT int cert_check_local(X509_STORE_CTX *callback
+ cert=X509_STORE_CTX_get_current_cert(callback_ctx);
+ subject=X509_get_subject_name(cert);
+
+-#if OPENSSL_VERSION_NUMBER<0x10100006L
++#if OPENSSL_VERSION_NUMBER<0x10100006L || defined(LIBRESSL_VERSION_NUMBER)
+ #define X509_STORE_CTX_get1_certs X509_STORE_get1_certs
+ #endif
+ /* modern API allows retrieving multiple matching certificates */
diff --git a/net-misc/stunnel/files/stunnel-5.65-libressl.patch b/net-misc/stunnel/files/stunnel-5.65-libressl.patch
new file mode 100644
index 0000000..ac878f6
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel-5.65-libressl.patch
@@ -0,0 +1,246 @@
+From OpenBSD.
+
+diff --git a/src/client.c b/src/client.c
+index 6a5aeb3..d416127 100644
+--- a/src/client.c
++++ b/src/client.c
+@@ -753,7 +753,7 @@ NOEXPORT void print_cipher(CLI *c) { /* print negotiated cipher */
+ NOEXPORT void transfer(CLI *c) {
+ int timeout; /* s_poll_wait timeout in seconds */
+ int pending; /* either processed on unprocessed TLS data */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ int has_pending=0, prev_has_pending;
+ #endif
+ int watchdog=0; /* a counter to detect an infinite loop */
+@@ -800,7 +800,7 @@ NOEXPORT void transfer(CLI *c) {
+
+ /****************************** wait for an event */
+ pending=SSL_pending(c->ssl);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* only attempt to process SSL_has_pending() data once */
+ prev_has_pending=has_pending;
+ has_pending=SSL_has_pending(c->ssl);
+@@ -1205,7 +1205,7 @@ NOEXPORT void transfer(CLI *c) {
+ s_log(LOG_ERR,
+ "please report the problem to Michal.Trojnara@stunnel.org");
+ stunnel_info(LOG_ERR);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ s_log(LOG_ERR, "protocol=%s, SSL_pending=%d, SSL_has_pending=%d",
+ SSL_get_version(c->ssl),
+ SSL_pending(c->ssl), SSL_has_pending(c->ssl));
+diff --git a/src/common.h b/src/common.h
+index bc37eb5..87bfe54 100644
+--- a/src/common.h
++++ b/src/common.h
+@@ -457,7 +457,7 @@ extern char *sys_errlist[];
+ #define OPENSSL_NO_TLS1_2
+ #endif /* OpenSSL older than 1.0.1 || defined(OPENSSL_NO_TLS1) */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #ifndef OPENSSL_NO_SSL2
+ #define OPENSSL_NO_SSL2
+ #endif /* !defined(OPENSSL_NO_SSL2) */
+diff --git a/src/ctx.c b/src/ctx.c
+index a2202b7..a39ee4c 100644
+--- a/src/ctx.c
++++ b/src/ctx.c
+@@ -94,7 +94,7 @@ NOEXPORT void set_prompt(const char *);
+ NOEXPORT int ui_retry(void);
+
+ /* session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int generate_session_ticket_cb(SSL *, void *);
+ NOEXPORT int decrypt_session_ticket_cb(SSL *, SSL_SESSION *,
+ const unsigned char *, size_t, SSL_TICKET_STATUS, void *);
+@@ -182,7 +182,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init TLS context */
+ }
+ current_section=section; /* setup current section for callbacks */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* set the security level */
+ if(section->security_level>=0) {
+ /* set the user-specified value */
+@@ -270,7 +270,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init TLS context */
+ #endif
+
+ /* setup session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CTX_set_session_ticket_cb(section->ctx, generate_session_ticket_cb,
+ decrypt_session_ticket_cb, NULL);
+ #endif /* OpenSSL 1.1.1 or later */
+@@ -544,7 +544,7 @@ NOEXPORT int ecdh_init(SERVICE_OPTIONS *section) {
+ /**************************************** initialize OpenSSL CONF */
+
+ NOEXPORT int conf_init(SERVICE_OPTIONS *section) {
+-#if OPENSSL_VERSION_NUMBER>=0x10002000L
++#if OPENSSL_VERSION_NUMBER>=0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CONF_CTX *cctx;
+ NAME_LIST *curr;
+ char *cmd, *param;
+@@ -1050,7 +1050,7 @@ NOEXPORT int ui_retry() {
+
+ /**************************************** session tickets */
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+
+ typedef struct {
+ void *session_authenticated;
+@@ -1541,7 +1541,7 @@ NOEXPORT void info_callback(const SSL *ssl, int where, int ret) {
+
+ c=SSL_get_ex_data(ssl, index_ssl_cli);
+ if(c) {
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OSSL_HANDSHAKE_STATE state=SSL_get_state(ssl);
+ #else
+ int state=SSL_get_state((SSL *)ssl);
+diff --git a/src/options.c b/src/options.c
+index 9ac9c7e..dfcf8b2 100644
+--- a/src/options.c
++++ b/src/options.c
+@@ -37,7 +37,7 @@
+
+ #include "prototypes.h"
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #define DEFAULT_CURVES "X25519:P-256:X448:P-521:P-384"
+ #else /* OpenSSL version < 1.1.1 */
+ #define DEFAULT_CURVES "prime256v1"
+diff --git a/src/prototypes.h b/src/prototypes.h
+index 89d77b8..832942d 100644
+--- a/src/prototypes.h
++++ b/src/prototypes.h
+@@ -726,7 +726,7 @@ int getnameinfo(const struct sockaddr *, socklen_t,
+ extern CLI *thread_head;
+ #endif
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -777,7 +777,7 @@ typedef enum {
+
+ extern CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+ /* Emulate the OpenSSL 1.1 locking API for older OpenSSL versions */
+ CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);
+ int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *);
+diff --git a/src/ssl.c b/src/ssl.c
+index fd6106b..526da34 100644
+--- a/src/ssl.c
++++ b/src/ssl.c
+@@ -43,7 +43,7 @@ NOEXPORT void cb_new_auth(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp);
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp);
+ #else
+@@ -102,7 +102,7 @@ int fips_available() { /* either FIPS provider or container is available */
+
+ /* initialize libcrypto before invoking API functions that require it */
+ void crypto_init(char *stunnel_dir) {
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OPENSSL_INIT_SETTINGS *conf=OPENSSL_INIT_new();
+ #ifdef USE_WIN32
+ char *path;
+@@ -200,7 +200,7 @@ NOEXPORT void cb_new_auth(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp) {
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp) {
+ #else
+diff --git a/src/sthreads.c b/src/sthreads.c
+index e3e442e..9f343e9 100644
+--- a/src/sthreads.c
++++ b/src/sthreads.c
+@@ -123,7 +123,7 @@ NOEXPORT void thread_id_init() {
+ /**************************************** locking */
+
+ /* we only need to initialize locking with OpenSSL older than 1.1.0 */
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_PTHREAD
+
+@@ -283,7 +283,7 @@ NOEXPORT int s_atomic_add(int *val, int amount, CRYPTO_RWLOCK *lock) {
+
+ CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -391,7 +391,8 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock) {
+
+ NOEXPORT void locking_init() {
+ size_t i;
+-#if defined(USE_OS_THREADS) && OPENSSL_VERSION_NUMBER<0x10100004L
++#if defined(USE_OS_THREADS) && \
++ (OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER))
+ size_t num;
+
+ /* initialize the OpenSSL static locking */
+diff --git a/src/tls.c b/src/tls.c
+index 43266d3..5de3435 100644
+--- a/src/tls.c
++++ b/src/tls.c
+@@ -40,7 +40,7 @@
+ volatile int tls_initialized=0;
+
+ NOEXPORT void tls_platform_init(void);
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *);
+ #endif
+
+@@ -51,7 +51,7 @@ void tls_init() {
+ tls_platform_init();
+ tls_initialized=1;
+ ui_tls=tls_alloc(NULL, NULL, "ui");
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ CRYPTO_set_mem_functions(str_alloc_detached_debug,
+ str_realloc_detached_debug, str_free_debug);
+ #else
+@@ -183,7 +183,7 @@ TLS_DATA *tls_get() {
+
+ /**************************************** OpenSSL allocator hook */
+
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *ptr) {
+ /* CRYPTO_set_mem_ex_functions() needs a function rather than a macro */
+ /* unfortunately, OpenSSL provides no file:line information here */
+diff --git a/src/verify.c b/src/verify.c
+index 4058d6c..dbb4880 100644
+--- a/src/verify.c
++++ b/src/verify.c
+@@ -350,7 +350,7 @@ NOEXPORT int cert_check_local(X509_STORE_CTX *callback_ctx) {
+ cert=X509_STORE_CTX_get_current_cert(callback_ctx);
+ subject=X509_get_subject_name(cert);
+
+-#if OPENSSL_VERSION_NUMBER<0x10100006L
++#if OPENSSL_VERSION_NUMBER<0x10100006L || defined(LIBRESSL_VERSION_NUMBER)
+ #define X509_STORE_CTX_get1_certs X509_STORE_get1_certs
+ #endif
+ /* modern API allows retrieving multiple matching certificates */
diff --git a/net-misc/stunnel/files/stunnel-5.68-libressl.patch b/net-misc/stunnel/files/stunnel-5.68-libressl.patch
new file mode 100644
index 0000000..7bae42f
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel-5.68-libressl.patch
@@ -0,0 +1,321 @@
+commit deb3cc400a32c21712b6b748da616ef4a1b0d86a
+Author: orbea <orbea@riseup.net>
+Date: Tue Apr 11 15:13:02 2023 -0700
+
+ libressl (From OpenBSD)
+
+diff --git a/src/client.c b/src/client.c
+index ac4a115..dda42c2 100644
+--- a/src/client.c
++++ b/src/client.c
+@@ -773,7 +773,7 @@ NOEXPORT void print_cipher(CLI *c) { /* print negotiated cipher */
+ NOEXPORT void transfer(CLI *c) {
+ int timeout; /* s_poll_wait timeout in seconds */
+ int pending; /* either processed on unprocessed TLS data */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ int has_pending=0, prev_has_pending;
+ #endif
+ int watchdog=0; /* a counter to detect an infinite loop */
+@@ -820,7 +820,7 @@ NOEXPORT void transfer(CLI *c) {
+
+ /****************************** wait for an event */
+ pending=SSL_pending(c->ssl);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* only attempt to process SSL_has_pending() data once */
+ prev_has_pending=has_pending;
+ has_pending=SSL_has_pending(c->ssl);
+@@ -1225,7 +1225,7 @@ NOEXPORT void transfer(CLI *c) {
+ s_log(LOG_ERR,
+ "please report the problem to Michal.Trojnara@stunnel.org");
+ stunnel_info(LOG_ERR);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ s_log(LOG_ERR, "protocol=%s, SSL_pending=%d, SSL_has_pending=%d",
+ SSL_get_version(c->ssl),
+ SSL_pending(c->ssl), SSL_has_pending(c->ssl));
+diff --git a/src/common.h b/src/common.h
+index 8fe50b4..52435d7 100644
+--- a/src/common.h
++++ b/src/common.h
+@@ -459,7 +459,7 @@ extern char *sys_errlist[];
+ #define OPENSSL_NO_TLS1_2
+ #endif /* OpenSSL older than 1.0.1 || defined(OPENSSL_NO_TLS1) */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #ifndef OPENSSL_NO_SSL2
+ #define OPENSSL_NO_SSL2
+ #endif /* !defined(OPENSSL_NO_SSL2) */
+@@ -505,7 +505,7 @@ int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
+ /* not defined in public headers before OpenSSL 0.9.8 */
+ STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
+ #endif /* !defined(OPENSSL_NO_COMP) */
+-#if OPENSSL_VERSION_NUMBER>=0x10101000L
++#if OPENSSL_VERSION_NUMBER>=0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #include <openssl/storeerr.h>
+ #endif /* OPENSSL_VERSION_NUMBER>=0x10101000L */
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+diff --git a/src/ctx.c b/src/ctx.c
+index 6a42a6b..90d6273 100644
+--- a/src/ctx.c
++++ b/src/ctx.c
+@@ -94,7 +94,7 @@ NOEXPORT void set_prompt(const char *);
+ NOEXPORT int ui_retry(void);
+
+ /* session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int generate_session_ticket_cb(SSL *, void *);
+ NOEXPORT int decrypt_session_ticket_cb(SSL *, SSL_SESSION *,
+ const unsigned char *, size_t, SSL_TICKET_STATUS, void *);
+@@ -133,7 +133,7 @@ NOEXPORT void sslerror_log(unsigned long, const char *, int, const char *);
+
+ /**************************************** initialize section->ctx */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ typedef long unsigned SSL_OPTIONS_TYPE;
+ #else
+ typedef long SSL_OPTIONS_TYPE;
+@@ -184,7 +184,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init TLS context */
+ }
+ current_section=section; /* setup current section for callbacks */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* set the security level */
+ if(section->security_level>=0) {
+ /* set the user-specified value */
+@@ -272,7 +272,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init TLS context */
+ #endif
+
+ /* setup session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CTX_set_session_ticket_cb(section->ctx, generate_session_ticket_cb,
+ decrypt_session_ticket_cb, NULL);
+ #endif /* OpenSSL 1.1.1 or later */
+@@ -546,7 +546,7 @@ NOEXPORT int ecdh_init(SERVICE_OPTIONS *section) {
+ /**************************************** initialize OpenSSL CONF */
+
+ NOEXPORT int conf_init(SERVICE_OPTIONS *section) {
+-#if OPENSSL_VERSION_NUMBER>=0x10002000L
++#if OPENSSL_VERSION_NUMBER>=0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CONF_CTX *cctx;
+ NAME_LIST *curr;
+ char *cmd, *param;
+@@ -1085,7 +1085,7 @@ NOEXPORT int ui_retry() {
+
+ /**************************************** session tickets */
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+
+ typedef struct {
+ void *session_authenticated;
+@@ -1573,7 +1573,7 @@ NOEXPORT void info_callback(const SSL *ssl, int where, int ret) {
+ CLI *c;
+ SSL_CTX *ctx;
+ const char *state_string;
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OSSL_HANDSHAKE_STATE state=SSL_get_state(ssl);
+ #else
+ int state=SSL_get_state((SSL *)ssl);
+diff --git a/src/prototypes.h b/src/prototypes.h
+index 0ecd719..1084ce2 100644
+--- a/src/prototypes.h
++++ b/src/prototypes.h
+@@ -733,7 +733,7 @@ int getnameinfo(const struct sockaddr *, socklen_t,
+ extern CLI *thread_head;
+ #endif
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -784,7 +784,7 @@ typedef enum {
+
+ extern CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+ /* Emulate the OpenSSL 1.1 locking API for older OpenSSL versions */
+ CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);
+ int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *);
+diff --git a/src/ssl.c b/src/ssl.c
+index 2fd0c77..e465fe1 100644
+--- a/src/ssl.c
++++ b/src/ssl.c
+@@ -43,7 +43,7 @@ NOEXPORT void cb_new_auth(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp);
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp);
+ #else
+@@ -103,7 +103,7 @@ int fips_available() { /* either FIPS provider or container is available */
+
+ /* initialize libcrypto before invoking API functions that require it */
+ void crypto_init() {
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OPENSSL_INIT_SETTINGS *conf;
+ #endif /* OPENSSL_VERSION_NUMBER>=0x10100000L */
+ #ifdef USE_WIN32
+@@ -146,7 +146,7 @@ void crypto_init() {
+ #endif /* USE_WIN32 */
+
+ /* initialize OpenSSL */
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ conf=OPENSSL_INIT_new();
+ #ifdef USE_WIN32
+ stunnel_dir=tstr2str(stunnel_exe_path);
+@@ -246,7 +246,7 @@ NOEXPORT void cb_new_auth(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp) {
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp) {
+ #else
+diff --git a/src/sthreads.c b/src/sthreads.c
+index d0104ee..23ca48c 100644
+--- a/src/sthreads.c
++++ b/src/sthreads.c
+@@ -123,7 +123,7 @@ NOEXPORT void thread_id_init() {
+ /**************************************** locking */
+
+ /* we only need to initialize locking with OpenSSL older than 1.1.0 */
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_PTHREAD
+
+@@ -283,7 +283,7 @@ NOEXPORT int s_atomic_add(int *val, int amount, CRYPTO_RWLOCK *lock) {
+
+ CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -391,7 +391,8 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock) {
+
+ NOEXPORT void locking_init() {
+ size_t i;
+-#if defined(USE_OS_THREADS) && OPENSSL_VERSION_NUMBER<0x10100004L
++#if defined(USE_OS_THREADS) && \
++ (OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER))
+ size_t num;
+
+ /* initialize the OpenSSL static locking */
+diff --git a/src/str.c b/src/str.c
+index 5b464a1..9837c49 100644
+--- a/src/str.c
++++ b/src/str.c
+@@ -93,7 +93,7 @@ NOEXPORT LEAK_ENTRY leak_hash_table[LEAK_TABLE_SIZE],
+ *leak_results[LEAK_TABLE_SIZE];
+ NOEXPORT int leak_result_num=0;
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ DEFINE_STACK_OF(LEAK_ENTRY)
+ #endif /* OpenSSL version >= 1.1.1 */
+
+@@ -107,7 +107,9 @@ NOEXPORT ALLOC_LIST *get_alloc_list_ptr(void *, const char *, int);
+ NOEXPORT void str_leak_debug(const ALLOC_LIST *, int);
+
+ NOEXPORT LEAK_ENTRY *leak_search(const ALLOC_LIST *);
++#if !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int leak_cmp(const LEAK_ENTRY *const *, const LEAK_ENTRY *const *);
++#endif /* LIBRESSL_VERSION_NUMBER */
+ NOEXPORT void leak_report(void);
+ NOEXPORT long leak_threshold(void);
+
+@@ -555,7 +557,7 @@ NOEXPORT LEAK_ENTRY *leak_search(const ALLOC_LIST *alloc_list) {
+ void leak_table_utilization() {
+ int i, utilization=0;
+ int64_t grand_total=0;
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ STACK_OF(LEAK_ENTRY) *stats;
+ #endif /* OpenSSL version >= 1.1.1 */
+
+@@ -572,7 +574,7 @@ void leak_table_utilization() {
+ s_log(LOG_DEBUG, "Leak detection table utilization: %d/%d (%05.2f%%)",
+ utilization, LEAK_TABLE_SIZE, 100.0*utilization/LEAK_TABLE_SIZE);
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* log up to 5 most frequently used heap allocations */
+ stats=sk_LEAK_ENTRY_new_reserve(leak_cmp, utilization);
+ for(i=0; i<LEAK_TABLE_SIZE; ++i)
+@@ -589,6 +591,7 @@ void leak_table_utilization() {
+ #endif /* OpenSSL version >= 1.1.1 */
+ }
+
++#if !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int leak_cmp(const LEAK_ENTRY *const *a, const LEAK_ENTRY *const *b) {
+ int64_t d = (*a)->total - (*b)->total;
+ if(d>0)
+@@ -597,6 +600,7 @@ NOEXPORT int leak_cmp(const LEAK_ENTRY *const *a, const LEAK_ENTRY *const *b) {
+ return -1;
+ return 0;
+ }
++#endif /* LIBRESSL_VERSION_NUMBER */
+
+ /* report identified leaks */
+ NOEXPORT void leak_report() {
+diff --git a/src/tls.c b/src/tls.c
+index 691dfa2..bd1b66a 100644
+--- a/src/tls.c
++++ b/src/tls.c
+@@ -40,7 +40,7 @@
+ volatile int tls_initialized=0;
+
+ NOEXPORT void tls_platform_init(void);
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *);
+ #endif
+
+@@ -51,7 +51,7 @@ void tls_init() {
+ tls_platform_init();
+ tls_initialized=1;
+ ui_tls=tls_alloc(NULL, NULL, "ui");
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ CRYPTO_set_mem_functions(str_alloc_detached_debug,
+ str_realloc_detached_debug, str_free_debug);
+ #else
+@@ -184,7 +184,7 @@ TLS_DATA *tls_get() {
+
+ /**************************************** OpenSSL allocator hook */
+
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *ptr) {
+ /* CRYPTO_set_mem_ex_functions() needs a function rather than a macro */
+ /* unfortunately, OpenSSL provides no file:line information here */
+diff --git a/src/verify.c b/src/verify.c
+index 4d8c087..9e71e2c 100644
+--- a/src/verify.c
++++ b/src/verify.c
+@@ -388,7 +388,7 @@ NOEXPORT int cert_check_local(X509_STORE_CTX *callback_ctx) {
+ cert=X509_STORE_CTX_get_current_cert(callback_ctx);
+ subject=X509_get_subject_name(cert);
+
+-#if OPENSSL_VERSION_NUMBER<0x10100006L
++#if OPENSSL_VERSION_NUMBER<0x10100006L || defined(LIBRESSL_VERSION_NUMBER)
+ #define X509_STORE_CTX_get1_certs X509_STORE_get1_certs
+ #endif
+ /* modern API allows retrieving multiple matching certificates */
diff --git a/net-misc/stunnel/files/stunnel-5.71-dont-clobber-fortify-source.patch b/net-misc/stunnel/files/stunnel-5.71-dont-clobber-fortify-source.patch
new file mode 100644
index 0000000..723b9c5
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel-5.71-dont-clobber-fortify-source.patch
@@ -0,0 +1,15 @@
+Don't clobber toolchain defaults.
+
+https://bugs.gentoo.org/892992
+--- a/configure.ac
++++ b/configure.ac
+@@ -109,7 +109,8 @@ if test "${GCC}" = yes; then
+ AX_APPEND_LINK_FLAGS([-Wl,-z,now])
+ AX_APPEND_LINK_FLAGS([-Wl,-z,noexecstack])
+ fi
+-AX_APPEND_COMPILE_FLAGS([-D_FORTIFY_SOURCE=2])
++
++AX_ADD_FORTIFY_SOURCE
+
+ AC_MSG_NOTICE([**************************************** libtool])
+ LT_INIT([disable-static])
diff --git a/net-misc/stunnel/files/stunnel-5.71-libressl.patch b/net-misc/stunnel/files/stunnel-5.71-libressl.patch
new file mode 100644
index 0000000..cd29227
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel-5.71-libressl.patch
@@ -0,0 +1,302 @@
+Rebased from an OpenBSD patch.
+
+--- a/src/client.c
++++ b/src/client.c
+@@ -783,7 +783,7 @@ NOEXPORT void print_cipher(CLI *c) { /* print negotiated cipher */
+ NOEXPORT void transfer(CLI *c) {
+ int timeout; /* s_poll_wait timeout in seconds */
+ int pending; /* either processed on unprocessed TLS data */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ int has_pending=0, prev_has_pending;
+ #endif
+ int watchdog=0; /* a counter to detect an infinite loop */
+@@ -830,7 +830,7 @@ NOEXPORT void transfer(CLI *c) {
+
+ /****************************** wait for an event */
+ pending=SSL_pending(c->ssl);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* only attempt to process SSL_has_pending() data once */
+ prev_has_pending=has_pending;
+ has_pending=SSL_has_pending(c->ssl);
+@@ -1253,7 +1253,7 @@ NOEXPORT void transfer(CLI *c) {
+ s_log(LOG_ERR,
+ "please report the problem to Michal.Trojnara@stunnel.org");
+ stunnel_info(LOG_ERR);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ s_log(LOG_ERR, "protocol=%s, SSL_pending=%d, SSL_has_pending=%d",
+ SSL_get_version(c->ssl),
+ SSL_pending(c->ssl), SSL_has_pending(c->ssl));
+--- a/src/common.h
++++ b/src/common.h
+@@ -459,7 +459,7 @@ extern char *sys_errlist[];
+ #define OPENSSL_NO_TLS1_2
+ #endif /* OpenSSL older than 1.0.1 || defined(OPENSSL_NO_TLS1) */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #ifndef OPENSSL_NO_SSL2
+ #define OPENSSL_NO_SSL2
+ #endif /* !defined(OPENSSL_NO_SSL2) */
+@@ -505,7 +505,7 @@ int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
+ /* not defined in public headers before OpenSSL 0.9.8 */
+ STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
+ #endif /* !defined(OPENSSL_NO_COMP) */
+-#if OPENSSL_VERSION_NUMBER>=0x10101000L
++#if OPENSSL_VERSION_NUMBER>=0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #include <openssl/storeerr.h>
+ #endif /* OPENSSL_VERSION_NUMBER>=0x10101000L */
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+--- a/src/ctx.c
++++ b/src/ctx.c
+@@ -94,7 +94,7 @@ NOEXPORT void set_prompt(const char *);
+ NOEXPORT int ui_retry(void);
+
+ /* session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int generate_session_ticket_cb(SSL *, void *);
+ NOEXPORT int decrypt_session_ticket_cb(SSL *, SSL_SESSION *,
+ const unsigned char *, size_t, SSL_TICKET_STATUS, void *);
+@@ -133,7 +133,7 @@ NOEXPORT void sslerror_log(unsigned long, const char *, int, const char *);
+
+ /**************************************** initialize section->ctx */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ typedef long unsigned SSL_OPTIONS_TYPE;
+ #else
+ typedef long SSL_OPTIONS_TYPE;
+@@ -186,7 +186,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init TLS context */
+ }
+ current_section=section; /* setup current section for callbacks */
+
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* set the security level */
+ if(section->security_level>=0) {
+ /* set the user-specified value */
+@@ -274,7 +274,7 @@ int context_init(SERVICE_OPTIONS *section) { /* init TLS context */
+ #endif
+
+ /* setup session tickets */
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CTX_set_session_ticket_cb(section->ctx, generate_session_ticket_cb,
+ decrypt_session_ticket_cb, NULL);
+ #endif /* OpenSSL 1.1.1 or later */
+@@ -573,7 +573,7 @@ NOEXPORT int ecdh_init(SERVICE_OPTIONS *section) {
+ /**************************************** initialize OpenSSL CONF */
+
+ NOEXPORT int conf_init(SERVICE_OPTIONS *section) {
+-#if OPENSSL_VERSION_NUMBER>=0x10002000L
++#if OPENSSL_VERSION_NUMBER>=0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
+ SSL_CONF_CTX *cctx;
+ NAME_LIST *curr;
+ char *cmd, *param;
+@@ -1133,7 +1133,7 @@ NOEXPORT int ui_retry() {
+
+ /**************************************** session tickets */
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+
+ typedef struct {
+ void *session_authenticated;
+@@ -1621,7 +1621,7 @@ NOEXPORT void info_callback(const SSL *ssl, int where, int ret) {
+ CLI *c;
+ SSL_CTX *ctx;
+ const char *state_string;
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OSSL_HANDSHAKE_STATE state=SSL_get_state(ssl);
+ #else
+ int state=SSL_get_state((SSL *)ssl);
+--- a/src/ocsp.c
++++ b/src/ocsp.c
+@@ -108,7 +108,7 @@ int ocsp_init(SERVICE_OPTIONS *section) {
+ }
+ s_log(LOG_DEBUG, "OCSP: Client OCSP stapling enabled");
+ } else {
+-#if OPENSSL_VERSION_NUMBER>=0x10002000L
++#if OPENSSL_VERSION_NUMBER>=0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
+ if(!section->psk_keys) {
+ if(SSL_CTX_set_tlsext_status_cb(section->ctx, ocsp_server_cb)==TLSEXT_STATUSTYPE_ocsp)
+ s_log(LOG_DEBUG, "OCSP: Server OCSP stapling enabled");
+--- a/src/prototypes.h
++++ b/src/prototypes.h
+@@ -72,7 +72,7 @@ typedef struct servername_list_struct SERVERNAME_LIST;
+ typedef HANDLE THREAD_ID;
+ #endif
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -798,7 +798,7 @@ extern CLI *thread_head;
+
+ extern CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+ /* Emulate the OpenSSL 1.1 locking API for older OpenSSL versions */
+ CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);
+ int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *);
+--- a/src/ssl.c
++++ b/src/ssl.c
+@@ -48,7 +48,7 @@ NOEXPORT int cb_new_auth(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp);
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp);
+ #else
+@@ -108,7 +108,7 @@ int fips_available() { /* either FIPS provider or container is available */
+
+ /* initialize libcrypto before invoking API functions that require it */
+ void crypto_init() {
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ OPENSSL_INIT_SETTINGS *conf;
+ #endif /* OPENSSL_VERSION_NUMBER>=0x10100000L */
+ #ifdef USE_WIN32
+@@ -151,7 +151,7 @@ void crypto_init() {
+ #endif /* USE_WIN32 */
+
+ /* initialize OpenSSL */
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ conf=OPENSSL_INIT_new();
+ #ifdef USE_WIN32
+ stunnel_dir=tstr2str(stunnel_exe_path);
+@@ -259,7 +259,7 @@ NOEXPORT int cb_new_auth(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ #if OPENSSL_VERSION_NUMBER>=0x30000000L
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp) {
+-#elif OPENSSL_VERSION_NUMBER>=0x10100000L
++#elif OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int cb_dup_addr(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void *from_d, int idx, long argl, void *argp) {
+ #else
+--- a/src/sthreads.c
++++ b/src/sthreads.c
+@@ -123,7 +123,7 @@ NOEXPORT void thread_id_init() {
+ /**************************************** locking */
+
+ /* we only need to initialize locking with OpenSSL older than 1.1.0 */
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_PTHREAD
+
+@@ -283,7 +283,7 @@ NOEXPORT int s_atomic_add(int *val, int amount, CRYPTO_RWLOCK *lock) {
+
+ CRYPTO_RWLOCK *stunnel_locks[STUNNEL_LOCKS];
+
+-#if OPENSSL_VERSION_NUMBER<0x10100004L
++#if OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #ifdef USE_OS_THREADS
+
+@@ -391,7 +391,8 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock) {
+
+ NOEXPORT void locking_init() {
+ size_t i;
+-#if defined(USE_OS_THREADS) && OPENSSL_VERSION_NUMBER<0x10100004L
++#if defined(USE_OS_THREADS) && \
++ (OPENSSL_VERSION_NUMBER<0x10100004L || defined(LIBRESSL_VERSION_NUMBER))
+ size_t num;
+
+ /* initialize the OpenSSL static locking */
+--- a/src/str.c
++++ b/src/str.c
+@@ -93,7 +93,7 @@ NOEXPORT LEAK_ENTRY leak_hash_table[LEAK_TABLE_SIZE],
+ *leak_results[LEAK_TABLE_SIZE];
+ NOEXPORT int leak_result_num=0;
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ DEFINE_STACK_OF(LEAK_ENTRY)
+ #endif /* OpenSSL version >= 1.1.1 */
+
+@@ -107,7 +107,7 @@ NOEXPORT ALLOC_LIST *get_alloc_list_ptr(void *, const char *, int);
+ NOEXPORT void str_leak_debug(const ALLOC_LIST *, int);
+
+ NOEXPORT LEAK_ENTRY *leak_search(const ALLOC_LIST *);
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int leak_cmp(const LEAK_ENTRY *const *, const LEAK_ENTRY *const *);
+ #endif /* OpenSSL version >= 1.1.1 */
+ NOEXPORT void leak_report(void);
+@@ -558,7 +558,7 @@ NOEXPORT LEAK_ENTRY *leak_search(const ALLOC_LIST *alloc_list) {
+ void leak_table_utilization() {
+ int i, utilization=0;
+ int64_t grand_total=0;
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ STACK_OF(LEAK_ENTRY) *stats;
+ #endif /* OpenSSL version >= 1.1.1 */
+
+@@ -575,7 +575,7 @@ void leak_table_utilization() {
+ s_log(LOG_DEBUG, "Leak detection table utilization: %d/%d (%05.2f%%)",
+ utilization, LEAK_TABLE_SIZE, 100.0*utilization/LEAK_TABLE_SIZE);
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ /* log up to 5 most frequently used heap allocations */
+ stats=sk_LEAK_ENTRY_new_reserve(leak_cmp, utilization);
+ for(i=0; i<LEAK_TABLE_SIZE; ++i)
+@@ -592,7 +592,7 @@ void leak_table_utilization() {
+ #endif /* OpenSSL version >= 1.1.1 */
+ }
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT int leak_cmp(const LEAK_ENTRY *const *a, const LEAK_ENTRY *const *b) {
+ int64_t d = (*a)->total - (*b)->total;
+ if(d>0)
+--- a/src/tls.c
++++ b/src/tls.c
+@@ -40,7 +40,7 @@
+ volatile int tls_initialized=0;
+
+ NOEXPORT void tls_platform_init(void);
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *);
+ #endif
+
+@@ -51,7 +51,7 @@ void tls_init() {
+ tls_platform_init();
+ tls_initialized=1;
+ ui_tls=tls_alloc(NULL, NULL, "ui");
+-#if OPENSSL_VERSION_NUMBER>=0x10100000L
++#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ CRYPTO_set_mem_functions(str_alloc_detached_debug,
+ str_realloc_detached_debug, str_free_debug);
+ #else
+@@ -184,7 +184,7 @@ TLS_DATA *tls_get() {
+
+ /**************************************** OpenSSL allocator hook */
+
+-#if OPENSSL_VERSION_NUMBER<0x10100000L
++#if OPENSSL_VERSION_NUMBER<0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ NOEXPORT void free_function(void *ptr) {
+ /* CRYPTO_set_mem_ex_functions() needs a function rather than a macro */
+ /* unfortunately, OpenSSL provides no file:line information here */
+--- a/src/verify.c
++++ b/src/verify.c
+@@ -379,7 +379,7 @@ NOEXPORT int cert_check_local(X509_STORE_CTX *callback_ctx) {
+ cert=X509_STORE_CTX_get_current_cert(callback_ctx);
+ subject=X509_get_subject_name(cert);
+
+-#if OPENSSL_VERSION_NUMBER<0x10100006L
++#if OPENSSL_VERSION_NUMBER<0x10100006L || defined(LIBRESSL_VERSION_NUMBER)
+ #define X509_STORE_CTX_get1_certs X509_STORE_get1_certs
+ #endif
+ /* modern API allows retrieving multiple matching certificates */
diff --git a/net-misc/stunnel/files/stunnel-5.71-respect-EPYTHON-for-tests.patch b/net-misc/stunnel/files/stunnel-5.71-respect-EPYTHON-for-tests.patch
new file mode 100644
index 0000000..3c421da
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel-5.71-respect-EPYTHON-for-tests.patch
@@ -0,0 +1,12 @@
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -7,8 +7,7 @@ EXTRA_DIST = maketest.py plugin_collection.py reader.py error.py plugins
+
+ # try to find a supported python version (>= 3.7) that works
+ check-local:
+- for v in $$(seq 20 -1 7); do command -v python3.$$v && break; done || ( echo "Python 3.7 or later not found" && false )
+- for v in $$(seq 20 -1 7); do command -v python3.$$v && python3.$$v $(srcdir)/maketest.py --debug=10 --libs=$(SSLDIR)/lib64:$(SSLDIR)/lib && break; done
++ ${EPYTHON} $(srcdir)/maketest.py --debug=10 --libs=$(SSLDIR)/lib64:$(SSLDIR)/lib
+
+ dist-hook:
+ rm -rf $(distdir)/__pycache__ $(distdir)/plugins/__pycache__
diff --git a/net-misc/stunnel/files/stunnel-r2 b/net-misc/stunnel/files/stunnel-r2
new file mode 100644
index 0000000..abd4298
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel-r2
@@ -0,0 +1,55 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+extra_started_commands="reload"
+SERVICENAME=${SVCNAME#*.}
+SERVICENAME=${SERVICENAME:-stunnel}
+STUNNEL_CONFIGFILE=${STUNNEL_CONFIGFILE:-/etc/stunnel/${SERVICENAME}.conf}
+
+depend() {
+ need net
+ before logger
+}
+
+get_config() {
+ if [ ! -e ${STUNNEL_CONFIGFILE} ] ; then
+ eerror "You need to create ${STUNNEL_CONFIGFILE} first."
+ return 1
+ fi
+ CHROOT=$(grep "^chroot" ${STUNNEL_CONFIGFILE} | sed "s;.*= *;;")
+ [ -n "${CHROOT}" ] && CHROOT="--chroot ${CHROOT}"
+ PIDFILE=$(grep "^pid" ${STUNNEL_CONFIGFILE} | sed "s;.*= *;;")
+ PIDFILE=${PIDFILE:-/run/stunnel/${SERVICENAME}.pid}
+ SETUID=$(grep "^setuid" ${STUNNEL_CONFIGFILE} | sed "s;.*= *;;")
+ SETUID=${SETUID:-stunnel}
+ SETGID=$(grep "^setgid" ${STUNNEL_CONFIGFILE} | sed "s;.*= *;;")
+ SETGID=${SETGID:-stunnel}
+}
+
+start() {
+ get_config || return 1
+ checkpath -d -m 0775 -o root:stunnel /run/stunnel
+ if [ "$(dirname ${PIDFILE})" != "/run" ]; then
+ checkpath -d -m 0755 -o ${SETUID}:${SETGID} -q $(dirname ${PIDFILE})
+ fi
+ ebegin "Starting ${SVCNAME}"
+ start-stop-daemon --start --pidfile "${PIDFILE}" ${CHROOT} \
+ --exec /usr/bin/stunnel -- ${STUNNEL_CONFIGFILE} ${STUNNEL_OPTIONS}
+ eend $? "Failed to start ${SVCNAME}"
+}
+
+stop() {
+ get_config || return 1
+ ebegin "Stopping ${SVCNAME}"
+ start-stop-daemon --stop --quiet --exec /usr/bin/stunnel \
+ --pidfile ${PIDFILE}
+ eend $? "Failed to stop ${SVCNAME}"
+}
+
+reload() {
+ get_config || return 1
+ ebegin "Reloading ${SVCNAME}"
+ start-stop-daemon --signal HUP --pidfile ${PIDFILE} --name stunnel
+ eend $?
+}
diff --git a/net-misc/stunnel/files/stunnel.conf b/net-misc/stunnel/files/stunnel.conf
new file mode 100644
index 0000000..547ee96
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel.conf
@@ -0,0 +1,61 @@
+# Sample stunnel configuration file by Michal Trojnara 2002-2005
+# Some options used here may not be adequate for your particular configuration
+# Please make sure you understand them (especially the effect of chroot jail)
+
+# Certificate/key is needed in server mode and optional in client mode
+# cert = /etc/stunnel/stunnel.pem
+# key = /etc/stunnel/stunnel.pem
+
+# Some security enhancements for UNIX systems - comment them out on Win32
+# chroot = /chroot/stunnel/
+setuid = stunnel
+setgid = stunnel
+# PID is created inside chroot jail
+pid = /run/stunnel/stunnel.pid
+
+# Some performance tunings
+socket = l:TCP_NODELAY=1
+socket = r:TCP_NODELAY=1
+#compression = rle
+
+# Workaround for Eudora bug
+#options = DONT_INSERT_EMPTY_FRAGMENTS
+
+# Authentication stuff
+#verify = 2
+# Don't forget to c_rehash CApath
+# CApath is located inside chroot jail:
+#CApath = /certs
+# It's often easier to use CAfile:
+#CAfile = /etc/stunnel/certs.pem
+# Don't forget to c_rehash CRLpath
+# CRLpath is located inside chroot jail:
+#CRLpath = /crls
+# Alternatively you can use CRLfile:
+#CRLfile = /etc/stunnel/crls.pem
+
+# Some debugging stuff useful for troubleshooting
+#debug = 7
+#output = stunnel.log
+
+# Use it for client mode
+#client = yes
+
+# Service-level configuration
+
+#[pop3s]
+#accept = 995
+#connect = 110
+
+#[imaps]
+#accept = 993
+#connect = 143
+
+#[ssmtp]
+#accept = 465
+#connect = 25
+
+#[https]
+#accept = 443
+#connect = 80
+#TIMEOUTclose = 0
diff --git a/net-misc/stunnel/files/stunnel.tmpfiles.conf b/net-misc/stunnel/files/stunnel.tmpfiles.conf
new file mode 100644
index 0000000..4433c8a
--- /dev/null
+++ b/net-misc/stunnel/files/stunnel.tmpfiles.conf
@@ -0,0 +1 @@
+d /run/stunnel 0770 stunnel stunnel -
diff --git a/net-misc/stunnel/metadata.xml b/net-misc/stunnel/metadata.xml
new file mode 100644
index 0000000..4d7c40f
--- /dev/null
+++ b/net-misc/stunnel/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <use>
+ <flag name="stunnel3">Install the stunnel3 wrapper.</flag>
+ </use>
+ <longdescription lang="en">
+ Stunnel is a program that allows you to encrypt arbitrary TCP
+ connections inside SSL (Secure Sockets Layer) available on both Unix and
+ Windows. Stunnel can allow you to secure non-SSL aware daemons and
+ protocols (like POP, IMAP, LDAP, etc) by having Stunnel provide the
+ encryption, requiring no changes to the daemon's code.
+ </longdescription>
+ <upstream>
+ <changelog>https://www.stunnel.org/NEWS.html</changelog>
+ </upstream>
+</pkgmetadata>
diff --git a/net-misc/stunnel/stunnel-5.64-r2.ebuild b/net-misc/stunnel/stunnel-5.64-r2.ebuild
new file mode 100644
index 0000000..e95db60
--- /dev/null
+++ b/net-misc/stunnel/stunnel-5.64-r2.ebuild
@@ -0,0 +1,104 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit ssl-cert systemd tmpfiles
+
+DESCRIPTION="TLS/SSL - Port Wrapper"
+HOMEPAGE="https://www.stunnel.org/index.html"
+SRC_URI="
+ https://www.stunnel.org/downloads/${P}.tar.gz
+ ftp://ftp.stunnel.org/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.usenix.org.uk/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://ftp.nluug.nl/pub/networking/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.namesdir.com/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://stunnel.cybermirror.org/archive/${PV%%.*}.x/${P}.tar.gz
+ http://mirrors.zerg.biz/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ ftp://mirrors.go-parts.com/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ~mips ppc ppc64 ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
+IUSE="ipv6 selinux stunnel3 tcpd"
+
+DEPEND="
+ dev-libs/openssl:0=
+ tcpd? ( sys-apps/tcp-wrappers )
+"
+
+RDEPEND="
+ acct-user/stunnel
+ acct-group/stunnel
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-stunnel )
+ stunnel3? ( dev-lang/perl )
+"
+
+RESTRICT="test"
+
+src_prepare() {
+ # Hack away generation of certificate
+ sed -i -e "s/^install-data-local:/do-not-run-this:/" \
+ tools/Makefile.in || die "sed failed"
+
+ # bug 656420
+ eapply "${FILESDIR}"/${PN}-5.59-libressl.patch
+
+ echo "CONFIG_PROTECT=\"/etc/stunnel/stunnel.conf\"" > "${T}"/20stunnel
+
+ eapply_user
+}
+
+src_configure() {
+ local myeconfargs=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ $(use_enable ipv6)
+ $(use_enable tcpd libwrap)
+ --with-ssl="${EPREFIX}"/usr
+ --disable-fips
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+ rm -rf "${ED}"/usr/share/doc/${PN}
+ rm -f "${ED}"/etc/stunnel/stunnel.conf-sample \
+ "${ED}"/usr/share/man/man8/stunnel.{fr,pl}.8
+ use stunnel3 || rm -f "${ED}"/usr/bin/stunnel3
+
+ dodoc AUTHORS.md BUGS.md CREDITS.md PORTS.md README.md TODO.md
+ docinto html
+ dodoc doc/stunnel.html doc/en/VNC_StunnelHOWTO.html tools/ca.html \
+ tools/importCA.html
+
+ insinto /etc/stunnel
+ doins "${FILESDIR}"/stunnel.conf
+ newinitd "${FILESDIR}"/stunnel-r2 stunnel
+
+ doenvd "${T}"/20stunnel
+
+ systemd_dounit "${S}/tools/stunnel.service"
+ newtmpfiles "${FILESDIR}"/stunnel.tmpfiles.conf stunnel.conf
+
+ find "${ED}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ if [ ! -f "${EROOT}"/etc/stunnel/stunnel.key ]; then
+ install_cert /etc/stunnel/stunnel
+ chown stunnel:stunnel "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ chmod 0640 "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ fi
+
+ tmpfiles_process stunnel.conf
+
+ einfo "If you want to run multiple instances of stunnel, create a new config"
+ einfo "file ending with .conf in /etc/stunnel/. **Make sure** you change "
+ einfo "\'pid= \' with a unique filename. For openrc make a symlink from the"
+ einfo "stunnel init script to \'stunnel.name\' and use that to start|stop"
+ einfo "your custom instance"
+}
diff --git a/net-misc/stunnel/stunnel-5.65-r2.ebuild b/net-misc/stunnel/stunnel-5.65-r2.ebuild
new file mode 100644
index 0000000..91062e9
--- /dev/null
+++ b/net-misc/stunnel/stunnel-5.65-r2.ebuild
@@ -0,0 +1,103 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit ssl-cert systemd tmpfiles
+
+DESCRIPTION="TLS/SSL - Port Wrapper"
+HOMEPAGE="https://www.stunnel.org/index.html"
+SRC_URI="
+ https://www.stunnel.org/downloads/${P}.tar.gz
+ ftp://ftp.stunnel.org/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.usenix.org.uk/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://ftp.nluug.nl/pub/networking/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.namesdir.com/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://stunnel.cybermirror.org/archive/${PV%%.*}.x/${P}.tar.gz
+ http://mirrors.zerg.biz/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ ftp://mirrors.go-parts.com/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ~mips ppc ppc64 ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
+IUSE="selinux stunnel3 tcpd"
+
+DEPEND="
+ dev-libs/openssl:0=
+ tcpd? ( sys-apps/tcp-wrappers )
+"
+
+RDEPEND="
+ acct-user/stunnel
+ acct-group/stunnel
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-stunnel )
+ stunnel3? ( dev-lang/perl )
+"
+
+RESTRICT="test"
+
+src_prepare() {
+ # Hack away generation of certificate
+ sed -i -e "s/^install-data-local:/do-not-run-this:/" \
+ tools/Makefile.in || die "sed failed"
+
+ # bug 656420
+ eapply "${FILESDIR}"/${PN}-5.65-libressl.patch
+
+ echo "CONFIG_PROTECT=\"/etc/stunnel/stunnel.conf\"" > "${T}"/20stunnel
+
+ eapply_user
+}
+
+src_configure() {
+ local myeconfargs=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ $(use_enable tcpd libwrap)
+ --with-ssl="${EPREFIX}"/usr
+ --disable-fips
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+ rm -rf "${ED}"/usr/share/doc/${PN}
+ rm -f "${ED}"/etc/stunnel/stunnel.conf-sample \
+ "${ED}"/usr/share/man/man8/stunnel.{fr,pl}.8
+ use stunnel3 || rm -f "${ED}"/usr/bin/stunnel3
+
+ dodoc AUTHORS.md BUGS.md CREDITS.md PORTS.md README.md TODO.md
+ docinto html
+ dodoc doc/stunnel.html doc/en/VNC_StunnelHOWTO.html tools/ca.html \
+ tools/importCA.html
+
+ insinto /etc/stunnel
+ doins "${FILESDIR}"/stunnel.conf
+ newinitd "${FILESDIR}"/stunnel-r2 stunnel
+
+ doenvd "${T}"/20stunnel
+
+ systemd_dounit "${S}/tools/stunnel.service"
+ newtmpfiles "${FILESDIR}"/stunnel.tmpfiles.conf stunnel.conf
+
+ find "${ED}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ if [ ! -f "${EROOT}"/etc/stunnel/stunnel.key ]; then
+ install_cert /etc/stunnel/stunnel
+ chown stunnel:stunnel "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ chmod 0640 "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ fi
+
+ tmpfiles_process stunnel.conf
+
+ einfo "If you want to run multiple instances of stunnel, create a new config"
+ einfo "file ending with .conf in /etc/stunnel/. **Make sure** you change "
+ einfo "\'pid= \' with a unique filename. For openrc make a symlink from the"
+ einfo "stunnel init script to \'stunnel.name\' and use that to start|stop"
+ einfo "your custom instance"
+}
diff --git a/net-misc/stunnel/stunnel-5.68.ebuild b/net-misc/stunnel/stunnel-5.68.ebuild
new file mode 100644
index 0000000..6412689
--- /dev/null
+++ b/net-misc/stunnel/stunnel-5.68.ebuild
@@ -0,0 +1,103 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit ssl-cert systemd tmpfiles
+
+DESCRIPTION="TLS/SSL - Port Wrapper"
+HOMEPAGE="https://www.stunnel.org/index.html"
+SRC_URI="
+ https://www.stunnel.org/downloads/${P}.tar.gz
+ ftp://ftp.stunnel.org/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.usenix.org.uk/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://ftp.nluug.nl/pub/networking/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.namesdir.com/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://stunnel.cybermirror.org/archive/${PV%%.*}.x/${P}.tar.gz
+ http://mirrors.zerg.biz/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ ftp://mirrors.go-parts.com/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ~mips ppc ppc64 ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
+IUSE="selinux stunnel3 tcpd"
+
+DEPEND="
+ dev-libs/openssl:0=
+ tcpd? ( sys-apps/tcp-wrappers )
+"
+
+RDEPEND="
+ acct-user/stunnel
+ acct-group/stunnel
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-stunnel )
+ stunnel3? ( dev-lang/perl )
+"
+
+RESTRICT="test"
+
+src_prepare() {
+ # Hack away generation of certificate
+ sed -i -e "s/^install-data-local:/do-not-run-this:/" \
+ tools/Makefile.in || die "sed failed"
+
+ # bug 656420
+ eapply "${FILESDIR}"/${PN}-5.68-libressl.patch
+
+ echo "CONFIG_PROTECT=\"/etc/stunnel/stunnel.conf\"" > "${T}"/20stunnel
+
+ eapply_user
+}
+
+src_configure() {
+ local myeconfargs=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ $(use_enable tcpd libwrap)
+ --with-ssl="${EPREFIX}"/usr
+ --disable-fips
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+ rm -rf "${ED}"/usr/share/doc/${PN}
+ rm -f "${ED}"/etc/stunnel/stunnel.conf-sample \
+ "${ED}"/usr/share/man/man8/stunnel.{fr,pl}.8
+ use stunnel3 || rm -f "${ED}"/usr/bin/stunnel3
+
+ dodoc AUTHORS.md BUGS.md CREDITS.md PORTS.md README.md TODO.md
+ docinto html
+ dodoc doc/stunnel.html doc/en/VNC_StunnelHOWTO.html tools/ca.html \
+ tools/importCA.html
+
+ insinto /etc/stunnel
+ doins "${FILESDIR}"/stunnel.conf
+ newinitd "${FILESDIR}"/stunnel-r2 stunnel
+
+ doenvd "${T}"/20stunnel
+
+ systemd_dounit "${S}/tools/stunnel.service"
+ newtmpfiles "${FILESDIR}"/stunnel.tmpfiles.conf stunnel.conf
+
+ find "${ED}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ if [ ! -f "${EROOT}"/etc/stunnel/stunnel.key ]; then
+ install_cert /etc/stunnel/stunnel
+ chown stunnel:stunnel "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ chmod 0640 "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ fi
+
+ tmpfiles_process stunnel.conf
+
+ einfo "If you want to run multiple instances of stunnel, create a new config"
+ einfo "file ending with .conf in /etc/stunnel/. **Make sure** you change "
+ einfo "\'pid= \' with a unique filename. For openrc make a symlink from the"
+ einfo "stunnel init script to \'stunnel.name\' and use that to start|stop"
+ einfo "your custom instance"
+}
diff --git a/net-misc/stunnel/stunnel-5.71-r1.ebuild b/net-misc/stunnel/stunnel-5.71-r1.ebuild
new file mode 100644
index 0000000..e1ab73d
--- /dev/null
+++ b/net-misc/stunnel/stunnel-5.71-r1.ebuild
@@ -0,0 +1,133 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+inherit autotools python-any-r1 ssl-cert systemd tmpfiles
+
+DESCRIPTION="TLS/SSL - Port Wrapper"
+HOMEPAGE="https://www.stunnel.org/index.html"
+SRC_URI="
+ https://www.stunnel.org/downloads/${P}.tar.gz
+ ftp://ftp.stunnel.org/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.usenix.org.uk/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://ftp.nluug.nl/pub/networking/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.namesdir.com/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://stunnel.cybermirror.org/archive/${PV%%.*}.x/${P}.tar.gz
+ http://mirrors.zerg.biz/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ ftp://mirrors.go-parts.com/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 arm ~arm64 ~hppa ~ia64 ~mips ppc ppc64 ~s390 sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos"
+IUSE="selinux stunnel3 systemd tcpd test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/openssl:=
+ tcpd? ( sys-apps/tcp-wrappers )
+ systemd? ( sys-apps/systemd:= )
+"
+RDEPEND="
+ ${DEPEND}
+ acct-user/stunnel
+ acct-group/stunnel
+ selinux? ( sec-policy/selinux-stunnel )
+ stunnel3? ( dev-lang/perl )
+"
+# autoconf-archive for F_S patch
+BDEPEND="
+ dev-build/autoconf-archive
+ test? (
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep 'dev-python/cryptography[${PYTHON_USEDEP}]')
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-5.71-libressl.patch #656420
+ "${FILESDIR}"/${PN}-5.71-dont-clobber-fortify-source.patch
+ "${FILESDIR}"/${PN}-5.71-respect-EPYTHON-for-tests.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/cryptography[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # Hack away generation of certificate
+ sed -i -e "s/^install-data-local:/do-not-run-this:/" \
+ tools/Makefile.am || die "sed failed"
+
+ echo "CONFIG_PROTECT=\"/etc/stunnel/stunnel.conf\"" > "${T}"/20stunnel || die
+
+ # We pass --disable-fips to configure, so avoid spurious test failures
+ rm tests/plugins/p10_fips.py tests/plugins/p11_fips_cipher.py || die
+
+ # Needed for FORTIFY_SOURCE patch
+ eautoreconf
+}
+
+src_configure() {
+ local myeconfargs=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ --with-ssl="${EPREFIX}"/usr
+ --disable-fips
+ $(use_enable tcpd libwrap)
+ $(use_enable systemd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+
+ rm -rf "${ED}"/usr/share/doc/${PN} || die
+ rm -f "${ED}"/etc/stunnel/stunnel.conf-sample \
+ "${ED}"/usr/share/man/man8/stunnel.{fr,pl}.8 || die
+
+ if ! use stunnel3 ; then
+ rm -f "${ED}"/usr/bin/stunnel3 || die
+ fi
+
+ dodoc AUTHORS.md BUGS.md CREDITS.md PORTS.md README.md TODO.md
+ docinto html
+ dodoc doc/stunnel.html doc/en/VNC_StunnelHOWTO.html tools/ca.html \
+ tools/importCA.html
+
+ insinto /etc/stunnel
+ doins "${FILESDIR}"/stunnel.conf
+ newinitd "${FILESDIR}"/stunnel-r2 stunnel
+
+ doenvd "${T}"/20stunnel
+
+ systemd_dounit "${S}/tools/stunnel.service"
+ newtmpfiles "${FILESDIR}"/stunnel.tmpfiles.conf stunnel.conf
+
+ find "${ED}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! -f "${EROOT}"/etc/stunnel/stunnel.key ]]; then
+ install_cert /etc/stunnel/stunnel
+ chown stunnel:stunnel "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ chmod 0640 "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ fi
+
+ tmpfiles_process stunnel.conf
+
+ einfo "If you want to run multiple instances of stunnel, create a new config"
+ einfo "file ending with .conf in /etc/stunnel/. **Make sure** you change "
+ einfo "\'pid= \' with a unique filename. For openrc make a symlink from the"
+ einfo "stunnel init script to \'stunnel.name\' and use that to start|stop"
+ einfo "your custom instance"
+}
diff --git a/net-misc/stunnel/stunnel-5.71.ebuild b/net-misc/stunnel/stunnel-5.71.ebuild
new file mode 100644
index 0000000..d8ddd73
--- /dev/null
+++ b/net-misc/stunnel/stunnel-5.71.ebuild
@@ -0,0 +1,126 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+inherit autotools python-any-r1 ssl-cert systemd tmpfiles
+
+DESCRIPTION="TLS/SSL - Port Wrapper"
+HOMEPAGE="https://www.stunnel.org/index.html"
+SRC_URI="
+ https://www.stunnel.org/downloads/${P}.tar.gz
+ ftp://ftp.stunnel.org/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.usenix.org.uk/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://ftp.nluug.nl/pub/networking/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://www.namesdir.com/mirrors/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ http://stunnel.cybermirror.org/archive/${PV%%.*}.x/${P}.tar.gz
+ http://mirrors.zerg.biz/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+ ftp://mirrors.go-parts.com/stunnel/archive/${PV%%.*}.x/${P}.tar.gz
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
+IUSE="selinux stunnel3 systemd tcpd test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/openssl:=
+ tcpd? ( sys-apps/tcp-wrappers )
+ systemd? ( sys-apps/systemd:= )
+"
+RDEPEND="
+ ${DEPEND}
+ acct-user/stunnel
+ acct-group/stunnel
+ selinux? ( sec-policy/selinux-stunnel )
+ stunnel3? ( dev-lang/perl )
+"
+# autoconf-archive for F_S patch
+BDEPEND="
+ dev-build/autoconf-archive
+ test? ( ${PYTHON_DEPS} )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-5.71-libressl.patch #656420
+ "${FILESDIR}"/${PN}-5.71-dont-clobber-fortify-source.patch
+ "${FILESDIR}"/${PN}-5.71-respect-EPYTHON-for-tests.patch
+)
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # Hack away generation of certificate
+ sed -i -e "s/^install-data-local:/do-not-run-this:/" \
+ tools/Makefile.am || die "sed failed"
+
+ echo "CONFIG_PROTECT=\"/etc/stunnel/stunnel.conf\"" > "${T}"/20stunnel || die
+
+ # We pass --disable-fips to configure, so avoid spurious test failures
+ rm tests/plugins/p10_fips.py tests/plugins/p11_fips_cipher.py || die
+
+ # Needed for FORTIFY_SOURCE patch
+ eautoreconf
+}
+
+src_configure() {
+ local myeconfargs=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ --with-ssl="${EPREFIX}"/usr
+ --disable-fips
+ $(use_enable tcpd libwrap)
+ $(use_enable systemd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+
+ rm -rf "${ED}"/usr/share/doc/${PN} || die
+ rm -f "${ED}"/etc/stunnel/stunnel.conf-sample \
+ "${ED}"/usr/share/man/man8/stunnel.{fr,pl}.8 || die
+
+ if ! use stunnel3 ; then
+ rm -f "${ED}"/usr/bin/stunnel3 || die
+ fi
+
+ dodoc AUTHORS.md BUGS.md CREDITS.md PORTS.md README.md TODO.md
+ docinto html
+ dodoc doc/stunnel.html doc/en/VNC_StunnelHOWTO.html tools/ca.html \
+ tools/importCA.html
+
+ insinto /etc/stunnel
+ doins "${FILESDIR}"/stunnel.conf
+ newinitd "${FILESDIR}"/stunnel-r2 stunnel
+
+ doenvd "${T}"/20stunnel
+
+ systemd_dounit "${S}/tools/stunnel.service"
+ newtmpfiles "${FILESDIR}"/stunnel.tmpfiles.conf stunnel.conf
+
+ find "${ED}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! -f "${EROOT}"/etc/stunnel/stunnel.key ]]; then
+ install_cert /etc/stunnel/stunnel
+ chown stunnel:stunnel "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ chmod 0640 "${EROOT}"/etc/stunnel/stunnel.{crt,csr,key,pem}
+ fi
+
+ tmpfiles_process stunnel.conf
+
+ einfo "If you want to run multiple instances of stunnel, create a new config"
+ einfo "file ending with .conf in /etc/stunnel/. **Make sure** you change "
+ einfo "\'pid= \' with a unique filename. For openrc make a symlink from the"
+ einfo "stunnel init script to \'stunnel.name\' and use that to start|stop"
+ einfo "your custom instance"
+}
diff --git a/net-nds/openldap/Manifest b/net-nds/openldap/Manifest
new file mode 100644
index 0000000..1e7927c
--- /dev/null
+++ b/net-nds/openldap/Manifest
@@ -0,0 +1,2 @@
+DIST openldap-OPENLDAP_REL_ENG_2_6_3.tar.gz 6244895 BLAKE2B 97792a1b368de44867b0ce9eef38601c3e64b7d40e4ca206295bee110097697c919040d2220eea6f0581812e09a2cc3e6afb4a243a5072a8a0a95f24f9fb354b SHA512 1c882a0cd0729b5d0f40b58588d0e36ae3b1cae6d569f0576e940c7c63d03c29ed2c9db87695a87594ba99a927ef4cba491bddba3ce049025fd5883463122ba7
+DIST rfc2307bis.schema-20140524 12262 BLAKE2B 98031f49e9bde1e4821e637af3382364d8344ed7017649686a088070d96a632dffa6c661552352656b1b159c0fd962965580069a64c7f3d5bb6a3ed75f60fd99 SHA512 83b89a1deeefc8566b97e7e865b9b6d04541099cbdf719e24538a7d27d61b6209e87ab9003a9f140bd9afd018ec569e71721e3a24090e1902c8b6659d2ba103e
diff --git a/net-nds/openldap/files/DB_CONFIG.fast.example b/net-nds/openldap/files/DB_CONFIG.fast.example
new file mode 100644
index 0000000..8b52062
--- /dev/null
+++ b/net-nds/openldap/files/DB_CONFIG.fast.example
@@ -0,0 +1,25 @@
+# $OpenLDAP: pkg/ldap/servers/slapd/DB_CONFIG,v 1.1 2004/06/18 02:49:08 kurt Exp $
+# Example DB_CONFIG file for use with slapd(8) BDB/HDB databases.
+#
+# See Sleepycat Berkeley DB documentation
+# <http://www.sleepycat.com/docs/ref/env/db_config.html>
+# for detail description of DB_CONFIG syntax and semantics.
+#
+# Hints can also be found in the OpenLDAP Software FAQ
+# <http://www.openldap.org/faq/index.cgi?file=2>
+
+# one 0.25 GB cache
+set_cachesize 0 16777216 0
+
+# Data Directory
+#set_data_dir db
+
+# Transaction Log settings
+set_lg_regionmax 262144
+set_lg_bsize 524288
+#set_lg_dir logs
+
+# When using (and only when using) slapadd(8) or slapindex(8),
+# the following flags may be useful:
+#set_flags DB_TXN_NOSYNC
+#set_flags DB_TXN_NOT_DURABLE
diff --git a/net-nds/openldap/files/openldap-2.2.14-perlthreadsfix.patch b/net-nds/openldap/files/openldap-2.2.14-perlthreadsfix.patch
new file mode 100644
index 0000000..2a8c4bc
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.2.14-perlthreadsfix.patch
@@ -0,0 +1,11 @@
+--- a/servers/slapd/back-perl/Makefile.in
++++ b/servers/slapd/back-perl/Makefile.in
+@@ -31,7 +31,7 @@
+
+ shared_LDAP_LIBS = $(LDAP_LIBLDAP_R_LA) $(LDAP_LIBLBER_LA)
+ NT_LINK_LIBS = -L.. -lslapd $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS)
+-UNIX_LINK_LIBS = $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS)
++UNIX_LINK_LIBS = $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS) `perl -MExtUtils::Embed -e ldopts`
+
+ LIBBASE = back_perl
+
diff --git a/net-nds/openldap/files/openldap-2.4.11-libldap_r.patch b/net-nds/openldap/files/openldap-2.4.11-libldap_r.patch
new file mode 100644
index 0000000..f63ad3c
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.11-libldap_r.patch
@@ -0,0 +1,10 @@
+--- a/servers/slapd/slapi/Makefile.in
++++ b/servers/slapd/slapi/Makefile.in
+@@ -37,6 +37,7 @@
+ XLIBS = $(LIBRARY)
+ XXLIBS =
+ NT_LINK_LIBS = $(AC_LIBS)
++UNIX_LINK_LIBS = ../../../libraries/libldap_r/libldap_r.la $(LTHREAD_LIBS)
+
+ XINCPATH = -I$(srcdir)/.. -I$(srcdir)
+ XDEFS = $(MODULES_CPPFLAGS)
diff --git a/net-nds/openldap/files/openldap-2.4.15-ppolicy.patch b/net-nds/openldap/files/openldap-2.4.15-ppolicy.patch
new file mode 100644
index 0000000..1196f1b
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.15-ppolicy.patch
@@ -0,0 +1,12 @@
+--- a/clients/tools/common.c
++++ b/clients/tools/common.c
+@@ -1315,8 +1315,8 @@
+ int nsctrls = 0;
+
+ #ifdef LDAP_CONTROL_PASSWORDPOLICYREQUEST
++ LDAPControl c;
+ if ( ppolicy ) {
+- LDAPControl c;
+ c.ldctl_oid = LDAP_CONTROL_PASSWORDPOLICYREQUEST;
+ c.ldctl_value.bv_val = NULL;
+ c.ldctl_value.bv_len = 0;
diff --git a/net-nds/openldap/files/openldap-2.4.17-gcc44.patch b/net-nds/openldap/files/openldap-2.4.17-gcc44.patch
new file mode 100644
index 0000000..a782da4
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.17-gcc44.patch
@@ -0,0 +1,10 @@
+--- a/contrib/ldapc++/src/SaslInteractionHandler.cpp
++++ b/contrib/ldapc++/src/SaslInteractionHandler.cpp
+@@ -13,6 +13,7 @@
+ #include <termios.h>
+ #endif
+
++#include <stdio.h>
+ #include <string.h>
+ #include "SaslInteractionHandler.h"
+ #include "SaslInteraction.h"
diff --git a/net-nds/openldap/files/openldap-2.4.28-fix-dash.patch b/net-nds/openldap/files/openldap-2.4.28-fix-dash.patch
new file mode 100644
index 0000000..bca213d
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.28-fix-dash.patch
@@ -0,0 +1,24 @@
+Our libtool needs bash to work properly.
+Patch unbreaks build when /bin/sh points to dash:
+
+ Entering subdirectory liblber
+ /bin/sh ../../libtool --mode=compile x86_64-pc-linux-gnu-gcc -O0 -D_GNU_SOURCE -I../../include -I../../include -I/usr/include/db4.8 -DLDAP_CONNECTIONLESS -DLBER_LIBRARY -c assert.c
+ ../../build/mkversion -v "2.4.28" liblber.la > version.c
+ /bin/sh ../../libtool --mode=compile x86_64-pc-linux-gnu-gcc -O0 -D_GNU_SOURCE -I../../include -I../../include -I/usr/include/db4.8 -DLDAP_CONNECTIONLESS -DLBER_LIBRARY -c decode.c
+ eval: 1: base_compile+= x86_64-pc-linux-gnu-gcc: not found
+ eval: 1: base_compile+= -O0: not found
+ eval: 1: base_compile+= -D_GNU_SOURCE: not found
+ eval: 1: base_compile+= x86_64-pc-linux-gnu-gcc: not found
+ ...
+ make[2]: *** [decode.lo] Error 1
+--- a/build/top.mk
++++ b/build/top.mk
+@@ -20,7 +20,7 @@ VERSION= @VERSION@
+ RELEASEDATE= @OPENLDAP_RELEASE_DATE@
+
+ @SET_MAKE@
+-SHELL = /bin/sh
++SHELL = @SHELL@
+
+ top_builddir = @top_builddir@
+
diff --git a/net-nds/openldap/files/openldap-2.4.28-gnutls-gcrypt.patch b/net-nds/openldap/files/openldap-2.4.28-gnutls-gcrypt.patch
new file mode 100644
index 0000000..0d9b88f
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.28-gnutls-gcrypt.patch
@@ -0,0 +1,11 @@
+--- a/configure.in
++++ b/configure.in
+@@ -1214,7 +1214,7 @@
+ ol_with_tls=gnutls
+ ol_link_tls=yes
+
+- TLS_LIBS="-lgnutls"
++ TLS_LIBS="-lgnutls -lgcrypt"
+
+ AC_DEFINE(HAVE_GNUTLS, 1,
+ [define if you have GNUtls])
diff --git a/net-nds/openldap/files/openldap-2.4.31-gcc47.patch b/net-nds/openldap/files/openldap-2.4.31-gcc47.patch
new file mode 100644
index 0000000..5b6af4b
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.31-gcc47.patch
@@ -0,0 +1,16 @@
+Fix building with gcc-4.7
+
+https://bugs.gentoo.org/show_bug.cgi?id=420959
+http://www.openldap.org/its/index.cgi/Incoming?id=7304;page=16 #ITS 7304
+
+Patch written by Kacper Kowalik <xarthisius@gentoo.org>
+--- a/contrib/ldapc++/src/SaslInteractionHandler.cpp
++++ b/contrib/ldapc++/src/SaslInteractionHandler.cpp
+@@ -16,6 +16,7 @@
+
+ #include <stdio.h>
+ #include <string.h>
++#include <unistd.h>
+ #include "SaslInteractionHandler.h"
+ #include "SaslInteraction.h"
+ #include "debug.h"
diff --git a/net-nds/openldap/files/openldap-2.4.35-contrib-samba4.patch b/net-nds/openldap/files/openldap-2.4.35-contrib-samba4.patch
new file mode 100644
index 0000000..8ee3891
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.35-contrib-samba4.patch
@@ -0,0 +1,37 @@
+--- a/contrib/slapd-modules/samba4/Makefile
++++ b/contrib/slapd-modules/samba4/Makefile
+@@ -20,7 +20,8 @@
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2 -Wall
++#OPT = -g -O2 -Wall
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_RDNVAL=SLAPD_MOD_DYNAMIC \
+ -DSLAPD_OVER_PGUID=SLAPD_MOD_DYNAMIC \
+ -DSLAPD_OVER_VERNUM=SLAPD_MOD_DYNAMIC
+@@ -41,20 +42,20 @@
+ .SUFFIXES: .c .o .lo
+
+ .c.lo:
+- $(LIBTOOL) --mode=compile $(CC) $(OPT) $(DEFS) $(INCS) -c $<
++ $(LIBTOOL) --mode=compile $(CC) $(OPT) $(CFLAGS) $(DEFS) $(INCS) -c $<
+
+ all: $(PROGRAMS)
+
+ pguid.la: pguid.lo
+- $(LIBTOOL) --mode=link $(CC) $(OPT) -version-info $(LTVER) \
++ $(LIBTOOL) --mode=link $(CC) $(OPT) $(CFLAGS) -version-info $(LTVER) \
+ -rpath $(moduledir) -module -o $@ $? $(LIBS)
+
+ rdnval.la: rdnval.lo
+- $(LIBTOOL) --mode=link $(CC) $(OPT) -version-info $(LTVER) \
++ $(LIBTOOL) --mode=link $(CC) $(OPT) $(CFLAGS) -version-info $(LTVER) \
+ -rpath $(moduledir) -module -o $@ $? $(LIBS)
+
+ vernum.la: vernum.lo
+- $(LIBTOOL) --mode=link $(CC) $(OPT) -version-info $(LTVER) \
++ $(LIBTOOL) --mode=link $(CC) $(OPT) $(CFLAGS) -version-info $(LTVER) \
+ -rpath $(moduledir) -module -o $@ $? $(LIBS)
+
+ clean:
diff --git a/net-nds/openldap/files/openldap-2.4.35-contrib-smbk5pwd.patch b/net-nds/openldap/files/openldap-2.4.35-contrib-smbk5pwd.patch
new file mode 100644
index 0000000..ca02404
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.35-contrib-smbk5pwd.patch
@@ -0,0 +1,47 @@
+--- a/contrib/slapd-modules/smbk5pwd/Makefile
++++ b/contrib/slapd-modules/smbk5pwd/Makefile
+@@ -21,16 +21,23 @@
+ SSL_INC =
+ SSL_LIB = -lcrypto
+
+-HEIMDAL_INC = -I/usr/heimdal/include
+-HEIMDAL_LIB = -L/usr/heimdal/lib -lkrb5 -lkadm5srv
++#HEIMDAL_INC = -I/usr/heimdal/include
++#HEIMDAL_LIB = -L/usr/heimdal/lib -lkrb5 -lkadm5srv
++KRB5_INC = $(HEIMDAL_INC)
++KRB5_LIB = $(HEIMDAL_LIB) -lkrb5 -lkadm5srv
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2 -Wall
++#OPT = -g -O2 -Wall
++OPT = -Wall
+ # Omit DO_KRB5, DO_SAMBA or DO_SHADOW if you don't want to support it.
+-DEFS = -DDO_KRB5 -DDO_SAMBA -DDO_SHADOW
+-INCS = $(LDAP_INC) $(HEIMDAL_INC) $(SSL_INC)
+-LIBS = $(LDAP_LIB) $(HEIMDAL_LIB) $(SSL_LIB)
++#DEFS = -DDO_KRB5 -DDO_SAMBA -DDO_SHADOW
++INCS = $(LDAP_INC) $(KRB5_INC) $(SSL_INC)
++ifneq (DDO_KRB5,$(findstring DDO_KRB5,$(DEFS)))
++ LIBS=$(LDAP_LIB) $(SSL_LIB)
++else
++ LIBS=$(LDAP_LIB) $(KRB5_LIB) $(SSL_LIB)
++endif
+
+ PROGRAMS = smbk5pwd.la
+ LTVER = 0:0:0
+@@ -46,12 +53,12 @@
+ .SUFFIXES: .c .o .lo
+
+ .c.lo:
+- $(LIBTOOL) --mode=compile $(CC) $(OPT) $(DEFS) $(INCS) -c $<
++ $(LIBTOOL) --mode=compile $(CC) $(OPT) $(CFLAGS) $(DEFS) $(INCS) -c $<
+
+ all: $(PROGRAMS)
+
+ smbk5pwd.la: smbk5pwd.lo
+- $(LIBTOOL) --mode=link $(CC) $(OPT) -version-info $(LTVER) \
++ $(LIBTOOL) --mode=link $(CC) $(OPT) $(CFLAGS) -version-info $(LTVER) \
+ -rpath $(moduledir) -module -o $@ $? $(LIBS)
+
+ clean:
diff --git a/net-nds/openldap/files/openldap-2.4.40-slapd-conf b/net-nds/openldap/files/openldap-2.4.40-slapd-conf
new file mode 100644
index 0000000..8ecc732
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.40-slapd-conf
@@ -0,0 +1,64 @@
+#
+# See slapd.conf(5) for details on configuration options.
+# This file should NOT be world readable.
+#
+include /etc/openldap/schema/core.schema
+
+# Define global ACLs to disable default read access.
+
+# Do not enable referrals until AFTER you have a working directory
+# service AND an understanding of referrals.
+#referral ldap://root.openldap.org
+
+pidfile /run/openldap/slapd.pid
+argsfile /run/openldap/slapd.args
+
+# Load dynamic backend modules:
+###INSERTDYNAMICMODULESHERE###
+
+# Sample security restrictions
+# Require integrity protection (prevent hijacking)
+# Require 112-bit (3DES or better) encryption for updates
+# Require 63-bit encryption for simple bind
+# security ssf=1 update_ssf=112 simple_bind=64
+
+# Sample access control policy:
+# Root DSE: allow anyone to read it
+# Subschema (sub)entry DSE: allow anyone to read it
+# Other DSEs:
+# Allow self write access
+# Allow authenticated users read access
+# Allow anonymous users to authenticate
+# Directives needed to implement policy:
+# access to dn.base="" by * read
+# access to dn.base="cn=Subschema" by * read
+# access to *
+# by self write
+# by users read
+# by anonymous auth
+#
+# if no access controls are present, the default policy
+# allows anyone and everyone to read anything but restricts
+# updates to rootdn. (e.g., "access to * by * read")
+#
+# rootdn can always read and write EVERYTHING!
+
+#######################################################################
+# BDB database definitions
+#######################################################################
+
+database hdb
+suffix "dc=my-domain,dc=com"
+# <kbyte> <min>
+checkpoint 32 30
+rootdn "cn=Manager,dc=my-domain,dc=com"
+# Cleartext passwords, especially for the rootdn, should
+# be avoid. See slappasswd(8) and slapd.conf(5) for details.
+# Use of strong authentication encouraged.
+rootpw secret
+# The database directory MUST exist prior to running slapd AND
+# should only be accessible by the slapd and slap tools.
+# Mode 700 recommended.
+directory /var/lib/openldap-data
+# Indices to maintain
+index objectClass eq
diff --git a/net-nds/openldap/files/openldap-2.4.42-mdb-unbundle.patch b/net-nds/openldap/files/openldap-2.4.42-mdb-unbundle.patch
new file mode 100644
index 0000000..6ec6888
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.42-mdb-unbundle.patch
@@ -0,0 +1,136 @@
+--- a/build/top.mk
++++ b/build/top.mk
+@@ -160,6 +160,7 @@
+ LTHREAD_LIBS = @LTHREAD_LIBS@
+
+ BDB_LIBS = @BDB_LIBS@
++MDB_LIBS = @MDB_LIBS@
+ SLAPD_NDB_LIBS = @SLAPD_NDB_LIBS@
+
+ LDAP_LIBLBER_LA = $(LDAP_LIBDIR)/liblber/liblber.la
+--- ./build/openldap.m4.orig
++++ ./build/openldap.m4
+@@ -563,6 +563,38 @@
+ ], [ol_cv_bdb_compat=yes], [ol_cv_bdb_compat=no])])
+ ])
+
++dnl --------------------------------------------------------------------
++dnl Check for version compatility with back-mdb
++AC_DEFUN([OL_MDB_COMPAT],
++[AC_CACHE_CHECK([if LMDB version supported by MDB backends], [ol_cv_mdb_compat],[
++ AC_EGREP_CPP(__mdb_version_compat,[
++#include <lmdb.h>
++
++/* require 0.9.14 or later */
++#if MDB_VERSION_FULL >= 0x00000009000E
++ __mdb_version_compat
++#endif
++ ], [ol_cv_mdb_compat=yes], [ol_cv_mdb_compat=no])])
++])
++
++dnl
++dnl --------------------------------------------------------------------
++dnl Find any MDB
++AC_DEFUN([OL_MDB],
++[ol_cv_mdb=no
++AC_CHECK_HEADERS(lmdb.h)
++if test $ac_cv_header_lmdb_h = yes; then
++ OL_MDB_COMPAT
++
++ if test $ol_cv_mdb_compat != yes ; then
++ AC_MSG_ERROR([LMDB version incompatible with MDB backends])
++ fi
++
++ ol_cv_lib_mdb=-llmdb
++ ol_cv_mdb=yes
++fi
++])
++
+ dnl
+ dnl ====================================================================
+ dnl Check POSIX Thread version
+--- a/servers/slapd/back-mdb/Makefile.in
++++ b/servers/slapd/back-mdb/Makefile.in
+@@ -25,11 +25,10 @@
+ extended.lo operational.lo \
+ attr.lo index.lo key.lo filterindex.lo \
+ dn2entry.lo dn2id.lo id2entry.lo idl.lo \
+- nextid.lo monitor.lo mdb.lo midl.lo
++ nextid.lo monitor.lo
+
+ LDAP_INCDIR= ../../../include
+ LDAP_LIBDIR= ../../../libraries
+-MDB_SUBDIR = $(srcdir)/$(LDAP_LIBDIR)/liblmdb
+
+ BUILD_OPT = "--enable-mdb"
+ BUILD_MOD = @BUILD_MDB@
+@@ -44,7 +43,7 @@
+
+ LIBBASE = back_mdb
+
+-XINCPATH = -I.. -I$(srcdir)/.. -I$(MDB_SUBDIR)
++XINCPATH = -I.. -I$(srcdir)/..
+ XDEFS = $(MODULES_CPPFLAGS)
+
+ all-local-lib: ../.backend
+@@ -52,11 +51,5 @@
+ ../.backend: lib$(LIBBASE).a
+ @touch $@
+
+-mdb.lo: $(MDB_SUBDIR)/mdb.c
+- $(LTCOMPILE_MOD) $(MDB_SUBDIR)/mdb.c
+-
+-midl.lo: $(MDB_SUBDIR)/midl.c
+- $(LTCOMPILE_MOD) $(MDB_SUBDIR)/midl.c
+-
+ veryclean-local-lib: FORCE
+ $(RM) $(XXHEADERS) $(XXSRCS) .links
+--- a/configure.in
++++ b/configure.in
+@@ -519,6 +519,7 @@
+ dnl Initialize vars
+ LDAP_LIBS=
+ BDB_LIBS=
++MDB_LIBS=
+ SLAPD_NDB_LIBS=
+ SLAPD_NDB_INCS=
+ LTHREAD_LIBS=
+@@ -1905,6 +1906,30 @@
+ fi
+
+ dnl ----------------------------------------------------------------
++ol_link_mdb=no
++
++if test $ol_enable_mdb != no; then
++ OL_MDB
++
++ if test $ol_cv_mdb = no ; then
++ AC_MSG_ERROR(MDB: LMDB not available)
++ fi
++
++ AC_DEFINE(HAVE_MDB,1,
++ [define this if LMDB is available])
++
++ dnl $ol_cv_lib_mdb should be yes or -llmdb
++ dnl (it could be no, but that would be an error
++ if test $ol_cv_lib_mdb != yes ; then
++ MDB_LIBS="$MDB_LIBS $ol_cv_lib_mdb"
++ fi
++
++ SLAPD_LIBS="$SLAPD_LIBS \$(MDB_LIBS)"
++
++ ol_link_mdb=yes
++fi
++
++dnl ----------------------------------------------------------------
+
+ if test $ol_enable_dynamic = yes && test $enable_shared = yes ; then
+ BUILD_LIBS_DYNAMIC=shared
+@@ -3133,6 +3158,7 @@
+ AC_SUBST(LDAP_LIBS)
+ AC_SUBST(SLAPD_LIBS)
+ AC_SUBST(BDB_LIBS)
++AC_SUBST(MDB_LIBS)
+ AC_SUBST(SLAPD_NDB_LIBS)
+ AC_SUBST(SLAPD_NDB_INCS)
+ AC_SUBST(LTHREAD_LIBS)
diff --git a/net-nds/openldap/files/openldap-2.4.45-fix-lmpasswd-gnutls-symbols.patch b/net-nds/openldap/files/openldap-2.4.45-fix-lmpasswd-gnutls-symbols.patch
new file mode 100644
index 0000000..05e515c
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.45-fix-lmpasswd-gnutls-symbols.patch
@@ -0,0 +1,109 @@
+If GnuTLS is used, the lmpasswd module for USE=samba does not compile.
+Forward-port an old Debian patch that upstream never applied.
+
+Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
+Signed-off-by: Steffen Hau <steffen@hauihau.de>
+X-Gentoo-Bug: http://bugs.gentoo.org/show_bug.cgi?id=233633
+X-Upstream-Bug: http://www.openldap.org/its/index.cgi/Software%20Enhancements?id=4997
+X-Debian-Bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=245341
+
+--- a/libraries/liblutil/passwd.c
++++ b/libraries/liblutil/passwd.c
+@@ -51,6 +51,26 @@ typedef unsigned char des_data_block[8];
+ typedef PK11Context *des_context[1];
+ #define DES_ENCRYPT CKA_ENCRYPT
+
++#elif defined(HAVE_GNUTLS_GNUTLS_H) && !defined(DES_ENCRYPT)
++# include <gcrypt.h>
++static int gcrypt_init = 0;
++
++typedef const void* des_key;
++typedef unsigned char DES_cblock[8];
++typedef DES_cblock des_data_block;
++typedef int DES_key_schedule; /* unused */
++typedef DES_key_schedule des_context; /* unused */
++#define des_failed(encrypted) 0
++#define des_finish(key, schedule)
++
++#define DES_set_key_unchecked( key, key_sched ) \
++ gcry_cipher_setkey( hd, key, 8 )
++
++#define DES_ecb_encrypt( input, output, key_sched, enc ) \
++ gcry_cipher_encrypt( hd, *output, 8, *input, 8 )
++
++#define DES_set_odd_parity( key ) do {} while(0)
++
+ #endif
+
+ #endif /* SLAPD_LMHASH */
+@@ -651,7 +671,7 @@ static int chk_md5(
+
+ #ifdef SLAPD_LMHASH
+
+-#if defined(HAVE_OPENSSL)
++#if defined(HAVE_OPENSSL) || defined(HAVE_GNUTLS_GNUTLS_H)
+
+ /*
+ * abstract away setting the parity.
+@@ -841,6 +861,19 @@ static int chk_lanman(
+ des_data_block StdText = "KGS!@#$%";
+ des_data_block PasswordHash1, PasswordHash2;
+ char PasswordHash[33], storedPasswordHash[33];
++
++#if defined(HAVE_GNUTLS_GNUTLS_H) && !defined(DES_ENCRYPT)
++ gcry_cipher_hd_t hd;
++
++ if ( !gcrypt_init ) {
++ gcry_check_version( GCRYPT_VERSION );
++ gcrypt_init = 1;
++ }
++
++ schedule = schedule; /* unused - avoid warning */
++
++ gcry_cipher_open( &hd, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0 );
++#endif /* HAVE_GNUTLS_GNUTLS_H && !DES_ENCRYPT */
+
+ for( i=0; i<cred->bv_len; i++) {
+ if(cred->bv_val[i] == '\0') {
+@@ -883,6 +916,10 @@ static int chk_lanman(
+ strncpy( storedPasswordHash, passwd->bv_val, 32 );
+ storedPasswordHash[32] = '\0';
+ ldap_pvt_str2lower( storedPasswordHash );
++
++#if defined(HAVE_GNUTLS_GNUTLS_H) && !defined(DES_ENCRYPT)
++ gcry_cipher_close( hd );
++#endif /* HAVE_GNUTLS_GNUTLS_H && !DES_ENCRYPT */
+
+ return memcmp( PasswordHash, storedPasswordHash, 32) ? LUTIL_PASSWD_ERR : LUTIL_PASSWD_OK;
+ }
+@@ -1138,6 +1175,19 @@ static int hash_lanman(
+ des_data_block PasswordHash1, PasswordHash2;
+ char PasswordHash[33];
+
++#if defined(HAVE_GNUTLS_GNUTLS_H) && !defined(DES_ENCRYPT)
++ gcry_cipher_hd_t hd;
++
++ if ( !gcrypt_init ) {
++ gcry_check_version( GCRYPT_VERSION );
++ gcrypt_init = 1;
++ }
++
++ schedule = schedule; /* unused - avoid warning */
++
++ gcry_cipher_open( &hd, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0 );
++#endif /* HAVE_GNUTLS_GNUTLS_H && !DES_ENCRYPT */
++
+ for( i=0; i<passwd->bv_len; i++) {
+ if(passwd->bv_val[i] == '\0') {
+ return LUTIL_PASSWD_ERR; /* NUL character in password */
+@@ -1168,6 +1218,10 @@ static int hash_lanman(
+
+ hash->bv_val = PasswordHash;
+ hash->bv_len = 32;
++
++#if defined(HAVE_GNUTLS_GNUTLS_H) && !defined(DES_ENCRYPT)
++ gcry_cipher_close( hd );
++#endif /* HAVE_GNUTLS_GNUTLS_H && !DES_ENCRYPT */
+
+ return pw_string( scheme, hash );
+ }
diff --git a/net-nds/openldap/files/openldap-2.4.47-warnings.patch b/net-nds/openldap/files/openldap-2.4.47-warnings.patch
new file mode 100644
index 0000000..10f2111
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.47-warnings.patch
@@ -0,0 +1,35 @@
+--- a/include/ldap.h
++++ b/include/ldap.h
+@@ -2041,6 +2041,10 @@ LDAP_F( int )
+ ldap_is_ldapi_url LDAP_P((
+ LDAP_CONST char *url ));
+
++LDAP_F( int )
++ldap_is_ldapc_url LDAP_P((
++ LDAP_CONST char *url ));
++
+ LDAP_F( int )
+ ldap_url_parse LDAP_P((
+ LDAP_CONST char *url,
+--- a/include/ldap_int_thread.h
++++ b/include/ldap_int_thread.h
+@@ -33,7 +33,7 @@ LDAP_END_DECL
+ * definitions for POSIX Threads *
+ * *
+ **********************************/
+-
++#define __USE_UNIX98
+ #include <pthread.h>
+ #ifdef HAVE_SCHED_H
+ #include <sched.h>
+--- a/libraries/libldap/tls2.c
++++ b/libraries/libldap/tls2.c
+@@ -76,6 +76,8 @@ static oid_name oids[] = {
+
+ #ifdef HAVE_TLS
+
++int ldap_pvt_tls_check_hostname( LDAP *ld, void *s, const char *name_in );
++
+ void
+ ldap_pvt_tls_ctx_free ( void *c )
+ {
diff --git a/net-nds/openldap/files/openldap-2.4.6-evolution-ntlm.patch b/net-nds/openldap/files/openldap-2.4.6-evolution-ntlm.patch
new file mode 100644
index 0000000..e8bcc50
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.4.6-evolution-ntlm.patch
@@ -0,0 +1,189 @@
+--- a/include/ldap.h
++++ b/include/ldap.h
+@@ -2461,5 +2461,26 @@ ldap_parse_deref_control LDAP_P((
+ LDAPControl **ctrls,
+ LDAPDerefRes **drp ));
+
++/*
++ * hacks for NTLM
++ */
++#define LDAP_AUTH_NTLM_REQUEST ((ber_tag_t) 0x8aU)
++#define LDAP_AUTH_NTLM_RESPONSE ((ber_tag_t) 0x8bU)
++LDAP_F( int )
++ldap_ntlm_bind LDAP_P((
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp ));
++LDAP_F( int )
++ldap_parse_ntlm_bind_result LDAP_P((
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge));
++
++
+ LDAP_END_DECL
+ #endif /* _LDAP_H */
+--- a/libraries/libldap/Makefile.in
++++ b/libraries/libldap/Makefile.in
+@@ -20,7 +20,7 @@ PROGRAMS = apitest dntest ftest ltest ur
+ SRCS = bind.c open.c result.c error.c compare.c search.c \
+ controls.c messages.c references.c extended.c cyrus.c \
+ modify.c add.c modrdn.c delete.c abandon.c \
+- sasl.c gssapi.c sbind.c unbind.c cancel.c \
++ sasl.c ntlm.c gssapi.c sbind.c unbind.c cancel.c \
+ filter.c free.c sort.c passwd.c whoami.c \
+ getdn.c getentry.c getattr.c getvalues.c addentry.c \
+ request.c os-ip.c url.c pagectrl.c sortctrl.c vlvctrl.c \
+@@ -33,7 +33,7 @@ SRCS = bind.c open.c result.c error.c co
+ OBJS = bind.lo open.lo result.lo error.lo compare.lo search.lo \
+ controls.lo messages.lo references.lo extended.lo cyrus.lo \
+ modify.lo add.lo modrdn.lo delete.lo abandon.lo \
+- sasl.lo gssapi.lo sbind.lo unbind.lo cancel.lo \
++ sasl.lo ntlm.lo gssapi.lo sbind.lo unbind.lo cancel.lo \
+ filter.lo free.lo sort.lo passwd.lo whoami.lo \
+ getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \
+ request.lo os-ip.lo url.lo pagectrl.lo sortctrl.lo vlvctrl.lo \
+--- /dev/null
++++ b/libraries/libldap/ntlm.c
+@@ -0,0 +1,137 @@
++/* $OpenLDAP: pkg/ldap/libraries/libldap/ntlm.c,v 1.1.4.10 2002/01/04 20:38:21 kurt Exp $ */
++/*
++ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
++ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
++ */
++
++/* Mostly copied from sasl.c */
++
++#include "portable.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++
++#include <ac/socket.h>
++#include <ac/string.h>
++#include <ac/time.h>
++#include <ac/errno.h>
++
++#include "ldap-int.h"
++
++int
++ldap_ntlm_bind(
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp )
++{
++ BerElement *ber;
++ int rc;
++ ber_int_t id;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_ntlm_bind\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( msgidp != NULL );
++
++ if( msgidp == NULL ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ /* create a message to send */
++ if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ assert( LBER_VALID( ber ) );
++
++ LDAP_NEXT_MSGID( ld, id );
++ rc = ber_printf( ber, "{it{istON}" /*}*/,
++ id, LDAP_REQ_BIND,
++ ld->ld_version, dn, tag,
++ cred );
++
++ /* Put Server Controls */
++ if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ if ( ber_printf( ber, /*{*/ "N}" ) == -1 ) {
++ ld->ld_errno = LDAP_ENCODING_ERROR;
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ /* send the message */
++ *msgidp = ldap_send_initial_request( ld, LDAP_REQ_BIND, dn, ber, id );
++
++ if(*msgidp < 0)
++ return ld->ld_errno;
++
++ return LDAP_SUCCESS;
++}
++
++int
++ldap_parse_ntlm_bind_result(
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge)
++{
++ ber_int_t errcode;
++ ber_tag_t tag;
++ BerElement *ber;
++ ber_len_t len;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_parse_ntlm_bind_result\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( res != NULL );
++
++ if ( ld == NULL || res == NULL ) {
++ return LDAP_PARAM_ERROR;
++ }
++
++ if( res->lm_msgtype != LDAP_RES_BIND ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ if ( ld->ld_error ) {
++ LDAP_FREE( ld->ld_error );
++ ld->ld_error = NULL;
++ }
++ if ( ld->ld_matched ) {
++ LDAP_FREE( ld->ld_matched );
++ ld->ld_matched = NULL;
++ }
++
++ /* parse results */
++
++ ber = ber_dup( res->lm_ber );
++
++ if( ber == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ tag = ber_scanf( ber, "{ioa" /*}*/,
++ &errcode, challenge, &ld->ld_error );
++ ber_free( ber, 0 );
++
++ if( tag == LBER_ERROR ) {
++ ld->ld_errno = LDAP_DECODING_ERROR;
++ return ld->ld_errno;
++ }
++
++ ld->ld_errno = errcode;
++
++ return( ld->ld_errno );
++}
diff --git a/net-nds/openldap/files/openldap-2.6.1-cloak.patch b/net-nds/openldap/files/openldap-2.6.1-cloak.patch
new file mode 100644
index 0000000..e023a14
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.1-cloak.patch
@@ -0,0 +1,21 @@
+--- a/contrib/slapd-modules/cloak/cloak.c
++++ b/contrib/slapd-modules/cloak/cloak.c
+@@ -29,6 +29,7 @@
+ #include "ac/socket.h"
+
+ #include "lutil.h"
++#include "attr.h"
+ #include "slap.h"
+ #include "slap-config.h"
+
+--- a/servers/slapd/attr.h
++++ b/servers/slapd/attr.h
+@@ -0,0 +1,8 @@
++#ifndef OPENLDAP_SERVERS_SLAPD_ATTR_H_
++#define OPENLDAP_SERVERS_SLAPD_ATTR_H_
++
++#endif //OPENLDAP_SERVERS_SLAPD_ATTR_H_
++
++#include "slap.h"
++
++void attr_clean( Attribute *a );
diff --git a/net-nds/openldap/files/openldap-2.6.1-fix-bashism-configure.patch b/net-nds/openldap/files/openldap-2.6.1-fix-bashism-configure.patch
new file mode 100644
index 0000000..c2acb67
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.1-fix-bashism-configure.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -2055,7 +2055,7 @@ dnl
+ WITH_SYSTEMD=no
+ systemdsystemunitdir=
+ ol_link_systemd=no
+-if test $ol_enable_slapd == no && test $ol_enable_balancer != yes ; then
++if test $ol_enable_slapd = no && test $ol_enable_balancer != yes ; then
+ if test $ol_with_systemd != no ; then
+ AC_MSG_WARN([servers disabled, ignoring --with-systemd=$ol_with_systemd argument])
+ ol_with_systemd=no
diff --git a/net-nds/openldap/files/openldap-2.6.1-fix-missing-mapping.patch b/net-nds/openldap/files/openldap-2.6.1-fix-missing-mapping.patch
new file mode 100644
index 0000000..1d65955
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.1-fix-missing-mapping.patch
@@ -0,0 +1,15 @@
+From 59e013602d7b1aa0d7da79d65367c9ec391b96f8 Mon Sep 17 00:00:00 2001
+From: Simon Pichugin <spichugi@redhat.com>
+Date: Wed, 3 Nov 2021 19:03:40 -0700
+Subject: [PATCH] Fix missing mapping
+
+--- a/libraries/liblber/lber.map
++++ b/libraries/liblber/lber.map
+@@ -121,6 +121,7 @@ OPENLDAP_2.200
+ ber_sockbuf_io_fd;
+ ber_sockbuf_io_readahead;
+ ber_sockbuf_io_tcp;
++ ber_sockbuf_io_udp;
+ ber_sockbuf_remove_io;
+ ber_sos_dump;
+ ber_start;
diff --git a/net-nds/openldap/files/openldap-2.6.1-flags.patch b/net-nds/openldap/files/openldap-2.6.1-flags.patch
new file mode 100644
index 0000000..39ceeec
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.1-flags.patch
@@ -0,0 +1,352 @@
+--- a/contrib/slapd-modules/acl/Makefile
++++ b/contrib/slapd-modules/acl/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/addpartial/Makefile
++++ b/contrib/slapd-modules/addpartial/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/adremap/Makefile
++++ b/contrib/slapd-modules/adremap/Makefile
+@@ -19,7 +19,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_ADREMAP=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/allop/Makefile
++++ b/contrib/slapd-modules/allop/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/allowed/Makefile
++++ b/contrib/slapd-modules/allowed/Makefile
+@@ -20,7 +20,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_ALLOWED=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/authzid/Makefile
++++ b/contrib/slapd-modules/authzid/Makefile
+@@ -20,7 +20,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/autogroup/Makefile
++++ b/contrib/slapd-modules/autogroup/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/cloak/Makefile
++++ b/contrib/slapd-modules/cloak/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_CLOAK=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/comp_match/Makefile
++++ b/contrib/slapd-modules/comp_match/Makefile
+@@ -31,7 +31,7 @@ SSL_LIB = -lcrypto -L$(SSL_DIR)/lib
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DLDAP_COMPONENT
+ INCS = $(LDAP_INC) $(SNACC_INC) $(SSL_INC)
+ LIBS = $(LDAP_LIB) $(SNACC_LIB) $(SSL_LIB)
+--- a/contrib/slapd-modules/datamorph/Makefile
++++ b/contrib/slapd-modules/datamorph/Makefile
+@@ -22,7 +22,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_DATAMORPH=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/denyop/Makefile
++++ b/contrib/slapd-modules/denyop/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_DENYOP=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/dsaschema/Makefile
++++ b/contrib/slapd-modules/dsaschema/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/dupent/Makefile
++++ b/contrib/slapd-modules/dupent/Makefile
+@@ -20,7 +20,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_DUPENT=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/kinit/Makefile
++++ b/contrib/slapd-modules/kinit/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB) -lkrb5
+--- a/contrib/slapd-modules/lastbind/Makefile
++++ b/contrib/slapd-modules/lastbind/Makefile
+@@ -19,7 +19,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_LASTBIND=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/lastmod/Makefile
++++ b/contrib/slapd-modules/lastmod/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_LASTMOD=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/noopsrch/Makefile
++++ b/contrib/slapd-modules/noopsrch/Makefile
+@@ -20,7 +20,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2 -Wall
++OPT = -Wall -Wall
+ DEFS = -DSLAPD_OVER_NOOPSRCH=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/nops/Makefile
++++ b/contrib/slapd-modules/nops/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_NOPS=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/nssov/Makefile
++++ b/contrib/slapd-modules/nssov/Makefile
+@@ -27,7 +27,7 @@ NLDAPD_INC=-Inss-pam-ldapd
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+-OPT = -g -O2
++OPT = -Wall
+ CC = gcc
+ DEFS =
+ INCS = $(LDAP_INC) $(NLDAPD_INC)
+--- a/contrib/slapd-modules/passwd/Makefile
++++ b/contrib/slapd-modules/passwd/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/passwd/pbkdf2/Makefile
++++ b/contrib/slapd-modules/passwd/pbkdf2/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ #DEFS = -DSLAPD_PBKDF2_DEBUG
+
+ SSL_INC =
+--- a/contrib/slapd-modules/passwd/sha2/Makefile
++++ b/contrib/slapd-modules/passwd/sha2/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ #DEFS = -DSLAPD_SHA2_DEBUG
+ INCS = $(LDAP_INC)
+--- a/contrib/slapd-modules/passwd/totp/Makefile
++++ b/contrib/slapd-modules/passwd/totp/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/ppm/Makefile
++++ b/contrib/slapd-modules/ppm/Makefile
+@@ -18,7 +18,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/liblber/liblber.la $(LDAP_BUILD)/libraries/li
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2 -fpic
++OPT = -Wall -fpic
+
+ # To skip linking against CRACKLIB make CRACK=no
+ CRACK=yes
+--- a/contrib/slapd-modules/proxyOld/Makefile
++++ b/contrib/slapd-modules/proxyOld/Makefile
+@@ -20,7 +20,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/rbac/Makefile
++++ b/contrib/slapd-modules/rbac/Makefile
+@@ -9,7 +9,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_RBAC=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/samba4/Makefile
++++ b/contrib/slapd-modules/samba4/Makefile
+@@ -20,7 +20,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_RDNVAL=SLAPD_MOD_DYNAMIC \
+ -DSLAPD_OVER_PGUID=SLAPD_MOD_DYNAMIC \
+ -DSLAPD_OVER_VERNUM=SLAPD_MOD_DYNAMIC
+--- a/contrib/slapd-modules/smbk5pwd/Makefile
++++ b/contrib/slapd-modules/smbk5pwd/Makefile
+@@ -27,7 +27,7 @@ HEIMDAL_LIB = -L/usr/heimdal/lib -lkrb5 -lkadm5srv
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ # Omit DO_KRB5, DO_SAMBA or DO_SHADOW if you don't want to support it.
+ DEFS = -DDO_KRB5 -DDO_SAMBA -DDO_SHADOW
+ INCS = $(LDAP_INC) $(HEIMDAL_INC) $(SSL_INC)
+--- a/contrib/slapd-modules/trace/Makefile
++++ b/contrib/slapd-modules/trace/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_TRACE=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/usn/Makefile
++++ b/contrib/slapd-modules/usn/Makefile
+@@ -8,7 +8,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_USN=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/variant/Makefile
++++ b/contrib/slapd-modules/variant/Makefile
+@@ -22,7 +22,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ INSTALL = /usr/bin/install
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS = -DSLAPD_OVER_VARIANT=SLAPD_MOD_DYNAMIC
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
+--- a/contrib/slapd-modules/vc/Makefile
++++ b/contrib/slapd-modules/vc/Makefile
+@@ -20,7 +20,7 @@ LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+
+ LIBTOOL = $(LDAP_BUILD)/libtool
+ CC = gcc
+-OPT = -g -O2
++OPT = -Wall
+ DEFS =
+ INCS = $(LDAP_INC)
+ LIBS = $(LDAP_LIB)
diff --git a/net-nds/openldap/files/openldap-2.6.1-system-mdb.patch b/net-nds/openldap/files/openldap-2.6.1-system-mdb.patch
new file mode 100644
index 0000000..e29ba0b
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.1-system-mdb.patch
@@ -0,0 +1,140 @@
+--- a/build/openldap.m4
++++ b/build/openldap.m4
+@@ -243,6 +243,40 @@ OL_RESOLVER_TRY(ol_cv_resolver_none)
+ OL_RESOLVER_TRY(ol_cv_resolver_resolv,[-lresolv])
+ OL_RESOLVER_TRY(ol_cv_resolver_bind,[-lbind])
+ ])
++
++dnl --------------------------------------------------------------------
++dnl Check for version compatility with back-mdb
++AC_DEFUN([OL_MDB_COMPAT],
++[AC_CACHE_CHECK([if LMDB version supported by MDB backends], [ol_cv_mdb_compat],[
++ AC_EGREP_CPP(__mdb_version_compat,[
++#include <lmdb.h>
++
++/* require 0.9.18 or later */
++#if MDB_VERSION_FULL >= 0x000000090012
++ __mdb_version_compat
++#endif
++ ], [ol_cv_mdb_compat=yes], [ol_cv_mdb_compat=no])])
++])
++
++dnl
++dnl --------------------------------------------------------------------
++dnl Find any MDB
++AC_DEFUN([OL_MDB],
++[ol_cv_mdb=no
++AC_CHECK_HEADERS(lmdb.h)
++if test $ac_cv_header_lmdb_h = yes; then
++ OL_MDB_COMPAT
++
++ if test $ol_cv_mdb_compat != yes ; then
++ AC_MSG_ERROR([LMDB version incompatible with MDB backends])
++ fi
++
++ ol_cv_lib_mdb=-llmdb
++ ol_cv_mdb=yes
++fi
++])
++
++
+ dnl
+ dnl ====================================================================
+ dnl Check POSIX Thread version
+--- a/build/top.mk
++++ b/build/top.mk
+@@ -164,6 +164,7 @@ CLIENT_LIBS = @CLIENT_LIBS@
+ LUTIL_LIBS = @LUTIL_LIBS@
+ LTHREAD_LIBS = @LTHREAD_LIBS@
+
++MDB_LIBS = @MDB_LIBS@
+ SLAPD_NDB_LIBS = @SLAPD_NDB_LIBS@
+ WT_LIBS = @WT_LIBS@
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -547,6 +547,7 @@ AC_MSG_RESULT(done)
+ dnl ----------------------------------------------------------------
+ dnl Initialize vars
+ LDAP_LIBS=
++MDB_LIBS=
+ SLAPD_NDB_LIBS=
+ SLAPD_NDB_INCS=
+ LTHREAD_LIBS=
+@@ -646,6 +647,32 @@ dnl Checks for programs
+
+ AC_DEFINE(HAVE_MKVERSION, 1, [define this if you have mkversion])
+
++dnl ----------------------------------------------------------------
++ol_link_mdb=no
++
++AS_IF([test x$ol_enable_mdb != xno], [
++ OL_MDB
++
++ if test $ol_cv_mdb = no ; then
++ AC_MSG_ERROR(MDB: LMDB not available)
++ fi
++
++ AC_DEFINE(HAVE_MDB,1,
++ [define this if LMDB is available])
++
++ dnl $ol_cv_lib_mdb should be yes or -llmdb
++ dnl (it could be no, but that would be an error
++ if test $ol_cv_lib_mdb != yes ; then
++ MDB_LIBS="$MDB_LIBS $ol_cv_lib_mdb"
++ fi
++
++ SLAPD_LIBS="$SLAPD_LIBS \$(MDB_LIBS)"
++
++ ol_link_mdb=yes
++])
++
++dnl ----------------------------------------------------------------
++
+ dnl ----------------------------------------------------------------
+ dnl
+ dnl Determine which C translator to use
+@@ -3150,6 +3177,7 @@ dnl pwmods
+ AC_SUBST(LDAP_LIBS)
+ AC_SUBST(CLIENT_LIBS)
+ AC_SUBST(SLAPD_LIBS)
++AC_SUBST(MDB_LIBS)
+ AC_SUBST(BALANCER_LIBS)
+ AC_SUBST(SLAPD_NDB_LIBS)
+ AC_SUBST(SLAPD_NDB_INCS)
+--- a/servers/slapd/back-mdb/Makefile.in
++++ b/servers/slapd/back-mdb/Makefile.in
+@@ -25,11 +25,10 @@ OBJS = init.lo tools.lo config.lo \
+ extended.lo operational.lo \
+ attr.lo index.lo key.lo filterindex.lo \
+ dn2entry.lo dn2id.lo id2entry.lo idl.lo \
+- nextid.lo monitor.lo mdb.lo midl.lo
++ nextid.lo monitor.lo
+
+ LDAP_INCDIR= ../../../include
+ LDAP_LIBDIR= ../../../libraries
+-MDB_SUBDIR = $(srcdir)/$(LDAP_LIBDIR)/liblmdb
+
+ BUILD_OPT = "--enable-mdb"
+ BUILD_MOD = @BUILD_MDB@
+@@ -44,7 +43,7 @@ UNIX_LINK_LIBS = $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS)
+
+ LIBBASE = back_mdb
+
+-XINCPATH = -I.. -I$(srcdir)/.. -I$(MDB_SUBDIR)
++XINCPATH = -I.. -I$(srcdir)/..
+ XDEFS = $(MODULES_CPPFLAGS)
+
+ all-local-lib: ../.backend
+@@ -52,11 +51,5 @@ all-local-lib: ../.backend
+ ../.backend: lib$(LIBBASE).a
+ @touch $@
+
+-mdb.lo: $(MDB_SUBDIR)/mdb.c
+- $(LTCOMPILE_MOD) $(MDB_SUBDIR)/mdb.c
+-
+-midl.lo: $(MDB_SUBDIR)/midl.c
+- $(LTCOMPILE_MOD) $(MDB_SUBDIR)/midl.c
+-
+ veryclean-local-lib: FORCE
+ $(RM) $(XXHEADERS) $(XXSRCS) .links
diff --git a/net-nds/openldap/files/openldap-2.6.3-clang16.patch b/net-nds/openldap/files/openldap-2.6.3-clang16.patch
new file mode 100644
index 0000000..7027197
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.3-clang16.patch
@@ -0,0 +1,185 @@
+From ee4983302d6f052e77ab0332d2a128d169c2eacb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me>
+Date: Tue, 15 Nov 2022 21:45:27 +0100
+Subject: [PATCH] Remove default-int/k&r declarations from the configure macros
+
+Recently, Clang tried to switch to having K&R prototypes and other
+non-strictly-conforming prototypes error out, as a result of C2x changes
+to the standard. These have been located across many packages, and
+range in severity from mild compile errors to runtime misconfiguration
+as a result of broken configure scripts.
+
+This covers all the instances I could find by grepping around the
+codebase, and gets OpenLDAP building on my system.
+
+Bug: https://bugs.gentoo.org/871288
+Bug: https://bugs.gentoo.org/871372
+--- a/build/openldap.m4
++++ b/build/openldap.m4
+@@ -154,6 +154,7 @@ fi
+ if test $ol_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <ctype.h>
++#include <stdlib.h>
+ #ifndef HAVE_EBCDIC
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+@@ -394,9 +395,7 @@ AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[
+ AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
+ [AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES
+
+-int main(argc, argv)
+- int argc;
+- char **argv;
++int main(int argc, char **argv)
+ {
+ OL_PTHREAD_TEST_FUNCTION
+ }
+@@ -518,7 +517,7 @@ AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
+ #include <sys/types.h>
+ #include <regex.h>
+ static char *pattern, *string;
+-main()
++int main(void)
+ {
+ int rc;
+ regex_t re;
+@@ -545,7 +544,8 @@ AC_DEFUN([OL_C_UPPER_LOWER],
+ [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+ #include <ctype.h>
+-main()
++#include <stdlib.h>
++int main(void)
+ {
+ if ('C' == toupper('C'))
+ exit(0);
+@@ -603,7 +603,7 @@ AC_DEFUN([OL_NONPOSIX_STRERROR_R],
+ ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no])
+ else
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+- main() {
++ int main(void) {
+ char buf[100];
+ buf[0] = 0;
+ strerror_r( 1, buf, sizeof buf );
+--- a/configure.ac
++++ b/configure.ac
+@@ -1031,7 +1031,11 @@ dnl ----------------------------------------------------------------
+ AC_CHECK_HEADERS( sys/epoll.h )
+ if test "${ac_cv_header_sys_epoll_h}" = yes; then
+ AC_MSG_CHECKING(for epoll system call)
+- AC_RUN_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv)
++ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
++#ifdef HAVE_SYS_POLL_H
++#include <sys/epoll.h>
++#endif
++int main(int argc, char **argv)
+ {
+ int epfd = epoll_create(256);
+ exit (epfd == -1 ? 1 : 0);
+@@ -1493,10 +1497,8 @@ pthread_rwlock_t rwlock;
+ dnl save the flags
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <pthread.h>
+-#ifndef NULL
+-#define NULL (void*)0
+-#endif
+-]], [[pthread_detach(NULL);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no])
++pthread_t thread;
++]], [[pthread_detach(thread);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no])
+ ])
+
+ if test $ol_cv_func_pthread_detach = no ; then
+@@ -1551,6 +1553,9 @@ dnl esac
+ AC_CACHE_CHECK([if select yields when using pthreads],
+ ol_cv_pthread_select_yields,[
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#define _XOPEN_SOURCE 500 /* For pthread_setconcurrency() on glibc */
++#include <stdlib.h>
++#include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <unistd.h>
+@@ -1561,8 +1566,7 @@ dnl esac
+
+ static int fildes[2];
+
+-static void *task(p)
+- void *p;
++static void *task(void *p)
+ {
+ int i;
+ struct timeval tv;
+@@ -1586,9 +1590,7 @@ static void *task(p)
+ exit(0); /* if we exit here, the select blocked the whole process */
+ }
+
+-int main(argc, argv)
+- int argc;
+- char **argv;
++int main(int argc, char **argv)
+ {
+ pthread_t t;
+
+--- a/contrib/ldaptcl/tclAppInit.c
++++ b/contrib/ldaptcl/tclAppInit.c
+@@ -45,9 +45,7 @@ EXTERN int Tcltest_Init _ANSI_ARGS_((Tcl_Interp *interp));
+ */
+
+ int
+-main(argc, argv)
+- int argc; /* Number of command-line arguments. */
+- char **argv; /* Values of command-line arguments. */
++main(int argc, char **argv)
+ {
+ #ifdef USE_TCLX
+ TclX_Main(argc, argv, Tcl_AppInit);
+--- a/contrib/ldaptcl/tkAppInit.c
++++ b/contrib/ldaptcl/tkAppInit.c
+@@ -37,16 +37,9 @@ int (*tclDummyMathPtr)() = matherr;
+ * This is the main program for the application.
+ *-----------------------------------------------------------------------------
+ */
+-#ifdef __cplusplus
+ int
+ main (int argc,
+ char **argv)
+-#else
+-int
+-main (argc, argv)
+- int argc;
+- char **argv;
+-#endif
+ {
+ #ifdef USE_TCLX
+ TkX_Main(argc, argv, Tcl_AppInit);
+@@ -68,14 +61,8 @@ main (argc, argv)
+ * interp->result if an error occurs.
+ *-----------------------------------------------------------------------------
+ */
+-#ifdef __cplusplus
+ int
+ Tcl_AppInit (Tcl_Interp *interp)
+-#else
+-int
+-Tcl_AppInit (interp)
+- Tcl_Interp *interp;
+-#endif
+ {
+ if (Tcl_Init (interp) == TCL_ERROR) {
+ return TCL_ERROR;
+--- a/servers/slapd/syslog.c
++++ b/servers/slapd/syslog.c
+@@ -209,7 +209,7 @@ openlog(const char *ident, int logstat, int logfac)
+ }
+
+ void
+-closelog()
++closelog(void)
+ {
+ (void)close(LogFile);
+ LogFile = -1;
+--
+2.38.1
+
diff --git a/net-nds/openldap/files/openldap-2.6.3-slapd-conf b/net-nds/openldap/files/openldap-2.6.3-slapd-conf
new file mode 100644
index 0000000..4555c62
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.3-slapd-conf
@@ -0,0 +1,64 @@
+#
+# See slapd.conf(5) for details on configuration options.
+# This file should NOT be world readable.
+#
+include /etc/openldap/schema/core.schema
+
+# Define global ACLs to disable default read access.
+
+# Do not enable referrals until AFTER you have a working directory
+# service AND an understanding of referrals.
+#referral ldap://root.openldap.org
+
+pidfile /run/openldap/slapd.pid
+argsfile /run/openldap/slapd.args
+
+# Load dynamic backend modules:
+###INSERTDYNAMICMODULESHERE###
+
+# Sample security restrictions
+# Require integrity protection (prevent hijacking)
+# Require 112-bit (3DES or better) encryption for updates
+# Require 63-bit encryption for simple bind
+# security ssf=1 update_ssf=112 simple_bind=64
+
+# Sample access control policy:
+# Root DSE: allow anyone to read it
+# Subschema (sub)entry DSE: allow anyone to read it
+# Other DSEs:
+# Allow self write access
+# Allow authenticated users read access
+# Allow anonymous users to authenticate
+# Directives needed to implement policy:
+# access to dn.base="" by * read
+# access to dn.base="cn=Subschema" by * read
+# access to *
+# by self write
+# by users read
+# by anonymous auth
+#
+# if no access controls are present, the default policy
+# allows anyone and everyone to read anything but restricts
+# updates to rootdn. (e.g., "access to * by * read")
+#
+# rootdn can always read and write EVERYTHING!
+
+#######################################################################
+# BDB database definitions
+#######################################################################
+
+database mdb
+suffix "dc=my-domain,dc=com"
+# <kbyte> <min>
+checkpoint 32 30
+rootdn "cn=Manager,dc=my-domain,dc=com"
+# Cleartext passwords, especially for the rootdn, should
+# be avoid. See slappasswd(8) and slapd.conf(5) for details.
+# Use of strong authentication encouraged.
+rootpw secret
+# The database directory MUST exist prior to running slapd AND
+# should only be accessible by the slapd and slap tools.
+# Mode 700 recommended.
+directory /var/lib/openldap-data
+# Indices to maintain
+index objectClass eq
diff --git a/net-nds/openldap/files/openldap-2.6.4-clang16.patch b/net-nds/openldap/files/openldap-2.6.4-clang16.patch
new file mode 100644
index 0000000..bcbdf0b
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.4-clang16.patch
@@ -0,0 +1,234 @@
+https://git.openldap.org/openldap/openldap/-/merge_requests/605
+
+From 83e2db9bf9fc2530a0ea6ca538a7732f6ad9de0e Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Thu, 9 Feb 2023 23:17:53 +0000
+Subject: [PATCH 1/3] build: fix compatibility with stricter C99 compilers
+
+Fix the following warnings:
+- -Wimplicit-int (fatal with Clang 16)
+- -Wimplicit-function-declaration (fatal with Clang 16)
+- -Wincompatible-function-pointer-types (fatal with Clang 16)
+- -Wint-conversion (fatal with Clang 15)
+- Old style prototypes (K&R, removed from C23)
+
+These warnings-now-error led to misconfigurations and failure to build
+OpenLDAP, as the tests used during configure caused the wrong results
+to be emitted.
+
+For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2],
+or the (new) c-std-porting mailing list [3].
+
+[0] https://lwn.net/Articles/913505/
+[1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213
+[2] https://wiki.gentoo.org/wiki/Modern_C_porting
+[3] hosted at lists.linux.dev.
+
+Bug: https://bugs.gentoo.org/871288
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/build/openldap.m4
++++ b/build/openldap.m4
+@@ -154,6 +154,7 @@ fi
+ if test $ol_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <ctype.h>
++#include <stdlib.h>
+ #ifndef HAVE_EBCDIC
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+@@ -360,9 +361,7 @@ AC_DEFUN([OL_PTHREAD_TEST_FUNCTION],[[
+ AC_DEFUN([OL_PTHREAD_TEST_PROGRAM],
+ [AC_LANG_SOURCE([OL_PTHREAD_TEST_INCLUDES
+
+-int main(argc, argv)
+- int argc;
+- char **argv;
++int main(int argc, char **argv)
+ {
+ OL_PTHREAD_TEST_FUNCTION
+ }
+@@ -484,7 +483,7 @@ AC_CACHE_CHECK([for compatible POSIX regex],ol_cv_c_posix_regex,[
+ #include <sys/types.h>
+ #include <regex.h>
+ static char *pattern, *string;
+-main()
++int main(void)
+ {
+ int rc;
+ regex_t re;
+@@ -511,7 +510,8 @@ AC_DEFUN([OL_C_UPPER_LOWER],
+ [AC_CACHE_CHECK([if toupper() requires islower()],ol_cv_c_upper_lower,[
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+ #include <ctype.h>
+-main()
++#include <stdlib.h>
++int main(void)
+ {
+ if ('C' == toupper('C'))
+ exit(0);
+@@ -569,7 +569,7 @@ AC_DEFUN([OL_NONPOSIX_STRERROR_R],
+ ]])],[ol_cv_nonposix_strerror_r=yes],[ol_cv_nonposix_strerror_r=no])
+ else
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+- main() {
++ int main(void) {
+ char buf[100];
+ buf[0] = 0;
+ strerror_r( 1, buf, sizeof buf );
+--- a/configure.ac
++++ b/configure.ac
+@@ -1017,7 +1017,11 @@ dnl ----------------------------------------------------------------
+ AC_CHECK_HEADERS( sys/epoll.h )
+ if test "${ac_cv_header_sys_epoll_h}" = yes; then
+ AC_MSG_CHECKING(for epoll system call)
+- AC_RUN_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv)
++ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
++#ifdef HAVE_SYS_POLL_H
++#include <sys/epoll.h>
++#endif
++int main(int argc, char **argv)
+ {
+ int epfd = epoll_create(256);
+ exit (epfd == -1 ? 1 : 0);
+@@ -1479,10 +1483,8 @@ pthread_rwlock_t rwlock;
+ dnl save the flags
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <pthread.h>
+-#ifndef NULL
+-#define NULL (void*)0
+-#endif
+-]], [[pthread_detach(NULL);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no])
++pthread_t thread;
++]], [[pthread_detach(thread);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no])
+ ])
+
+ if test $ol_cv_func_pthread_detach = no ; then
+@@ -1537,6 +1539,9 @@ dnl esac
+ AC_CACHE_CHECK([if select yields when using pthreads],
+ ol_cv_pthread_select_yields,[
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#define _XOPEN_SOURCE 500 /* For pthread_setconcurrency() on glibc */
++#include <stdlib.h>
++#include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <unistd.h>
+@@ -1547,8 +1552,7 @@ dnl esac
+
+ static int fildes[2];
+
+-static void *task(p)
+- void *p;
++static void *task(void *p)
+ {
+ int i;
+ struct timeval tv;
+@@ -1572,9 +1576,7 @@ static void *task(p)
+ exit(0); /* if we exit here, the select blocked the whole process */
+ }
+
+-int main(argc, argv)
+- int argc;
+- char **argv;
++int main(int argc, char **argv)
+ {
+ pthread_t t;
+
+--
+GitLab
+
+
+From 853d613f39ae9e8d7dad4492076959c2d80e38c1 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Thu, 9 Feb 2023 23:20:32 +0000
+Subject: [PATCH 2/3] contrib: fix old-style K&R declarations
+
+Removed in C23.
+
+For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2],
+or the (new) c-std-porting mailing list [3].
+
+[0] https://lwn.net/Articles/913505/
+[1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213
+[2] https://wiki.gentoo.org/wiki/Modern_C_porting
+[3] hosted at lists.linux.dev.
+
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/contrib/ldaptcl/tclAppInit.c
++++ b/contrib/ldaptcl/tclAppInit.c
+@@ -45,9 +45,7 @@ EXTERN int Tcltest_Init _ANSI_ARGS_((Tcl_Interp *interp));
+ */
+
+ int
+-main(argc, argv)
+- int argc; /* Number of command-line arguments. */
+- char **argv; /* Values of command-line arguments. */
++main(int argc, char **argv)
+ {
+ #ifdef USE_TCLX
+ TclX_Main(argc, argv, Tcl_AppInit);
+--- a/contrib/ldaptcl/tkAppInit.c
++++ b/contrib/ldaptcl/tkAppInit.c
+@@ -37,16 +37,9 @@ int (*tclDummyMathPtr)() = matherr;
+ * This is the main program for the application.
+ *-----------------------------------------------------------------------------
+ */
+-#ifdef __cplusplus
+ int
+ main (int argc,
+ char **argv)
+-#else
+-int
+-main (argc, argv)
+- int argc;
+- char **argv;
+-#endif
+ {
+ #ifdef USE_TCLX
+ TkX_Main(argc, argv, Tcl_AppInit);
+@@ -68,14 +61,8 @@ main (argc, argv)
+ * interp->result if an error occurs.
+ *-----------------------------------------------------------------------------
+ */
+-#ifdef __cplusplus
+ int
+ Tcl_AppInit (Tcl_Interp *interp)
+-#else
+-int
+-Tcl_AppInit (interp)
+- Tcl_Interp *interp;
+-#endif
+ {
+ if (Tcl_Init (interp) == TCL_ERROR) {
+ return TCL_ERROR;
+--
+GitLab
+
+
+From b4b3d026461b16f4f462e70225a5a0493647f0c8 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Thu, 9 Feb 2023 23:20:51 +0000
+Subject: [PATCH 3/3] servers: fix -Wstrict-prototypes
+
+For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2],
+or the (new) c-std-porting mailing list [3].
+
+[0] https://lwn.net/Articles/913505/
+[1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213
+[2] https://wiki.gentoo.org/wiki/Modern_C_porting
+[3] hosted at lists.linux.dev.
+
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/servers/slapd/syslog.c
++++ b/servers/slapd/syslog.c
+@@ -209,7 +209,7 @@ openlog(const char *ident, int logstat, int logfac)
+ }
+
+ void
+-closelog()
++closelog(void)
+ {
+ (void)close(LogFile);
+ LogFile = -1;
+--
+GitLab
diff --git a/net-nds/openldap/files/openldap-2.6.4-libressl.patch b/net-nds/openldap/files/openldap-2.6.4-libressl.patch
new file mode 100644
index 0000000..48a8a43
--- /dev/null
+++ b/net-nds/openldap/files/openldap-2.6.4-libressl.patch
@@ -0,0 +1,38 @@
+https://bugs.gentoo.org/903001
+https://bugs.openldap.org/show_bug.cgi?id=10039
+https://git.openldap.org/openldap/openldap/-/merge_requests/613
+https://git.openldap.org/openldap/openldap/-/commit/cb73e60a49f85bf5207b2fd0f557013be29ac072
+
+From cb73e60a49f85bf5207b2fd0f557013be29ac072 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Wed, 12 Apr 2023 12:55:46 -0700
+Subject: [PATCH] ITS#10039 Test for SSL_CTX_set_ciphersuites()
+
+When configuring OpenLDAP using --with-tls=openssl with LibreSSL the
+configure will fail to detect SSL_export_keyring_material_early() since
+LibreSSL doesn't support this function yet. However OpenLDAP doesn't
+actually use this function and only checks for it to ensure a modern
+OpenSSL API is used. This can be easily solved by checking for an
+equivalent modern OpenSSL function which both LibreSSL and OpenSSL both
+support such as SSL_CTX_set_ciphersuites(). Doing this allows the build
+and tests to succeed with modern LibreSSL versions. This was tested with
+LibreSSL >= 3.6.
+
+Bug: https://bugs.openldap.org/show_bug.cgi?id=10039
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 2cf28ef346..c4e2a905e2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1243,7 +1243,7 @@ if test $ol_with_tls = openssl || test $ol_with_tls = auto ; then
+ [#endif]])],
+ , [AC_MSG_FAILURE([OpenSSL 1.1.1 or newer required])])
+
+- AC_CHECK_LIB(ssl, SSL_export_keying_material_early,
++ AC_CHECK_LIB(ssl, SSL_CTX_set_ciphersuites,
+ [have_openssl=yes], [have_openssl=no],
+ [-lcrypto])
+
diff --git a/net-nds/openldap/files/slapd-2.6.1.service b/net-nds/openldap/files/slapd-2.6.1.service
new file mode 100644
index 0000000..ff571d2
--- /dev/null
+++ b/net-nds/openldap/files/slapd-2.6.1.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=OpenLDAP Server Daemon
+After=network.target
+
+[Service]
+Type=notify
+PIDFile=/run/openldap/slapd.pid
+ExecStartPre=/usr/sbin/slaptest -Q -u $SLAPD_OPTIONS
+ExecStart=/usr/lib/openldap/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS
+NotifyAccess=all
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-nds/openldap/files/slapd-confd-2.4.28-r1 b/net-nds/openldap/files/slapd-confd-2.4.28-r1
new file mode 100644
index 0000000..ef19899
--- /dev/null
+++ b/net-nds/openldap/files/slapd-confd-2.4.28-r1
@@ -0,0 +1,26 @@
+# conf.d file for openldap
+#
+# To enable both the standard unciphered server and the ssl encrypted
+# one uncomment this line or set any other server starting options
+# you may desire.
+
+# If you have multiple slapd instances per #376699, this will provide a default config
+INSTANCE="openldap${SVCNAME#slapd}"
+
+# If you use the classical configuration file:
+OPTS_CONF="-f /etc/${INSTANCE}/slapd.conf"
+# Uncomment this instead to use the new slapd.d configuration directory for openldap 2.3
+#OPTS_CONF="-F /etc/${INSTANCE}/slapd.d"
+# (the OPTS_CONF variable is also passed to slaptest during startup)
+
+OPTS="${OPTS_CONF} -h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
+# Optional connectionless LDAP:
+#OPTS="${OPTS_CONF} -h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock cldap://'"
+
+# If you change the above listen statement to bind on a specific IP for
+# listening, you should ensure that interface is up here (change eth0 as
+# needed).
+#rc_need="net.eth0"
+
+# Specify the kerberos keytab file
+#KRB5_KTNAME=/etc/openldap/krb5-ldap.keytab
diff --git a/net-nds/openldap/files/slapd-confd-2.6.1 b/net-nds/openldap/files/slapd-confd-2.6.1
new file mode 100644
index 0000000..9e7babb
--- /dev/null
+++ b/net-nds/openldap/files/slapd-confd-2.6.1
@@ -0,0 +1,26 @@
+# conf.d file for openldap
+#
+# To enable both the standard unciphered server and the ssl encrypted
+# one uncomment this line or set any other server starting options
+# you may desire.
+
+# If you have multiple slapd instances per #376699, this will provide a default config
+INSTANCE="openldap${SVCNAME#slapd}"
+
+# If you use the classical configuration file:
+OPTS_CONF="-f /etc/${INSTANCE}/slapd.conf"
+# Uncomment this instead to use the new slapd.d configuration directory for openldap 2.3
+#OPTS_CONF="-F /etc/${INSTANCE}/slapd.d"
+# (the OPTS_CONF variable is also passed to slaptest during startup)
+
+OPTS="${OPTS_CONF} -h 'ldaps:// ldap:// ldapi://%2frun%2fopenldap%2fslapd.sock'"
+# Optional connectionless LDAP:
+#OPTS="${OPTS_CONF} -h 'ldaps:// ldap:// ldapi://%2frun%2fopenldap%2fslapd.sock cldap://'"
+
+# If you change the above listen statement to bind on a specific IP for
+# listening, you should ensure that interface is up here (change eth0 as
+# needed).
+#rc_need="net.eth0"
+
+# Specify the kerberos keytab file
+#KRB5_KTNAME=/etc/openldap/krb5-ldap.keytab
diff --git a/net-nds/openldap/files/slapd-initd-2.4.40-r2 b/net-nds/openldap/files/slapd-initd-2.4.40-r2
new file mode 100644
index 0000000..bf408e3
--- /dev/null
+++ b/net-nds/openldap/files/slapd-initd-2.4.40-r2
@@ -0,0 +1,64 @@
+#!/sbin/openrc-run
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+extra_commands="checkconfig"
+
+[ -z "$INSTANCE" ] && INSTANCE="openldap${SVCNAME#slapd}"
+PIDDIR=/run/openldap
+PIDFILE=$PIDDIR/$SVCNAME.pid
+
+depend() {
+ need net
+ before dbus hald avahi-daemon
+ provide ldap
+}
+
+start() {
+ checkpath -q -d ${PIDDIR} -o ldap:ldap
+ if ! checkconfig -Q ; then
+ eerror "There is a problem with your slapd.conf!"
+ return 1
+ fi
+ ebegin "Starting ldap-server"
+ [ -n "$KRB5_KTNAME" ] && export KRB5_KTNAME
+ eval start-stop-daemon --start --pidfile ${PIDFILE} --exec /usr/lib/openldap/slapd -- -u ldap -g ldap "${OPTS}"
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping ldap-server"
+ start-stop-daemon --stop --signal 2 --quiet --pidfile ${PIDFILE}
+ eend $?
+}
+
+checkconfig() {
+ # checks requested by bug #502948
+ # Step 1: extract the last valid config file or config dir
+ set -- $OPTS
+ while [ -n "$*" ]; do
+ opt=$1 ; shift
+ if [ "$opt" = "-f" -o "$opt" = "-F" ] ; then
+ CONF=$1
+ shift
+ fi
+ done
+ set --
+ # Fallback
+ CONF=${CONF-/etc/openldap/slapd.conf}
+ [ -d $CONF ] && CONF=${CONF}/*
+ DBDIRS=`eval awk '"/^(directory|olcDbDirectory:)/{print \\$2}"' $CONF`
+ for d in $DBDIRS; do
+ if [ ! -d $d ]; then
+ eerror "Directory $d in config does not exist!"
+ return 1
+ fi
+ /usr/bin/find $d ! -name DB_CONFIG ! -user ldap -o ! -group ldap |grep -sq .
+ if [ $? -ne 0 ]; then
+ ewarn "You have files in $d not owned by the ldap user, you must ensure they are accessible to the slapd instance!"
+ fi
+ [ ! -e $d/DB_CONFIG ] && ewarn "$d/DB_CONFIG does not exist, slapd performance may be sub-optimal"
+ done
+ # now test the config fully
+ /usr/sbin/slaptest -u "$@" ${OPTS_CONF}
+}
diff --git a/net-nds/openldap/files/slapd.service b/net-nds/openldap/files/slapd.service
new file mode 100644
index 0000000..3427b87
--- /dev/null
+++ b/net-nds/openldap/files/slapd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=OpenLDAP Server Daemon
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/openldap/slapd.pid
+ExecStartPre=/usr/sbin/slaptest -Q -u $SLAPD_OPTIONS
+ExecStart=/usr/lib/openldap/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-nds/openldap/files/slapd.service.conf b/net-nds/openldap/files/slapd.service.conf
new file mode 100644
index 0000000..812ea68
--- /dev/null
+++ b/net-nds/openldap/files/slapd.service.conf
@@ -0,0 +1,12 @@
+[Service]
+# Use the classical configuration file:
+#Environment="SLAPD_OPTIONS=-f /etc/openldap/slapd.conf"
+# Use the slapd configuration directory:
+#Environment="SLAPD_OPTIONS=-F /etc/openldap/slapd.d"
+
+Environment="SLAPD_URLS=ldaps:/// ldap:/// ldapi:///"
+# Other examples:
+#Environment="SLAPD_URLS=ldap://127.0.0.1/ ldap://10.0.0.1:1389/ cldap:///"
+
+# Specify the kerberos keytab file
+#Environment=KRB5_KTNAME=/etc/openldap/krb5-ldap.keytab
diff --git a/net-nds/openldap/files/slapd.tmpfilesd b/net-nds/openldap/files/slapd.tmpfilesd
new file mode 100644
index 0000000..634cea1
--- /dev/null
+++ b/net-nds/openldap/files/slapd.tmpfilesd
@@ -0,0 +1,2 @@
+# openldap runtime directory for slapd.arg and slapd.pid
+d /run/openldap 0755 ldap ldap -
diff --git a/net-nds/openldap/metadata.xml b/net-nds/openldap/metadata.xml
new file mode 100644
index 0000000..115e7b6
--- /dev/null
+++ b/net-nds/openldap/metadata.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>ldap-bugs@gentoo.org</email>
+ </maintainer>
+ <use>
+ <flag name="argon2">Enable password hashing algorithm from <pkg>app-crypt/argon2</pkg></flag>
+ <flag name="autoca">Automatic Certificate Authority overlay</flag>
+ <flag name="cleartext">Enable use of cleartext passwords</flag>
+ <flag name="experimental">Enable experimental backend options</flag>
+ <flag name="kinit">Enable support for kerberos init</flag>
+ <flag name="odbc">Enable ODBC and SQL backend options</flag>
+ <flag name="overlays">Enable contributed OpenLDAP overlays</flag>
+ <flag name="smbkrb5passwd">Enable overlay for syncing ldap, unix and lanman passwords</flag>
+ <flag name="minimal">Build libraries &amp; userspace tools only. Does not install any server code</flag>
+ <flag name="pbkdf2">Enable support for pbkdf2 passwords</flag>
+ <flag name="sha2">Enable support for pw-sha2 password hashes</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://bugs.openldap.org/</bugs-to>
+ <remote-id type="cpe">cpe:/a:openldap:openldap</remote-id>
+ <remote-id type="github">openldap/openldap</remote-id>
+ <remote-id type="gitlab">openldap/openldap</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-nds/openldap/openldap-2.6.3-r7.ebuild b/net-nds/openldap/openldap-2.6.3-r7.ebuild
new file mode 100644
index 0000000..493fe72
--- /dev/null
+++ b/net-nds/openldap/openldap-2.6.3-r7.ebuild
@@ -0,0 +1,828 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+# Re cleanups:
+# 2.5.x is an LTS release so we want to keep it for a while.
+
+inherit autotools flag-o-matic multilib multilib-minimal preserve-libs ssl-cert toolchain-funcs systemd tmpfiles
+
+MY_PV="$(ver_rs 1-2 _)"
+
+BIS_PN=rfc2307bis.schema
+BIS_PV=20140524
+BIS_P="${BIS_PN}-${BIS_PV}"
+
+DESCRIPTION="LDAP suite of application and development tools"
+HOMEPAGE="https://www.openldap.org/"
+SRC_URI="
+ https://gitlab.com/openldap/${PN}/-/archive/OPENLDAP_REL_ENG_${MY_PV}/${PN}-OPENLDAP_REL_ENG_${MY_PV}.tar.gz
+ mirror://gentoo/${BIS_P}
+"
+S="${WORKDIR}"/${PN}-OPENLDAP_REL_ENG_${MY_PV}
+
+LICENSE="OPENLDAP GPL-2"
+# Subslot added for bug #835654
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ~ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux"
+
+IUSE_DAEMON="argon2 +cleartext crypt experimental minimal samba tcpd"
+IUSE_OVERLAY="overlays perl autoca"
+IUSE_OPTIONAL="debug gnutls iodbc ipv6 odbc sasl ssl selinux static-libs +syslog test"
+IUSE_CONTRIB="kerberos kinit pbkdf2 sha2 smbkrb5passwd"
+IUSE_CONTRIB="${IUSE_CONTRIB} cxx"
+IUSE="systemd ${IUSE_DAEMON} ${IUSE_BACKEND} ${IUSE_OVERLAY} ${IUSE_OPTIONAL} ${IUSE_CONTRIB}"
+REQUIRED_USE="cxx? ( sasl )
+ pbkdf2? ( ssl )
+ test? ( cleartext sasl )
+ autoca? ( !gnutls )
+ ?? ( test minimal )
+ kerberos? ( ?? ( kinit smbkrb5passwd ) )"
+RESTRICT="!test? ( test )"
+
+# openssl is needed to generate lanman-passwords required by samba
+COMMON_DEPEND="
+ kernel_linux? ( sys-apps/util-linux )
+ ssl? (
+ !gnutls? (
+ >=dev-libs/openssl-1.0.1h-r2:0=[${MULTILIB_USEDEP}]
+ )
+ gnutls? (
+ >=net-libs/gnutls-2.12.23-r6:=[${MULTILIB_USEDEP}]
+ >=dev-libs/libgcrypt-1.5.3:0=[${MULTILIB_USEDEP}]
+ )
+ )
+ sasl? ( dev-libs/cyrus-sasl:= )
+ !minimal? (
+ dev-libs/libltdl
+ sys-fs/e2fsprogs
+ >=dev-db/lmdb-0.9.18:=
+ argon2? ( app-crypt/argon2:= )
+ crypt? ( virtual/libcrypt:= )
+ tcpd? ( sys-apps/tcp-wrappers )
+ odbc? ( !iodbc? ( dev-db/unixODBC )
+ iodbc? ( dev-db/libiodbc ) )
+ perl? ( dev-lang/perl:=[-build(-)] )
+ samba? (
+ dev-libs/openssl:0=
+ )
+ smbkrb5passwd? (
+ dev-libs/openssl:0=
+ kerberos? ( app-crypt/heimdal )
+ )
+ kerberos? (
+ virtual/krb5
+ kinit? ( !app-crypt/heimdal )
+ )
+ )
+"
+DEPEND="${COMMON_DEPEND}
+ sys-apps/groff
+"
+RDEPEND="${COMMON_DEPEND}
+ selinux? ( sec-policy/selinux-ldap )
+"
+
+# The user/group are only used for running daemons which are
+# disabled in minimal builds, so elide the accounts too.
+BDEPEND="!minimal? (
+ acct-group/ldap
+ acct-user/ldap
+)
+"
+
+# for tracking versions
+OPENLDAP_VERSIONTAG=".version-tag"
+OPENLDAP_DEFAULTDIR_VERSIONTAG="/var/lib/openldap-data"
+
+MULTILIB_WRAPPED_HEADERS=(
+ # USE=cxx
+ /usr/include/LDAPAsynConnection.h
+ /usr/include/LDAPAttrType.h
+ /usr/include/LDAPAttribute.h
+ /usr/include/LDAPAttributeList.h
+ /usr/include/LDAPConnection.h
+ /usr/include/LDAPConstraints.h
+ /usr/include/LDAPControl.h
+ /usr/include/LDAPControlSet.h
+ /usr/include/LDAPEntry.h
+ /usr/include/LDAPEntryList.h
+ /usr/include/LDAPException.h
+ /usr/include/LDAPExtResult.h
+ /usr/include/LDAPMessage.h
+ /usr/include/LDAPMessageQueue.h
+ /usr/include/LDAPModList.h
+ /usr/include/LDAPModification.h
+ /usr/include/LDAPObjClass.h
+ /usr/include/LDAPRebind.h
+ /usr/include/LDAPRebindAuth.h
+ /usr/include/LDAPReferenceList.h
+ /usr/include/LDAPResult.h
+ /usr/include/LDAPSaslBindResult.h
+ /usr/include/LDAPSchema.h
+ /usr/include/LDAPSearchReference.h
+ /usr/include/LDAPSearchResult.h
+ /usr/include/LDAPSearchResults.h
+ /usr/include/LDAPUrl.h
+ /usr/include/LDAPUrlList.h
+ /usr/include/LdifReader.h
+ /usr/include/LdifWriter.h
+ /usr/include/SaslInteraction.h
+ /usr/include/SaslInteractionHandler.h
+ /usr/include/StringList.h
+ /usr/include/TlsOptions.h
+)
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.4.28-fix-dash.patch
+ "${FILESDIR}"/${PN}-2.6.1-system-mdb.patch
+ "${FILESDIR}"/${PN}-2.6.1-cloak.patch
+ "${FILESDIR}"/${PN}-2.6.1-flags.patch
+ "${FILESDIR}"/${PN}-2.6.1-fix-missing-mapping.patch
+ "${FILESDIR}"/${PN}-2.6.1-fix-bashism-configure.patch
+ "${FILESDIR}"/${PN}-2.6.3-clang16.patch
+ "${FILESDIR}"/${PN}-2.6.4-libressl.patch
+)
+
+openldap_filecount() {
+ local dir="$1"
+ find "${dir}" -type f ! -name '.*' ! -name 'DB_CONFIG*' | wc -l
+}
+
+openldap_find_versiontags() {
+ # scan for all datadirs
+ local openldap_datadirs=()
+ if [[ -f "${EROOT}"/etc/openldap/slapd.conf ]]; then
+ openldap_datadirs=( $(awk '{if($1 == "directory") print $2 }' "${EROOT}"/etc/openldap/slapd.conf) )
+ fi
+ openldap_datadirs+=( ${OPENLDAP_DEFAULTDIR_VERSIONTAG} )
+
+ einfo
+ einfo "Scanning datadir(s) from slapd.conf and"
+ einfo "the default installdir for Versiontags"
+ einfo "(${OPENLDAP_DEFAULTDIR_VERSIONTAG} may appear twice)"
+ einfo
+
+ # scan datadirs if we have a version tag
+ openldap_found_tag=0
+ have_files=0
+ for each in ${openldap_datadirs[@]} ; do
+ CURRENT_TAGDIR="${EROOT}$(sed "s:\/::" <<< ${each})"
+ CURRENT_TAG="${CURRENT_TAGDIR}/${OPENLDAP_VERSIONTAG}"
+ if [[ -d "${CURRENT_TAGDIR}" ]] && [[ "${openldap_found_tag}" == 0 ]] ; then
+ einfo "- Checking ${each}..."
+ if [[ -r "${CURRENT_TAG}" ]] ; then
+ # yey, we have one :)
+ einfo " Found Versiontag in ${each}"
+ source "${CURRENT_TAG}"
+ if [[ "${OLDPF}" == "" ]] ; then
+ eerror "Invalid Versiontag found in ${CURRENT_TAGDIR}"
+ eerror "Please delete it"
+ eerror
+ die "Please kill the invalid versiontag in ${CURRENT_TAGDIR}"
+ fi
+
+ OLD_MAJOR=$(ver_cut 2-3 ${OLDPF})
+
+ [[ "$(openldap_filecount ${CURRENT_TAGDIR})" -gt 0 ]] && have_files=1
+
+ # are we on the same branch?
+ if [[ "${OLD_MAJOR}" != "${PV:0:3}" ]] ; then
+ ewarn " Versiontag doesn't match current major release!"
+ if [[ "${have_files}" == "1" ]] ; then
+ eerror " Versiontag says other major and you (probably) have datafiles!"
+ echo
+ openldap_upgrade_howto
+ else
+ einfo " No real problem, seems there's no database."
+ fi
+ else
+ einfo " Versiontag is fine here :)"
+ fi
+ else
+ einfo " Non-tagged dir ${each}"
+ [[ "$(openldap_filecount ${each})" -gt 0 ]] && have_files=1
+ if [[ "${have_files}" == "1" ]] ; then
+ einfo " EEK! Non-empty non-tagged datadir, counting `ls -a ${each} | wc -l` files"
+ echo
+
+ eerror
+ eerror "Your OpenLDAP Installation has a non tagged datadir that"
+ eerror "possibly contains a database at ${CURRENT_TAGDIR}"
+ eerror
+ eerror "Please export data if any entered and empty or remove"
+ eerror "the directory, installation has been stopped so you"
+ eerror "can take required action"
+ eerror
+ eerror "For a HOWTO on exporting the data, see instructions in the ebuild"
+ eerror
+ openldap_upgrade_howto
+ die "Please move the datadir ${CURRENT_TAGDIR} away"
+ fi
+ fi
+ einfo
+ fi
+ done
+ [[ "${have_files}" == "1" ]] && einfo "DB files present" || einfo "No DB files present"
+
+ # Now we must check for the major version of sys-libs/db linked against.
+ # TODO: remove this as we dropped bdb support (gone upstream) in 2.6.1?
+ SLAPD_PATH="${EROOT}/usr/$(get_libdir)/openldap/slapd"
+ if [[ "${have_files}" == "1" ]] && [[ -f "${SLAPD_PATH}" ]]; then
+ OLDVER="$(/usr/bin/ldd ${SLAPD_PATH} \
+ | awk '/libdb-/{gsub("^libdb-","",$1);gsub(".so$","",$1);print $1}')"
+ local fail=0
+
+ # This will not cover detection of cn=Config based configuration, but
+ # it's hopefully good enough.
+ if grep -sq '^backend.*shell' "${EROOT}"/etc/openldap/slapd.conf; then
+ eerror " OpenLDAP >= 2.5.x has dropped support for Shell backend."
+ eerror " You will need to migrate per upstream's migration notes"
+ eerror " at https://www.openldap.org/doc/admin25/appendix-upgrading.html."
+ eerror " Your existing database will not be accessible until it is"
+ eerror " converted away from backend shell!"
+ echo
+ fail=1
+ fi
+ if has_version "${CATEGORY}/${PN}[berkdb]" || grep -sq '^backend.*(bdb|hdb)' /etc/openldap/slapd.conf; then
+ eerror " OpenLDAP >= 2.5.x has dropped support for Berkeley DB."
+ eerror " You will need to migrate per upstream's migration notes"
+ eerror " at https://www.openldap.org/doc/admin25/appendix-upgrading.html."
+ eerror " Your existing database will not be accessible until it is"
+ eerror " converted to mdb!"
+ echo
+ fail=1
+ elif [[ -z "${OLDVER}" ]] && [[ -z "${NEWVER}" ]]; then
+ :
+ # Nothing wrong here.
+ elif [[ -z "${OLDVER}" ]] && [[ -n "${NEWVER}" ]]; then
+ eerror " Your existing version of OpenLDAP was not built against"
+ eerror " any version of sys-libs/db, but the new one will build"
+ eerror " against ${NEWVER} and your database may be inaccessible."
+ echo
+ fail=1
+ elif [[ -n "${OLDVER}" ]] && [[ -z "${NEWVER}" ]]; then
+ eerror " Your existing version of OpenLDAP was built against"
+ eerror " sys-libs/db:${OLDVER}, but the new one will not be"
+ eerror " built against any version and your database may be"
+ eerror " inaccessible."
+ echo
+ fail=1
+ elif [[ "${OLDVER}" != "${NEWVER}" ]]; then
+ eerror " Your existing version of OpenLDAP was built against"
+ eerror " sys-libs/db:${OLDVER}, but the new one will build against"
+ eerror " ${NEWVER} and your database would be inaccessible."
+ echo
+ fail=1
+ fi
+ [[ "${fail}" == "1" ]] && openldap_upgrade_howto
+ fi
+
+ echo
+ einfo
+ einfo "All datadirs are fine, proceeding with merge now..."
+ einfo
+}
+
+openldap_upgrade_howto() {
+ local d l i
+ eerror
+ eerror "A (possible old) installation of OpenLDAP was detected,"
+ eerror "installation will not proceed for now."
+ eerror
+ eerror "As major version upgrades can corrupt your database,"
+ eerror "you need to dump your database and re-create it afterwards."
+ eerror
+ eerror "Additionally, rebuilding against different major versions of the"
+ eerror "sys-libs/db libraries will cause your database to be inaccessible."
+ eerror ""
+ d="$(date -u +%s)"
+ l="/root/ldapdump.${d}"
+ i="${l}.raw"
+ eerror " 1. /etc/init.d/slapd stop"
+ eerror " 2. slapcat -l ${i}"
+ eerror " 3. grep -E -v '^(entry|context)CSN:' <${i} >${l}"
+ eerror " 4. mv /var/lib/openldap-data/ /var/lib/openldap-data-backup/"
+ eerror " 5. emerge --update \=net-nds/${PF}"
+ eerror " 6. etc-update, and ensure that you apply the changes"
+ eerror " 7. slapadd -l ${l}"
+ eerror " 8. chown ldap:ldap /var/lib/openldap-data/*"
+ eerror " 9. /etc/init.d/slapd start"
+ eerror "10. Check that your data is intact."
+ eerror "11. Set up the new replication system."
+ eerror
+ if [[ "${FORCE_UPGRADE}" != "1" ]]; then
+ die "You need to upgrade your database first"
+ else
+ eerror "You have the magical FORCE_UPGRADE=1 in place."
+ eerror "Don't say you weren't warned about data loss."
+ fi
+}
+
+pkg_setup() {
+ if ! use sasl && use cxx ; then
+ die "To build the ldapc++ library you must emerge openldap with sasl support"
+ fi
+ # Bug #322787
+ if use minimal && ! has_version "net-nds/openldap" ; then
+ einfo "No datadir scan needed, openldap not installed"
+ elif use minimal && has_version 'net-nds/openldap[minimal]' ; then
+ einfo "Skipping scan for previous datadirs as requested by minimal useflag"
+ else
+ openldap_find_versiontags
+ fi
+}
+
+src_prepare() {
+ rm -r libraries/liblmdb || die 'could not removed bundled lmdb directory'
+
+ for filename in doc/drafts/draft-ietf-ldapext-acl-model-xx.txt; do
+ iconv -f iso-8859-1 -t utf-8 "$filename" > "$filename.utf8"
+ mv "$filename.utf8" "$filename"
+ done
+
+ default
+
+ sed -i \
+ -e "s:\$(localstatedir)/run:${EPREFIX}/run:" \
+ -e '/MKDIR.*.(DESTDIR)\/run/d' \
+ -e '/MKDIR.*.(DESTDIR).*.(runstatedir)/d' \
+ servers/slapd/Makefile.in || die 'adjusting slapd Makefile.in failed'
+
+ pushd build &>/dev/null || die "pushd build"
+ einfo "Making sure upstream build strip does not do stripping too early"
+ sed -i.orig \
+ -e '/^STRIP/s,-s,,g' \
+ top.mk || die "Failed to remove to early stripping"
+ popd &>/dev/null || die
+
+ eautoreconf
+ multilib_copy_sources
+}
+
+build_contrib_module() {
+ # <dir> [<target>]
+ pushd "${S}/contrib/slapd-modules/$1" &>/dev/null || die "pushd contrib/slapd-modules/$1"
+ einfo "Compiling contrib-module: $1"
+ local target="${2:-all}"
+ emake \
+ LDAP_BUILD="${BUILD_DIR}" prefix="${EPREFIX}/usr" \
+ CC="${CC}" libexecdir="${EPREFIX}/usr/$(get_libdir)/openldap" \
+ "$target"
+ popd &>/dev/null || die
+}
+
+multilib_src_configure() {
+ # Optional Features
+ myconf+=(
+ --enable-option-checking
+ $(use_enable debug)
+ --enable-dynamic
+ $(use_enable syslog)
+ $(use_enable ipv6)
+ --enable-local
+ )
+
+ # Optional Packages
+ myconf+=(
+ --without-fetch
+ )
+
+ if ! use minimal && multilib_is_native_abi; then
+ # SLAPD (Standalone LDAP Daemon) Options
+ # overlay chaining requires '--enable-ldap' #296567
+ # see https://www.openldap.org/doc/admin26/overlays.html#Chaining
+ myconf+=(
+ --enable-ldap=yes
+ --enable-slapd
+ $(use_enable cleartext)
+ $(use_enable crypt)
+ $(multilib_native_use_enable sasl spasswd)
+ --disable-slp
+ $(use_enable tcpd wrappers)
+ )
+ if use experimental ; then
+ # connectionless ldap per bug #342439
+ # connectionless is a unsupported feature according to Howard Chu
+ # see https://bugs.openldap.org/show_bug.cgi?id=9739
+ append-cppflags -DLDAP_CONNECTIONLESS
+
+ myconf+=(
+ --enable-dynacl
+ # ACI build as dynamic module not supported (yet)
+ --enable-aci=yes
+ )
+ fi
+
+ for option in modules rlookups slapi; do
+ myconf+=( --enable-${option} )
+ done
+
+ # static SLAPD backends
+ for backend in mdb; do
+ myconf+=( --enable-${backend}=yes )
+ done
+
+ # module SLAPD backends
+ for backend in asyncmeta dnssrv meta null passwd relay sock; do
+ # missing modules: wiredtiger (not available in portage)
+ myconf+=( --enable-${backend}=mod )
+ done
+
+ use perl && myconf+=( --enable-perl=mod )
+
+ if use odbc ; then
+ myconf+=( --enable-sql=mod )
+ if use iodbc ; then
+ myconf+=( --with-odbc="iodbc" )
+ append-cflags -I"${EPREFIX}"/usr/include/iodbc
+ else
+ myconf+=( --with-odbc="unixodbc" )
+ fi
+ fi
+
+ use overlays && myconf+=( --enable-overlays=mod )
+ use autoca && myconf+=( --enable-autoca=mod ) || myconf+=( --enable-autoca=no )
+ # compile-in the syncprov
+ myconf+=( --enable-syncprov=yes )
+
+ # SLAPD Password Module Options
+ myconf+=(
+ $(use_enable argon2)
+ )
+
+ # Optional Packages
+ myconf+=(
+ $(use_with systemd)
+ $(multilib_native_use_with sasl cyrus-sasl)
+ )
+ else
+ myconf+=(
+ --disable-backends
+ --disable-slapd
+ --disable-mdb
+ --disable-overlays
+ --disable-autoca
+ --disable-syslog
+ --without-systemd
+ )
+ fi
+
+ # Library Generation & Linking Options
+ myconf+=(
+ $(use_enable static-libs static)
+ --enable-shared
+ --enable-versioning
+ --with-pic
+ )
+
+ # some cross-compiling tests don't pan out well.
+ tc-is-cross-compiler && myconf+=(
+ --with-yielding-select=yes
+ )
+
+ local ssl_lib="no"
+ if use ssl || ( ! use minimal && use samba ) ; then
+ if use gnutls ; then
+ myconf+=( --with-tls="gnutls" )
+ else
+ # disable MD2 hash function
+ append-cflags -DOPENSSL_NO_MD2
+ myconf+=( --with-tls="openssl" )
+ fi
+ else
+ myconf+=( --with-tls="no" )
+ fi
+
+ tc-export AR CC CXX
+
+ ECONF_SOURCE="${S}" econf \
+ --libexecdir="${EPREFIX}"/usr/$(get_libdir)/openldap \
+ --localstatedir="${EPREFIX}"/var \
+ --runstatedir="${EPREFIX}"/run \
+ --sharedstatedir="${EPREFIX}"/var/lib \
+ "${myconf[@]}"
+
+ # argument '--runstatedir' seems to have no effect therefore this workaround
+ sed -i \
+ -e 's:^runstatedir=.*:runstatedir=${EPREFIX}/run:' \
+ configure contrib/ldapc++/configure contrib/ldaptcl/configure || die 'could not set runstatedir'
+
+ sed -i \
+ -e "s:/var/run/sasl2/mux:${EPREFIX}/run/sasl2/mux:" \
+ doc/guide/admin/security.sdf || die 'could not fix run path in doc'
+
+ emake depend
+}
+
+src_configure_cxx() {
+ # This needs the libraries built by the first build run.
+ # we have to run it AFTER the main build, not just after the main configure
+ local myconf_ldapcpp=(
+ --with-libldap="${E}/lib"
+ --with-ldap-includes="${S}/include"
+ )
+
+ mkdir -p "${BUILD_DIR}"/contrib/ldapc++ || die "could not create ${BUILD_DIR}/contrib/ldapc++ directory"
+ pushd "${BUILD_DIR}/contrib/ldapc++" &>/dev/null || die "pushd contrib/ldapc++"
+ local LDFLAGS=${LDFLAGS}
+ local CPPFLAGS=${CPPFLAGS}
+ append-ldflags -L"${BUILD_DIR}"/libraries/liblber/.libs \
+ -L"${BUILD_DIR}"/libraries/libldap/.libs
+ append-cppflags -I"${BUILD_DIR}"/include
+ ECONF_SOURCE=${S}/contrib/ldapc++ \
+ econf "${myconf_ldapcpp[@]}"
+ popd &>/dev/null || die "popd contrib/ldapc++"
+}
+
+multilib_src_compile() {
+ tc-export AR CC CXX
+ emake CC="$(tc-getCC)" SHELL="${EPREFIX}"/bin/sh
+
+ if ! use minimal && multilib_is_native_abi ; then
+ if use cxx ; then
+ einfo "Building contrib library: ldapc++"
+ src_configure_cxx
+ pushd "${BUILD_DIR}/contrib/ldapc++" &>/dev/null || die "pushd contrib/ldapc++"
+ emake
+ popd &>/dev/null || die
+ fi
+
+ if use smbkrb5passwd ; then
+ einfo "Building contrib-module: smbk5pwd"
+ pushd "${S}/contrib/slapd-modules/smbk5pwd" &>/dev/null || die "pushd contrib/slapd-modules/smbk5pwd"
+
+ MY_DEFS="-DDO_SHADOW"
+ if use samba ; then
+ MY_DEFS="${MY_DEFS} -DDO_SAMBA"
+ MY_KRB5_INC=""
+ fi
+ if use kerberos ; then
+ MY_DEFS="${MY_DEFS} -DDO_KRB5"
+ MY_KRB5_INC="$(krb5-config --cflags)"
+ fi
+
+ emake \
+ DEFS="${MY_DEFS}" \
+ KRB5_INC="${MY_KRB5_INC}" \
+ LDAP_BUILD="${BUILD_DIR}" \
+ libexecdir="${EPREFIX}/usr/$(get_libdir)/openldap"
+ popd &>/dev/null || die
+ fi
+
+ if use overlays ; then
+ einfo "Building contrib-module: samba4"
+ pushd "${S}/contrib/slapd-modules/samba4" &>/dev/null || die "pushd contrib/slapd-modules/samba4"
+
+ emake \
+ LDAP_BUILD="${BUILD_DIR}" \
+ CC="$(tc-getCC)" libexecdir="${EPREFIX}/usr/$(get_libdir)/openldap"
+ popd &>/dev/null || die
+ fi
+
+ if use kerberos ; then
+ if use kinit ; then
+ build_contrib_module "kinit" "kinit.c" "kinit"
+ fi
+ build_contrib_module "passwd" "pw-kerberos.la"
+ fi
+
+ if use pbkdf2; then
+ build_contrib_module "passwd/pbkdf2"
+ fi
+
+ if use sha2 ; then
+ build_contrib_module "passwd/sha2"
+ fi
+
+ # We could build pw-radius if GNURadius would install radlib.h
+ build_contrib_module "passwd" "pw-netscape.la"
+
+ #build_contrib_module "acl" "posixgroup.la" # example code only
+ #build_contrib_module "acl" "gssacl.la" # example code only, also needs kerberos
+ build_contrib_module "addpartial"
+ build_contrib_module "allop"
+ build_contrib_module "allowed"
+ build_contrib_module "autogroup"
+ build_contrib_module "cloak"
+ # build_contrib_module "comp_match" # really complex, adds new external deps, questionable demand
+ build_contrib_module "denyop"
+ build_contrib_module "dsaschema"
+ build_contrib_module "dupent"
+ build_contrib_module "lastbind"
+ # lastmod may not play well with other overlays
+ build_contrib_module "lastmod"
+ build_contrib_module "noopsrch"
+ #build_contrib_module "nops" https://bugs.gentoo.org/641576
+ #build_contrib_module "nssov" RESO:LATER
+ build_contrib_module "trace"
+ # build slapi-plugins
+ pushd "${S}/contrib/slapi-plugins/addrdnvalues" &>/dev/null || die "pushd contrib/slapi-plugins/addrdnvalues"
+ einfo "Building contrib-module: addrdnvalues plugin"
+ $(tc-getCC) -shared \
+ -I"${BUILD_DIR}"/include \
+ -I../../../include \
+ ${CFLAGS} \
+ -fPIC \
+ ${LDFLAGS} \
+ -o libaddrdnvalues-plugin.so \
+ addrdnvalues.c || die "Building libaddrdnvalues-plugin.so failed"
+ popd &>/dev/null || die
+ fi
+}
+
+multilib_src_test() {
+ if multilib_is_native_abi; then
+ cd "tests"
+ pwd
+ # emake test => runs only lloadd & mdb, in serial; skips ldif,sql,wt,regression
+ # emake partests => runs ALL of the tests in parallel
+ # wt/WiredTiger is not supported in Gentoo
+ TESTS=( plloadd pmdb )
+ #TESTS+=( pldif ) # not done by default, so also exclude here
+ #use odbc && TESTS+=( psql ) # not done by default, so also exclude here
+ emake "${TESTS[@]}"
+ fi
+}
+
+multilib_src_install() {
+ emake CC="$(tc-getCC)" \
+ DESTDIR="${D}" SHELL="${EPREFIX}"/bin/sh install
+
+ if ! use minimal && multilib_is_native_abi; then
+ # openldap modules go here
+ # TODO: write some code to populate slapd.conf with moduleload statements
+ keepdir /usr/$(get_libdir)/openldap/openldap/
+
+ # initial data storage dir
+ keepdir /var/lib/openldap-data
+ use prefix || fowners ldap:ldap /var/lib/openldap-data
+ fperms 0700 /var/lib/openldap-data
+
+ echo "OLDPF='${PF}'" > "${ED}${OPENLDAP_DEFAULTDIR_VERSIONTAG}/${OPENLDAP_VERSIONTAG}"
+ echo "# do NOT delete this. it is used" >> "${ED}${OPENLDAP_DEFAULTDIR_VERSIONTAG}/${OPENLDAP_VERSIONTAG}"
+ echo "# to track versions for upgrading." >> "${ED}${OPENLDAP_DEFAULTDIR_VERSIONTAG}/${OPENLDAP_VERSIONTAG}"
+
+ # use our config
+ rm "${ED}"/etc/openldap/slapd.conf
+ insinto /etc/openldap
+ newins "${FILESDIR}"/${PN}-2.6.3-slapd-conf slapd.conf
+ configfile="${ED}"/etc/openldap/slapd.conf
+
+ # populate with built backends
+ einfo "populate config with built backends"
+ for x in "${ED}"/usr/$(get_libdir)/openldap/openldap/back_*.so; do
+ einfo "Adding $(basename ${x})"
+ sed -e "/###INSERTDYNAMICMODULESHERE###$/a# moduleload\t$(basename ${x})" -i "${configfile}" || die
+ done
+ sed -e "s:###INSERTDYNAMICMODULESHERE###$:# modulepath\t${EPREFIX}/usr/$(get_libdir)/openldap/openldap:" -i "${configfile}"
+ use prefix || fowners root:ldap /etc/openldap/slapd.conf
+ fperms 0640 /etc/openldap/slapd.conf
+ cp "${configfile}" "${configfile}".default || die
+
+ # install our own init scripts and systemd unit files
+ einfo "Install init scripts"
+ sed -e "s,/usr/lib/,/usr/$(get_libdir)/," "${FILESDIR}"/slapd-initd-2.4.40-r2 > "${T}"/slapd || die
+ doinitd "${T}"/slapd
+ newconfd "${FILESDIR}"/slapd-confd-2.6.1 slapd
+
+ if use systemd; then
+ # The systemd unit uses Type=notify, so it is useless without USE=systemd
+ einfo "Install systemd service"
+ rm -rf "${ED}"/{,usr/}lib/systemd
+ sed -e "s,/usr/lib/,/usr/$(get_libdir)/," "${FILESDIR}"/slapd-2.6.1.service > "${T}"/slapd.service || die
+ systemd_dounit "${T}"/slapd.service
+ systemd_install_serviced "${FILESDIR}"/slapd.service.conf
+ newtmpfiles "${FILESDIR}"/slapd.tmpfilesd slapd.conf
+ fi
+
+ # if built without SLP, we don't need to be before avahi
+ sed -i \
+ -e '/before/{s/avahi-daemon//g}' \
+ "${ED}"/etc/init.d/slapd \
+ || die
+
+ if use cxx ; then
+ einfo "Install the ldapc++ library"
+ cd "${BUILD_DIR}/contrib/ldapc++" || die
+ emake DESTDIR="${D}" libexecdir="${EPREFIX}/usr/$(get_libdir)/openldap" install
+ cd "${S}"/contrib/ldapc++ || die
+ newdoc README ldapc++-README
+ fi
+
+ if use smbkrb5passwd ; then
+ einfo "Install the smbk5pwd module"
+ cd "${S}/contrib/slapd-modules/smbk5pwd" || die
+ emake DESTDIR="${D}" \
+ LDAP_BUILD="${BUILD_DIR}" \
+ libexecdir="${EPREFIX}/usr/$(get_libdir)/openldap" install
+ newdoc README smbk5pwd-README
+ fi
+
+ if use overlays ; then
+ einfo "Install the samba4 module"
+ cd "${S}/contrib/slapd-modules/samba4" || die
+ emake DESTDIR="${D}" \
+ LDAP_BUILD="${BUILD_DIR}" \
+ libexecdir="${EPREFIX}/usr/$(get_libdir)/openldap" install
+ newdoc README samba4-README
+ fi
+
+ einfo "Installing contrib modules"
+ cd "${S}/contrib/slapd-modules" || die
+ for l in */*.la */*/*.la; do
+ [[ -e ${l} ]] || continue
+ libtool --mode=install cp ${l} \
+ "${ED}"/usr/$(get_libdir)/openldap/openldap || \
+ die "installing ${l} failed"
+ done
+
+ dodoc "${FILESDIR}"/DB_CONFIG.fast.example
+ docinto contrib
+ doman */*.5
+ #newdoc acl/README*
+ newdoc addpartial/README addpartial-README
+ newdoc allop/README allop-README
+ newdoc allowed/README allowed-README
+ newdoc autogroup/README autogroup-README
+ newdoc dsaschema/README dsaschema-README
+ newdoc passwd/README passwd-README
+ cd "${S}/contrib/slapi-plugins" || die
+ insinto /usr/$(get_libdir)/openldap/openldap
+ doins */*.so
+ docinto contrib
+ newdoc addrdnvalues/README addrdnvalues-README
+
+ insinto /etc/openldap/schema
+ newins "${DISTDIR}"/${BIS_P} ${BIS_PN}
+
+ docinto back-sock ; dodoc "${S}"/servers/slapd/back-sock/searchexample*
+ docinto back-perl ; dodoc "${S}"/servers/slapd/back-perl/SampleLDAP.pm
+
+ dosbin "${S}"/contrib/slapd-tools/statslog
+ newdoc "${S}"/contrib/slapd-tools/README README.statslog
+ fi
+
+ if ! use static-libs ; then
+ find "${ED}" \( -name '*.a' -o -name '*.la' \) -delete || die
+ fi
+}
+
+multilib_src_install_all() {
+ dodoc ANNOUNCEMENT CHANGES COPYRIGHT README
+ docinto rfc ; dodoc doc/rfc/*.txt
+}
+
+pkg_preinst() {
+ # keep old libs if any
+ preserve_old_lib /usr/$(get_libdir)/{liblber,libldap,libldap_r}-2.4$(get_libname 0)
+ # bug 440470, only display the getting started help there was no openldap before,
+ # or we are going to a non-minimal build
+ ! has_version net-nds/openldap || has_version 'net-nds/openldap[minimal]'
+ OPENLDAP_PRINT_MESSAGES=$((! $?))
+}
+
+pkg_postinst() {
+ if ! use minimal ; then
+ if use systemd; then
+ tmpfiles_process slapd.conf
+ fi
+
+ # You cannot build SSL certificates during src_install that will make
+ # binary packages containing your SSL key, which is both a security risk
+ # and a misconfiguration if multiple machines use the same key and cert.
+ if use ssl; then
+ install_cert /etc/openldap/ssl/ldap
+ use prefix || chown ldap:ldap "${EROOT}"/etc/openldap/ssl/ldap.*
+ ewarn "Self-signed SSL certificates are treated harshly by OpenLDAP 2.[12]"
+ ewarn "Self-signed SSL certificates are treated harshly by OpenLDAP 2.[12]"
+ ewarn "add 'TLS_REQCERT allow' if you want to use them."
+ fi
+
+ if use prefix; then
+ # Warn about prefix issues with slapd
+ eerror "slapd might NOT be usable on Prefix systems as it requires root privileges"
+ eerror "to start up, and requires that certain files directories be owned by"
+ eerror "ldap:ldap. As Prefix does not support changing ownership of files and"
+ eerror "directories, you will have to manually fix this yourself."
+ fi
+
+ # These lines force the permissions of various content to be correct
+ if [[ -d "${EROOT}"/var/run/openldap ]]; then
+ use prefix || { chown ldap:ldap "${EROOT}"/var/run/openldap || die; }
+ chmod 0755 "${EROOT}"/var/run/openldap || die
+ fi
+ use prefix || chown root:ldap "${EROOT}"/etc/openldap/slapd.conf{,.default}
+ chmod 0640 "${EROOT}"/etc/openldap/slapd.conf{,.default} || die
+ use prefix || chown ldap:ldap "${EROOT}"/var/lib/openldap-data
+ fi
+
+ if has_version 'net-nds/openldap[-minimal]' && ((${OPENLDAP_PRINT_MESSAGES})); then
+ elog "Getting started using OpenLDAP? There is some documentation available:"
+ elog "Gentoo Guide to OpenLDAP Authentication"
+ elog "(https://wiki.gentoo.org/wiki/Centralized_authentication_using_OpenLDAP)"
+ fi
+
+ preserve_old_lib_notify /usr/$(get_libdir)/{liblber,libldap,libldap_r}-2.4$(get_libname 0)
+}
diff --git a/net-vpn/openvpn/Manifest b/net-vpn/openvpn/Manifest
new file mode 100644
index 0000000..00d1421
--- /dev/null
+++ b/net-vpn/openvpn/Manifest
@@ -0,0 +1,4 @@
+DIST openvpn-2.5.2.tar.xz 1134644 BLAKE2B 59aa0c540894de4cfb37ad4c3139eb69a35d317e3de490f71b185a979989c1253221091a30bfb2ee5243fcfae190605e9787051de079eee79e57bd63392c42d5 SHA512 ae2cac00ae4b9e06e7e70b268ed47d36bbb45409650175e507d5bfa12b0a4f24bccc64f2494d1563f9269c8076d0f753a492f01ea33ce376ba00b7cdcb5c7bd0
+DIST openvpn-2.5.6.tar.xz 1150352 BLAKE2B 509821eca9d40c5579700e05e560b906ddee5abb0c51a9a210e2e998cdd9606f734d43d3bec8c473cc4f0aaa1e265e7f05202aa606247ebde8844c0243165fac SHA512 f0f0600df013431af804ace70ea86ac064917acdeaad3759b5d5eaa4a8dc3738d6da6df4c16bbb23443e3493487541cb8b10b89f9f0b40a17caa6e6fc46e0adb
+DIST openvpn-2.5.7.tar.xz 1150476 BLAKE2B e8d24a8be8ff97072ef3b76dbec15cd6e7097ebe99f680d759f213cb5643d7b4a29664d2a96e6efe1d6ee858a6d6b3f23c6d12cf74f202fbe8cc48642f18dba6 SHA512 9a3234b479f5bab12b8c3af7691f175f8cd32f2929dd27efc16e96e14dbb8e07421e623869ad5ffc2d7e65f2266817d1583723033f3646b9913b10ec6d014b44
+DIST openvpn-2.6.4.tar.gz 1861178 BLAKE2B 584fc3950732d6a1db417811f6e330a154537207f6c9543ab03b1c1a886a98a0aee7d1649055a9f7944555ae8865602be15fd8e23b67258917f1adebde050099 SHA512 903ac41691c26e8e4ad65c9b6fb5e75db2caf2e4079d3c4cb61a44e51be9991508f53a1dd8b4b863b4ac86088ad1a705d22131df1e25612560c9f4276d8190ec
diff --git a/net-vpn/openvpn/files/down.sh b/net-vpn/openvpn/files/down.sh
new file mode 100644
index 0000000..1c70db0
--- /dev/null
+++ b/net-vpn/openvpn/files/down.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+# Copyright (c) 2006-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# Contributed by Roy Marples (uberlord@gentoo.org)
+
+# If we have a service specific script, run this now
+if [ -x /etc/openvpn/"${SVCNAME}"-down.sh ] ; then
+ /etc/openvpn/"${SVCNAME}"-down.sh "$@"
+fi
+
+# Restore resolv.conf to how it was
+if [ "${PEER_DNS}" != "no" ]; then
+ if [ -x /sbin/resolvconf ] ; then
+ /sbin/resolvconf -d "${dev}"
+ elif [ -e /etc/resolv.conf-"${dev}".sv ] ; then
+ # Important that we copy instead of move incase resolv.conf is
+ # a symlink and not an actual file
+ cp /etc/resolv.conf-"${dev}".sv /etc/resolv.conf
+ rm -f /etc/resolv.conf-"${dev}".sv
+ fi
+fi
+
+if [ -n "${SVCNAME}" ]; then
+ # Re-enter the init script to start any dependant services
+ if /etc/init.d/"${SVCNAME}" --quiet status ; then
+ export IN_BACKGROUND=true
+ /etc/init.d/"${SVCNAME}" --quiet stop
+ fi
+fi
+
+exit 0
+
+# vim: ts=4 :
diff --git a/net-vpn/openvpn/files/openvpn-2.1.conf b/net-vpn/openvpn/files/openvpn-2.1.conf
new file mode 100644
index 0000000..72510c3
--- /dev/null
+++ b/net-vpn/openvpn/files/openvpn-2.1.conf
@@ -0,0 +1,18 @@
+# OpenVPN automatically creates an /etc/resolv.conf (or sends it to
+# resolvconf) if given DNS information by the OpenVPN server.
+# Set PEER_DNS="no" to stop this.
+PEER_DNS="yes"
+
+# OpenVPN can run in many modes. Most people will want the init script
+# to automatically detect the mode and try and apply a good default
+# configuration and setup scripts. However, there are cases where the
+# OpenVPN configuration looks like a client, but it's really a peer or
+# something else. DETECT_CLIENT controls this behaviour.
+DETECT_CLIENT="yes"
+
+# If DETECT_CLIENT is no and you have your own scripts to re-enter the openvpn
+# init script (ie, it first becomes "inactive" and the script then starts the
+# script again to make it "started") then you can state this below.
+# In other words, unless you understand service dependencies and are a
+# competent shell scripter, don't set this.
+RE_ENTER="no"
diff --git a/net-vpn/openvpn/files/openvpn-2.1.init b/net-vpn/openvpn/files/openvpn-2.1.init
new file mode 100644
index 0000000..3af33f5
--- /dev/null
+++ b/net-vpn/openvpn/files/openvpn-2.1.init
@@ -0,0 +1,134 @@
+#!/sbin/openrc-run
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+VPNDIR=${VPNDIR:-/etc/openvpn}
+VPN=${SVCNAME#*.}
+if [ -n "${VPN}" ] && [ ${SVCNAME} != "openvpn" ]; then
+ VPNPID="/run/openvpn.${VPN}.pid"
+else
+ VPNPID="/run/openvpn.pid"
+fi
+VPNCONF="${VPNDIR}/${VPN}.conf"
+
+depend() {
+ need localmount net
+ use dns
+ after bootmisc
+}
+
+checkconfig() {
+ # Linux has good dynamic tun/tap creation
+ if [ $(uname -s) = "Linux" ] ; then
+ if [ ! -e /dev/net/tun ]; then
+ if ! modprobe tun ; then
+ eerror "TUN/TAP support is not available" \
+ "in this kernel"
+ return 1
+ fi
+ fi
+ if [ -h /dev/net/tun ] && [ -c /dev/misc/net/tun ]; then
+ ebegin "Detected broken /dev/net/tun symlink, fixing..."
+ rm -f /dev/net/tun
+ ln -s /dev/misc/net/tun /dev/net/tun
+ eend $?
+ fi
+ return 0
+ fi
+
+ # Other OS's don't, so we rely on a pre-configured interface
+ # per vpn instance
+ local ifname=$(sed -n -e 's/[[:space:]]*dev[[:space:]][[:space:]]*\([^[:space:]]*\).*/\1/p' "${VPNCONF}")
+ if [ -z ${ifname} ] ; then
+ eerror "You need to specify the interface that this openvpn" \
+ "instance should use" \
+ "by using the dev option in ${VPNCONF}"
+ return 1
+ fi
+
+ if ! ifconfig "${ifname}" >/dev/null 2>/dev/null ; then
+ # Try and create it
+ echo > /dev/"${ifname}" >/dev/null
+ fi
+ if ! ifconfig "${ifname}" >/dev/null 2>/dev/null ; then
+ eerror "${VPNCONF} requires interface ${ifname}" \
+ "but that does not exist"
+ return 1
+ fi
+}
+
+start() {
+ # If we are re-called by the openvpn gentoo-up.sh script
+ # then we don't actually want to start openvpn
+ [ "${IN_BACKGROUND}" = "true" ] && return 0
+
+ ebegin "Starting ${SVCNAME}"
+
+ checkconfig || return 1
+
+ local args="" reenter=${RE_ENTER:-no}
+ # If the config file does not specify the cd option, we do
+ # But if we specify it, we override the config option which we do not want
+ if ! grep -q "^[ ]*cd[ ].*" "${VPNCONF}" ; then
+ args="${args} --cd ${VPNDIR}"
+ fi
+
+ # We mark the service as inactive and then start it.
+ # When we get an authenticated packet from the peer then we run our script
+ # which configures our DNS if any and marks us as up.
+ if [ "${DETECT_CLIENT:-yes}" = "yes" ] && \
+ grep -q "^[ ]*remote[ ].*" "${VPNCONF}" ; then
+ reenter="yes"
+ args="${args} --up-delay --up-restart"
+ args="${args} --script-security 2"
+ args="${args} --up /etc/openvpn/up.sh"
+ args="${args} --down-pre --down /etc/openvpn/down.sh"
+
+ # Warn about setting scripts as we override them
+ if grep -Eq "^[ ]*(up|down)[ ].*" "${VPNCONF}" ; then
+ ewarn "WARNING: You have defined your own up/down scripts"
+ ewarn "As you're running as a client, we now force Gentoo specific"
+ ewarn "scripts to be run for up and down events."
+ ewarn "These scripts will call /etc/openvpn/${SVCNAME}-{up,down}.sh"
+ ewarn "where you can put your own code."
+ fi
+
+ # Warn about the inability to change ip/route/dns information when
+ # dropping privs
+ if grep -q "^[ ]*user[ ].*" "${VPNCONF}" ; then
+ ewarn "WARNING: You are dropping root privileges!"
+ ewarn "As such openvpn may not be able to change ip, routing"
+ ewarn "or DNS configuration."
+ fi
+ else
+ # So we're a server. Run as openvpn unless otherwise specified
+ grep -q "^[ ]*user[ ].*" "${VPNCONF}" || args="${args} --user openvpn"
+ grep -q "^[ ]*group[ ].*" "${VPNCONF}" || args="${args} --group openvpn"
+ fi
+
+ # Ensure that our scripts get the PEER_DNS variable
+ [ -n "${PEER_DNS}" ] && args="${args} --setenv PEER_DNS ${PEER_DNS}"
+
+ [ "${reenter}" = "yes" ] && mark_service_inactive "${SVCNAME}"
+ start-stop-daemon --start --exec /usr/sbin/openvpn --pidfile "${VPNPID}" \
+ -- --config "${VPNCONF}" --writepid "${VPNPID}" --daemon \
+ --setenv SVCNAME "${SVCNAME}" ${args}
+ eend $? "Check your logs to see why startup failed"
+}
+
+stop() {
+ # If we are re-called by the openvpn gentoo-down.sh script
+ # then we don't actually want to stop openvpn
+ if [ "${IN_BACKGROUND}" = "true" ] ; then
+ mark_service_inactive "${SVCNAME}"
+ return 0
+ fi
+
+ ebegin "Stopping ${SVCNAME}"
+ start-stop-daemon --stop --quiet \
+ --exec /usr/sbin/openvpn --pidfile "${VPNPID}" \
+ -- --config "${VPNCONF}"
+ eend $?
+}
+
+# vim: set ts=4 :
diff --git a/net-vpn/openvpn/files/openvpn-2.5.0-auth-pam-missing-header.patch b/net-vpn/openvpn/files/openvpn-2.5.0-auth-pam-missing-header.patch
new file mode 100644
index 0000000..2e48bd6
--- /dev/null
+++ b/net-vpn/openvpn/files/openvpn-2.5.0-auth-pam-missing-header.patch
@@ -0,0 +1,12 @@
+diff --git a/src/plugins/auth-pam/auth-pam.c b/src/plugins/auth-pam/auth-pam.c
+index f537652e..29306310 100644
+--- a/src/plugins/auth-pam/auth-pam.c
++++ b/src/plugins/auth-pam/auth-pam.c
+@@ -47,6 +47,7 @@
+ #include <fcntl.h>
+ #include <signal.h>
+ #include <syslog.h>
++#include <limits.h>
+ #include "utils.h"
+
+ #include <openvpn-plugin.h>
diff --git a/net-vpn/openvpn/files/openvpn-2.5.2-detect-python-rst2man.patch b/net-vpn/openvpn/files/openvpn-2.5.2-detect-python-rst2man.patch
new file mode 100644
index 0000000..d2060bb
--- /dev/null
+++ b/net-vpn/openvpn/files/openvpn-2.5.2-detect-python-rst2man.patch
@@ -0,0 +1,14 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -376,8 +376,8 @@ AC_DEFINE_UNQUOTED([SYSTEMD_ASK_PASSWORD_PATH], ["$SYSTEMD_ASK_PASSWORD"], [Path
+ #
+ AC_ARG_VAR([RST2MAN], [path to rst2man utility])
+ AC_ARG_VAR([RST2HTML], [path to rst2html utility])
+-AC_CHECK_PROGS([RST2MAN], [rst2man])
+-AC_CHECK_PROGS([RST2HTML], [rst2html])
++AC_CHECK_PROGS([RST2MAN], [rst2man rst2man.py])
++AC_CHECK_PROGS([RST2HTML], [rst2html rst2html.py])
+ AM_CONDITIONAL([HAVE_PYDOCUTILS], [test "${RST2MAN}" -a "${RST2HTML}"])
+
+ # Set -std=c99 unless user already specified a -std=
+
diff --git a/net-vpn/openvpn/files/openvpn-2.5.2-libressl.patch b/net-vpn/openvpn/files/openvpn-2.5.2-libressl.patch
new file mode 100644
index 0000000..6ac7382
--- /dev/null
+++ b/net-vpn/openvpn/files/openvpn-2.5.2-libressl.patch
@@ -0,0 +1,147 @@
+commit 0df2261da192eac74d1c53e99db0ed3f49278986
+Author: Arne Schwabe <arne@rfc2549.org>
+Date: Tue Oct 19 20:31:08 2021 +0200
+
+ Add --with-openssl-engine autoconf option (auto|yes|no)
+
+ This allows to select engine support at configure time. For OpenSSL 1.1 the
+ default is not changed and we detect if engine support is available.
+
+ Engine support is deprecated in OpenSSL 3.0 and for OpenSSL 3.0 the default
+ is to disable engine support as engine support is deprecated and generates
+ compiler warnings which in turn also break -Werror.
+
+ By using --with-openssl-engine=no or --with-openssl-engine=yes engine
+ support can be forced on or off. If it is enabled but not detected an
+ error will be thown.
+
+ This commit cleans up the configure logic a bit and removes the
+ ENGINE_cleanup checks as we can just assume that it will be also
+ available as macro or function if the other engine functions are
+ available. Before the cleanup we would only check for the existance
+ of engine.h if ENGINE_cleanup was not found.
+
+ Signed-off-by: Arne Schwabe <arne@rfc2549.org>
+ Acked-by: Max Fillinger <maximilian.fillinger@foxcrypto.com>
+ Message-Id: <20211019183127.614175-3-arne@rfc2549.org>
+ URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg23000.html
+ Signed-off-by: Gert Doering <gert@greenie.muc.de>
+
+diff --git a/configure.ac b/configure.ac
+index a37dc762..e0f9c332 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -267,6 +267,18 @@ AC_ARG_ENABLE(
+ [enable_wolfssl_options_h="yes"]
+ )
+
++AC_ARG_WITH(
++ [openssl-engine],
++ [AS_HELP_STRING([--with-openssl-engine], [enable engine support with OpenSSL. Default enabled for OpenSSL < 3.0, auto,yes,no @<:@default=auto@:>@])],
++ [
++ case "${withval}" in
++ auto|yes|no) ;;
++ *) AC_MSG_ERROR([bad value ${withval} for --with-engine]) ;;
++ esac
++ ],
++ [with_openssl_engine="auto"]
++)
++
+ AC_ARG_VAR([PLUGINDIR], [Path of plug-in directory @<:@default=LIBDIR/openvpn/plugins@:>@])
+ if test -n "${PLUGINDIR}"; then
+ plugindir="${PLUGINDIR}"
+@@ -800,22 +812,44 @@ if test "${with_crypto_library}" = "openssl"; then
+ [AC_MSG_ERROR([openssl check failed])]
+ )
+
+- have_openssl_engine="yes"
+- AC_CHECK_FUNCS(
+- [ \
++ if test "${with_openssl_engine}" = "auto"; then
++ AC_COMPILE_IFELSE(
++ [AC_LANG_PROGRAM(
++ [[
++ #include <openssl/opensslv.h>
++ ]],
++ [[
++ /* Version encoding: MNNFFPPS - see opensslv.h for details */
++ #if OPENSSL_VERSION_NUMBER >= 0x30000000L
++ #error Engine supported disabled by default in OpenSSL 3.0+
++ #endif
++ ]]
++ )],
++ [have_openssl_engine="yes"],
++ [have_openssl_engine="no"]
++ )
++ if test "${have_openssl_engine}" = "yes"; then
++ AC_CHECK_FUNCS(
++ [ \
+ ENGINE_load_builtin_engines \
+ ENGINE_register_all_complete \
+- ENGINE_cleanup \
+- ],
+- ,
+- [have_openssl_engine="no"; break]
+- )
+- if test "${have_openssl_engine}" = "no"; then
+- AC_CHECK_DECL( [ENGINE_cleanup], [have_openssl_engine="yes"],,
+- [[
+- #include <openssl/engine.h>
+- ]]
++ ],
++ ,
++ [have_openssl_engine="no"; break]
++ )
++ fi
++ else
++ have_openssl_engine="${with_openssl_engine}"
++ if test "${have_openssl_engine}" = "yes"; then
++ AC_CHECK_FUNCS(
++ [ \
++ ENGINE_load_builtin_engines \
++ ENGINE_register_all_complete \
++ ],
++ ,
++ [AC_MSG_ERROR([OpenSSL engine support not found])]
+ )
++ fi
+ fi
+ if test "${have_openssl_engine}" = "yes"; then
+ AC_DEFINE([HAVE_OPENSSL_ENGINE], [1], [OpenSSL engine support available])
+https://sourceforge.net/p/openvpn/mailman/openvpn-devel/thread/20230903095545.0f6d9d03%40Akita/#msg37891128
+
+From d6700ec0f5af2522bb4eb136d3760f5b1445c9d1 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Sat, 2 Sep 2023 23:06:22 -0700
+Subject: [PATCH] configure: disable engines if OPENSSL_NO_ENGINE is defined
+
+Starting with LibreSSL 3.8.1 the engines have been removed which causes
+the OpenVPN build to fail. This can be solved during configure by
+checking if OPENSSL_NO_ENGINE is defined in opensslconf.h.
+---
+ configure.ac | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 2f65cbd5..1adfb9d4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -927,11 +927,17 @@ if test "${with_crypto_library}" = "openssl"; then
+ [AC_LANG_PROGRAM(
+ [[
+ #include <openssl/opensslv.h>
++ #include <openssl/opensslconf.h>
+ ]],
+ [[
+ /* Version encoding: MNNFFPPS - see opensslv.h for details */
+ #if OPENSSL_VERSION_NUMBER >= 0x30000000L
+- #error Engine supported disabled by default in OpenSSL 3.0+
++ #error Engine support disabled by default in OpenSSL 3.0+
++ #endif
++
++ /* BoringSSL and LibreSSL >= 3.8.1 removed engine support */
++ #ifdef OPENSSL_NO_ENGINE
++ #error Engine support disabled by default in openssl/opensslconf.h
+ #endif
+ ]]
+ )],
diff --git a/net-vpn/openvpn/files/openvpn-2.5.7-libressl.patch b/net-vpn/openvpn/files/openvpn-2.5.7-libressl.patch
new file mode 100644
index 0000000..5abe955
--- /dev/null
+++ b/net-vpn/openvpn/files/openvpn-2.5.7-libressl.patch
@@ -0,0 +1,37 @@
+https://sourceforge.net/p/openvpn/mailman/openvpn-devel/thread/20230903095545.0f6d9d03%40Akita/#msg37891128
+
+From d6700ec0f5af2522bb4eb136d3760f5b1445c9d1 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Sat, 2 Sep 2023 23:06:22 -0700
+Subject: [PATCH] configure: disable engines if OPENSSL_NO_ENGINE is defined
+
+Starting with LibreSSL 3.8.1 the engines have been removed which causes
+the OpenVPN build to fail. This can be solved during configure by
+checking if OPENSSL_NO_ENGINE is defined in opensslconf.h.
+---
+ configure.ac | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 2f65cbd5..1adfb9d4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -927,11 +927,17 @@ if test "${with_crypto_library}" = "openssl"; then
+ [AC_LANG_PROGRAM(
+ [[
+ #include <openssl/opensslv.h>
++ #include <openssl/opensslconf.h>
+ ]],
+ [[
+ /* Version encoding: MNNFFPPS - see opensslv.h for details */
+ #if OPENSSL_VERSION_NUMBER >= 0x30000000L
+- #error Engine supported disabled by default in OpenSSL 3.0+
++ #error Engine support disabled by default in OpenSSL 3.0+
++ #endif
++
++ /* BoringSSL and LibreSSL >= 3.8.1 removed engine support */
++ #ifdef OPENSSL_NO_ENGINE
++ #error Engine support disabled by default in openssl/opensslconf.h
+ #endif
+ ]]
+ )],
diff --git a/net-vpn/openvpn/files/up.sh b/net-vpn/openvpn/files/up.sh
new file mode 100644
index 0000000..6ce82d6
--- /dev/null
+++ b/net-vpn/openvpn/files/up.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+# Copyright (c) 2006-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# Contributed by Roy Marples (uberlord@gentoo.org)
+
+# Setup our resolv.conf
+# Vitally important that we use the domain entry in resolv.conf so we
+# can setup the nameservers are for the domain ONLY in resolvconf if
+# we're using a decent dns cache/forwarder like dnsmasq and NOT nscd/libc.
+# nscd/libc users will get the VPN nameservers before their other ones
+# and will use the first one that responds - maybe the LAN ones?
+# non resolvconf users just the the VPN resolv.conf
+
+# FIXME:- if we have >1 domain, then we have to use search :/
+# We need to add a flag to resolvconf to say
+# "these nameservers should only be used for the listed search domains
+# if other global nameservers are present on other interfaces"
+# This however, will break compatibility with Debians resolvconf
+# A possible workaround would be to just list multiple domain lines
+# and try and let resolvconf handle it
+
+min_route() {
+ local n=1
+ local m
+ local r
+
+ eval m="\$route_metric_$n"
+ while [ -n "${m}" ]; do
+ if [ -z "$r" ] || [ "$r" -gt "$m" ]; then
+ r="$m"
+ fi
+ n="$(($n+1))"
+ eval m="\$route_metric_$n"
+ done
+
+ echo "$r"
+}
+
+if [ "${PEER_DNS}" != "no" ]; then
+ NS=
+ DOMAIN=
+ SEARCH=
+ i=1
+ while true ; do
+ eval opt=\$foreign_option_${i}
+ [ -z "${opt}" ] && break
+ if [ "${opt}" != "${opt#dhcp-option DOMAIN *}" ] ; then
+ if [ -z "${DOMAIN}" ] ; then
+ DOMAIN="${opt#dhcp-option DOMAIN *}"
+ else
+ SEARCH="${SEARCH}${SEARCH:+ }${opt#dhcp-option DOMAIN *}"
+ fi
+ elif [ "${opt}" != "${opt#dhcp-option DNS *}" ] ; then
+ NS="${NS}nameserver ${opt#dhcp-option DNS *}\n"
+ fi
+ i=$((${i} + 1))
+ done
+
+ if [ -n "${NS}" ] ; then
+ DNS="# Generated by openvpn for interface ${dev}\n"
+ if [ -n "${SEARCH}" ] ; then
+ DNS="${DNS}search ${DOMAIN} ${SEARCH}\n"
+ elif [ -n "${DOMAIN}" ]; then
+ DNS="${DNS}domain ${DOMAIN}\n"
+ fi
+ DNS="${DNS}${NS}"
+ if [ -x /sbin/resolvconf ] ; then
+ metric="$(min_route)"
+ printf "${DNS}" | /sbin/resolvconf -a "${dev}" ${metric:+-m ${metric}}
+ else
+ # Preserve the existing resolv.conf
+ if [ -e /etc/resolv.conf ] ; then
+ cp /etc/resolv.conf /etc/resolv.conf-"${dev}".sv
+ fi
+ printf "${DNS}" > /etc/resolv.conf
+ chmod 644 /etc/resolv.conf
+ fi
+ fi
+fi
+
+# Below section is Gentoo specific
+# Quick summary - our init scripts are re-entrant and set the SVCNAME env var
+# as we could have >1 openvpn service
+
+if [ -n "${SVCNAME}" ]; then
+ # If we have a service specific script, run this now
+ if [ -x /etc/openvpn/"${SVCNAME}"-up.sh ] ; then
+ /etc/openvpn/"${SVCNAME}"-up.sh "$@"
+ fi
+
+ # Re-enter the init script to start any dependant services
+ if ! /etc/init.d/"${SVCNAME}" --quiet status ; then
+ export IN_BACKGROUND=true
+ /etc/init.d/${SVCNAME} --quiet start
+ fi
+fi
+
+exit 0
+
+# vim: ts=4 :
diff --git a/net-vpn/openvpn/metadata.xml b/net-vpn/openvpn/metadata.xml
new file mode 100644
index 0000000..f3e8394
--- /dev/null
+++ b/net-vpn/openvpn/metadata.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chutzpah@gentoo.org</email>
+ <name>Patrick McLean</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>williamh@gentoo.org</email>
+ <name>William Hubbs</name>
+ </maintainer>
+ <longdescription>OpenVPN is an easy-to-use, robust and highly
+configurable VPN daemon which can be used to securely link two or more
+networks using an encrypted tunnel.</longdescription>
+ <use>
+ <flag name="dco">Enable support for kernel data channel offload</flag>
+ <flag name="down-root">Enable the down-root plugin</flag>
+ <flag name="iproute2">Enabled iproute2 support instead of net-tools</flag>
+ <flag name="mbedtls">Use mbed TLS as the backend crypto library</flag>
+ <flag name="openssl">Use OpenSSL as the backend crypto library</flag>
+ <flag name="pkcs11">Enable PKCS#11 smartcard support</flag>
+ <flag name="plugins">Enable the OpenVPN plugin system</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:openvpn:openvpn</remote-id>
+ <remote-id type="github">OpenVPN/openvpn</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-vpn/openvpn/openvpn-2.5.2-r3.ebuild b/net-vpn/openvpn/openvpn-2.5.2-r3.ebuild
new file mode 100644
index 0000000..02be010
--- /dev/null
+++ b/net-vpn/openvpn/openvpn-2.5.2-r3.ebuild
@@ -0,0 +1,199 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools flag-o-matic systemd linux-info tmpfiles
+
+DESCRIPTION="Robust and highly flexible tunneling application compatible with many OSes"
+HOMEPAGE="https://openvpn.net/"
+
+if [[ ${PV} == "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/OpenVPN/${PN}.git"
+ EGIT_SUBMODULES=(-cmocka)
+
+ inherit git-r3
+else
+ SRC_URI="https://build.openvpn.net/downloads/releases/${P}.tar.xz"
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~sparc x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="down-root examples inotify iproute2 +lz4 +lzo mbedtls +openssl"
+IUSE+=" pam pkcs11 +plugins selinux systemd test"
+
+RESTRICT="!test? ( test )"
+REQUIRED_USE="
+ ^^ ( openssl mbedtls )
+ pkcs11? ( !mbedtls )
+ !plugins? ( !pam !down-root )
+ inotify? ( plugins )
+"
+
+CDEPEND="
+ kernel_linux? (
+ iproute2? ( sys-apps/iproute2[-minimal] )
+ )
+ lz4? ( app-arch/lz4 )
+ lzo? ( >=dev-libs/lzo-1.07 )
+ mbedtls? ( net-libs/mbedtls:= )
+ openssl? ( >=dev-libs/openssl-0.9.8:0= )
+ pam? ( sys-libs/pam )
+ pkcs11? ( >=dev-libs/pkcs11-helper-1.11 )
+ systemd? ( sys-apps/systemd )
+"
+
+BDEPEND="virtual/pkgconfig"
+
+DEPEND="${CDEPEND}
+ test? ( dev-util/cmocka )
+"
+RDEPEND="${CDEPEND}
+ acct-group/openvpn
+ acct-user/openvpn
+ selinux? ( sec-policy/selinux-openvpn )
+"
+
+if [[ ${PV} = "9999" ]]; then
+ BDEPEND+=" dev-python/docutils"
+fi
+
+PATCHES=(
+ "${FILESDIR}"/openvpn-2.5.0-auth-pam-missing-header.patch
+ "${FILESDIR}"/openvpn-2.5.2-detect-python-rst2man.patch
+ "${FILESDIR}"/openvpn-2.5.2-libressl.patch
+)
+
+pkg_setup() {
+ local CONFIG_CHECK="~TUN"
+ linux-info_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+src_configure() {
+ local -a myeconfargs
+
+ if ! use mbedtls; then
+ myeconfargs+=(
+ $(use_enable pkcs11)
+ )
+ fi
+
+ myeconfargs+=(
+ $(use_enable inotify async-push)
+ --with-crypto-library=$(usex mbedtls mbedtls openssl)
+ $(use_enable lz4)
+ $(use_enable lzo)
+ $(use_enable plugins)
+ $(use_enable iproute2)
+ $(use_enable pam plugin-auth-pam)
+ $(use_enable down-root plugin-down-root)
+ $(use_enable systemd)
+ )
+
+ SYSTEMD_UNIT_DIR=$(systemd_get_systemunitdir) \
+ TMPFILES_DIR="/usr/lib/tmpfiles.d" \
+ IPROUTE=$(usex iproute2 '/bin/ip' '') \
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local -x RUN_SUDO=false
+
+ elog "Running top-level tests"
+ emake check
+
+ pushd tests/unit_tests &>/dev/null || die
+ elog "Running unit tests"
+ emake check
+ popd &>/dev/null || die
+}
+
+src_install() {
+ default
+
+ find "${ED}/usr" -name '*.la' -delete || die
+
+ # install documentation
+ dodoc AUTHORS ChangeLog PORTS README README.IPv6
+
+ # Install some helper scripts
+ keepdir /etc/openvpn
+ exeinto /etc/openvpn
+ doexe "${FILESDIR}/up.sh"
+ doexe "${FILESDIR}/down.sh"
+
+ # Install the init script and config file
+ newinitd "${FILESDIR}/${PN}-2.1.init" openvpn
+ newconfd "${FILESDIR}/${PN}-2.1.conf" openvpn
+
+ # install examples, controlled by the respective useflag
+ if use examples ; then
+ # (is the below comment relevant anymore?)
+ ## dodoc does not supportly support directory traversal, #15193
+ docinto examples
+ dodoc -r sample contrib
+ fi
+
+ # https://bugs.gentoo.org/755680#c3
+ doman doc/openvpn.8
+}
+
+pkg_postinst() {
+ tmpfiles_process openvpn.conf
+
+ if use x64-macos ; then
+ elog "You might want to install tuntaposx for TAP interface support:"
+ elog "http://tuntaposx.sourceforge.net"
+ fi
+
+ if systemd_is_booted || has_version sys-apps/systemd ; then
+ elog "In order to use OpenVPN with systemd please use the correct systemd service file."
+ elog ""
+ elog "server:"
+ elog ""
+ elog "- Place your server configuration file in /etc/openvpn/server"
+ elog "- Use the openvpn-server@.service like so"
+ elog "systemctl start openvpn-server@{Server-config}"
+ elog ""
+ elog "client:"
+ elog ""
+ elog "- Place your client configuration file in /etc/openvpn/client"
+ elog "- Use the openvpn-client@.service like so:"
+ elog "systemctl start openvpn-client@{Client-config}"
+ else
+ elog "The openvpn init script expects to find the configuration file"
+ elog "openvpn.conf in /etc/openvpn along with any extra files it may need."
+ elog ""
+ elog "To create more VPNs, simply create a new .conf file for it and"
+ elog "then create a symlink to the openvpn init script from a link called"
+ elog "openvpn.newconfname - like so"
+ elog " cd /etc/openvpn"
+ elog " ${EDITOR##*/} foo.conf"
+ elog " cd /etc/init.d"
+ elog " ln -s openvpn openvpn.foo"
+ elog ""
+ elog "You can then treat openvpn.foo as any other service, so you can"
+ elog "stop one vpn and start another if you need to."
+ fi
+
+ if grep -Eq "^[ \t]*(up|down)[ \t].*" "${ROOT}/etc/openvpn"/*.conf 2>/dev/null ; then
+ ewarn ""
+ ewarn "WARNING: If you use the remote keyword then you are deemed to be"
+ ewarn "a client by our init script and as such we force up,down scripts."
+ ewarn "These scripts call /etc/openvpn/\$SVCNAME-{up,down}.sh where you"
+ ewarn "can move your scripts to."
+ fi
+
+ if use plugins ; then
+ einfo ""
+ einfo "plugins have been installed into /usr/$(get_libdir)/${PN}/plugins"
+ fi
+}
diff --git a/net-vpn/openvpn/openvpn-2.5.6-r1.ebuild b/net-vpn/openvpn/openvpn-2.5.6-r1.ebuild
new file mode 100644
index 0000000..9bd9396
--- /dev/null
+++ b/net-vpn/openvpn/openvpn-2.5.6-r1.ebuild
@@ -0,0 +1,198 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools flag-o-matic systemd linux-info tmpfiles
+
+DESCRIPTION="Robust and highly flexible tunneling application compatible with many OSes"
+HOMEPAGE="https://openvpn.net/"
+
+if [[ ${PV} == "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/OpenVPN/${PN}.git"
+ EGIT_SUBMODULES=(-cmocka)
+
+ inherit git-r3
+else
+ SRC_URI="https://build.openvpn.net/downloads/releases/${P}.tar.xz"
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~sparc x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="down-root examples inotify iproute2 +lz4 +lzo mbedtls +openssl"
+IUSE+=" pam pkcs11 +plugins selinux systemd test"
+
+RESTRICT="!test? ( test )"
+REQUIRED_USE="
+ ^^ ( openssl mbedtls )
+ pkcs11? ( !mbedtls )
+ !plugins? ( !pam !down-root )
+ inotify? ( plugins )
+"
+
+CDEPEND="
+ kernel_linux? (
+ iproute2? ( sys-apps/iproute2[-minimal] )
+ )
+ lz4? ( app-arch/lz4 )
+ lzo? ( >=dev-libs/lzo-1.07 )
+ mbedtls? ( net-libs/mbedtls:= )
+ openssl? ( >=dev-libs/openssl-0.9.8:0= )
+ pam? ( sys-libs/pam )
+ pkcs11? ( >=dev-libs/pkcs11-helper-1.11 )
+ systemd? ( sys-apps/systemd )
+"
+
+BDEPEND="virtual/pkgconfig"
+
+DEPEND="${CDEPEND}
+ test? ( dev-util/cmocka )
+"
+RDEPEND="${CDEPEND}
+ acct-group/openvpn
+ acct-user/openvpn
+ selinux? ( sec-policy/selinux-openvpn )
+"
+
+if [[ ${PV} = "9999" ]]; then
+ BDEPEND+=" dev-python/docutils"
+fi
+
+PATCHES=(
+ "${FILESDIR}"/openvpn-2.5.0-auth-pam-missing-header.patch
+ "${FILESDIR}"/openvpn-2.5.2-libressl.patch
+)
+
+pkg_setup() {
+ local CONFIG_CHECK="~TUN"
+ linux-info_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+src_configure() {
+ local -a myeconfargs
+
+ if ! use mbedtls; then
+ myeconfargs+=(
+ $(use_enable pkcs11)
+ )
+ fi
+
+ myeconfargs+=(
+ $(use_enable inotify async-push)
+ --with-crypto-library=$(usex mbedtls mbedtls openssl)
+ $(use_enable lz4)
+ $(use_enable lzo)
+ $(use_enable plugins)
+ $(use_enable iproute2)
+ $(use_enable pam plugin-auth-pam)
+ $(use_enable down-root plugin-down-root)
+ $(use_enable systemd)
+ )
+
+ SYSTEMD_UNIT_DIR=$(systemd_get_systemunitdir) \
+ TMPFILES_DIR="/usr/lib/tmpfiles.d" \
+ IPROUTE=$(usex iproute2 '/bin/ip' '') \
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local -x RUN_SUDO=false
+
+ elog "Running top-level tests"
+ emake check
+
+ pushd tests/unit_tests &>/dev/null || die
+ elog "Running unit tests"
+ emake check
+ popd &>/dev/null || die
+}
+
+src_install() {
+ default
+
+ find "${ED}/usr" -name '*.la' -delete || die
+
+ # install documentation
+ dodoc AUTHORS ChangeLog PORTS README README.IPv6
+
+ # Install some helper scripts
+ keepdir /etc/openvpn
+ exeinto /etc/openvpn
+ doexe "${FILESDIR}/up.sh"
+ doexe "${FILESDIR}/down.sh"
+
+ # Install the init script and config file
+ newinitd "${FILESDIR}/${PN}-2.1.init" openvpn
+ newconfd "${FILESDIR}/${PN}-2.1.conf" openvpn
+
+ # install examples, controlled by the respective useflag
+ if use examples ; then
+ # (is the below comment relevant anymore?)
+ ## dodoc does not supportly support directory traversal, #15193
+ docinto examples
+ dodoc -r sample contrib
+ fi
+
+ # https://bugs.gentoo.org/755680#c3
+ doman doc/openvpn.8
+}
+
+pkg_postinst() {
+ tmpfiles_process openvpn.conf
+
+ if use x64-macos ; then
+ elog "You might want to install tuntaposx for TAP interface support:"
+ elog "http://tuntaposx.sourceforge.net"
+ fi
+
+ if systemd_is_booted || has_version sys-apps/systemd ; then
+ elog "In order to use OpenVPN with systemd please use the correct systemd service file."
+ elog ""
+ elog "server:"
+ elog ""
+ elog "- Place your server configuration file in /etc/openvpn/server"
+ elog "- Use the openvpn-server@.service like so"
+ elog "systemctl start openvpn-server@{Server-config}"
+ elog ""
+ elog "client:"
+ elog ""
+ elog "- Place your client configuration file in /etc/openvpn/client"
+ elog "- Use the openvpn-client@.service like so:"
+ elog "systemctl start openvpn-client@{Client-config}"
+ else
+ elog "The openvpn init script expects to find the configuration file"
+ elog "openvpn.conf in /etc/openvpn along with any extra files it may need."
+ elog ""
+ elog "To create more VPNs, simply create a new .conf file for it and"
+ elog "then create a symlink to the openvpn init script from a link called"
+ elog "openvpn.newconfname - like so"
+ elog " cd /etc/openvpn"
+ elog " ${EDITOR##*/} foo.conf"
+ elog " cd /etc/init.d"
+ elog " ln -s openvpn openvpn.foo"
+ elog ""
+ elog "You can then treat openvpn.foo as any other service, so you can"
+ elog "stop one vpn and start another if you need to."
+ fi
+
+ if grep -Eq "^[ \t]*(up|down)[ \t].*" "${ROOT}/etc/openvpn"/*.conf 2>/dev/null ; then
+ ewarn ""
+ ewarn "WARNING: If you use the remote keyword then you are deemed to be"
+ ewarn "a client by our init script and as such we force up,down scripts."
+ ewarn "These scripts call /etc/openvpn/\$SVCNAME-{up,down}.sh where you"
+ ewarn "can move your scripts to."
+ fi
+
+ if use plugins ; then
+ einfo ""
+ einfo "plugins have been installed into /usr/$(get_libdir)/${PN}/plugins"
+ fi
+}
diff --git a/net-vpn/openvpn/openvpn-2.5.7-r1.ebuild b/net-vpn/openvpn/openvpn-2.5.7-r1.ebuild
new file mode 100644
index 0000000..205f6ce
--- /dev/null
+++ b/net-vpn/openvpn/openvpn-2.5.7-r1.ebuild
@@ -0,0 +1,195 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools flag-o-matic systemd linux-info tmpfiles
+
+DESCRIPTION="Robust and highly flexible tunneling application compatible with many OSes"
+HOMEPAGE="https://openvpn.net/"
+
+if [[ ${PV} == "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/OpenVPN/${PN}.git"
+ EGIT_SUBMODULES=(-cmocka)
+
+ inherit git-r3
+else
+ SRC_URI="https://build.openvpn.net/downloads/releases/${P}.tar.xz"
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="down-root examples inotify iproute2 +lz4 +lzo mbedtls +openssl"
+IUSE+=" pam pkcs11 +plugins selinux systemd test"
+
+RESTRICT="!test? ( test )"
+REQUIRED_USE="
+ ^^ ( openssl mbedtls )
+ pkcs11? ( !mbedtls )
+ !plugins? ( !pam !down-root )
+ inotify? ( plugins )
+"
+
+CDEPEND="
+ kernel_linux? (
+ iproute2? ( sys-apps/iproute2[-minimal] )
+ )
+ lz4? ( app-arch/lz4 )
+ lzo? ( >=dev-libs/lzo-1.07 )
+ mbedtls? ( net-libs/mbedtls:= )
+ openssl? ( >=dev-libs/openssl-0.9.8:0= )
+ pam? ( sys-libs/pam )
+ pkcs11? ( >=dev-libs/pkcs11-helper-1.11 )
+ systemd? ( sys-apps/systemd )
+"
+
+BDEPEND="virtual/pkgconfig"
+
+DEPEND="${CDEPEND}
+ test? ( dev-util/cmocka )
+"
+RDEPEND="${CDEPEND}
+ acct-group/openvpn
+ acct-user/openvpn
+ selinux? ( sec-policy/selinux-openvpn )
+"
+
+PATCHES=( "${FILESDIR}"/openvpn-2.5.7-libressl.patch )
+
+if [[ ${PV} = "9999" ]]; then
+ BDEPEND+=" dev-python/docutils"
+fi
+
+pkg_setup() {
+ local CONFIG_CHECK="~TUN"
+ linux-info_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+src_configure() {
+ local -a myeconfargs
+
+ if ! use mbedtls; then
+ myeconfargs+=(
+ $(use_enable pkcs11)
+ )
+ fi
+
+ myeconfargs+=(
+ $(use_enable inotify async-push)
+ --with-crypto-library=$(usex mbedtls mbedtls openssl)
+ $(use_enable lz4)
+ $(use_enable lzo)
+ $(use_enable plugins)
+ $(use_enable iproute2)
+ $(use_enable pam plugin-auth-pam)
+ $(use_enable down-root plugin-down-root)
+ $(use_enable systemd)
+ )
+
+ SYSTEMD_UNIT_DIR=$(systemd_get_systemunitdir) \
+ TMPFILES_DIR="/usr/lib/tmpfiles.d" \
+ IPROUTE=$(usex iproute2 '/bin/ip' '') \
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local -x RUN_SUDO=false
+
+ elog "Running top-level tests"
+ emake check
+
+ pushd tests/unit_tests &>/dev/null || die
+ elog "Running unit tests"
+ emake check
+ popd &>/dev/null || die
+}
+
+src_install() {
+ default
+
+ find "${ED}/usr" -name '*.la' -delete || die
+
+ # install documentation
+ dodoc AUTHORS ChangeLog PORTS README README.IPv6
+
+ # Install some helper scripts
+ keepdir /etc/openvpn
+ exeinto /etc/openvpn
+ doexe "${FILESDIR}/up.sh"
+ doexe "${FILESDIR}/down.sh"
+
+ # Install the init script and config file
+ newinitd "${FILESDIR}/${PN}-2.1.init" openvpn
+ newconfd "${FILESDIR}/${PN}-2.1.conf" openvpn
+
+ # install examples, controlled by the respective useflag
+ if use examples ; then
+ # (is the below comment relevant anymore?)
+ ## dodoc does not supportly support directory traversal, #15193
+ docinto examples
+ dodoc -r sample contrib
+ fi
+
+ # https://bugs.gentoo.org/755680#c3
+ doman doc/openvpn.8
+}
+
+pkg_postinst() {
+ tmpfiles_process openvpn.conf
+
+ if use x64-macos ; then
+ elog "You might want to install tuntaposx for TAP interface support:"
+ elog "http://tuntaposx.sourceforge.net"
+ fi
+
+ if systemd_is_booted || has_version sys-apps/systemd ; then
+ elog "In order to use OpenVPN with systemd please use the correct systemd service file."
+ elog ""
+ elog "server:"
+ elog ""
+ elog "- Place your server configuration file in /etc/openvpn/server"
+ elog "- Use the openvpn-server@.service like so"
+ elog "systemctl start openvpn-server@{Server-config}"
+ elog ""
+ elog "client:"
+ elog ""
+ elog "- Place your client configuration file in /etc/openvpn/client"
+ elog "- Use the openvpn-client@.service like so:"
+ elog "systemctl start openvpn-client@{Client-config}"
+ else
+ elog "The openvpn init script expects to find the configuration file"
+ elog "openvpn.conf in /etc/openvpn along with any extra files it may need."
+ elog ""
+ elog "To create more VPNs, simply create a new .conf file for it and"
+ elog "then create a symlink to the openvpn init script from a link called"
+ elog "openvpn.newconfname - like so"
+ elog " cd /etc/openvpn"
+ elog " ${EDITOR##*/} foo.conf"
+ elog " cd /etc/init.d"
+ elog " ln -s openvpn openvpn.foo"
+ elog ""
+ elog "You can then treat openvpn.foo as any other service, so you can"
+ elog "stop one vpn and start another if you need to."
+ fi
+
+ if grep -Eq "^[ \t]*(up|down)[ \t].*" "${ROOT}/etc/openvpn"/*.conf 2>/dev/null ; then
+ ewarn ""
+ ewarn "WARNING: If you use the remote keyword then you are deemed to be"
+ ewarn "a client by our init script and as such we force up,down scripts."
+ ewarn "These scripts call /etc/openvpn/\$SVCNAME-{up,down}.sh where you"
+ ewarn "can move your scripts to."
+ fi
+
+ if use plugins ; then
+ einfo ""
+ einfo "plugins have been installed into /usr/$(get_libdir)/${PN}/plugins"
+ fi
+}
diff --git a/net-vpn/openvpn/openvpn-2.6.4.ebuild b/net-vpn/openvpn/openvpn-2.6.4.ebuild
new file mode 100644
index 0000000..8d454f2
--- /dev/null
+++ b/net-vpn/openvpn/openvpn-2.6.4.ebuild
@@ -0,0 +1,197 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools systemd linux-info tmpfiles
+
+DESCRIPTION="Robust and highly flexible tunneling application compatible with many OSes"
+HOMEPAGE="https://openvpn.net/"
+
+if [[ ${PV} == "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/OpenVPN/${PN}.git"
+ inherit git-r3
+else
+ SRC_URI="https://build.openvpn.net/downloads/releases/${P}.tar.gz"
+ KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="dco down-root examples inotify iproute2 +lz4 +lzo mbedtls +openssl"
+IUSE+=" pam pkcs11 +plugins selinux systemd test"
+
+RESTRICT="!test? ( test )"
+REQUIRED_USE="
+ ^^ ( openssl mbedtls )
+ pkcs11? ( !mbedtls )
+ !plugins? ( !pam !down-root )
+ inotify? ( plugins )
+ dco? ( !iproute2 )
+"
+
+CDEPEND="
+ kernel_linux? (
+ iproute2? ( sys-apps/iproute2[-minimal] )
+ )
+ lz4? ( app-arch/lz4 )
+ lzo? ( >=dev-libs/lzo-1.07 )
+ mbedtls? ( net-libs/mbedtls:= )
+ openssl? ( >=dev-libs/openssl-1.0.2:0= )
+ pam? ( sys-libs/pam )
+ pkcs11? ( >=dev-libs/pkcs11-helper-1.11 )
+ systemd? ( sys-apps/systemd )
+ dco? ( >=net-vpn/ovpn-dco-0.2 >=dev-libs/libnl-3.2.29:= )
+ sys-libs/libcap-ng:=
+"
+
+BDEPEND="virtual/pkgconfig"
+
+DEPEND="${CDEPEND}
+ test? ( dev-util/cmocka )
+"
+RDEPEND="${CDEPEND}
+ acct-group/openvpn
+ acct-user/openvpn
+ selinux? ( sec-policy/selinux-openvpn )
+"
+
+if [[ ${PV} = "9999" ]]; then
+ BDEPEND+=" dev-python/docutils"
+fi
+
+PATCHES=( "${FILESDIR}"/openvpn-2.5.7-libressl.patch )
+
+pkg_setup() {
+ local CONFIG_CHECK="~TUN"
+ linux-info_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
+
+src_configure() {
+ local -a myeconfargs
+
+ if ! use mbedtls; then
+ myeconfargs+=(
+ $(use_enable pkcs11)
+ )
+ fi
+
+ myeconfargs+=(
+ $(use_enable inotify async-push)
+ --with-crypto-library=$(usex mbedtls mbedtls openssl)
+ $(use_enable lz4)
+ $(use_enable lzo)
+ $(use_enable plugins)
+ $(use_enable iproute2)
+ $(use_enable pam plugin-auth-pam)
+ $(use_enable down-root plugin-down-root)
+ $(use_enable systemd)
+ $(use_enable dco)
+ )
+
+ SYSTEMD_UNIT_DIR=$(systemd_get_systemunitdir) \
+ TMPFILES_DIR="/usr/lib/tmpfiles.d" \
+ IPROUTE=$(usex iproute2 '/bin/ip' '') \
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local -x RUN_SUDO=false
+
+ elog "Running top-level tests"
+ emake check
+
+ pushd tests/unit_tests &>/dev/null || die
+ elog "Running unit tests"
+ emake check
+ popd &>/dev/null || die
+}
+
+src_install() {
+ default
+
+ find "${ED}/usr" -name '*.la' -delete || die
+
+ # install documentation
+ dodoc AUTHORS ChangeLog PORTS README
+
+ # Install some helper scripts
+ keepdir /etc/openvpn
+ exeinto /etc/openvpn
+ doexe "${FILESDIR}/up.sh"
+ doexe "${FILESDIR}/down.sh"
+
+ # Install the init script and config file
+ newinitd "${FILESDIR}/${PN}-2.1.init" openvpn
+ newconfd "${FILESDIR}/${PN}-2.1.conf" openvpn
+
+ # install examples, controlled by the respective useflag
+ if use examples ; then
+ # (is the below comment relevant anymore?)
+ ## dodoc does not supportly support directory traversal, #15193
+ docinto examples
+ dodoc -r sample contrib
+ fi
+
+ # https://bugs.gentoo.org/755680#c3
+ doman doc/openvpn.8
+}
+
+pkg_postinst() {
+ tmpfiles_process openvpn.conf
+
+ if use x64-macos ; then
+ elog "You might want to install tuntaposx for TAP interface support:"
+ elog "http://tuntaposx.sourceforge.net"
+ fi
+
+ if systemd_is_booted || has_version sys-apps/systemd ; then
+ elog "In order to use OpenVPN with systemd please use the correct systemd service file."
+ elog ""
+ elog "server:"
+ elog ""
+ elog "- Place your server configuration file in /etc/openvpn/server"
+ elog "- Use the openvpn-server@.service like so"
+ elog "systemctl start openvpn-server@{Server-config}"
+ elog ""
+ elog "client:"
+ elog ""
+ elog "- Place your client configuration file in /etc/openvpn/client"
+ elog "- Use the openvpn-client@.service like so:"
+ elog "systemctl start openvpn-client@{Client-config}"
+ else
+ elog "The openvpn init script expects to find the configuration file"
+ elog "openvpn.conf in /etc/openvpn along with any extra files it may need."
+ elog ""
+ elog "To create more VPNs, simply create a new .conf file for it and"
+ elog "then create a symlink to the openvpn init script from a link called"
+ elog "openvpn.newconfname - like so"
+ elog " cd /etc/openvpn"
+ elog " ${EDITOR##*/} foo.conf"
+ elog " cd /etc/init.d"
+ elog " ln -s openvpn openvpn.foo"
+ elog ""
+ elog "You can then treat openvpn.foo as any other service, so you can"
+ elog "stop one vpn and start another if you need to."
+ fi
+
+ if grep -Eq "^[ \t]*(up|down)[ \t].*" "${ROOT}/etc/openvpn"/*.conf 2>/dev/null ; then
+ ewarn ""
+ ewarn "WARNING: If you use the remote keyword then you are deemed to be"
+ ewarn "a client by our init script and as such we force up,down scripts."
+ ewarn "These scripts call /etc/openvpn/\$SVCNAME-{up,down}.sh where you"
+ ewarn "can move your scripts to."
+ fi
+
+ if use plugins ; then
+ einfo ""
+ einfo "plugins have been installed into /usr/$(get_libdir)/${PN}/plugins"
+ fi
+}
diff --git a/net-vpn/tor/Manifest b/net-vpn/tor/Manifest
new file mode 100644
index 0000000..06f3b10
--- /dev/null
+++ b/net-vpn/tor/Manifest
@@ -0,0 +1,12 @@
+DIST tor-0.4.7.13.tar.gz 8031948 BLAKE2B 338a0a541423f27f594a091307b5edeafc9826bb651c2bd050f3282c9355d9d43d1ef4791f3c98a37dc4c0f64bc40925ea1c1e32cbdff78b1a7308df501f279a SHA512 0900416887afbb24f7b72e6ef181b7b01308d1bb35c37736f3b13e06810a07febf9f47fadd9ff6c0e73204d93b49545e4e2516906eb3ba74398ad2b299f530be
+DIST tor-0.4.7.13.tar.gz.sha256sum 86 BLAKE2B 339db9869bfe485cbd328fe942cc23e60c08ad67fc2d9e7927ed3c9f3b606192e5efac34013c5bf0b0e8b26e957dcf8b586e1cc0a0c27756b8b3d823af37fdee SHA512 ec1d19fa662255df5dd575ba943f4ccb30d9dfa49ff656cdfa73df2d24248b52a3bfd715f4d3efe11d8129968b0e06e3c75e8d82416e1807020ebf65f65401a0
+DIST tor-0.4.7.13.tar.gz.sha256sum.asc 716 BLAKE2B 968a3852293ab9bcadac626862c9dc360b17de5afd00af7c46358fa2adfc03b55c02dfe029e9427efba999f553489a04388b395e8fb8fe16325e0895663c2deb SHA512 eb78e8369941d8de833e3616a9a1c1e59b0d3dde918353e2f4fa5eb5da09f038238c46f5e180844bd3cba1211a9daa6d60e9ddb5690998e27a6b7d1616aa20cc
+DIST tor-0.4.7.16.tar.gz 8120424 BLAKE2B 59b7cf6b69cf552caac09ab000732bf6fa6cd5a171f00e86bea5a89ba9ce548e404fa7adb25d3aebed9f500b15ae2ca5272b07f61921f19bc5bc71b3f42a88e6 SHA512 4b1e08f158369dfd51f72a45b67fccb42095980c674e94c7a917f44996783296544b15ec1cbb7506f78d2a1473679326a128501d4341bb0251966770cf6a3d1b
+DIST tor-0.4.7.16.tar.gz.sha256sum 86 BLAKE2B 8468b7728bb47ee1e27b2895f264f1fbbb4e21a20532da76bf7b5de139b7d1c5307a9016159ee834b4f696f156acfb6f252c95d094e62480ce36a7414815cc71 SHA512 858bb461c4d7a10b32aa4088c5e75eaa6527211314bfa02197578dfb8837cc263abe06ea565a352e6255eb0b1c7c1b80807713b1906f52c2bf883b6c945345d2
+DIST tor-0.4.7.16.tar.gz.sha256sum.asc 716 BLAKE2B 108bf2ba3c5678da0be72e6816b3ebe981d56733ddae00bcc79ecae050753580df3da2c2aef179310efc426e7caa5e6df991ac9e4b87d4a7aaa53556e00fb8ce SHA512 9595dbedef35fabdd0b19bf055329580326447cefd269c21c8e73c9f65f2f02ec70fdf3431255b4b3356d3d82175c8a5c99d0368bf733c63d87d81ca9f7ce4a3
+DIST tor-0.4.8.10.tar.gz 8272740 BLAKE2B ef470664d85e019f6cac2366e934d5dc31b8ae92f121a2b4c8c95f8267abce5ce4413d30a24affa40a069d587212364ae5a7c3cd114488e50a535f01c54c6e77 SHA512 3827902541a0289ed1bfcae9bb0ac8bf8dee7bedacbfdf9c703bb38c3c586d1cfe5eeb20a477664e10a2b81b90a7fd5d623e556f3ee32aad4f8a9f828bc4dd83
+DIST tor-0.4.8.10.tar.gz.sha256sum 86 BLAKE2B 1410a5e7e486c7c33b6b217a53d250bc3e1d76c87e74ad29f6c6a67cbdacb3627521cc8936f7e8e8d72c3333078cede222d13c825b8d66df7c1d50721043f89e SHA512 853a88b75ecd195e6b155361c8321b575c5fd526f5d73da8b5de99ac875b2f22f2b8668f7c9a68a8e599170290041533345fd324dd56a0102d5cd5ddf8020461
+DIST tor-0.4.8.10.tar.gz.sha256sum.asc 716 BLAKE2B 0154ef1defa1a8227813ef3589f1fd4215f5bd305447fec1404f7950c0b89e6d9fcb6686900e4819d0f1a635d3b08e60cdc9c96a4f74e603185afb6eb1e29279 SHA512 aaeee664c9342a6cddaacfeea6e6974ce374d746153a28943dee1db3db48a8e08f36a076856358819cae8ea2f8b7d912d0e6dc2dc772465dba3283b553f43b91
+DIST tor-0.4.8.11.tar.gz 9690074 BLAKE2B b7f5bb855a6f8fe7dfd0e0efe7b48798e9d4642e401641c83554ed0f98fe238a5f303e9466e9e24a7ade63488a745b3c957ed6cc53a2f5e21f5f9c3f78f7fa78 SHA512 186fb690a751b4c0dda87afc741627a4c8c9b1a781b295dcf25b767c40c3b62664c08c63fc98f80095af76dfa1060b42e19936941528d091db50fafdce88be6e
+DIST tor-0.4.8.11.tar.gz.sha256sum 86 BLAKE2B 062077991dc4ca70c457a7c1a70c815d288b5afcd54246a51dd86685454fb0cf52aa8e12974e7909ef2c0b8e764c369278113c5b7d84e866fad0a66bdff93ebc SHA512 061411e2e5695fec84fcade7cf8ed36e14d5ea3ccfab7b0d7abdb53a57ca1d3647f73f416e5cc55c0d11f8d5405bba1a972d0b8ed05e6e20d088de57eac027bf
+DIST tor-0.4.8.11.tar.gz.sha256sum.asc 1321 BLAKE2B fbb12fbef8ef2c33a0a1c40eefb7b180e63f1d0c97ef15352e209a55decdcbfee3ed82be0ce28e95e47dc22f85602ff53008d585b15c82e2b669f39d987c106a SHA512 9f35e5a17293f4e5175fb617de913ad2622a695461d0f5fb78ad8b942c6af1e8d1de782e6bb06796ce7e8acb70c0c9c75ff6d6ac605defb73526c26dbe313546
diff --git a/net-vpn/tor/files/README.gentoo b/net-vpn/tor/files/README.gentoo
new file mode 100644
index 0000000..35214ac
--- /dev/null
+++ b/net-vpn/tor/files/README.gentoo
@@ -0,0 +1,8 @@
+We created a configuration file for tor, /etc/tor/torrc, but you can
+change it according to your needs. Use the torrc.sample that is in
+that directory as a guide. Also, to have privoxy work with tor
+just add the following line
+
+forward-socks4a / localhost:9050 .
+
+to /etc/privoxy/config. Notice the . at the end!
diff --git a/net-vpn/tor/files/tor-0.2.7.4-torrc.sample.patch b/net-vpn/tor/files/tor-0.2.7.4-torrc.sample.patch
new file mode 100644
index 0000000..5f9e258
--- /dev/null
+++ b/net-vpn/tor/files/tor-0.2.7.4-torrc.sample.patch
@@ -0,0 +1,31 @@
+diff -Nuar tor-0.2.7.4-rc.orig/src/config/torrc.sample.in tor-0.2.7.4-rc/src/config/torrc.sample.in
+--- tor-0.2.7.4-rc.orig/src/config/torrc.sample.in 2015-10-19 11:12:53.000000000 -0400
++++ tor-0.2.7.4-rc/src/config/torrc.sample.in 2015-10-21 21:18:49.151973113 -0400
+@@ -12,6 +12,11 @@
+ ## Tor will look for this file in various places based on your platform:
+ ## https://www.torproject.org/docs/faq#torrc
+
++## Default username and group the server will run as
++User tor
++
++PIDFile /run/tor/tor.pid
++
+ ## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't
+ ## configure one below. Set "SOCKSPort 0" if you plan to run Tor only
+ ## as a relay, and not make any local application connections yourself.
+@@ -42,6 +47,7 @@
+ #Log notice syslog
+ ## To send all messages to stderr:
+ #Log debug stderr
++Log warn syslog
+
+ ## Uncomment this to start the process in the background... or use
+ ## --runasdaemon 1 on the command line. This is ignored on Windows;
+@@ -51,6 +57,7 @@
+ ## The directory for keeping all the keys/etc. By default, we store
+ ## things in $HOME/.tor on Unix, and in Application Data\tor on Windows.
+ #DataDirectory @LOCALSTATEDIR@/lib/tor
++DataDirectory /var/lib/tor/data
+
+ ## The port on which Tor will listen for local connections from Tor
+ ## controller applications, as documented in control-spec.txt.
diff --git a/net-vpn/tor/files/tor-0.4.7.13-libressl.patch b/net-vpn/tor/files/tor-0.4.7.13-libressl.patch
new file mode 100644
index 0000000..bba0c45
--- /dev/null
+++ b/net-vpn/tor/files/tor-0.4.7.13-libressl.patch
@@ -0,0 +1,202 @@
+Upstream-MR: https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/598
+Upstream-Commit: https://gitlab.torproject.org/tpo/core/tor/-/commit/da52d7206a4a8e4fa8b5e80b5ed73de50fbe8692
+Upstream-MR: https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/713
+Upstream-Commit: https://gitlab.torproject.org/tpo/core/tor/-/commit/9850dc59c0db5cbcadc314be8d324a992880fce1
+
+From f3dabd705f26c56076934323f24b5b05ecdfd39c Mon Sep 17 00:00:00 2001
+From: "Alex Xu (Hello71)" <alex_y_xu@yahoo.ca>
+Date: Tue, 5 Jul 2022 11:37:30 -0400
+Subject: [PATCH 1/2] LibreSSL 3.5 compatibility
+
+LibreSSL is now closer to OpenSSL 1.1 than OpenSSL 1.0. According to
+https://undeadly.org/cgi?action=article;sid=20220116121253, this is the
+intention of OpenBSD developers.
+
+According to #40630, many special cases are needed to compile Tor against
+LibreSSL 3.5 when using Tor's OpenSSL 1.0 compatibility mode, whereas only a
+small number of #defines are required when using OpenSSL 1.1 compatibility
+mode. One additional workaround is required for LibreSSL 3.4 compatibility.
+
+Compiles and passes unit tests with LibreSSL 3.4.3 and 3.5.1.
+---
+ configure.ac | 2 +-
+ src/lib/crypt_ops/compat_openssl.h | 22 +++++++++++++---------
+ src/lib/crypt_ops/crypto_openssl_mgt.h | 3 +--
+ src/lib/crypt_ops/crypto_rsa_openssl.c | 8 +++++---
+ 4 files changed, 20 insertions(+), 15 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8baae007cf..6ab7903010 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1022,7 +1022,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ AC_MSG_CHECKING([for OpenSSL < 1.0.1])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <openssl/opensslv.h>
+-#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1000100fL
++#if OPENSSL_VERSION_NUMBER < 0x1000100fL
+ #error "too old"
+ #endif
+ ]], [[]])],
+diff --git a/src/lib/crypt_ops/compat_openssl.h b/src/lib/crypt_ops/compat_openssl.h
+index 0f56f338b5..c5eccdb015 100644
+--- a/src/lib/crypt_ops/compat_openssl.h
++++ b/src/lib/crypt_ops/compat_openssl.h
+@@ -20,32 +20,36 @@
+ * \brief compatibility definitions for working with different openssl forks
+ **/
+
+-#if !defined(LIBRESSL_VERSION_NUMBER) && \
+- OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(1,0,1)
++#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(1,0,1)
+ #error "We require OpenSSL >= 1.0.1"
+ #endif
+
+-#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,1,0) && \
+- ! defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,1,0)
+ /* We define this macro if we're trying to build with the majorly refactored
+ * API in OpenSSL 1.1 */
+ #define OPENSSL_1_1_API
+ #endif /* OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,1,0) && ... */
+
+-#ifndef OPENSSL_1_1_API
+-#define OpenSSL_version(v) SSLeay_version(v)
+-#define tor_OpenSSL_version_num() SSLeay()
++/* LibreSSL claims to be OpenSSL 2.0 but lacks these OpenSSL 1.1 APIs */
++#if !defined(OPENSSL_1_1_API) || defined(LIBRESSL_VERSION_NUMBER)
+ #define RAND_OpenSSL() RAND_SSLeay()
+ #define STATE_IS_SW_SERVER_HELLO(st) \
+ (((st) == SSL3_ST_SW_SRVR_HELLO_A) || \
+ ((st) == SSL3_ST_SW_SRVR_HELLO_B))
+ #define OSSL_HANDSHAKE_STATE int
+ #define CONST_IF_OPENSSL_1_1_API
+-#else /* defined(OPENSSL_1_1_API) */
+-#define tor_OpenSSL_version_num() OpenSSL_version_num()
++#else
+ #define STATE_IS_SW_SERVER_HELLO(st) \
+ ((st) == TLS_ST_SW_SRVR_HELLO)
+ #define CONST_IF_OPENSSL_1_1_API const
++#endif
++
++/* OpenSSL 1.1 and LibreSSL both have these APIs */
++#ifndef OPENSSL_1_1_API
++#define OpenSSL_version(v) SSLeay_version(v)
++#define tor_OpenSSL_version_num() SSLeay()
++#else /* defined(OPENSSL_1_1_API) */
++#define tor_OpenSSL_version_num() OpenSSL_version_num()
+ #endif /* !defined(OPENSSL_1_1_API) */
+
+ #endif /* defined(ENABLE_OPENSSL) */
+diff --git a/src/lib/crypt_ops/crypto_openssl_mgt.h b/src/lib/crypt_ops/crypto_openssl_mgt.h
+index c6f63ffa08..96a37721dd 100644
+--- a/src/lib/crypt_ops/crypto_openssl_mgt.h
++++ b/src/lib/crypt_ops/crypto_openssl_mgt.h
+@@ -54,8 +54,7 @@
+ #define DISABLE_ENGINES
+ #endif
+
+-#if OPENSSL_VERSION_NUMBER >= OPENSSL_VER(1,1,0,0,5) && \
+- !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= OPENSSL_VER(1,1,0,0,5)
+ /* OpenSSL as of 1.1.0pre4 has an "new" thread API, which doesn't require
+ * setting up various callbacks.
+ *
+diff --git a/src/lib/crypt_ops/crypto_rsa_openssl.c b/src/lib/crypt_ops/crypto_rsa_openssl.c
+index a21c4a65cf..544d72e6ca 100644
+--- a/src/lib/crypt_ops/crypto_rsa_openssl.c
++++ b/src/lib/crypt_ops/crypto_rsa_openssl.c
+@@ -572,7 +572,9 @@ static bool
+ rsa_private_key_too_long(RSA *rsa, int max_bits)
+ {
+ const BIGNUM *n, *e, *p, *q, *d, *dmp1, *dmq1, *iqmp;
+-#ifdef OPENSSL_1_1_API
++#if defined(OPENSSL_1_1_API) && \
++ (!defined(LIBRESSL_VERSION_NUMBER) || \
++ LIBRESSL_VERSION_NUMBER >= OPENSSL_V_SERIES(3,5,0))
+
+ #if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,1,1)
+ n = RSA_get0_n(rsa);
+@@ -591,7 +593,7 @@ rsa_private_key_too_long(RSA *rsa, int max_bits)
+
+ if (RSA_bits(rsa) > max_bits)
+ return true;
+-#else /* !defined(OPENSSL_1_1_API) */
++#else /* !defined(OPENSSL_1_1_API) && ... */
+ n = rsa->n;
+ e = rsa->e;
+ p = rsa->p;
+@@ -600,7 +602,7 @@ rsa_private_key_too_long(RSA *rsa, int max_bits)
+ dmp1 = rsa->dmp1;
+ dmq1 = rsa->dmq1;
+ iqmp = rsa->iqmp;
+-#endif /* defined(OPENSSL_1_1_API) */
++#endif /* defined(OPENSSL_1_1_API) && ... */
+
+ if (n && BN_num_bits(n) > max_bits)
+ return true;
+--
+GitLab
+
+
+From b1545b6d18fbef6c790e2731a814fa54230d8857 Mon Sep 17 00:00:00 2001
+From: "Alex Xu (Hello71)" <alex_y_xu@yahoo.ca>
+Date: Tue, 19 Jul 2022 16:18:29 -0400
+Subject: [PATCH 2/2] Changes file for #40630 (LibreSSL 3.5 compatibility)
+
+---
+ changes/issue40630 | 3 +++
+ 1 file changed, 3 insertions(+)
+ create mode 100644 changes/issue40630
+
+diff --git a/changes/issue40630 b/changes/issue40630
+new file mode 100644
+index 0000000000..faf04941b6
+--- /dev/null
++++ b/changes/issue40630
+@@ -0,0 +1,3 @@
++ o Minor features (portability, compilation):
++ - Use OpenSSL 1.1 APIs for LibreSSL, fixing LibreSSL 3.5 compatibility.
++ Fixes issue 40630; patch by Alex Xu (Hello71).
+--
+GitLab
+
+From 9850dc59c0db5cbcadc314be8d324a992880fce1 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Mon, 29 May 2023 12:56:37 -0700
+Subject: [PATCH] tls: Disable a warning with LibreSSL >= 3.8.0
+
+Skip a warning using EC_GFp_nist_method() which was removed in LibreSSL
+3.8.
+
+Based on a patch from OpenBSD.
+
+https://github.com/openbsd/ports/commit/33fe251a08cb11f30ce6094a2e0759c3bb63ed16
+
+These functions are deprecated since OpenSSL 3.0.
+
+https://www.openssl.org/docs/man3.1/man3/EC_GFp_nist_method.html
+---
+ src/lib/tls/tortls_openssl.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/lib/tls/tortls_openssl.c b/src/lib/tls/tortls_openssl.c
+index 12260c09d3..c0a89ac272 100644
+--- a/src/lib/tls/tortls_openssl.c
++++ b/src/lib/tls/tortls_openssl.c
+@@ -340,8 +340,10 @@ tor_tls_init(void)
+ SSL_load_error_strings();
+ #endif /* defined(OPENSSL_1_1_API) */
+
+-#if (SIZEOF_VOID_P >= 8 && \
+- OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,1))
++#if (SIZEOF_VOID_P >= 8 && \
++ OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,1) && \
++ (!defined(LIBRESSL_VERSION_NUMBER) || \
++ LIBRESSL_VERSION_NUMBER < 0x3080000fL))
+ long version = tor_OpenSSL_version_num();
+
+ /* LCOV_EXCL_START : we can't test these lines on the same machine */
+--
+GitLab
+
diff --git a/net-vpn/tor/files/tor-0.4.7.13-opensslconf.patch b/net-vpn/tor/files/tor-0.4.7.13-opensslconf.patch
new file mode 100644
index 0000000..a92c9a3
--- /dev/null
+++ b/net-vpn/tor/files/tor-0.4.7.13-opensslconf.patch
@@ -0,0 +1,55 @@
+https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/754
+
+From 48f8d6918977673125d53a85d19d709136106739 Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Thu, 31 Aug 2023 14:35:52 -0700
+Subject: [PATCH] crypt_openssl_mgt: define DISABLE_ENGINES after
+ OPENSSL_NO_ENGINE
+
+With LibreSSL-3.8.1 these engines are no long available causing a build
+failure, but LibreSSL correctly defines OPENSSL_NO_ENGINE as part of its
+opensslfeatures.h. However Tor includes crypto_openssl_mgt.h before any
+of the openssl includes which would define OPENSSL_NO_ENGINE and then
+fails to define DISABLE_ENGINES.
+
+As the define is used in only a single .c file it is best to move it
+there.
+
+Signed-off-by: orbea <orbea@riseup.net>
+---
+ src/lib/crypt_ops/crypto_openssl_mgt.c | 5 +++++
+ src/lib/crypt_ops/crypto_openssl_mgt.h | 5 -----
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/lib/crypt_ops/crypto_openssl_mgt.c b/src/lib/crypt_ops/crypto_openssl_mgt.c
+index 6c01cb6aa8..ca12a82518 100644
+--- a/src/lib/crypt_ops/crypto_openssl_mgt.c
++++ b/src/lib/crypt_ops/crypto_openssl_mgt.c
+@@ -40,6 +40,11 @@ ENABLE_GCC_WARNING("-Wredundant-decls")
+
+ #include <string.h>
+
++#ifdef OPENSSL_NO_ENGINE
++/* Android's OpenSSL seems to have removed all of its Engine support. */
++#define DISABLE_ENGINES
++#endif
++
+ #ifndef NEW_THREAD_API
+ /** A number of preallocated mutexes for use by OpenSSL. */
+ static tor_mutex_t **openssl_mutexes_ = NULL;
+diff --git a/src/lib/crypt_ops/crypto_openssl_mgt.h b/src/lib/crypt_ops/crypto_openssl_mgt.h
+index 96a37721dd..eac0ec1977 100644
+--- a/src/lib/crypt_ops/crypto_openssl_mgt.h
++++ b/src/lib/crypt_ops/crypto_openssl_mgt.h
+@@ -49,11 +49,6 @@
+ #define OPENSSL_V_SERIES(a,b,c) \
+ OPENSSL_VER((a),(b),(c),0,0)
+
+-#ifdef OPENSSL_NO_ENGINE
+-/* Android's OpenSSL seems to have removed all of its Engine support. */
+-#define DISABLE_ENGINES
+-#endif
+-
+ #if OPENSSL_VERSION_NUMBER >= OPENSSL_VER(1,1,0,0,5)
+ /* OpenSSL as of 1.1.0pre4 has an "new" thread API, which doesn't require
+ * setting up various callbacks.
diff --git a/net-vpn/tor/files/tor-0.4.7.16-arm64-sandbox.patch b/net-vpn/tor/files/tor-0.4.7.16-arm64-sandbox.patch
new file mode 100644
index 0000000..2b473bf
--- /dev/null
+++ b/net-vpn/tor/files/tor-0.4.7.16-arm64-sandbox.patch
@@ -0,0 +1,337 @@
+From https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/574
+Gentoo Bug: https://bugs.gentoo.org/920063
+From: Pierre Bourdon <delroth@gmail.com>
+Date: Sat, 30 Apr 2022 11:52:59 +0200
+Subject: [PATCH 1/4] sandbox: fix openat filtering on AArch64
+
+New glibc versions not sign-extending 32 bit negative constants seems to
+not be a thing on AArch64. I suspect that this might not be the only
+architecture where the sign-extensions is happening, and the correct fix
+might be instead to use a proper 32 bit comparison for the first openat
+parameter. For now, band-aid fix this so the sandbox can work again on
+AArch64.
+--- a/src/lib/sandbox/sandbox.c
++++ b/src/lib/sandbox/sandbox.c
+@@ -518,7 +518,12 @@ libc_uses_openat_for_opendir(void)
+ static int
+ libc_negative_constant_needs_cast(void)
+ {
++#if defined(__aarch64__) && defined(__LP64__)
++ /* Existing glibc versions always sign-extend to 64 bits on AArch64. */
++ return 0;
++#else
+ return is_libc_at_least(2, 27);
++#endif
+ }
+
+ /** Allow a single file to be opened. If <b>use_openat</b> is true,
+--
+GitLab
+
+
+From 8fd13f7a7bfd4efc02d888ce9d10bcb6a80a03c8 Mon Sep 17 00:00:00 2001
+From: Pierre Bourdon <delroth@gmail.com>
+Date: Sat, 30 Apr 2022 13:02:16 +0200
+Subject: [PATCH 2/4] sandbox: filter {chown,chmod,rename} via their *at
+ variant on Aarch64
+
+The chown/chmod/rename syscalls have never existed on AArch64, and libc
+implements the POSIX functions via the fchownat/fchmodat/renameat
+syscalls instead.
+
+Add new filter functions for fchownat/fchmodat/renameat, not made
+architecture specific since the syscalls exists everywhere else too.
+However, in order to limit seccomp filter space usage, we only insert
+rules for one of {chown, chown32, fchownat} depending on the
+architecture (resp. {chmod, fchmodat}, {rename, renameat}).
+--- a/src/lib/sandbox/sandbox.c
++++ b/src/lib/sandbox/sandbox.c
+@@ -614,6 +614,32 @@ sb_chmod(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+ return 0;
+ }
+
++static int
++sb_fchmodat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
++{
++ int rc;
++ sandbox_cfg_t *elem = NULL;
++
++ // for each dynamic parameter filters
++ for (elem = filter; elem != NULL; elem = elem->next) {
++ smp_param_t *param = elem->param;
++
++ if (param != NULL && param->prot == 1 && param->syscall
++ == SCMP_SYS(fchmodat)) {
++ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fchmodat),
++ SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_STR(1, SCMP_CMP_EQ, param->value));
++ if (rc != 0) {
++ log_err(LD_BUG,"(Sandbox) failed to add fchmodat syscall, received "
++ "libseccomp error %d", rc);
++ return rc;
++ }
++ }
++ }
++
++ return 0;
++}
++
+ #ifdef __i386__
+ static int
+ sb_chown32(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+@@ -666,6 +692,32 @@ sb_chown(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+ }
+ #endif /* defined(__i386__) */
+
++static int
++sb_fchownat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
++{
++ int rc;
++ sandbox_cfg_t *elem = NULL;
++
++ // for each dynamic parameter filters
++ for (elem = filter; elem != NULL; elem = elem->next) {
++ smp_param_t *param = elem->param;
++
++ if (param != NULL && param->prot == 1 && param->syscall
++ == SCMP_SYS(fchownat)) {
++ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fchownat),
++ SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_STR(1, SCMP_CMP_EQ, param->value));
++ if (rc != 0) {
++ log_err(LD_BUG,"(Sandbox) failed to add fchownat syscall, received "
++ "libseccomp error %d", rc);
++ return rc;
++ }
++ }
++ }
++
++ return 0;
++}
++
+ /**
+ * Function responsible for setting up the rename syscall for
+ * the seccomp filter sandbox.
+@@ -697,6 +749,39 @@ sb_rename(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+ return 0;
+ }
+
++/**
++ * Function responsible for setting up the renameat syscall for
++ * the seccomp filter sandbox.
++ */
++static int
++sb_renameat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
++{
++ int rc;
++ sandbox_cfg_t *elem = NULL;
++
++ // for each dynamic parameter filters
++ for (elem = filter; elem != NULL; elem = elem->next) {
++ smp_param_t *param = elem->param;
++
++ if (param != NULL && param->prot == 1 &&
++ param->syscall == SCMP_SYS(renameat)) {
++
++ rc = seccomp_rule_add_4(ctx, SCMP_ACT_ALLOW, SCMP_SYS(renameat),
++ SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_STR(1, SCMP_CMP_EQ, param->value),
++ SCMP_CMP_NEG(2, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_STR(3, SCMP_CMP_EQ, param->value2));
++ if (rc != 0) {
++ log_err(LD_BUG,"(Sandbox) failed to add renameat syscall, received "
++ "libseccomp error %d", rc);
++ return rc;
++ }
++ }
++ }
++
++ return 0;
++}
++
+ /**
+ * Function responsible for setting up the openat syscall for
+ * the seccomp filter sandbox.
+@@ -1317,7 +1402,9 @@ static sandbox_filter_func_t filter_func[] = {
+ #else
+ sb_chown,
+ #endif
++ sb_fchownat,
+ sb_chmod,
++ sb_fchmodat,
+ sb_open,
+ sb_openat,
+ sb_opendir,
+@@ -1325,6 +1412,7 @@ static sandbox_filter_func_t filter_func[] = {
+ sb_ptrace,
+ #endif
+ sb_rename,
++ sb_renameat,
+ #ifdef __NR_fcntl64
+ sb_fcntl64,
+ #endif
+@@ -1592,10 +1680,24 @@ new_element(int syscall, char *value)
+
+ #ifdef __i386__
+ #define SCMP_chown SCMP_SYS(chown32)
++#elif defined(__aarch64__) && defined(__LP64__)
++#define SCMP_chown SCMP_SYS(fchownat)
+ #else
+ #define SCMP_chown SCMP_SYS(chown)
+ #endif
+
++#if defined(__aarch64__) && defined(__LP64__)
++#define SCMP_chmod SCMP_SYS(fchmodat)
++#else
++#define SCMP_chmod SCMP_SYS(chmod)
++#endif
++
++#if defined(__aarch64__) && defined(__LP64__)
++#define SCMP_rename SCMP_SYS(renameat)
++#else
++#define SCMP_rename SCMP_SYS(rename)
++#endif
++
+ #ifdef __NR_stat64
+ #define SCMP_stat SCMP_SYS(stat64)
+ #else
+@@ -1633,7 +1735,7 @@ sandbox_cfg_allow_chmod_filename(sandbox_cfg_t **cfg, char *file)
+ {
+ sandbox_cfg_t *elem = NULL;
+
+- elem = new_element(SCMP_SYS(chmod), file);
++ elem = new_element(SCMP_chmod, file);
+
+ elem->next = *cfg;
+ *cfg = elem;
+@@ -1659,7 +1761,7 @@ sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2)
+ {
+ sandbox_cfg_t *elem = NULL;
+
+- elem = new_element2(SCMP_SYS(rename), file1, file2);
++ elem = new_element2(SCMP_rename, file1, file2);
+
+ elem->next = *cfg;
+ *cfg = elem;
+--
+GitLab
+
+
+From eb0749d64917fee6ff74c3810dbec8cd063f546c Mon Sep 17 00:00:00 2001
+From: Pierre Bourdon <delroth@gmail.com>
+Date: Wed, 4 May 2022 07:19:40 +0200
+Subject: [PATCH 3/4] sandbox: replace SCMP_CMP_NEG with masked equality checks
+
+For some syscalls the kernel ABI uses 32 bit signed integers. Whether
+these 32 bit integer values are sign extended or zero extended to the
+native 64 bit register sizes is undefined and dependent on the {arch,
+compiler, libc} being used. Instead of trying to detect which cases
+zero-extend and which cases sign-extend, this commit uses a masked
+equality check on the lower 32 bits of the value.
+--- a/src/lib/sandbox/sandbox.c
++++ b/src/lib/sandbox/sandbox.c
+@@ -141,10 +141,12 @@ static sandbox_cfg_t *filter_dynamic = NULL;
+ * the high bits of the value might get masked out improperly. */
+ #define SCMP_CMP_MASKED(a,b,c) \
+ SCMP_CMP4((a), SCMP_CMP_MASKED_EQ, ~(scmp_datum_t)(b), (c))
+-/* For negative constants, the rule to add depends on the glibc version. */
+-#define SCMP_CMP_NEG(a,op,b) (libc_negative_constant_needs_cast() ? \
+- (SCMP_CMP((a), (op), (unsigned int)(b))) : \
+- (SCMP_CMP_STR((a), (op), (b))))
++/* Negative constants aren't consistently sign extended or zero extended.
++ * Different compilers, libc, and architectures behave differently. For cases
++ * where the kernel ABI uses a 32 bit integer, this macro can be used to
++ * mask-compare only the lower 32 bits of the value. */
++#define SCMP_CMP_LOWER32_EQ(a,b) \
++ SCMP_CMP4((a), SCMP_CMP_MASKED_EQ, 0xFFFFFFFF, (unsigned int)(b))
+
+ /** Variable used for storing all syscall numbers that will be allowed with the
+ * stage 1 general Tor sandbox.
+@@ -513,19 +515,6 @@ libc_uses_openat_for_opendir(void)
+ (is_libc_at_least(2, 15) && !is_libc_at_least(2, 22));
+ }
+
+-/* Return true if we think we're running with a libc that needs to cast
+- * negative arguments like AT_FDCWD for seccomp rules. */
+-static int
+-libc_negative_constant_needs_cast(void)
+-{
+-#if defined(__aarch64__) && defined(__LP64__)
+- /* Existing glibc versions always sign-extend to 64 bits on AArch64. */
+- return 0;
+-#else
+- return is_libc_at_least(2, 27);
+-#endif
+-}
+-
+ /** Allow a single file to be opened. If <b>use_openat</b> is true,
+ * we're using a libc that remaps all the opens into openats. */
+ static int
+@@ -533,7 +522,7 @@ allow_file_open(scmp_filter_ctx ctx, int use_openat, const char *file)
+ {
+ if (use_openat) {
+ return seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat),
+- SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_LOWER32_EQ(0, AT_FDCWD),
+ SCMP_CMP_STR(1, SCMP_CMP_EQ, file));
+ } else {
+ return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open),
+@@ -627,7 +616,7 @@ sb_fchmodat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(fchmodat)) {
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fchmodat),
+- SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_LOWER32_EQ(0, AT_FDCWD),
+ SCMP_CMP_STR(1, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add fchmodat syscall, received "
+@@ -705,7 +694,7 @@ sb_fchownat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(fchownat)) {
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fchownat),
+- SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_LOWER32_EQ(0, AT_FDCWD),
+ SCMP_CMP_STR(1, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add fchownat syscall, received "
+@@ -767,9 +756,9 @@ sb_renameat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+ param->syscall == SCMP_SYS(renameat)) {
+
+ rc = seccomp_rule_add_4(ctx, SCMP_ACT_ALLOW, SCMP_SYS(renameat),
+- SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_LOWER32_EQ(0, AT_FDCWD),
+ SCMP_CMP_STR(1, SCMP_CMP_EQ, param->value),
+- SCMP_CMP_NEG(2, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_LOWER32_EQ(2, AT_FDCWD),
+ SCMP_CMP_STR(3, SCMP_CMP_EQ, param->value2));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add renameat syscall, received "
+@@ -799,7 +788,7 @@ sb_openat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(openat)) {
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat),
+- SCMP_CMP_NEG(0, SCMP_CMP_EQ, AT_FDCWD),
++ SCMP_CMP_LOWER32_EQ(0, AT_FDCWD),
+ SCMP_CMP_STR(1, SCMP_CMP_EQ, param->value),
+ SCMP_CMP(2, SCMP_CMP_EQ, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|
+ O_CLOEXEC));
+--
+GitLab
+
+
+From 42034ae9da2866c67ce8cb8522d6a619d8b21170 Mon Sep 17 00:00:00 2001
+From: Pierre Bourdon <delroth@gmail.com>
+Date: Wed, 4 May 2022 07:31:06 +0200
+Subject: [PATCH 4/4] changes: add entry for MR !574
+
+--- /dev/null
++++ b/changes/aarch64_sandbox
+@@ -0,0 +1,5 @@
++ o Minor bugfixes (sandbox):
++ - Fix sandbox support on AArch64 systems. More "*at" variants of syscalls
++ are now supported. Signed 32 bit syscall parameters are checked more
++ precisely, which should lead to lower likelihood of breakages with future
++ compiler and libc releases. Fixes bug 40599; bugfix on 0.4.4.3-alpha.
+--
+GitLab
+
diff --git a/net-vpn/tor/files/tor.confd b/net-vpn/tor/files/tor.confd
new file mode 100644
index 0000000..4195bf3
--- /dev/null
+++ b/net-vpn/tor/files/tor.confd
@@ -0,0 +1,3 @@
+#
+# Set the file limit
+rc_ulimit="-n 30000"
diff --git a/net-vpn/tor/files/tor.initd-r9 b/net-vpn/tor/files/tor.initd-r9
new file mode 100644
index 0000000..c1639c2
--- /dev/null
+++ b/net-vpn/tor/files/tor.initd-r9
@@ -0,0 +1,37 @@
+#!/sbin/openrc-run
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command=/usr/bin/tor
+pidfile=/run/tor/tor.pid
+command_args="--hush --runasdaemon 1 --pidfile \"${pidfile}\""
+retry=${GRACEFUL_TIMEOUT:-60}
+stopsig=INT
+command_progress=yes
+
+extra_commands="checkconfig"
+extra_started_commands="reload"
+description="Anonymizing overlay network for TCP"
+description_checkconfig="Check for valid config file"
+description_reload="Reload the configuration"
+
+checkconfig() {
+ ${command} --verify-config --hush > /dev/null 2>&1
+ if [ $? -ne 0 ] ; then
+ eerror "Tor configuration (/etc/tor/torrc) is not valid."
+ eerror "Example is in /etc/tor/torrc.sample"
+ return 1
+ fi
+}
+
+start_pre() {
+ checkconfig || return 1
+ checkpath -d -m 0755 -o tor:tor /run/tor
+}
+
+reload() {
+ checkconfig || return 1
+ ebegin "Reloading Tor configuration"
+ start-stop-daemon -s HUP --pidfile ${pidfile}
+ eend $?
+}
diff --git a/net-vpn/tor/files/tor.service b/net-vpn/tor/files/tor.service
new file mode 100644
index 0000000..1663824
--- /dev/null
+++ b/net-vpn/tor/files/tor.service
@@ -0,0 +1,38 @@
+# tor.service -- this systemd configuration file for Tor sets up a
+# relatively conservative, hardened Tor service. You may need to
+# edit it if you are making changes to your Tor configuration that it
+# does not allow. Package maintainers: this should be a starting point
+# for your tor.service; it is not the last point.
+
+[Unit]
+Description=Anonymizing overlay network for TCP
+After=syslog.target network.target nss-lookup.target
+
+[Service]
+Type=notify
+NotifyAccess=all
+ExecStartPre=/usr/bin/tor -f /etc/tor/torrc --verify-config
+ExecStart=/usr/bin/tor -f /etc/tor/torrc
+ExecReload=/bin/kill -HUP ${MAINPID}
+KillSignal=SIGINT
+TimeoutSec=60
+Restart=on-failure
+WatchdogSec=1m
+LimitNOFILE=32768
+
+# Hardening
+Group=tor
+RuntimeDirectory=tor
+RuntimeDirectoryMode=0770
+PrivateTmp=yes
+PrivateDevices=yes
+ProtectHome=yes
+ProtectSystem=full
+ReadOnlyDirectories=/
+ReadWriteDirectories=-/var/lib/tor
+ReadWriteDirectories=-/var/log/tor
+NoNewPrivileges=yes
+CapabilityBoundingSet=CAP_SETUID CAP_SETGID CAP_NET_BIND_SERVICE
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-vpn/tor/files/torrc-r2 b/net-vpn/tor/files/torrc-r2
new file mode 100644
index 0000000..b308104
--- /dev/null
+++ b/net-vpn/tor/files/torrc-r2
@@ -0,0 +1,7 @@
+#
+# Minimal torrc so tor will work out of the box
+#
+User tor
+PIDFile /run/tor/tor.pid
+Log notice syslog
+DataDirectory /var/lib/tor/data
diff --git a/net-vpn/tor/metadata.xml b/net-vpn/tor/metadata.xml
new file mode 100644
index 0000000..fcc4644
--- /dev/null
+++ b/net-vpn/tor/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ajak@gentoo.org</email>
+ <name>John Helmert III</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>sam@gentoo.org</email>
+ <name>Sam James</name>
+ </maintainer>
+ <use>
+ <flag name="scrypt">Use <pkg>app-crypt/libscrypt</pkg> for the scrypt algorithm</flag>
+ <flag name="server">Enable tor's relay module so it can operate as a relay/bridge/authority</flag>
+ <flag name="tor-hardening">Compile tor with hardening on vanilla compilers/linkers</flag>
+ </use>
+</pkgmetadata>
diff --git a/net-vpn/tor/tor-0.4.7.13-r1.ebuild b/net-vpn/tor/tor-0.4.7.13-r1.ebuild
new file mode 100644
index 0000000..8ffff91
--- /dev/null
+++ b/net-vpn/tor/tor-0.4.7.13-r1.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/torproject.org.asc
+inherit autotools python-any-r1 readme.gentoo-r1 systemd verify-sig
+
+MY_PV="$(ver_rs 4 -)"
+MY_PF="${PN}-${MY_PV}"
+DESCRIPTION="Anonymizing overlay network for TCP"
+HOMEPAGE="https://www.torproject.org/ https://gitlab.torproject.org/tpo/core/tor/"
+SRC_URI="
+ https://www.torproject.org/dist/${MY_PF}.tar.gz
+ https://archive.torproject.org/tor-package-archive/${MY_PF}.tar.gz
+ verify-sig? (
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum.asc
+ )
+"
+S="${WORKDIR}/${MY_PF}"
+
+LICENSE="BSD GPL-2"
+SLOT="0"
+if [[ ${PV} != *_alpha* && ${PV} != *_beta* && ${PV} != *_rc* ]]; then
+ KEYWORDS="amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~sparc x86 ~ppc-macos"
+fi
+IUSE="caps doc lzma +man scrypt seccomp selinux +server systemd tor-hardening test zstd"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=dev-libs/libevent-2.1.12-r1:=[ssl]
+ sys-libs/zlib
+ caps? ( sys-libs/libcap )
+ man? ( app-text/asciidoc )
+ dev-libs/openssl:=[-bindist(-)]
+ lzma? ( app-arch/xz-utils )
+ scrypt? ( app-crypt/libscrypt )
+ seccomp? ( >=sys-libs/libseccomp-2.4.1 )
+ systemd? ( sys-apps/systemd )
+ zstd? ( app-arch/zstd )
+"
+RDEPEND="
+ acct-user/tor
+ acct-group/tor
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-tor )
+"
+DEPEND+="
+ test? (
+ ${DEPEND}
+ ${PYTHON_DEPS}
+ )
+"
+BDEPEND="verify-sig? ( >=sec-keys/openpgp-keys-tor-20221213 )"
+
+DOCS=()
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.2.7.4-torrc.sample.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-libressl.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-opensslconf.patch
+)
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_unpack() {
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_detached ${MY_PF}.tar.gz.sha256sum{,.asc}
+ verify-sig_verify_unsigned_checksums \
+ ${MY_PF}.tar.gz.sha256sum sha256 ${MY_PF}.tar.gz
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+}
+
+src_prepare() {
+ default
+
+ # Running shellcheck automagically isn't useful for ebuild testing.
+ echo "exit 0" > scripts/maint/checkShellScripts.sh || die
+
+ # Only needed for libressl patch
+ eautoreconf
+}
+
+src_configure() {
+ use doc && DOCS+=( README.md ChangeLog ReleaseNotes doc/HACKING )
+
+ export ac_cv_lib_cap_cap_init=$(usex caps)
+ export tor_cv_PYTHON="${EPYTHON}"
+
+ local myeconfargs=(
+ --localstatedir="${EPREFIX}/var"
+ --disable-all-bugs-are-fatal
+ --enable-system-torrc
+ --disable-android
+ --disable-coverage
+ --disable-html-manual
+ --disable-libfuzzer
+ --enable-missing-doc-warnings
+ --disable-module-dirauth
+ --enable-pic
+ --disable-restart-debugging
+
+ # This option is enabled by default upstream w/ zstd, surprisingly.
+ # zstd upstream says this shouldn't be relied upon and it may
+ # break API & ABI at any point, so Tor tries to fake static-linking
+ # to make it work, but then requires a rebuild on any new zstd version
+ # even when its standard ABI hasn't changed.
+ # See bug #727406 and bug #905708.
+ --disable-zstd-advanced-apis
+
+ $(use_enable man asciidoc)
+ $(use_enable man manpage)
+ $(use_enable lzma)
+ $(use_enable scrypt libscrypt)
+ $(use_enable seccomp)
+ $(use_enable server module-relay)
+ $(use_enable systemd)
+ $(use_enable tor-hardening gcc-hardening)
+ $(use_enable tor-hardening linker-hardening)
+ $(use_enable test unittests)
+ $(use_enable zstd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ default
+ readme.gentoo_create_doc
+
+ newconfd "${FILESDIR}"/tor.confd tor
+ newinitd "${FILESDIR}"/tor.initd-r9 tor
+ systemd_dounit "${FILESDIR}"/tor.service
+
+ keepdir /var/lib/tor
+
+ fperms 750 /var/lib/tor
+ fowners tor:tor /var/lib/tor
+
+ insinto /etc/tor/
+ newins "${FILESDIR}"/torrc-r2 torrc
+}
diff --git a/net-vpn/tor/tor-0.4.7.16-r1.ebuild b/net-vpn/tor/tor-0.4.7.16-r1.ebuild
new file mode 100644
index 0000000..d0ca8a1
--- /dev/null
+++ b/net-vpn/tor/tor-0.4.7.16-r1.ebuild
@@ -0,0 +1,182 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/torproject.org.asc
+inherit edo python-any-r1 readme.gentoo-r1 systemd verify-sig
+
+MY_PV="$(ver_rs 4 -)"
+MY_PF="${PN}-${MY_PV}"
+DESCRIPTION="Anonymizing overlay network for TCP"
+HOMEPAGE="https://www.torproject.org/ https://gitlab.torproject.org/tpo/core/tor/"
+
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://gitlab.torproject.org/tpo/core/tor"
+ inherit autotools git-r3
+else
+ SRC_URI="
+ https://www.torproject.org/dist/${MY_PF}.tar.gz
+ https://archive.torproject.org/tor-package-archive/${MY_PF}.tar.gz
+ verify-sig? (
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum.asc
+ )
+ "
+
+ S="${WORKDIR}/${MY_PF}"
+
+ if [[ ${PV} != *_alpha* && ${PV} != *_beta* && ${PV} != *_rc* ]]; then
+ KEYWORDS="~amd64 arm arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~sparc x86 ~ppc-macos"
+ fi
+
+ BDEPEND="verify-sig? ( >=sec-keys/openpgp-keys-tor-20230727 )"
+fi
+
+LICENSE="BSD GPL-2"
+SLOT="0"
+IUSE="caps doc lzma +man scrypt seccomp selinux +server systemd tor-hardening test zstd"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=dev-libs/libevent-2.1.12-r1:=[ssl]
+ dev-libs/openssl:=[-bindist(-)]
+ sys-libs/zlib
+ caps? ( sys-libs/libcap )
+ man? ( app-text/asciidoc )
+ lzma? ( app-arch/xz-utils )
+ scrypt? ( app-crypt/libscrypt )
+ seccomp? ( >=sys-libs/libseccomp-2.4.1 )
+ systemd? ( sys-apps/systemd:= )
+ zstd? ( app-arch/zstd:= )
+"
+RDEPEND="
+ acct-user/tor
+ acct-group/tor
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-tor )
+"
+DEPEND+="
+ test? (
+ ${DEPEND}
+ ${PYTHON_DEPS}
+ )
+"
+
+DOCS=()
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.2.7.4-torrc.sample.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-libressl.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-opensslconf.patch
+ "${FILESDIR}"/${P}-arm64-sandbox.patch
+)
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ else
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_detached ${MY_PF}.tar.gz.sha256sum{,.asc}
+ verify-sig_verify_unsigned_checksums \
+ ${MY_PF}.tar.gz.sha256sum sha256 ${MY_PF}.tar.gz
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+ fi
+}
+
+src_prepare() {
+ default
+
+ # Running shellcheck automagically isn't useful for ebuild testing.
+ echo "exit 0" > scripts/maint/checkShellScripts.sh || die
+
+ if [[ ${PV} == 9999 ]] ; then
+ eautoreconf
+ fi
+}
+
+src_configure() {
+ use doc && DOCS+=( README.md ChangeLog ReleaseNotes doc/HACKING )
+
+ export ac_cv_lib_cap_cap_init=$(usex caps)
+ export tor_cv_PYTHON="${EPYTHON}"
+
+ local myeconfargs=(
+ --localstatedir="${EPREFIX}/var"
+ --disable-all-bugs-are-fatal
+ --enable-system-torrc
+ --disable-android
+ --disable-coverage
+ --disable-html-manual
+ --disable-libfuzzer
+ --enable-missing-doc-warnings
+ --disable-module-dirauth
+ --enable-pic
+ --disable-restart-debugging
+
+ $(use_enable man asciidoc)
+ $(use_enable man manpage)
+ $(use_enable lzma)
+ $(use_enable scrypt libscrypt)
+ $(use_enable seccomp)
+ $(use_enable server module-relay)
+ $(use_enable systemd)
+ $(use_enable tor-hardening gcc-hardening)
+ $(use_enable tor-hardening linker-hardening)
+ $(use_enable test unittests)
+ $(use_enable zstd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local skip_tests=(
+ # Fails in sandbox
+ :sandbox/open_filename
+ :sandbox/openat_filename
+ )
+
+ if use arm ; then
+ skip_tests+=(
+ # bug #920905
+ # https://gitlab.torproject.org/tpo/core/tor/-/issues/40912
+ :sandbox/opendir_dirname
+ :sandbox/openat_filename
+ :sandbox/chmod_filename
+ :sandbox/chown_filename
+ :sandbox/rename_filename
+ )
+ fi
+
+ # The makefile runs these by parallel by chunking them with a script
+ # but that means we lose verbosity and can't skip individual tests easily
+ # either.
+ edo ./src/test/test --verbose "${skip_tests[@]}"
+}
+
+src_install() {
+ default
+ readme.gentoo_create_doc
+
+ newconfd "${FILESDIR}"/tor.confd tor
+ newinitd "${FILESDIR}"/tor.initd-r9 tor
+ systemd_dounit "${FILESDIR}"/tor.service
+
+ keepdir /var/lib/tor
+
+ fperms 750 /var/lib/tor
+ fowners tor:tor /var/lib/tor
+
+ insinto /etc/tor/
+ newins "${FILESDIR}"/torrc-r2 torrc
+}
diff --git a/net-vpn/tor/tor-0.4.7.16.ebuild b/net-vpn/tor/tor-0.4.7.16.ebuild
new file mode 100644
index 0000000..4ac7036
--- /dev/null
+++ b/net-vpn/tor/tor-0.4.7.16.ebuild
@@ -0,0 +1,169 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/torproject.org.asc
+inherit edo python-any-r1 readme.gentoo-r1 systemd verify-sig
+
+MY_PV="$(ver_rs 4 -)"
+MY_PF="${PN}-${MY_PV}"
+DESCRIPTION="Anonymizing overlay network for TCP"
+HOMEPAGE="https://www.torproject.org/ https://gitlab.torproject.org/tpo/core/tor/"
+
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://gitlab.torproject.org/tpo/core/tor"
+ inherit autotools git-r3
+else
+ SRC_URI="
+ https://www.torproject.org/dist/${MY_PF}.tar.gz
+ https://archive.torproject.org/tor-package-archive/${MY_PF}.tar.gz
+ verify-sig? (
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum.asc
+ )
+ "
+
+ S="${WORKDIR}/${MY_PF}"
+
+ if [[ ${PV} != *_alpha* && ${PV} != *_beta* && ${PV} != *_rc* ]]; then
+ KEYWORDS="amd64 ~arm ~arm64 ~hppa ~mips ppc ppc64 ~riscv ~sparc ~x86 ~ppc-macos"
+ fi
+
+ BDEPEND="verify-sig? ( >=sec-keys/openpgp-keys-tor-20230727 )"
+fi
+
+LICENSE="BSD GPL-2"
+SLOT="0"
+IUSE="caps doc lzma +man scrypt seccomp selinux +server systemd tor-hardening test zstd"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=dev-libs/libevent-2.1.12-r1:=[ssl]
+ dev-libs/openssl:=[-bindist(-)]
+ sys-libs/zlib
+ caps? ( sys-libs/libcap )
+ man? ( app-text/asciidoc )
+ lzma? ( app-arch/xz-utils )
+ scrypt? ( app-crypt/libscrypt )
+ seccomp? ( >=sys-libs/libseccomp-2.4.1 )
+ systemd? ( sys-apps/systemd:= )
+ zstd? ( app-arch/zstd:= )
+"
+RDEPEND="
+ acct-user/tor
+ acct-group/tor
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-tor )
+"
+DEPEND+="
+ test? (
+ ${DEPEND}
+ ${PYTHON_DEPS}
+ )
+"
+
+DOCS=()
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.2.7.4-torrc.sample.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-libressl.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-opensslconf.patch
+)
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ else
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_detached ${MY_PF}.tar.gz.sha256sum{,.asc}
+ verify-sig_verify_unsigned_checksums \
+ ${MY_PF}.tar.gz.sha256sum sha256 ${MY_PF}.tar.gz
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+ fi
+}
+
+src_prepare() {
+ default
+
+ # Running shellcheck automagically isn't useful for ebuild testing.
+ echo "exit 0" > scripts/maint/checkShellScripts.sh || die
+
+ if [[ ${PV} == 9999 ]] ; then
+ eautoreconf
+ fi
+}
+
+src_configure() {
+ use doc && DOCS+=( README.md ChangeLog ReleaseNotes doc/HACKING )
+
+ export ac_cv_lib_cap_cap_init=$(usex caps)
+ export tor_cv_PYTHON="${EPYTHON}"
+
+ local myeconfargs=(
+ --localstatedir="${EPREFIX}/var"
+ --disable-all-bugs-are-fatal
+ --enable-system-torrc
+ --disable-android
+ --disable-coverage
+ --disable-html-manual
+ --disable-libfuzzer
+ --enable-missing-doc-warnings
+ --disable-module-dirauth
+ --enable-pic
+ --disable-restart-debugging
+
+ $(use_enable man asciidoc)
+ $(use_enable man manpage)
+ $(use_enable lzma)
+ $(use_enable scrypt libscrypt)
+ $(use_enable seccomp)
+ $(use_enable server module-relay)
+ $(use_enable systemd)
+ $(use_enable tor-hardening gcc-hardening)
+ $(use_enable tor-hardening linker-hardening)
+ $(use_enable test unittests)
+ $(use_enable zstd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local skip_tests=(
+ # Fails in sandbox
+ :sandbox/open_filename
+ :sandbox/openat_filename
+ )
+
+ # The makefile runs these by parallel by chunking them with a script
+ # but that means we lose verbosity and can't skip individual tests easily
+ # either.
+ edo ./src/test/test --verbose "${skip_tests[@]}"
+}
+
+src_install() {
+ default
+ readme.gentoo_create_doc
+
+ newconfd "${FILESDIR}"/tor.confd tor
+ newinitd "${FILESDIR}"/tor.initd-r9 tor
+ systemd_dounit "${FILESDIR}"/tor.service
+
+ keepdir /var/lib/tor
+
+ fperms 750 /var/lib/tor
+ fowners tor:tor /var/lib/tor
+
+ insinto /etc/tor/
+ newins "${FILESDIR}"/torrc-r2 torrc
+}
diff --git a/net-vpn/tor/tor-0.4.8.10.ebuild b/net-vpn/tor/tor-0.4.8.10.ebuild
new file mode 100644
index 0000000..47b432d
--- /dev/null
+++ b/net-vpn/tor/tor-0.4.8.10.ebuild
@@ -0,0 +1,190 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/torproject.org.asc
+inherit edo python-any-r1 readme.gentoo-r1 systemd verify-sig
+
+MY_PV="$(ver_rs 4 -)"
+MY_PF="${PN}-${MY_PV}"
+DESCRIPTION="Anonymizing overlay network for TCP"
+HOMEPAGE="https://www.torproject.org/ https://gitlab.torproject.org/tpo/core/tor/"
+
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://gitlab.torproject.org/tpo/core/tor"
+ inherit autotools git-r3
+else
+ SRC_URI="
+ https://www.torproject.org/dist/${MY_PF}.tar.gz
+ https://archive.torproject.org/tor-package-archive/${MY_PF}.tar.gz
+ verify-sig? (
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum.asc
+ )
+ "
+
+ S="${WORKDIR}/${MY_PF}"
+
+ if [[ ${PV} != *_alpha* && ${PV} != *_beta* && ${PV} != *_rc* ]]; then
+ KEYWORDS="amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~sparc x86 ~ppc-macos"
+ fi
+
+ BDEPEND="verify-sig? ( >=sec-keys/openpgp-keys-tor-20230727 )"
+fi
+
+# BSD in general, but for PoW, needs --enable-gpl (GPL-3 per --version)
+# We also already had GPL-2 listed here for the init script, but obviously
+# that's different from the actual binary.
+LICENSE="BSD GPL-2 GPL-3"
+SLOT="0"
+IUSE="caps doc lzma +man scrypt seccomp selinux +server systemd tor-hardening test zstd"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=dev-libs/libevent-2.1.12-r1:=[ssl]
+ dev-libs/openssl:=[-bindist(-)]
+ sys-libs/zlib
+ caps? ( sys-libs/libcap )
+ man? ( app-text/asciidoc )
+ lzma? ( app-arch/xz-utils )
+ scrypt? ( app-crypt/libscrypt )
+ seccomp? ( >=sys-libs/libseccomp-2.4.1 )
+ systemd? ( sys-apps/systemd:= )
+ zstd? ( app-arch/zstd:= )
+"
+RDEPEND="
+ acct-user/tor
+ acct-group/tor
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-tor )
+"
+DEPEND+="
+ test? (
+ ${DEPEND}
+ ${PYTHON_DEPS}
+ )
+"
+
+DOCS=()
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.2.7.4-torrc.sample.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-opensslconf.patch
+)
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ else
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_detached ${MY_PF}.tar.gz.sha256sum{,.asc}
+ verify-sig_verify_unsigned_checksums \
+ ${MY_PF}.tar.gz.sha256sum sha256 ${MY_PF}.tar.gz
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+ fi
+}
+
+src_prepare() {
+ default
+
+ # Running shellcheck automagically isn't useful for ebuild testing.
+ echo "exit 0" > scripts/maint/checkShellScripts.sh || die
+
+ if [[ ${PV} == 9999 ]] ; then
+ eautoreconf
+ fi
+}
+
+src_configure() {
+ use doc && DOCS+=( README.md ChangeLog ReleaseNotes doc/HACKING )
+
+ export ac_cv_lib_cap_cap_init=$(usex caps)
+ export tor_cv_PYTHON="${EPYTHON}"
+
+ local myeconfargs=(
+ --localstatedir="${EPREFIX}/var"
+ --disable-all-bugs-are-fatal
+ --enable-system-torrc
+ --disable-android
+ --disable-coverage
+ --disable-html-manual
+ --disable-libfuzzer
+ --enable-missing-doc-warnings
+ --disable-module-dirauth
+ --enable-pic
+ --disable-restart-debugging
+
+ # Unless someone asks & has a compelling reason, just always
+ # build in GPL mode for pow, given we don't want yet another USE
+ # flag combination to have to test just for the sake of it.
+ # (PoW requires GPL.)
+ --enable-gpl
+ --enable-module-pow
+
+ $(use_enable man asciidoc)
+ $(use_enable man manpage)
+ $(use_enable lzma)
+ $(use_enable scrypt libscrypt)
+ $(use_enable seccomp)
+ $(use_enable server module-relay)
+ $(use_enable systemd)
+ $(use_enable tor-hardening gcc-hardening)
+ $(use_enable tor-hardening linker-hardening)
+ $(use_enable test unittests)
+ $(use_enable zstd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local skip_tests=(
+ # Fails in sandbox
+ :sandbox/open_filename
+ :sandbox/openat_filename
+ )
+
+ if use arm ; then
+ skip_tests+=(
+ # bug #920905
+ # https://gitlab.torproject.org/tpo/core/tor/-/issues/40912
+ :sandbox/opendir_dirname
+ :sandbox/openat_filename
+ :sandbox/chmod_filename
+ :sandbox/chown_filename
+ :sandbox/rename_filename
+ )
+ fi
+
+ # The makefile runs these by parallel by chunking them with a script
+ # but that means we lose verbosity and can't skip individual tests easily
+ # either.
+ edo ./src/test/test --verbose "${skip_tests[@]}"
+}
+
+src_install() {
+ default
+ readme.gentoo_create_doc
+
+ newconfd "${FILESDIR}"/tor.confd tor
+ newinitd "${FILESDIR}"/tor.initd-r9 tor
+ systemd_dounit "${FILESDIR}"/tor.service
+
+ keepdir /var/lib/tor
+
+ fperms 750 /var/lib/tor
+ fowners tor:tor /var/lib/tor
+
+ insinto /etc/tor/
+ newins "${FILESDIR}"/torrc-r2 torrc
+}
diff --git a/net-vpn/tor/tor-0.4.8.11.ebuild b/net-vpn/tor/tor-0.4.8.11.ebuild
new file mode 100644
index 0000000..34f9975
--- /dev/null
+++ b/net-vpn/tor/tor-0.4.8.11.ebuild
@@ -0,0 +1,190 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/torproject.org.asc
+inherit edo python-any-r1 readme.gentoo-r1 systemd verify-sig
+
+MY_PV="$(ver_rs 4 -)"
+MY_PF="${PN}-${MY_PV}"
+DESCRIPTION="Anonymizing overlay network for TCP"
+HOMEPAGE="https://www.torproject.org/ https://gitlab.torproject.org/tpo/core/tor/"
+
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://gitlab.torproject.org/tpo/core/tor"
+ inherit autotools git-r3
+else
+ SRC_URI="
+ https://www.torproject.org/dist/${MY_PF}.tar.gz
+ https://archive.torproject.org/tor-package-archive/${MY_PF}.tar.gz
+ verify-sig? (
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum
+ https://dist.torproject.org/${MY_PF}.tar.gz.sha256sum.asc
+ )
+ "
+
+ S="${WORKDIR}/${MY_PF}"
+
+ if [[ ${PV} != *_alpha* && ${PV} != *_beta* && ${PV} != *_rc* ]]; then
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~ppc-macos"
+ fi
+
+ BDEPEND="verify-sig? ( >=sec-keys/openpgp-keys-tor-20230727 )"
+fi
+
+# BSD in general, but for PoW, needs --enable-gpl (GPL-3 per --version)
+# We also already had GPL-2 listed here for the init script, but obviously
+# that's different from the actual binary.
+LICENSE="BSD GPL-2 GPL-3"
+SLOT="0"
+IUSE="caps doc lzma +man scrypt seccomp selinux +server systemd tor-hardening test zstd"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=dev-libs/libevent-2.1.12-r1:=[ssl]
+ dev-libs/openssl:=[-bindist(-)]
+ sys-libs/zlib
+ caps? ( sys-libs/libcap )
+ man? ( app-text/asciidoc )
+ lzma? ( app-arch/xz-utils )
+ scrypt? ( app-crypt/libscrypt )
+ seccomp? ( >=sys-libs/libseccomp-2.4.1 )
+ systemd? ( sys-apps/systemd:= )
+ zstd? ( app-arch/zstd:= )
+"
+RDEPEND="
+ acct-user/tor
+ acct-group/tor
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-tor )
+"
+DEPEND+="
+ test? (
+ ${DEPEND}
+ ${PYTHON_DEPS}
+ )
+"
+
+DOCS=()
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.2.7.4-torrc.sample.patch
+ "${FILESDIR}"/${PN}-0.4.7.13-opensslconf.patch
+)
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ else
+ if use verify-sig; then
+ cd "${DISTDIR}" || die
+ verify-sig_verify_detached ${MY_PF}.tar.gz.sha256sum{,.asc}
+ verify-sig_verify_unsigned_checksums \
+ ${MY_PF}.tar.gz.sha256sum sha256 ${MY_PF}.tar.gz
+ cd "${WORKDIR}" || die
+ fi
+
+ default
+ fi
+}
+
+src_prepare() {
+ default
+
+ # Running shellcheck automagically isn't useful for ebuild testing.
+ echo "exit 0" > scripts/maint/checkShellScripts.sh || die
+
+ if [[ ${PV} == 9999 ]] ; then
+ eautoreconf
+ fi
+}
+
+src_configure() {
+ use doc && DOCS+=( README.md ChangeLog ReleaseNotes doc/HACKING )
+
+ export ac_cv_lib_cap_cap_init=$(usex caps)
+ export tor_cv_PYTHON="${EPYTHON}"
+
+ local myeconfargs=(
+ --localstatedir="${EPREFIX}/var"
+ --disable-all-bugs-are-fatal
+ --enable-system-torrc
+ --disable-android
+ --disable-coverage
+ --disable-html-manual
+ --disable-libfuzzer
+ --enable-missing-doc-warnings
+ --disable-module-dirauth
+ --enable-pic
+ --disable-restart-debugging
+
+ # Unless someone asks & has a compelling reason, just always
+ # build in GPL mode for pow, given we don't want yet another USE
+ # flag combination to have to test just for the sake of it.
+ # (PoW requires GPL.)
+ --enable-gpl
+ --enable-module-pow
+
+ $(use_enable man asciidoc)
+ $(use_enable man manpage)
+ $(use_enable lzma)
+ $(use_enable scrypt libscrypt)
+ $(use_enable seccomp)
+ $(use_enable server module-relay)
+ $(use_enable systemd)
+ $(use_enable tor-hardening gcc-hardening)
+ $(use_enable tor-hardening linker-hardening)
+ $(use_enable test unittests)
+ $(use_enable zstd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ local skip_tests=(
+ # Fails in sandbox
+ :sandbox/open_filename
+ :sandbox/openat_filename
+ )
+
+ if use arm ; then
+ skip_tests+=(
+ # bug #920905
+ # https://gitlab.torproject.org/tpo/core/tor/-/issues/40912
+ :sandbox/opendir_dirname
+ :sandbox/openat_filename
+ :sandbox/chmod_filename
+ :sandbox/chown_filename
+ :sandbox/rename_filename
+ )
+ fi
+
+ # The makefile runs these by parallel by chunking them with a script
+ # but that means we lose verbosity and can't skip individual tests easily
+ # either.
+ edo ./src/test/test --verbose "${skip_tests[@]}"
+}
+
+src_install() {
+ default
+ readme.gentoo_create_doc
+
+ newconfd "${FILESDIR}"/tor.confd tor
+ newinitd "${FILESDIR}"/tor.initd-r9 tor
+ systemd_dounit "${FILESDIR}"/tor.service
+
+ keepdir /var/lib/tor
+
+ fperms 750 /var/lib/tor
+ fowners tor:tor /var/lib/tor
+
+ insinto /etc/tor/
+ newins "${FILESDIR}"/torrc-r2 torrc
+}
diff --git a/net-wireless/aircrack-ng/Manifest b/net-wireless/aircrack-ng/Manifest
deleted file mode 100644
index 694a11c..0000000
--- a/net-wireless/aircrack-ng/Manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-DIST aircrack-ng-1.2-rc1.tar.gz 2046476 SHA256 cf3134521e1c3d7aed4e384e3e5e7b6959e2d485bd1554474608a3a9328e35fd SHA512 897427c535846c0ede58b2f99ed469bc01f50f9b38fc70d5711261fca7342339192cc0c71a724fc04c99114db7534d825a44f09e7bc5754286ec44933a33e40d WHIRLPOOL 2f8df161c61b8dfa6f4bd5f4af677273f255f01ae84853a80fcde4c07f03e51dcad9dcf007afa5a1120521c641d35c23d07b1edfc51c90d7b8b216b179d27ea9
-DIST aircrack-ng-1.2-rc4.tar.gz 4379880 SHA256 d93ac16aade5b4d37ab8cdf6ce4b855835096ccf83deb65ffdeff6d666eaff36 SHA512 f1e1d465813a5f00fd8f8b287353033ea30b657a4c3a9fe81281ab2546d3238690f0659076bff53703fbc796ba40efb16115804d21f8516adca2c774fefea20c WHIRLPOOL f06d87911492e83c48ea062c8451c2380a8d721795aa875133076e8b81d6a88d68aba354a4150890db3bf1b41d56f9715b595c2eb71f2b7232061be4a9ffd815
diff --git a/net-wireless/aircrack-ng/aircrack-ng-1.2_rc1-r1.ebuild b/net-wireless/aircrack-ng/aircrack-ng-1.2_rc1-r1.ebuild
deleted file mode 100644
index 1caf883..0000000
--- a/net-wireless/aircrack-ng/aircrack-ng-1.2_rc1-r1.ebuild
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="5"
-
-PYTHON_COMPAT=( python2_7 )
-DISTUTILS_OPTIONAL=1
-
-inherit toolchain-funcs distutils-r1 flag-o-matic
-
-DESCRIPTION="WLAN tools for breaking 802.11 WEP/WPA keys"
-HOMEPAGE="http://www.aircrack-ng.org"
-
-if [[ ${PV} == "9999" ]] ; then
- inherit subversion
- ESVN_REPO_URI="http://svn.aircrack-ng.org/trunk"
- KEYWORDS=""
- S="${WORKDIR}/${PN}"
-else
- MY_PV=${PV/_/-}
- SRC_URI="http://download.${PN}.org/${PN}-${MY_PV}.tar.gz"
- KEYWORDS="amd64 arm ppc x86 ~amd64-linux ~x86-linux"
- S="${WORKDIR}/${PN}-${MY_PV}"
-fi
-
-LICENSE="GPL-2"
-SLOT="0"
-
-IUSE="+airdrop-ng +airgraph-ng kernel_linux kernel_FreeBSD libressl +netlink +pcre +sqlite +unstable"
-
-DEPEND="net-libs/libpcap
- !libressl? ( dev-libs/openssl:0= )
- libressl? ( dev-libs/libressl:0= )
- netlink? ( dev-libs/libnl:3 )
- pcre? ( dev-libs/libpcre )
- airdrop-ng? ( ${PYTHON_DEPS} )
- airgraph-ng? ( ${PYTHON_DEPS} )
- sqlite? ( >=dev-db/sqlite-3.4 )
- unstable? ( sys-libs/zlib )"
-RDEPEND="${DEPEND}
- kernel_linux? (
- net-wireless/iw
- net-wireless/wireless-tools
- sys-apps/ethtool
- sys-apps/usbutils
- sys-apps/pciutils )
- sys-apps/hwids
- airdrop-ng? ( net-wireless/lorcon[python,${PYTHON_USEDEP}] )"
-
-REQUIRED_USE="airdrop-ng? ( ${PYTHON_REQUIRED_USE} )
- airgraph-ng? ( ${PYTHON_REQUIRED_USE} )"
-
-src_compile() {
- if [[ $($(tc-getCC) --version) == clang* ]] ; then
- die "Please use gcc, upstream bug http://trac.aircrack-ng.org/ticket/1144"
- fi
-
- if [[ ${PV} == "9999" ]] ; then
- liveflags=REVFLAGS=-D_REVISION="${ESVN_WC_REVISION}"
- fi
-
- emake \
- CC="$(tc-getCC)" \
- AR="$(tc-getAR)" \
- LD="$(tc-getLD)" \
- RANLIB="$(tc-getRANLIB)" \
- libnl=$(usex netlink true false) \
- pcre=$(usex pcre true false) \
- sqlite=$(usex sqlite true false) \
- unstable=$(usex unstable true false) \
- ${liveflags}
-
- if use airgraph-ng; then
- cd "${S}/scripts/airgraph-ng"
- distutils-r1_src_compile
- fi
- if use airdrop-ng; then
- cd "${S}/scripts/airdrop-ng"
- distutils-r1_src_compile
- fi
-}
-
-src_test() {
- if [[ ${PV} == "9999" ]] ; then
- liveflags=REVFLAGS=-D_REVISION="${ESVN_WC_REVISION}"
- fi
-
- emake check \
- libnl=$(usex netlink true false) \
- pcre=$(usex pcre true false) \
- sqlite=$(usex sqlite true false) \
- unstable=$(usex unstable true false) \
- ${liveflags}
-}
-
-src_install() {
- if [[ ${PV} == "9999" ]] ; then
- liveflags=REVFLAGS=-D_REVISION="${ESVN_WC_REVISION}"
- fi
-
- emake \
- prefix="${ED}/usr" \
- libnl=$(usex netlink true false) \
- pcre=$(usex pcre true false) \
- sqlite=$(usex sqlite true false) \
- unstable=$(usex unstable true false) \
- ${liveflags} \
- install
-
- dodoc AUTHORS ChangeLog INSTALLING README
-
- if use airgraph-ng; then
- cd "${S}/scripts/airgraph-ng"
- distutils-r1_src_install
- fi
- if use airdrop-ng; then
- cd "${S}/scripts/airdrop-ng"
- distutils-r1_src_install
- fi
-
- #we don't need aircrack-ng's oui updater, we have our own
- rm "${ED}"/usr/sbin/airodump-ng-oui-update
-}
-
-pkg_postinst() {
- # Message is (c) FreeBSD
- # http://www.freebsd.org/cgi/cvsweb.cgi/ports/net-mgmt/aircrack-ng/files/pkg-message.in?rev=1.5
- if use kernel_FreeBSD ; then
- einfo "Contrary to Linux, it is not necessary to use airmon-ng to enable the monitor"
- einfo "mode of your wireless card. So do not care about what the manpages say about"
- einfo "airmon-ng, airodump-ng sets monitor mode automatically."
- echo
- einfo "To return from monitor mode, issue the following command:"
- einfo " ifconfig \${INTERFACE} -mediaopt monitor"
- einfo
- einfo "For aireplay-ng you need FreeBSD >= 7.0."
- fi
-}
diff --git a/net-wireless/aircrack-ng/aircrack-ng-1.2_rc4-r1.ebuild b/net-wireless/aircrack-ng/aircrack-ng-1.2_rc4-r1.ebuild
deleted file mode 100644
index 9bfac5c..0000000
--- a/net-wireless/aircrack-ng/aircrack-ng-1.2_rc4-r1.ebuild
+++ /dev/null
@@ -1,118 +0,0 @@
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="6"
-
-PYTHON_COMPAT=( python2_7 )
-DISTUTILS_OPTIONAL=1
-
-inherit toolchain-funcs distutils-r1 flag-o-matic
-
-DESCRIPTION="WLAN tools for breaking 802.11 WEP/WPA keys"
-HOMEPAGE="http://www.aircrack-ng.org"
-
-MY_PV=${PV/_/-}
-SRC_URI="http://download.${PN}.org/${PN}-${MY_PV}.tar.gz"
-KEYWORDS="~amd64 ~arm ~ppc ~x86 ~amd64-linux ~x86-linux"
-
-LICENSE="GPL-2"
-SLOT="0"
-
-IUSE="+airdrop-ng +airgraph-ng kernel_linux kernel_FreeBSD libressl +netlink +pcre +sqlite +experimental"
-
-DEPEND="net-libs/libpcap
- !libressl? ( dev-libs/openssl:0= )
- libressl? ( dev-libs/libressl:0= )
- netlink? ( dev-libs/libnl:3 )
- pcre? ( dev-libs/libpcre )
- airdrop-ng? ( ${PYTHON_DEPS} )
- airgraph-ng? ( ${PYTHON_DEPS} )
- experimental? ( sys-libs/zlib )
- sqlite? ( >=dev-db/sqlite-3.4 )"
-RDEPEND="${DEPEND}
- kernel_linux? (
- net-wireless/iw
- net-wireless/wireless-tools
- sys-apps/ethtool
- sys-apps/usbutils
- sys-apps/pciutils )
- sys-apps/hwids
- airdrop-ng? ( net-wireless/lorcon[python,${PYTHON_USEDEP}] )"
-
-REQUIRED_USE="airdrop-ng? ( ${PYTHON_REQUIRED_USE} )
- airgraph-ng? ( ${PYTHON_REQUIRED_USE} )"
-
-PATCHES=(
- "${FILESDIR}/${P}-openssl.patch"
-)
-
-S="${WORKDIR}/${PN}-${MY_PV}"
-
-pkg_setup() {
- MAKE_COMMON=(
- CC="$(tc-getCC)" \
- CXX="$(tc-getCXX)" \
- AR="$(tc-getAR)" \
- LD="$(tc-getLD)" \
- RANLIB="$(tc-getRANLIB)" \
- libnl=$(usex netlink true false) \
- pcre=$(usex pcre true false) \
- sqlite=$(usex sqlite true false) \
- experimental=$(usex experimental true false)
- prefix="${ED}/usr" \
- )
-}
-
-src_compile() {
- if [[ $($(tc-getCC) --version) == clang* ]] ; then
- #https://bugs.gentoo.org/show_bug.cgi?id=472890
- filter-flags -frecord-gcc-switches
- fi
-
- emake "${MAKE_COMMON[@]}"
-
- if use airgraph-ng; then
- cd "${S}/scripts/airgraph-ng"
- distutils-r1_src_compile
- fi
- if use airdrop-ng; then
- cd "${S}/scripts/airdrop-ng"
- distutils-r1_src_compile
- fi
-}
-
-src_test() {
- emake "${MAKE_COMMON[@]}" check
-}
-
-src_install() {
- einstalldocs
- emake "${MAKE_COMMON[@]}" install
-
- if use airgraph-ng; then
- cd "${S}/scripts/airgraph-ng"
- distutils-r1_src_install
- fi
- if use airdrop-ng; then
- cd "${S}/scripts/airdrop-ng"
- distutils-r1_src_install
- fi
-
- #we don't need aircrack-ng's oui updater, we have our own
- rm "${ED}"/usr/sbin/airodump-ng-oui-update
-}
-
-pkg_postinst() {
- # Message is (c) FreeBSD
- # http://www.freebsd.org/cgi/cvsweb.cgi/ports/net-mgmt/aircrack-ng/files/pkg-message.in?rev=1.5
- if use kernel_FreeBSD ; then
- einfo "Contrary to Linux, it is not necessary to use airmon-ng to enable the monitor"
- einfo "mode of your wireless card. So do not care about what the manpages say about"
- einfo "airmon-ng, airodump-ng sets monitor mode automatically."
- echo
- einfo "To return from monitor mode, issue the following command:"
- einfo " ifconfig \${INTERFACE} -mediaopt monitor"
- einfo
- einfo "For aireplay-ng you need FreeBSD >= 7.0."
- fi
-}
diff --git a/net-wireless/aircrack-ng/aircrack-ng-9999.ebuild b/net-wireless/aircrack-ng/aircrack-ng-9999.ebuild
deleted file mode 100644
index 3fceab7..0000000
--- a/net-wireless/aircrack-ng/aircrack-ng-9999.ebuild
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="6"
-
-PYTHON_COMPAT=( python2_7 )
-DISTUTILS_OPTIONAL=1
-
-inherit toolchain-funcs distutils-r1 flag-o-matic
-
-DESCRIPTION="WLAN tools for breaking 802.11 WEP/WPA keys"
-HOMEPAGE="http://www.aircrack-ng.org"
-
-if [[ ${PV} == "9999" ]] ; then
- inherit subversion
- ESVN_REPO_URI="http://svn.aircrack-ng.org/trunk"
- KEYWORDS=""
- S="${WORKDIR}/${PN}"
-else
- MY_PV=${PV/_/-}
- SRC_URI="http://download.${PN}.org/${PN}-${MY_PV}.tar.gz"
- KEYWORDS="~amd64 ~arm ~ppc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux"
- S="${WORKDIR}/${PN}-${MY_PV}"
-fi
-
-LICENSE="GPL-2"
-SLOT="0"
-
-IUSE="+airdrop-ng +airgraph-ng kernel_linux kernel_FreeBSD libressl +netlink +pcre +sqlite +experimental"
-
-DEPEND="net-libs/libpcap
- !libressl? ( dev-libs/openssl:0= )
- libressl? ( dev-libs/libressl:0= )
- netlink? ( dev-libs/libnl:3 )
- pcre? ( dev-libs/libpcre )
- airdrop-ng? ( ${PYTHON_DEPS} )
- airgraph-ng? ( ${PYTHON_DEPS} )
- experimental? ( sys-libs/zlib )
- sqlite? ( >=dev-db/sqlite-3.4 )"
-RDEPEND="${DEPEND}
- kernel_linux? (
- net-wireless/iw
- net-wireless/wireless-tools
- sys-apps/ethtool
- sys-apps/usbutils
- sys-apps/pciutils )
- sys-apps/hwids
- airdrop-ng? ( net-wireless/lorcon[python,${PYTHON_USEDEP}] )"
-
-REQUIRED_USE="airdrop-ng? ( ${PYTHON_REQUIRED_USE} )
- airgraph-ng? ( ${PYTHON_REQUIRED_USE} )"
-
-pkg_setup() {
- MAKE_COMMON=(
- CC="$(tc-getCC)" \
- CXX="$(tc-getCXX)" \
- AR="$(tc-getAR)" \
- LD="$(tc-getLD)" \
- RANLIB="$(tc-getRANLIB)" \
- libnl=$(usex netlink true false) \
- pcre=$(usex pcre true false) \
- sqlite=$(usex sqlite true false) \
- experimental=$(usex experimental true false)
- prefix="${ED}/usr" \
- )
- [[ ${PV} == "9999" ]] && MAKE_COMMON+=(
- liveflags=REVFLAGS=-D_REVISION="${ESVN_WC_REVISION}"
- )
-}
-
-src_compile() {
- if [[ $($(tc-getCC) --version) == clang* ]] ; then
- #https://bugs.gentoo.org/show_bug.cgi?id=472890
- filter-flags -frecord-gcc-switches
- fi
-
- emake "${MAKE_COMMON[@]}"
-
- if use airgraph-ng; then
- cd "${S}/scripts/airgraph-ng"
- distutils-r1_src_compile
- fi
- if use airdrop-ng; then
- cd "${S}/scripts/airdrop-ng"
- distutils-r1_src_compile
- fi
-}
-
-src_test() {
- emake "${MAKE_COMMON[@]}" check
-}
-
-src_install() {
- einstalldocs
- emake "${MAKE_COMMON[@]}" install
-
- if use airgraph-ng; then
- cd "${S}/scripts/airgraph-ng"
- distutils-r1_src_install
- fi
- if use airdrop-ng; then
- cd "${S}/scripts/airdrop-ng"
- distutils-r1_src_install
- fi
-
- #we don't need aircrack-ng's oui updater, we have our own
- rm "${ED}"/usr/sbin/airodump-ng-oui-update
-}
-
-pkg_postinst() {
- # Message is (c) FreeBSD
- # http://www.freebsd.org/cgi/cvsweb.cgi/ports/net-mgmt/aircrack-ng/files/pkg-message.in?rev=1.5
- if use kernel_FreeBSD ; then
- einfo "Contrary to Linux, it is not necessary to use airmon-ng to enable the monitor"
- einfo "mode of your wireless card. So do not care about what the manpages say about"
- einfo "airmon-ng, airodump-ng sets monitor mode automatically."
- echo
- einfo "To return from monitor mode, issue the following command:"
- einfo " ifconfig \${INTERFACE} -mediaopt monitor"
- einfo
- einfo "For aireplay-ng you need FreeBSD >= 7.0."
- fi
-}
diff --git a/net-wireless/aircrack-ng/files/aircrack-ng-1.2_rc4-openssl.patch b/net-wireless/aircrack-ng/files/aircrack-ng-1.2_rc4-openssl.patch
deleted file mode 100644
index a83f622..0000000
--- a/net-wireless/aircrack-ng/files/aircrack-ng-1.2_rc4-openssl.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Index: a/src/crypto.c
-===================================================================
---- a/src/crypto.c (revision 2881)
-+++ b/src/crypto.c (revision 2882)
-@@ -288,7 +288,15 @@
- void calc_mic (struct AP_info *ap, unsigned char pmk[32], unsigned char ptk[80], unsigned char mic[20]) {
- int i;
- unsigned char pke[100];
-+ #if defined(USE_GCRYPT) || OPENSSL_VERSION_NUMBER < 0x10100000L
-+ #define HMAC_USE_NO_PTR
-+ #endif
-+
-+ #ifdef HMAC_USE_NO_PTR
- HMAC_CTX ctx;
-+ #else
-+ HMAC_CTX * ctx;
-+ #endif
-
- memcpy( pke, "Pairwise key expansion", 23 );
-
-@@ -314,6 +322,7 @@
- memcpy( pke + 67, ap->wpa.snonce, 32 );
- }
-
-+ #ifdef HMAC_USE_NO_PTR
- HMAC_CTX_init(&ctx);
- HMAC_Init_ex(&ctx, pmk, 32, EVP_sha1(), NULL);
- for(i = 0; i < 4; i++ )
-@@ -325,6 +334,20 @@
- HMAC_Final(&ctx, ptk + i*20, NULL);
- }
- HMAC_CTX_cleanup(&ctx);
-+ #else
-+ ctx = HMAC_CTX_new();
-+ HMAC_Init_ex(ctx, pmk, 32, EVP_sha1(), NULL);
-+ for(i = 0; i < 4; i++ )
-+ {
-+ pke[99] = i;
-+ //HMAC(EVP_sha1(), values[0], 32, pke, 100, ptk + i * 20, NULL);
-+ HMAC_Init_ex(ctx, 0, 0, 0, 0);
-+ HMAC_Update(ctx, pke, 100);
-+ HMAC_Final(ctx, ptk + i*20, NULL);
-+ }
-+ HMAC_CTX_free(ctx);
-+ #endif
-+ #undef HMAC_USE_NO_PTR
-
- if( ap->wpa.keyver == 1 )
- {
diff --git a/net-wireless/aircrack-ng/metadata.xml b/net-wireless/aircrack-ng/metadata.xml
deleted file mode 100644
index 7e8481f..0000000
--- a/net-wireless/aircrack-ng/metadata.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
-<maintainer type="person">
- <email>zerochaos@gentoo.org</email>
- <name>Rick Farina</name>
- <description>Also on the upstream team</description>
-</maintainer>
-<maintainer type="project">
- <email>netmon@gentoo.org</email>
- <name>Gentoo network monitoring and analysis project</name>
-</maintainer>
-<maintainer type="project">
- <email>crypto@gentoo.org</email>
- <name>Crypto</name>
-</maintainer>
-<longdescription>
- aircrack is a set of tools for auditing wireless networks.
- aircrack-ng is the next generation of aircrack with lots of new features.
- (from http://www.aircrack-ng.org)
-</longdescription>
-<use>
- <flag name="airdrop-ng">Build airdrop-ng</flag>
- <flag name="airgraph-ng">Build airgraph-ng</flag>
- <flag name="experimental">Build the "experimental" tools which may randomly fail to run properly</flag>
- <flag name="netlink">Use netlink for channel control instead of WEXT</flag>
- <flag name="unstable">Build the "unstable" tools which may randomly fail to run properly</flag>
-</use>
-</pkgmetadata>
diff --git a/net-wireless/hostapd/Manifest b/net-wireless/hostapd/Manifest
index d3f91f3..c70e377 100644
--- a/net-wireless/hostapd/Manifest
+++ b/net-wireless/hostapd/Manifest
@@ -1 +1 @@
-DIST hostapd-2.6.tar.gz 1822341 SHA256 01526b90c1d23bec4b0f052039cc4456c2fd19347b4d830d1d58a0a6aea7117d SHA512 e60baaa092786250b8de9935f5417c7626f5d749210cce9f83d776b65c19fc92a8141f41923389f05c16295d482a15ae8d8b744f4667425040c99e3c2f5b1bda WHIRLPOOL fa093c371a66f3aa834d44060330259dc20e3a1937ffacc4450c5c645291c2bd4b31bbe1827f7d27bfca724c5e26f53ea59f2e3aa69a4c87177212bb491b119a
+DIST hostapd-2.10.tar.gz 2440435 BLAKE2B dbeeae2f62a8ab52df3e2d05ff0467b643cd68349ef3b28814a11dfb67d4b23d14cf2461a3040694706ec614fcd7c2e0fe58f3597e877cf47296cd75e11c792f SHA512 243baa82d621f859d2507d8d5beb0ebda15a75548a62451dc9bca42717dcc8607adac49b354919a41d8257d16d07ac7268203a79750db0cfb34b51f80ff1ce8f
diff --git a/net-wireless/hostapd/files/hostapd-2.10-libressl.patch b/net-wireless/hostapd/files/hostapd-2.10-libressl.patch
new file mode 100644
index 0000000..268cc27
--- /dev/null
+++ b/net-wireless/hostapd/files/hostapd-2.10-libressl.patch
@@ -0,0 +1,23 @@
+From 87deed487d8f27feb7c6f8180535e67d9e1847ca Mon Sep 17 00:00:00 2001
+From: orbea <orbea@riseup.net>
+Date: Wed, 6 Jul 2022 17:24:11 -0700
+Subject: [PATCH] Fix build with libressl-3.5.x
+
+Fails with a undefined reference to SSL_set_cert_cb.
+---
+ src/crypto/tls_openssl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
+index c9e00b3..5f44a73 100644
+--- a/src/crypto/tls_openssl.c
++++ b/src/crypto/tls_openssl.c
+@@ -3048,7 +3048,7 @@ static int tls_set_conn_flags(struct tls_connection *conn, unsigned int flags,
+ /* Start with defaults from BoringSSL */
+ SSL_CTX_set_verify_algorithm_prefs(conn->ssl_ctx, NULL, 0);
+ #endif /* OPENSSL_IS_BORINGSSL */
+-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
+ if (flags & TLS_CONN_SUITEB_NO_ECDH) {
+ const char *ciphers = "DHE-RSA-AES256-GCM-SHA384";
+
diff --git a/net-wireless/hostapd/files/hostapd-2.6-libressl.patch b/net-wireless/hostapd/files/hostapd-2.6-libressl.patch
deleted file mode 100644
index 2010ca8..0000000
--- a/net-wireless/hostapd/files/hostapd-2.6-libressl.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -Naur hostapd-2.6.orig/src/crypto/crypto_openssl.c hostapd-2.6/src/crypto/crypto_openssl.c
---- hostapd-2.6.orig/src/crypto/crypto_openssl.c 2017-02-28 12:49:32.286902599 -0800
-+++ hostapd-2.6/src/crypto/crypto_openssl.c 2017-02-28 12:53:03.119653570 -0800
-@@ -611,7 +611,7 @@
-
- void * dh5_init(struct wpabuf **priv, struct wpabuf **publ)
- {
--#if OPENSSL_VERSION_NUMBER < 0x10100000L
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
- DH *dh;
- struct wpabuf *pubkey = NULL, *privkey = NULL;
- size_t publen, privlen;
-@@ -712,7 +712,7 @@
-
- void * dh5_init_fixed(const struct wpabuf *priv, const struct wpabuf *publ)
- {
--#if OPENSSL_VERSION_NUMBER < 0x10100000L
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
- DH *dh;
-
- dh = DH_new();
diff --git a/net-wireless/hostapd/files/hostapd-init.d b/net-wireless/hostapd/files/hostapd-init.d
index fc423e7..3c0fdc9 100644
--- a/net-wireless/hostapd/files/hostapd-init.d
+++ b/net-wireless/hostapd/files/hostapd-init.d
@@ -1,7 +1,6 @@
#!/sbin/openrc-run
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Id$
pidfile="/run/${SVCNAME}.pid"
command="/usr/sbin/hostapd"
diff --git a/net-wireless/hostapd/hostapd-2.10-r3.ebuild b/net-wireless/hostapd/hostapd-2.10-r3.ebuild
new file mode 100644
index 0000000..2c60eed
--- /dev/null
+++ b/net-wireless/hostapd/hostapd-2.10-r3.ebuild
@@ -0,0 +1,266 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic systemd savedconfig toolchain-funcs
+
+DESCRIPTION="IEEE 802.11 wireless LAN Host AP daemon"
+HOMEPAGE="https://w1.fi/ https://w1.fi/cgit/hostap/"
+S="${S}/${PN}"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://w1.fi/hostap.git"
+else
+ if [[ ${PV} =~ ^.*_p[0-9]{8}$ ]]; then
+ SRC_URI+=" https://dev.gentoo.org/~andrey_utkin/distfiles/${P}.tar.xz"
+ else
+ SRC_URI+=" https://w1.fi/releases/${P}.tar.gz"
+ fi
+
+ # Never stabilize snapshot ebuilds please
+ KEYWORDS="amd64 arm arm64 ~mips ppc x86"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+IUSE="internal-tls ipv6 netlink selinux sqlite +suiteb +wps"
+
+DEPEND="
+ internal-tls? ( dev-libs/libtommath )
+ !internal-tls? ( dev-libs/openssl:0=[-bindist(-)] )
+ kernel_linux? (
+ net-wireless/wireless-regdb
+ >=dev-libs/libnl-3.2:3
+ )
+ netlink? ( net-libs/libnfnetlink )
+ sqlite? ( dev-db/sqlite:3 )
+"
+RDEPEND="
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-hostapd )
+"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=( "${FILESDIR}"/${P}-libressl.patch )
+
+pkg_pretend() {
+ if use internal-tls; then
+ ewarn "internal-tls implementation is experimental and provides fewer features"
+ fi
+}
+
+src_unpack() {
+ # Override default one because we need the SRC_URI ones even in case of 9999 ebuilds
+ default
+
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ fi
+}
+
+src_prepare() {
+ # Allow users to apply patches to src/drivers for example,
+ # i.e. anything outside ${S}/${PN}
+ pushd ../ >/dev/null || die
+ default
+ popd >/dev/null || die
+
+ sed -i -e "s:/etc/hostapd:/etc/hostapd/hostapd:g" \
+ "${S}/hostapd.conf" || die
+}
+
+src_configure() {
+ local CONFIG="${S}"/.config
+
+ restore_config "${CONFIG}"
+ if [[ -f "${CONFIG}" ]]; then
+ default
+ return 0
+ fi
+
+ # toolchain setup
+ echo "CC = $(tc-getCC)" > "${CONFIG}" || die
+
+ # EAP authentication methods
+ echo "CONFIG_EAP=y" >> "${CONFIG}" || die
+ echo "CONFIG_ERP=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_MD5=y" >> "${CONFIG}" || die
+
+ if use suiteb; then
+ echo "CONFIG_SUITEB=y" >> "${CONFIG}" || die
+ echo "CONFIG_SUITEB192=y" >> "${CONFIG}" || die
+ fi
+
+ if use internal-tls ; then
+ echo "CONFIG_TLS=internal" >> "${CONFIG}" || die
+ else
+ # SSL authentication methods
+ echo "CONFIG_DPP=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_FAST=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_MSCHAPV2=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_PEAP=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_PWD=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_TLS=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_TTLS=y" >> "${CONFIG}" || die
+ echo "CONFIG_OWE=y" >> "${CONFIG}" || die
+ echo "CONFIG_SAE=y" >> "${CONFIG}" || die
+ echo "CONFIG_TLSV11=y" >> "${CONFIG}" || die
+ echo "CONFIG_TLSV12=y" >> "${CONFIG}" || die
+ fi
+
+ if use wps; then
+ # Enable Wi-Fi Protected Setup
+ echo "CONFIG_WPS=y" >> "${CONFIG}" || die
+ echo "CONFIG_WPS2=y" >> "${CONFIG}" || die
+ echo "CONFIG_WPS_UPNP=y" >> "${CONFIG}" || die
+ echo "CONFIG_WPS_NFC=y" >> "${CONFIG}" || die
+ einfo "Enabling Wi-Fi Protected Setup support"
+ fi
+
+ echo "CONFIG_EAP_IKEV2=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_TNC=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_GTC=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_SIM=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_AKA=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_AKA_PRIME=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_EKE=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_PAX=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_PSK=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_SAKE=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_GPSK=y" >> "${CONFIG}" || die
+ echo "CONFIG_EAP_GPSK_SHA256=y" >> "${CONFIG}" || die
+
+ einfo "Enabling drivers: "
+
+ # drivers
+ echo "CONFIG_DRIVER_HOSTAP=y" >> "${CONFIG}" || die
+ einfo " HostAP driver enabled"
+ echo "CONFIG_DRIVER_WIRED=y" >> "${CONFIG}" || die
+ einfo " Wired driver enabled"
+ echo "CONFIG_DRIVER_NONE=y" >> "${CONFIG}" || die
+ einfo " None driver enabled"
+
+ einfo " nl80211 driver enabled"
+ echo "CONFIG_DRIVER_NL80211=y" >> "${CONFIG}" || die
+
+ # epoll
+ echo "CONFIG_ELOOP_EPOLL=y" >> "${CONFIG}" || die
+
+ # misc
+ echo "CONFIG_DEBUG_FILE=y" >> "${CONFIG}" || die
+ echo "CONFIG_PKCS12=y" >> "${CONFIG}" || die
+ echo "CONFIG_RADIUS_SERVER=y" >> "${CONFIG}" || die
+ echo "CONFIG_IAPP=y" >> "${CONFIG}" || die
+ echo "CONFIG_IEEE80211R=y" >> "${CONFIG}" || die
+ echo "CONFIG_IEEE80211W=y" >> "${CONFIG}" || die
+ echo "CONFIG_IEEE80211N=y" >> "${CONFIG}" || die
+ echo "CONFIG_IEEE80211AC=y" >> "${CONFIG}" || die
+ echo "CONFIG_IEEE80211AX=y" >> "${CONFIG}" || die
+ echo "CONFIG_OCV=y" >> "${CONFIG}" || die
+ echo "CONFIG_PEERKEY=y" >> "${CONFIG}" || die
+ echo "CONFIG_RSN_PREAUTH=y" >> "${CONFIG}" || die
+ echo "CONFIG_INTERWORKING=y" >> "${CONFIG}" || die
+ echo "CONFIG_FULL_DYNAMIC_VLAN=y" >> "${CONFIG}" || die
+ echo "CONFIG_HS20=y" >> "${CONFIG}" || die
+ echo "CONFIG_WNM=y" >> "${CONFIG}" || die
+ echo "CONFIG_FST=y" >> "${CONFIG}" || die
+ echo "CONFIG_FST_TEST=y" >> "${CONFIG}" || die
+ echo "CONFIG_ACS=y" >> "${CONFIG}" || die
+
+ if use netlink; then
+ # Netlink support
+ echo "CONFIG_VLAN_NETLINK=y" >> "${CONFIG}" || die
+ fi
+
+ if use ipv6; then
+ # IPv6 support
+ echo "CONFIG_IPV6=y" >> "${CONFIG}" || die
+ fi
+
+ if use sqlite; then
+ # Sqlite support
+ echo "CONFIG_SQLITE=y" >> "${CONFIG}" || die
+ fi
+
+ if use kernel_linux; then
+ echo "CONFIG_LIBNL32=y" >> "${CONFIG}" || die
+ append-cflags "$($(tc-getPKG_CONFIG) --cflags libnl-3.0)"
+ fi
+
+ # TODO: Add support for BSD drivers
+
+ default
+}
+
+src_compile() {
+ emake V=1
+
+ if ! use internal-tls; then
+ emake V=1 nt_password_hash
+ emake V=1 hlr_auc_gw
+ fi
+}
+
+src_install() {
+ insinto /etc/${PN}
+ doins ${PN}.{conf,accept,deny,eap_user,radius_clients,sim_db,wpa_psk}
+
+ fperms -R 600 /etc/${PN}
+
+ dosbin ${PN}
+ dobin ${PN}_cli
+
+ if ! use internal-tls; then
+ dobin nt_password_hash hlr_auc_gw
+ fi
+
+ newinitd "${FILESDIR}/${PN}-init.d" ${PN}
+ newconfd "${FILESDIR}/${PN}-conf.d" ${PN}
+ systemd_dounit "${FILESDIR}/${PN}.service"
+
+ doman ${PN}{.8,_cli.1}
+
+ dodoc ChangeLog README
+ use wps && dodoc README-WPS
+
+ docinto examples
+ dodoc wired.conf
+
+ insinto /etc/log.d/conf/services/
+ doins logwatch/${PN}.conf
+
+ exeinto /etc/log.d/scripts/services/
+ doexe logwatch/${PN}
+
+ save_config .config
+}
+
+pkg_postinst() {
+ einfo
+ einfo "If you are running OpenRC you need to follow this instructions:"
+ einfo "In order to use ${PN} you need to set up your wireless card"
+ einfo "for master mode in /etc/conf.d/net and then start"
+ einfo "/etc/init.d/${PN}."
+ einfo
+ einfo "Example configuration:"
+ einfo
+ einfo "config_wlan0=( \"192.168.1.1/24\" )"
+ einfo "channel_wlan0=\"6\""
+ einfo "essid_wlan0=\"test\""
+ einfo "mode_wlan0=\"master\""
+ einfo
+
+ #if [[ -e "${KV_DIR}"/net/mac80211 ]]; then
+ # einfo "This package now compiles against the headers installed by"
+ # einfo "the kernel source for the mac80211 driver. You should "
+ # einfo "re-emerge ${PN} after upgrading your kernel source."
+ #fi
+
+ if use wps; then
+ einfo "You have enabled Wi-Fi Protected Setup support, please"
+ einfo "read the README-WPS file in /usr/share/doc/${PF}"
+ einfo "for info on how to use WPS"
+ fi
+}
diff --git a/net-wireless/hostapd/hostapd-2.6.ebuild b/net-wireless/hostapd/hostapd-2.6.ebuild
deleted file mode 100644
index 68f116a..0000000
--- a/net-wireless/hostapd/hostapd-2.6.ebuild
+++ /dev/null
@@ -1,222 +0,0 @@
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="6"
-
-inherit toolchain-funcs eutils systemd
-
-# bogus commit to force manifest regeneration #596462
-
-DESCRIPTION="IEEE 802.11 wireless LAN Host AP daemon"
-HOMEPAGE="http://hostap.epitest.fi"
-SRC_URI="http://hostap.epitest.fi/releases/${P}.tar.gz"
-
-LICENSE="|| ( GPL-2 BSD )"
-SLOT="0"
-KEYWORDS="amd64 ~arm ~mips ppc x86"
-IUSE="ipv6 libressl logwatch netlink sqlite +ssl +wps +crda"
-
-DEPEND="ssl? (
- !libressl? ( dev-libs/openssl:*[-bindist] )
- libressl? ( dev-libs/libressl:= )
- )
- kernel_linux? (
- dev-libs/libnl:3
- crda? ( net-wireless/crda )
- )
- netlink? ( net-libs/libnfnetlink )
- sqlite? ( >=dev-db/sqlite-3 )"
-
-RDEPEND="${DEPEND}"
-
-PATCHES=( "${FILESDIR}"/${P}-libressl.patch )
-
-S="${S}/${PN}"
-
-src_prepare() {
- # Allow users to apply patches to src/drivers for example,
- # i.e. anything outside ${S}/${PN}
- pushd ../ >/dev/null || die
- default
- popd >/dev/null || die
-
- sed -i -e "s:/etc/hostapd:/etc/hostapd/hostapd:g" \
- "${S}/hostapd.conf" || die
-}
-
-src_configure() {
- local CONFIG="${S}/.config"
-
- # toolchain setup
- echo "CC = $(tc-getCC)" > ${CONFIG}
-
- # EAP authentication methods
- echo "CONFIG_EAP=y" >> ${CONFIG}
- echo "CONFIG_ERP=y" >> ${CONFIG}
- echo "CONFIG_EAP_MD5=y" >> ${CONFIG}
-
- if use ssl; then
- # SSL authentication methods
- echo "CONFIG_EAP_FAST=y" >> ${CONFIG}
- echo "CONFIG_EAP_TLS=y" >> ${CONFIG}
- echo "CONFIG_EAP_TTLS=y" >> ${CONFIG}
- echo "CONFIG_EAP_MSCHAPV2=y" >> ${CONFIG}
- echo "CONFIG_EAP_PEAP=y" >> ${CONFIG}
- echo "CONFIG_TLSV11=y" >> ${CONFIG}
- echo "CONFIG_TLSV12=y" >> ${CONFIG}
- fi
-
- if use wps; then
- # Enable Wi-Fi Protected Setup
- echo "CONFIG_WPS=y" >> ${CONFIG}
- echo "CONFIG_WPS2=y" >> ${CONFIG}
- echo "CONFIG_WPS_UPNP=y" >> ${CONFIG}
- echo "CONFIG_WPS_NFC=y" >> ${CONFIG}
- einfo "Enabling Wi-Fi Protected Setup support"
- fi
-
- echo "CONFIG_EAP_IKEV2=y" >> ${CONFIG}
- echo "CONFIG_EAP_TNC=y" >> ${CONFIG}
- echo "CONFIG_EAP_GTC=y" >> ${CONFIG}
- echo "CONFIG_EAP_SIM=y" >> ${CONFIG}
- echo "CONFIG_EAP_AKA=y" >> ${CONFIG}
- echo "CONFIG_EAP_AKA_PRIME=y" >> ${CONFIG}
- echo "CONFIG_EAP_EKE=y" >> ${CONFIG}
- echo "CONFIG_EAP_PAX=y" >> ${CONFIG}
- echo "CONFIG_EAP_PSK=y" >> ${CONFIG}
- echo "CONFIG_EAP_SAKE=y" >> ${CONFIG}
- echo "CONFIG_EAP_GPSK=y" >> ${CONFIG}
- echo "CONFIG_EAP_GPSK_SHA256=y" >> ${CONFIG}
- echo "CONFIG_EAP_PWD=y" >> ${CONFIG}
-
- einfo "Enabling drivers: "
-
- # drivers
- echo "CONFIG_DRIVER_HOSTAP=y" >> ${CONFIG}
- einfo " HostAP driver enabled"
- echo "CONFIG_DRIVER_WIRED=y" >> ${CONFIG}
- einfo " Wired driver enabled"
- echo "CONFIG_DRIVER_PRISM54=y" >> ${CONFIG}
- einfo " Prism54 driver enabled"
- echo "CONFIG_DRIVER_NONE=y" >> ${CONFIG}
- einfo " None driver enabled"
-
- einfo " nl80211 driver enabled"
- echo "CONFIG_DRIVER_NL80211=y" >> ${CONFIG}
-
- # epoll
- echo "CONFIG_ELOOP_EPOLL=y" >> ${CONFIG}
-
- # misc
- echo "CONFIG_DEBUG_FILE=y" >> ${CONFIG}
- echo "CONFIG_PKCS12=y" >> ${CONFIG}
- echo "CONFIG_RADIUS_SERVER=y" >> ${CONFIG}
- echo "CONFIG_IAPP=y" >> ${CONFIG}
- echo "CONFIG_IEEE80211R=y" >> ${CONFIG}
- echo "CONFIG_IEEE80211W=y" >> ${CONFIG}
- echo "CONFIG_IEEE80211N=y" >> ${CONFIG}
- echo "CONFIG_IEEE80211AC=y" >> ${CONFIG}
- echo "CONFIG_PEERKEY=y" >> ${CONFIG}
- echo "CONFIG_RSN_PREAUTH=y" >> ${CONFIG}
- echo "CONFIG_INTERWORKING=y" >> ${CONFIG}
- echo "CONFIG_FULL_DYNAMIC_VLAN=y" >> ${CONFIG}
- echo "CONFIG_HS20=y" >> ${CONFIG}
- echo "CONFIG_WNM=y" >> ${CONFIG}
- echo "CONFIG_FST=y" >> ${CONFIG}
- echo "CONFIG_FST_TEST=y" >> ${CONFIG}
- echo "CONFIG_ACS=y" >> ${CONFIG}
-
- if use netlink; then
- # Netlink support
- echo "CONFIG_VLAN_NETLINK=y" >> ${CONFIG}
- fi
-
- if use ipv6; then
- # IPv6 support
- echo "CONFIG_IPV6=y" >> ${CONFIG}
- fi
-
- if use sqlite; then
- # Sqlite support
- echo "CONFIG_SQLITE=y" >> ${CONFIG}
- fi
-
- # If we are using libnl 2.0 and above, enable support for it
- # Removed for now, since the 3.2 version is broken, and we don't
- # support it.
- if has_version ">=dev-libs/libnl-3.2"; then
- echo "CONFIG_LIBNL32=y" >> .config
- fi
-
- # TODO: Add support for BSD drivers
-
- default_src_configure
-}
-
-src_compile() {
- emake V=1
-
- if use ssl; then
- emake V=1 nt_password_hash
- emake V=1 hlr_auc_gw
- fi
-}
-
-src_install() {
- insinto /etc/${PN}
- doins ${PN}.{conf,accept,deny,eap_user,radius_clients,sim_db,wpa_psk}
-
- fperms -R 600 /etc/${PN}
-
- dosbin ${PN}
- dobin ${PN}_cli
-
- use ssl && dobin nt_password_hash hlr_auc_gw
-
- newinitd "${FILESDIR}"/${PN}-init.d ${PN}
- newconfd "${FILESDIR}"/${PN}-conf.d ${PN}
- systemd_dounit "${FILESDIR}"/${PN}.service
-
- doman ${PN}{.8,_cli.1}
-
- dodoc ChangeLog README
- use wps && dodoc README-WPS
-
- docinto examples
- dodoc wired.conf
-
- if use logwatch; then
- insinto /etc/log.d/conf/services/
- doins logwatch/${PN}.conf
-
- exeinto /etc/log.d/scripts/services/
- doexe logwatch/${PN}
- fi
-}
-
-pkg_postinst() {
- einfo
- einfo "If you are running openRC you need to follow this instructions:"
- einfo "In order to use ${PN} you need to set up your wireless card"
- einfo "for master mode in /etc/conf.d/net and then start"
- einfo "/etc/init.d/${PN}."
- einfo
- einfo "Example configuration:"
- einfo
- einfo "config_wlan0=( \"192.168.1.1/24\" )"
- einfo "channel_wlan0=\"6\""
- einfo "essid_wlan0=\"test\""
- einfo "mode_wlan0=\"master\""
- einfo
- #if [ -e "${KV_DIR}"/net/mac80211 ]; then
- # einfo "This package now compiles against the headers installed by"
- # einfo "the kernel source for the mac80211 driver. You should "
- # einfo "re-emerge ${PN} after upgrading your kernel source."
- #fi
-
- if use wps; then
- einfo "You have enabled Wi-Fi Protected Setup support, please"
- einfo "read the README-WPS file in /usr/share/doc/${P}"
- einfo "for info on how to use WPS"
- fi
-}
diff --git a/net-wireless/hostapd/metadata.xml b/net-wireless/hostapd/metadata.xml
index 780abed..35e021e 100644
--- a/net-wireless/hostapd/metadata.xml
+++ b/net-wireless/hostapd/metadata.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
- <maintainer type="person">
- <email>gurligebis@gentoo.org</email>
- <name>Bjarke Istrup Pedersen</name>
- </maintainer>
<longdescription>
User space daemon for the hostap-driver.
Extended IEEE 802.11 management, IEEE 802.1X Authenticator,
RADIUS Authentication client, RADIUS Accounting client
</longdescription>
<use>
- <flag name="crda">Add CRDA support</flag>
- <flag name="logwatch">Install support files for
- <pkg>sys-apps/logwatch</pkg></flag>
+ <flag name="internal-tls">Use internal TLSv1 implementation instead of depending on OpenSSL or GnuTLS</flag>
<flag name="netlink">Adding support for using netlink to create VLANs</flag>
- <flag name="sqlite">Adding sqlite support</flag>
+ <flag name="suiteb">Adding support for NSA Suite B Cryptography</flag>
<flag name="wps">Add support for Wi-Fi Protected Setup</flag>
</use>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>sam@gentoo.org</email>
+ <name>Sam James</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:w1.fi:hostapd</remote-id>
+ </upstream>
</pkgmetadata>
diff --git a/net-wireless/wpa_supplicant/Manifest b/net-wireless/wpa_supplicant/Manifest
new file mode 100644
index 0000000..0e445ba
--- /dev/null
+++ b/net-wireless/wpa_supplicant/Manifest
@@ -0,0 +1 @@
+DIST wpa_supplicant-2.10.tar.gz 3511622 BLAKE2B 7f6045e5dcf24f7ccf1ea75c99541f9d68fadaea858a6ca11a95c997de14e33b3aa89138e748664579b5a4ea493d247cf6613da3c5fae49a4dbb5cd58dace752 SHA512 021c2a48f45d39c1dc6557730be5debaee071bc0ff82a271638beee6e32314e353e49d39e2f0dc8dff6e094dcc7008cfe1c32d0c7a34a1a345a12a3f1c1e11a1
diff --git a/net-wireless/wpa_supplicant/files/wpa_cli.sh b/net-wireless/wpa_supplicant/files/wpa_cli.sh
new file mode 100644
index 0000000..c581bc1
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_cli.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Copyright 1999-2011 Gentoo Foundation
+# Written by Roy Marples <uberlord@gentoo.org>
+# Distributed under the terms of the GNU General Public License v2
+# Alternatively, this file may be distributed under the terms of the BSD License
+
+if [ -z "$1" -o -z "$2" ]; then
+ logger -t wpa_cli "Insufficient parameters"
+ exit 1
+fi
+
+INTERFACE="$1"
+ACTION="$2"
+
+# Note, the below action must NOT mark the interface down via ifconfig, ip or
+# similar. Addresses can be removed, changed and daemons can be stopped, but
+# the interface must remain up for wpa_supplicant to work.
+
+if [ -f /etc/gentoo-release ]; then
+ EXEC="/etc/init.d/net.${INTERFACE} --quiet"
+else
+ logger -t wpa_cli "I don't know what to do with this distro!"
+ exit 1
+fi
+
+case ${ACTION} in
+ CONNECTED)
+ EXEC="${EXEC} start"
+ ;;
+ DISCONNECTED)
+ # Deactivated, since stopping /etc/init.d/net.wlanX
+ # stops the network completly.
+ EXEC="false ${EXEC} stop"
+ ;;
+ *)
+ logger -t wpa_cli "Unknown action ${ACTION}"
+ exit 1
+ ;;
+esac
+
+# ${EXEC} can use ${IN_BACKGROUND} so that it knows that the user isn't
+# stopping the interface and a background process - like wpa_cli - is.
+export IN_BACKGROUND=true
+
+logger -t wpa_cli "interface ${INTERFACE} ${ACTION}"
+${EXEC} || logger -t wpa_cli "executing '${EXEC}' failed"
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-Drop-security-level-to-0-with-OpenSSL-3.0-wh.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-Drop-security-level-to-0-with-OpenSSL-3.0-wh.patch
new file mode 100644
index 0000000..18f879c
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-Drop-security-level-to-0-with-OpenSSL-3.0-wh.patch
@@ -0,0 +1,57 @@
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 22 May 2022 17:01:35 +0300
+Subject: OpenSSL: Drop security level to 0 with OpenSSL 3.0 when using TLS 1.0/1.1
+
+Commit 9afb68b03976 ("OpenSSL: Allow systemwide secpolicy overrides for
+TLS version") with commit 58bbcfa31b18 ("OpenSSL: Update security level
+drop for TLS 1.0/1.1 with OpenSSL 3.0") allow this workaround to be
+enabled with an explicit network configuration parameter. However, the
+default settings are still allowing TLS 1.0 and 1.1 to be negotiated
+just to see them fail immediately when using OpenSSL 3.0. This is not
+exactly helpful especially when the OpenSSL error message for this
+particular case is "internal error" which does not really say anything
+about the reason for the error.
+
+It is is a bit inconvenient to update the security policy for this
+particular issue based on the negotiated TLS version since that happens
+in the middle of processing for the first message from the server.
+However, this can be done by using the debug callback for printing out
+the received TLS messages during processing.
+
+Drop the OpenSSL security level to 0 if that is the only option to
+continue the TLS negotiation, i.e., when TLS 1.0/1.1 are still allowed
+in wpa_supplicant default configuration and OpenSSL 3.0 with the
+constraint on MD5-SHA1 use.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+
+Bug-Debian: https://bugs.debian.org/1011121
+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1958267
+Origin: upstream, commit:bc99366f9b960150aa2e369048bbc2218c1d414e
+---
+ src/crypto/tls_openssl.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
+index 6602ac64f591..78621d926dab 100644
+--- a/src/crypto/tls_openssl.c
++++ b/src/crypto/tls_openssl.c
+@@ -1557,6 +1557,15 @@ static void tls_msg_cb(int write_p, int version, int content_type,
+ struct tls_connection *conn = arg;
+ const u8 *pos = buf;
+
++#if OPENSSL_VERSION_NUMBER >= 0x30000000L
++ if ((SSL_version(ssl) == TLS1_VERSION ||
++ SSL_version(ssl) == TLS1_1_VERSION) &&
++ SSL_get_security_level(ssl) > 0) {
++ wpa_printf(MSG_DEBUG,
++ "OpenSSL: Drop security level to 0 to allow TLS 1.0/1.1 use of MD5-SHA1 signature algorithm");
++ SSL_set_security_level(ssl, 0);
++ }
++#endif /* OpenSSL version >= 3.0 */
+ if (write_p == 2) {
+ wpa_printf(MSG_DEBUG,
+ "OpenSSL: session ver=0x%x content_type=%d",
+--
+2.39.0
+
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch
new file mode 100644
index 0000000..574973f
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch
@@ -0,0 +1,30 @@
+From: James Ralston <ralston@pobox.com>
+Date: Sun, 1 May 2022 16:15:23 -0700
+Subject: Allow legacy renegotiation to fix PEAP issues with some servers
+
+Upstream: http://lists.infradead.org/pipermail/hostap/2022-May/040511.html
+---
+ src/crypto/tls_openssl.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
+index 273e5cb..ad3aa1a 100644
+--- a/src/crypto/tls_openssl.c
++++ b/src/crypto/tls_openssl.c
+@@ -1056,6 +1056,16 @@ void * tls_init(const struct tls_config *conf)
+ SSL_CTX_set_options(ssl, SSL_OP_NO_SSLv2);
+ SSL_CTX_set_options(ssl, SSL_OP_NO_SSLv3);
+
++ /* Many enterprise PEAP server implementations (e.g. used in large
++ corporations and universities) do not support RFC5746 secure
++ renegotiation, and starting with OpenSSL 3.0,
++ SSL_OP_LEGACY_SERVER_CONNECT is no longer set as part of SSL_OP_ALL.
++ So until we implement a way to request SSL_OP_LEGACY_SERVER_CONNECT
++ only in EAP peer mode, just set SSL_OP_LEGACY_SERVER_CONNECT
++ globally. */
++
++ SSL_CTX_set_options(ssl, SSL_OP_LEGACY_SERVER_CONNECT);
++
+ SSL_CTX_set_mode(ssl, SSL_MODE_AUTO_RETRY);
+
+ #ifdef SSL_MODE_NO_AUTO_CHAIN
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch
new file mode 100644
index 0000000..0f340c9
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch
@@ -0,0 +1,13 @@
+diff --git a/wpa_supplicant/dbus/dbus_new_helpers.c b/wpa_supplicant/dbus/dbus_new_helpers.c
+index 45623f3..0fc3d08 100644
+--- a/wpa_supplicant/dbus/dbus_new_helpers.c
++++ b/wpa_supplicant/dbus/dbus_new_helpers.c
+@@ -847,7 +847,7 @@ void wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface,
+ const struct wpa_dbus_property_desc *dsc;
+ int i = 0;
+
+- if (iface == NULL)
++ if (iface == NULL || path == NULL)
+ return;
+
+ dbus_connection_get_object_path_data(iface->con, path,
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.9-libressl.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.9-libressl.patch
new file mode 100644
index 0000000..7a3fe0d
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.9-libressl.patch
@@ -0,0 +1,12 @@
+diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
+index 345a35ee1..fc6a606d0 100644
+--- a/src/crypto/tls_openssl.c
++++ b/src/crypto/tls_openssl.c
+@@ -3034,7 +3034,7 @@ static int tls_set_conn_flags(struct tls_connection *conn, unsigned int flags,
+ /* Start with defaults from BoringSSL */
+ SSL_CTX_set_verify_algorithm_prefs(conn->ssl_ctx, NULL, 0);
+ #endif /* OPENSSL_IS_BORINGSSL */
+-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
++#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
+ if (flags & TLS_CONN_SUITEB_NO_ECDH) {
+ const char *ciphers = "DHE-RSA-AES256-GCM-SHA384";
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d b/net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d
new file mode 100644
index 0000000..5381c8c
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d
@@ -0,0 +1,10 @@
+# conf.d file for wpa_supplicant
+
+# uncomment this if wpa_supplicant starts up before your network interface
+# is ready and it causes issues
+# rc_want="dev-settle"
+
+# Please check man 8 wpa_supplicant for more information about the options
+# wpa_supplicant accepts.
+#
+wpa_supplicant_args=""
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-init.d b/net-wireless/wpa_supplicant/files/wpa_supplicant-init.d
new file mode 100644
index 0000000..380387a
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-init.d
@@ -0,0 +1,70 @@
+#!/sbin/openrc-run
+# Copyright (c) 2009 Roy Marples <roy@marples.name>
+# All rights reserved. Released under the 2-clause BSD license.
+
+command=/usr/sbin/wpa_supplicant
+: ${wpa_supplicant_conf:=/etc/wpa_supplicant/wpa_supplicant.conf}
+wpa_supplicant_if=${wpa_supplicant_if:+-i}$wpa_supplicant_if
+command_args="$wpa_supplicant_args -B -c$wpa_supplicant_conf $wpa_supplicant_if"
+name="WPA Supplicant Daemon"
+
+depend()
+{
+ need localmount
+ use logger
+ after bootmisc modules
+ before dns dhcpcd net
+ keyword -shutdown
+}
+
+find_wireless()
+{
+ local iface=
+
+ case "$RC_UNAME" in
+ Linux)
+ for iface in /sys/class/net/*; do
+ if [ -e "$iface"/wireless -o \
+ -e "$iface"/phy80211 ]
+ then
+ echo "${iface##*/}"
+ return 0
+ fi
+ done
+ ;;
+ *)
+ for iface in /dev/net/* $(ifconfig -l 2>/dev/null); do
+ if ifconfig "${iface##*/}" 2>/dev/null | \
+ grep -q "[ ]*ssid "
+ then
+ echo "${iface##*/}"
+ return 0
+ fi
+ done
+ ;;
+ esac
+
+ return 1
+}
+
+append_wireless()
+{
+ local iface= i=
+
+ iface=$(find_wireless)
+ if [ -n "$iface" ]; then
+ for i in $iface; do
+ command_args="$command_args -i$i"
+ done
+ else
+ eerror "Could not find a wireless interface"
+ fi
+}
+
+start_pre()
+{
+ case " $command_args" in
+ *" -i"*) ;;
+ *) append_wireless;;
+ esac
+}
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant.conf b/net-wireless/wpa_supplicant/files/wpa_supplicant.conf
new file mode 100644
index 0000000..c3a29e5
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant.conf
@@ -0,0 +1,7 @@
+# This is a network block that connects to any unsecured access point.
+# We give it a low priority so any defined blocks are preferred.
+network={
+ key_mgmt=NONE
+ priority=-9999999
+}
+
diff --git a/net-wireless/wpa_supplicant/metadata.xml b/net-wireless/wpa_supplicant/metadata.xml
new file mode 100644
index 0000000..489b2ea
--- /dev/null
+++ b/net-wireless/wpa_supplicant/metadata.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <use>
+ <flag name="ap">Add support for access point mode</flag>
+ <flag name="broadcom-sta">Flag to help users disable features not supported by broadcom-sta driver</flag>
+ <flag name="eap-sim">Add support for EAP-SIM authentication algorithm</flag>
+ <flag name="eapol-test">Build and install eapol_test binary</flag>
+ <flag name="fasteap">Add support for FAST-EAP authentication algorithm</flag>
+ <flag name="fils">Add support for Fast Initial Link Setup (802.11ai)</flag>
+ <flag name="hs2-0">Add support for 802.11u and Passpoint for HotSpot 2.0</flag>
+ <flag name="macsec">Add support for wired macsec</flag>
+ <flag name="mbo">Add support Multiband Operation</flag>
+ <flag name="mesh">Add support for mesh mode</flag>
+ <flag name="p2p">Add support for Wi-Fi Direct mode</flag>
+ <flag name="ps3">Add support for ps3 hypervisor driven gelic wifi</flag>
+ <flag name="privsep">Enable wpa_priv privledge separation binary</flag>
+ <flag name="tdls">Add support for Tunneled Direct Link Setup (802.11z)</flag>
+ <flag name="tkip">Add support for WPA TKIP (deprecated due to security flaws in 2009)</flag>
+ <flag name="uncommon-eap-types">Add support for GPSK, SAKE, GPSK_SHA256, IKEV2 and EKE</flag>
+ <flag name="wep">Add support for Wired Equivalent Privacy (deprecated due to security flaws in 2004)</flag>
+ <flag name="wps">Add support for Wi-Fi Protected Setup</flag>
+ <flag name="wimax">Add support for Wimax EAP-PEER authentication algorithm</flag>
+ <flag name="smartcard">Add support for smartcards</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:wpa_supplicant:wpa_supplicant</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-wireless/wpa_supplicant/wpa_supplicant-2.10-r4.ebuild b/net-wireless/wpa_supplicant/wpa_supplicant-2.10-r4.ebuild
new file mode 100644
index 0000000..03b32ce
--- /dev/null
+++ b/net-wireless/wpa_supplicant/wpa_supplicant-2.10-r4.ebuild
@@ -0,0 +1,480 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop linux-info qmake-utils readme.gentoo-r1 systemd toolchain-funcs
+
+DESCRIPTION="IEEE 802.1X/WPA supplicant for secure wireless transfers"
+HOMEPAGE="https://w1.fi/wpa_supplicant/"
+LICENSE="|| ( GPL-2 BSD )"
+
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://w1.fi/hostap.git"
+else
+ KEYWORDS="~alpha amd64 arm arm64 ~ia64 ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+ SRC_URI="https://w1.fi/releases/${P}.tar.gz"
+fi
+
+SLOT="0"
+IUSE="ap broadcom-sta dbus eap-sim eapol-test fasteap +fils +hs2-0 macsec +mbo +mesh p2p privsep ps3 qt5 readline selinux smartcard tdls tkip uncommon-eap-types wep wimax wps"
+
+# CONFIG_PRIVSEP=y does not have sufficient support for the new driver
+# interface functions used for MACsec, so this combination cannot be used
+# at least for now. bug #684442
+REQUIRED_USE="
+ macsec? ( !privsep )
+ privsep? ( !macsec )
+ broadcom-sta? ( !fils !mesh !mbo )
+"
+
+DEPEND="
+ >=dev-libs/openssl-1.0.2k:=
+ dbus? ( sys-apps/dbus )
+ kernel_linux? (
+ >=dev-libs/libnl-3.2:3
+ eap-sim? ( sys-apps/pcsc-lite )
+ )
+ !kernel_linux? ( net-libs/libpcap )
+ qt5? (
+ dev-qt/qtcore:5
+ dev-qt/qtgui:5
+ dev-qt/qtsvg:5
+ dev-qt/qtwidgets:5
+ )
+ readline? (
+ sys-libs/ncurses:0=
+ sys-libs/readline:0=
+ )
+"
+RDEPEND="${DEPEND}
+ selinux? ( sec-policy/selinux-networkmanager )
+ kernel_linux? (
+ net-wireless/wireless-regdb
+ )
+"
+BDEPEND="virtual/pkgconfig"
+
+DOC_CONTENTS="
+ If this is a clean installation of wpa_supplicant, you
+ have to create a configuration file named
+ ${EROOT}/etc/wpa_supplicant/wpa_supplicant.conf
+ An example configuration file is available for reference in
+ ${EROOT}/usr/share/doc/${PF}/
+"
+
+S="${WORKDIR}/${P}/${PN}"
+
+Kconfig_style_config() {
+ #param 1 is CONFIG_* item
+ #param 2 is what to set it = to, defaulting in y
+ CONFIG_PARAM="${CONFIG_HEADER:-CONFIG_}$1"
+ setting="${2:-y}"
+
+ if [ ! $setting = n ]; then
+ #first remove any leading "# " if $2 is not n
+ sed -i "/^# *$CONFIG_PARAM=/s/^# *//" .config || echo "Kconfig_style_config error uncommenting $CONFIG_PARAM"
+ #set item = $setting (defaulting to y)
+ if ! sed -i "/^$CONFIG_PARAM\>/s/=.*/=$setting/" .config; then
+ echo "Kconfig_style_config error setting $CONFIG_PARAM=$setting"
+ fi
+ if [ -z "$( grep ^$CONFIG_PARAM= .config )" ] ; then
+ echo "$CONFIG_PARAM=$setting" >>.config
+ fi
+ else
+ #ensure item commented out
+ if ! sed -i "/^$CONFIG_PARAM\>/s/$CONFIG_PARAM/# $CONFIG_PARAM/" .config; then
+ echo "Kconfig_style_config error commenting $CONFIG_PARAM"
+ fi
+ fi
+}
+
+src_prepare() {
+ default
+
+ # net/bpf.h needed for net-libs/libpcap on Gentoo/FreeBSD
+ sed -i \
+ -e "s:\(#include <pcap\.h>\):#include <net/bpf.h>\n\1:" \
+ ../src/l2_packet/l2_packet_freebsd.c || die
+
+ # Change configuration to match Gentoo locations (bug #143750)
+ sed -i \
+ -e "s:/usr/lib/opensc:/usr/$(get_libdir):" \
+ -e "s:/usr/lib/pkcs11:/usr/$(get_libdir):" \
+ wpa_supplicant.conf || die
+
+ # systemd entries to D-Bus service files (bug #372877)
+ echo 'SystemdService=wpa_supplicant.service' \
+ | tee -a dbus/*.service >/dev/null || die
+
+ cd "${WORKDIR}/${P}" || die
+
+ if use wimax; then
+ # generate-libeap-peer.patch comes before
+ # fix-undefined-reference-to-random_get_bytes.patch
+ eapply "${FILESDIR}/${P}-generate-libeap-peer.patch"
+
+ # multilib-strict fix (bug #373685)
+ sed -e "s/\/usr\/lib/\/usr\/$(get_libdir)/" -i src/eap_peer/Makefile || die
+ fi
+
+ # bug (320097)
+ eapply "${FILESDIR}/${PN}-2.6-do-not-call-dbus-functions-with-NULL-path.patch"
+
+ # bug (912315)
+ eapply "${FILESDIR}/${PN}-2.10-allow-legacy-renegotiation.patch"
+ eapply "${FILESDIR}/${P}-Drop-security-level-to-0-with-OpenSSL-3.0-wh.patch"
+
+ # bug (640492)
+ sed -i 's#-Werror ##' wpa_supplicant/Makefile || die
+
+ # LibreSSL patch (https://github.com/gentoo/libressl/issues/336)
+ eapply "${FILESDIR}/${PN}-2.9-libressl.patch"
+}
+
+src_configure() {
+ # Toolchain setup
+ tc-export CC PKG_CONFIG
+
+ cp defconfig .config || die
+
+ # Basic setup
+ Kconfig_style_config CTRL_IFACE
+ Kconfig_style_config MATCH_IFACE
+ Kconfig_style_config BACKEND file
+ Kconfig_style_config IBSS_RSN
+ Kconfig_style_config IEEE80211W
+ Kconfig_style_config IEEE80211R
+ Kconfig_style_config HT_OVERRIDES
+ Kconfig_style_config VHT_OVERRIDES
+ Kconfig_style_config OCV
+ Kconfig_style_config TLSV11
+ Kconfig_style_config TLSV12
+ Kconfig_style_config GETRANDOM
+
+ # Basic authentication methods
+ # NOTE: we don't set GPSK or SAKE as they conflict
+ # with the below options
+ Kconfig_style_config EAP_GTC
+ Kconfig_style_config EAP_MD5
+ Kconfig_style_config EAP_OTP
+ Kconfig_style_config EAP_PAX
+ Kconfig_style_config EAP_PSK
+ Kconfig_style_config EAP_TLV
+ Kconfig_style_config EAP_EXE
+ Kconfig_style_config IEEE8021X_EAPOL
+ Kconfig_style_config PKCS12
+ Kconfig_style_config PEERKEY
+ Kconfig_style_config EAP_LEAP
+ Kconfig_style_config EAP_MSCHAPV2
+ Kconfig_style_config EAP_PEAP
+ Kconfig_style_config EAP_TEAP
+ Kconfig_style_config EAP_TLS
+ Kconfig_style_config EAP_TTLS
+
+ # Enabling background scanning.
+ Kconfig_style_config BGSCAN_SIMPLE
+ Kconfig_style_config BGSCAN_LEARN
+
+ if use dbus ; then
+ Kconfig_style_config CTRL_IFACE_DBUS
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO
+ else
+ Kconfig_style_config CTRL_IFACE_DBUS n
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW n
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO n
+ fi
+
+ if use eapol-test ; then
+ Kconfig_style_config EAPOL_TEST
+ fi
+
+ # Enable support for writing debug info to a log file and syslog.
+ Kconfig_style_config DEBUG_FILE
+ Kconfig_style_config DEBUG_SYSLOG
+
+ if use hs2-0 ; then
+ Kconfig_style_config INTERWORKING
+ Kconfig_style_config HS20
+ fi
+
+ if use mbo ; then
+ Kconfig_style_config MBO
+ else
+ Kconfig_style_config MBO n
+ fi
+
+ if use uncommon-eap-types; then
+ Kconfig_style_config EAP_GPSK
+ Kconfig_style_config EAP_SAKE
+ Kconfig_style_config EAP_GPSK_SHA256
+ Kconfig_style_config EAP_IKEV2
+ Kconfig_style_config EAP_EKE
+ fi
+
+ if use eap-sim ; then
+ # Smart card authentication
+ Kconfig_style_config EAP_SIM
+ Kconfig_style_config EAP_AKA
+ Kconfig_style_config EAP_AKA_PRIME
+ Kconfig_style_config PCSC
+ fi
+
+ if use fasteap ; then
+ Kconfig_style_config EAP_FAST
+ fi
+
+ if use readline ; then
+ # readline/history support for wpa_cli
+ Kconfig_style_config READLINE
+ else
+ #internal line edit mode for wpa_cli
+ Kconfig_style_config WPA_CLI_EDIT
+ fi
+
+ Kconfig_style_config TLS openssl
+ Kconfig_style_config FST
+
+ Kconfig_style_config EAP_PWD
+ if use fils; then
+ Kconfig_style_config FILS
+ Kconfig_style_config FILS_SK_PFS
+ fi
+ if use mesh; then
+ Kconfig_style_config MESH
+ else
+ Kconfig_style_config MESH n
+ fi
+ # WPA3
+ Kconfig_style_config OWE
+ Kconfig_style_config SAE
+ Kconfig_style_config DPP
+ Kconfig_style_config DPP2
+ Kconfig_style_config SUITEB192
+ Kconfig_style_config SUITEB
+
+ if use wep ; then
+ Kconfig_style_config WEP
+ else
+ Kconfig_style_config WEP n
+ fi
+
+ # Watch out, reversed logic
+ if use tkip ; then
+ Kconfig_style_config NO_TKIP n
+ else
+ Kconfig_style_config NO_TKIP
+ fi
+
+ if use smartcard ; then
+ Kconfig_style_config SMARTCARD
+ else
+ Kconfig_style_config SMARTCARD n
+ fi
+
+ if use tdls ; then
+ Kconfig_style_config TDLS
+ fi
+
+ if use kernel_linux ; then
+ # Linux specific drivers
+ Kconfig_style_config DRIVER_ATMEL
+ Kconfig_style_config DRIVER_HOSTAP
+ Kconfig_style_config DRIVER_IPW
+ Kconfig_style_config DRIVER_NL80211
+ Kconfig_style_config DRIVER_RALINK
+ Kconfig_style_config DRIVER_WEXT
+ Kconfig_style_config DRIVER_WIRED
+
+ if use macsec ; then
+ #requires something, no idea what
+ #Kconfig_style_config DRIVER_MACSEC_QCA
+ Kconfig_style_config DRIVER_MACSEC_LINUX
+ Kconfig_style_config MACSEC
+ else
+ # bug #831369 and bug #684442
+ Kconfig_style_config DRIVER_MACSEC_LINUX n
+ Kconfig_style_config MACSEC n
+ fi
+
+ if use ps3 ; then
+ Kconfig_style_config DRIVER_PS3
+ fi
+ fi
+
+ # Wi-Fi Protected Setup (WPS)
+ if use wps ; then
+ Kconfig_style_config WPS
+ Kconfig_style_config WPS2
+ # USB Flash Drive
+ Kconfig_style_config WPS_UFD
+ # External Registrar
+ Kconfig_style_config WPS_ER
+ # Universal Plug'n'Play
+ Kconfig_style_config WPS_UPNP
+ # Near Field Communication
+ Kconfig_style_config WPS_NFC
+ else
+ Kconfig_style_config WPS n
+ Kconfig_style_config WPS2 n
+ Kconfig_style_config WPS_UFD n
+ Kconfig_style_config WPS_ER n
+ Kconfig_style_config WPS_UPNP n
+ Kconfig_style_config WPS_NFC n
+ fi
+
+ # Wi-Fi Direct (WiDi)
+ if use p2p ; then
+ Kconfig_style_config P2P
+ Kconfig_style_config WIFI_DISPLAY
+ else
+ Kconfig_style_config P2P n
+ Kconfig_style_config WIFI_DISPLAY n
+ fi
+
+ # Access Point Mode
+ if use ap ; then
+ Kconfig_style_config AP
+ else
+ Kconfig_style_config AP n
+ fi
+
+ # Enable essentials for AP/P2P
+ if use ap || use p2p ; then
+ # Enabling HT support (802.11n)
+ Kconfig_style_config IEEE80211N
+
+ # Enabling VHT support (802.11ac)
+ Kconfig_style_config IEEE80211AC
+ fi
+
+ # Enable mitigation against certain attacks against TKIP
+ Kconfig_style_config DELAYED_MIC_ERROR_REPORT
+
+ if use privsep ; then
+ Kconfig_style_config PRIVSEP
+ fi
+
+ if use kernel_linux ; then
+ Kconfig_style_config LIBNL32
+ fi
+
+ if use qt5 ; then
+ pushd "${S}"/wpa_gui-qt4 > /dev/null || die
+ eqmake5 wpa_gui.pro
+ popd > /dev/null || die
+ fi
+}
+
+src_compile() {
+ einfo "Building wpa_supplicant"
+ emake V=1 BINDIR=/usr/sbin
+
+ if use wimax; then
+ emake -C ../src/eap_peer clean
+ emake -C ../src/eap_peer
+ fi
+
+ if use qt5; then
+ einfo "Building wpa_gui"
+ emake -C "${S}"/wpa_gui-qt4
+ fi
+
+ if use eapol-test ; then
+ emake eapol_test
+ fi
+}
+
+src_install() {
+ dosbin wpa_supplicant
+ use privsep && dosbin wpa_priv
+ dobin wpa_cli wpa_passphrase
+
+ newinitd "${FILESDIR}/${PN}-init.d" wpa_supplicant
+ newconfd "${FILESDIR}/${PN}-conf.d" wpa_supplicant
+
+ exeinto /etc/wpa_supplicant/
+ newexe "${FILESDIR}/wpa_cli.sh" wpa_cli.sh
+
+ readme.gentoo_create_doc
+ dodoc ChangeLog {eap_testing,todo}.txt README{,-WPS} \
+ wpa_supplicant.conf
+
+ newdoc .config build-config
+
+ if [ "${PV}" != "9999" ]; then
+ doman doc/docbook/*.{5,8}
+ fi
+
+ if use qt5 ; then
+ into /usr
+ dobin wpa_gui-qt4/wpa_gui
+ doicon wpa_gui-qt4/icons/wpa_gui.svg
+ domenu wpa_gui-qt4/wpa_gui.desktop
+ else
+ rm "${ED}"/usr/share/man/man8/wpa_gui.8
+ fi
+
+ use wimax && emake DESTDIR="${D}" -C ../src/eap_peer install
+
+ if use dbus ; then
+ pushd "${S}"/dbus > /dev/null || die
+ insinto /etc/dbus-1/system.d
+ newins dbus-wpa_supplicant.conf wpa_supplicant.conf
+ insinto /usr/share/dbus-1/system-services
+ doins fi.w1.wpa_supplicant1.service
+ popd > /dev/null || die
+
+ # This unit relies on dbus support, bug 538600.
+ systemd_dounit systemd/wpa_supplicant.service
+ fi
+
+ if use eapol-test ; then
+ dobin eapol_test
+ fi
+
+ systemd_dounit "systemd/wpa_supplicant@.service"
+ systemd_dounit "systemd/wpa_supplicant-nl80211@.service"
+ systemd_dounit "systemd/wpa_supplicant-wired@.service"
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+
+ if [[ -e "${EROOT}"/etc/wpa_supplicant.conf ]] ; then
+ echo
+ ewarn "WARNING: your old configuration file ${EROOT}/etc/wpa_supplicant.conf"
+ ewarn "needs to be moved to ${EROOT}/etc/wpa_supplicant/wpa_supplicant.conf"
+ fi
+ if ! use wep; then
+ einfo "WARNING: You are building with WEP support disabled, which is recommended since"
+ einfo "this protocol is deprecated and insecure. If you still need to connect to"
+ einfo "WEP-enabled networks, you may turn this flag back on. With this flag off,"
+ einfo "WEP-enabled networks will not even show up as available."
+ einfo "If your network is missing you may wish to USE=wep"
+ fi
+ if ! use tkip; then
+ ewarn "WARNING: You are building with TKIP support disabled, which is recommended since"
+ ewarn "this protocol is deprecated and insecure. If you still need to connect to"
+ ewarn "TKIP-enabled networks, you may turn this flag back on. With this flag off,"
+ ewarn "TKIP-enabled networks, including mixed mode TKIP/AES-CCMP will not even show up"
+ ewarn "as available. If your network is missing you may wish to USE=tkip"
+ fi
+
+ # Mea culpa, feel free to remove that after some time --mgorny.
+ local fn
+ for fn in wpa_supplicant{,@wlan0}.service; do
+ if [[ -e "${EROOT}"/etc/systemd/system/network.target.wants/${fn} ]]
+ then
+ ebegin "Moving ${fn} to multi-user.target"
+ mv "${EROOT}"/etc/systemd/system/network.target.wants/${fn} \
+ "${EROOT}"/etc/systemd/system/multi-user.target.wants/ || die
+ eend ${?} \
+ "Please try to re-enable ${fn}"
+ fi
+ done
+
+ systemd_reenable wpa_supplicant.service
+}
diff --git a/sec-keys/openpgp-keys-libressl/Manifest b/sec-keys/openpgp-keys-libressl/Manifest
new file mode 100644
index 0000000..69dc746
--- /dev/null
+++ b/sec-keys/openpgp-keys-libressl/Manifest
@@ -0,0 +1 @@
+DIST openpgp-keys-libressl-20240309.asc 18068 BLAKE2B 6204cfa9afb3fe644d86f9a9a10add1a9a598773a92b79187f8e9da42172f24854ac022fb40cc298120e7c91e181097ad661b5697757f520e9c72c5662f8148e SHA512 eb1a839904f30de678cc06327a60fe87bf94bb4698351598d7ae68b3a28ffef98b46171b86983004a2671495dd70ee96a8e6a1a5167e25f7b3857d4f72b4f39e
diff --git a/sec-keys/openpgp-keys-libressl/metadata.xml b/sec-keys/openpgp-keys-libressl/metadata.xml
new file mode 100644
index 0000000..b690a67
--- /dev/null
+++ b/sec-keys/openpgp-keys-libressl/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>orbea@riseup.net</email>
+ </maintainer>
+ <stabilize-allarches/>
+</pkgmetadata>
diff --git a/sec-keys/openpgp-keys-libressl/openpgp-keys-libressl-20240309.ebuild b/sec-keys/openpgp-keys-libressl/openpgp-keys-libressl-20240309.ebuild
new file mode 100644
index 0000000..89c8ce5
--- /dev/null
+++ b/sec-keys/openpgp-keys-libressl/openpgp-keys-libressl-20240309.ebuild
@@ -0,0 +1,19 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="OpenPGP keys used by the libressl project"
+HOMEPAGE="https://www.libressl.org/"
+SRC_URI="https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl.asc -> ${P}.asc"
+S=${WORKDIR}
+
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+
+src_install() {
+ local files=( ${A} )
+ insinto /usr/share/openpgp-keys
+ newins - libressl.asc < <(cat "${files[@]/#/${DISTDIR}/}" || die)
+}
diff --git a/sys-cluster/keepalived/Manifest b/sys-cluster/keepalived/Manifest
deleted file mode 100644
index 6d62878..0000000
--- a/sys-cluster/keepalived/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-DIST keepalived-1.4.0.tar.gz 731936 BLAKE2B b6adf7925cc81a4c6e6f69afaa28bd72f6c13076be03f2971775a63c823dac5c6fec46e0b6724af1a7ac9036a749b285429ba3ffad2d9ecc39ccc213cbe2cb28 SHA512 485eda5912d68663f011b8e79263ce1e38ed785919055b113536f63aab52c0d5f581a9ab1951c7f62362ac0a68ee921efc41934a4e535d6df7e59249ef32d6d3
diff --git a/sys-cluster/keepalived/files/keepalived-1.4.0-fix-no-sorry-segfault.patch b/sys-cluster/keepalived/files/keepalived-1.4.0-fix-no-sorry-segfault.patch
deleted file mode 100644
index cbababb..0000000
--- a/sys-cluster/keepalived/files/keepalived-1.4.0-fix-no-sorry-segfault.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 49559856e19a1a9fad590cc640da7df57c6b9a66 Mon Sep 17 00:00:00 2001
-From: Quentin Armitage <quentin@armitage.org.uk>
-Date: Wed, 17 Jan 2018 12:08:07 +0000
-Subject: [PATCH] Fix segfault if no sorry server configured for a virtual
- server
-
-Issue #751 identified a segfault in vs_end_handler(), and it
-transpires that the forwarding method of the sorry server was being
-checked without first testing that a sorry server had been configured.
-
-Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
----
- keepalived/check/check_parser.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/keepalived/check/check_parser.c b/keepalived/check/check_parser.c
-index b2518da7..170e47d4 100644
---- a/keepalived/check/check_parser.c
-+++ b/keepalived/check/check_parser.c
-@@ -120,7 +120,7 @@ vs_end_handler(void)
-
- /* If the real (sorry) server uses tunnel forwarding, the address family
- * does not have to match the address family of the virtaul server */
-- if (vs->s_svr->forwarding_method != IP_VS_CONN_F_TUNNEL) {
-+ if (vs->s_svr && vs->s_svr->forwarding_method != IP_VS_CONN_F_TUNNEL) {
- if (vs->af == AF_UNSPEC)
- vs->af = vs->s_svr->addr.ss_family;
- else if (vs->af != vs->s_svr->addr.ss_family) {
diff --git a/sys-cluster/keepalived/files/keepalived.confd b/sys-cluster/keepalived/files/keepalived.confd
deleted file mode 100644
index 5f56cb2..0000000
--- a/sys-cluster/keepalived/files/keepalived.confd
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright 1999-2012 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-# Keepalived options
-# Increase logging:
-#KEEPALIVED_OPTS="-D"
diff --git a/sys-cluster/keepalived/files/keepalived.init b/sys-cluster/keepalived/files/keepalived.init
deleted file mode 100644
index c290c9d..0000000
--- a/sys-cluster/keepalived/files/keepalived.init
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/sbin/openrc-run
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-depend() {
- use logger
- # The interfaces do not actually need to exist to start, it handles them gracefully.
- use net
-}
-
-command="/usr/sbin/keepalived"
-command_args="${KEEPALIVED_OPTS}"
-pidfile="/var/run/keepalived.pid"
-
-extra_commands="checkconfig reload"
-
-checkconfig() {
- # keepalived has a config check command, but it does not work while the daemon is running!
- if [ ! -e /etc/keepalived/keepalived.conf ] ; then
- eerror "You need an /etc/keepalived/keepalived.conf file to run keepalived"
- return 1
- fi
-}
-
-start_pre() {
- checkconfig || return 1
-}
-
-reload() {
- ebegin "Reloading keepalived.conf"
- start-stop-daemon --pidfile $pidfile --signal HUP
- eend $?
-}
diff --git a/sys-cluster/keepalived/keepalived-1.4.0-r1.ebuild b/sys-cluster/keepalived/keepalived-1.4.0-r1.ebuild
deleted file mode 100644
index cb328d9..0000000
--- a/sys-cluster/keepalived/keepalived-1.4.0-r1.ebuild
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 1999-2018 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-inherit autotools
-
-DESCRIPTION="A strong & robust keepalive facility to the Linux Virtual Server project"
-HOMEPAGE="http://www.keepalived.org/"
-SRC_URI="http://www.keepalived.org/software/${P}.tar.gz"
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~s390 ~sparc ~x86"
-IUSE="dbus debug ipv6 -json libressl snmp"
-
-RDEPEND="dev-libs/libnl:=
- !libressl? ( dev-libs/openssl:0= )
- libressl? ( dev-libs/libressl:0= )
- dev-libs/popt
- net-libs/libnfnetlink
- sys-apps/iproute2
- dbus? ( sys-apps/dbus )
- json? ( dev-libs/json-c:= )
- snmp? ( net-analyzer/net-snmp )"
-DEPEND="${RDEPEND}
- >=sys-kernel/linux-headers-4.4"
-
-DOCS=(
- README CONTRIBUTORS INSTALL ChangeLog AUTHOR TODO
- doc/keepalived.conf.SYNOPSIS doc/NOTE_vrrp_vmac.txt
-)
-
-PATCHES=(
- "${FILESDIR}/${P}-fix-no-sorry-segfault.patch"
-)
-
-src_prepare() {
- default
-
- eautoreconf
-}
-
-src_configure() {
- STRIP=/bin/true \
- econf \
- --with-kernel-dir=/usr \
- --enable-sha1 \
- --enable-vrrp \
- $(use_enable dbus) \
- $(use_enable dbus dbus-create-instance) \
- $(use_enable debug) \
- $(use_enable json) \
- $(use_enable snmp)
-}
-
-src_install() {
- default
-
- newinitd "${FILESDIR}"/keepalived.init keepalived
- newconfd "${FILESDIR}"/keepalived.confd keepalived
-
- use snmp && dodoc doc/KEEPALIVED-MIB.txt
-
- docinto genhash
- dodoc genhash/README genhash/AUTHOR genhash/ChangeLog
- # This was badly named by upstream, it's more HOWTO than anything else.
- newdoc INSTALL INSTALL+HOWTO
-
- # Security risk to bundle SSL certs
- rm -v "${ED}"/etc/keepalived/samples/*.pem || die
- # Clean up sysvinit files
- rm -rv "${ED}"/etc/sysconfig || die
-}
diff --git a/sys-cluster/keepalived/metadata.xml b/sys-cluster/keepalived/metadata.xml
deleted file mode 100644
index 4de8679..0000000
--- a/sys-cluster/keepalived/metadata.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
- <maintainer type="project">
- <email>cluster@gentoo.org</email>
- <name>Gentoo Cluster Project</name>
- </maintainer>
- <longdescription>
- VRRP2 implementation. Used for setting up high availability clusters.
- </longdescription>
- <use>
- <flag name="json">compile with signal to dump configuration and stats as JSON.</flag>
- </use>
-</pkgmetadata>
diff --git a/www-client/netsurf/Manifest b/www-client/netsurf/Manifest
new file mode 100644
index 0000000..13e202c
--- /dev/null
+++ b/www-client/netsurf/Manifest
@@ -0,0 +1 @@
+DIST netsurf-3.11-src.tar.gz 4311767 BLAKE2B aa361b44ddb90fe513e0c34ae7d5f320037c439abb2455f50c224db118cf51da8bbeeac1276f0afdb5763287a6ffaba9d8fad460718ab0659871c1fda143513a SHA512 852ed7afe891828e7e594f1906ed5a7af9c62511b61dbe37ff1ca0700e3b08151db952ad47a18f9c8cfd3f6d78fd93485aa8e39de08eca904f5dbfa747af90c3
diff --git a/www-client/netsurf/files/netsurf-3.10-disable-failing-tests.patch b/www-client/netsurf/files/netsurf-3.10-disable-failing-tests.patch
new file mode 100644
index 0000000..6ffcec0
--- /dev/null
+++ b/www-client/netsurf/files/netsurf-3.10-disable-failing-tests.patch
@@ -0,0 +1,42 @@
+From 4c3d6b10802b6747ba36b6e7c988f6b584352358 Mon Sep 17 00:00:00 2001
+From: Michael Orlitzky <michael@orlitzky.com>
+Date: Wed, 17 Jun 2020 17:42:34 -0400
+Subject: [PATCH 1/1] test: disable failing tests.
+
+Just cut them right out of the Makefile if they ain't gonna work.
+
+Bug: https://bugs.gentoo.org/687378
+Upstream-bug: https://bugs.netsurf-browser.org/mantis/view.php?id=2779
+---
+ test/Makefile | 8 --------
+ 1 file changed, 8 deletions(-)
+
+diff --git a/test/Makefile b/test/Makefile
+index 82ffee6..952d238 100644
+--- a/test/Makefile
++++ b/test/Makefile
+@@ -5,8 +5,6 @@ TESTS := \
+ nsurl \
+ urldbtest \
+ nsoption \
+- bloom \
+- hashtable \
+ hashmap \
+ urlescape \
+ utils \
+@@ -47,12 +45,6 @@ messages_SRCS := utils/messages.c utils/hashtable.c test/log.c test/messages.c
+ # nsoption test sources
+ nsoption_SRCS := utils/nsoption.c test/log.c test/nsoption.c
+
+-# Bloom filter test sources
+-bloom_SRCS := utils/bloom.c test/bloom.c
+-
+-# hash table test sources
+-hashtable_SRCS := utils/hashtable.c test/log.c test/hashtable.c
+-
+ # hashmap test sources
+ hashmap_SRCS := $(NSURL_SOURCES) utils/hashmap.c utils/corestrings.c test/log.c test/hashmap.c
+ hashmap_LD := -lmalloc_fig
+--
+2.26.2
+
diff --git a/www-client/netsurf/files/netsurf-3.10-julia-libutf8proc-header-location.patch b/www-client/netsurf/files/netsurf-3.10-julia-libutf8proc-header-location.patch
new file mode 100644
index 0000000..3a6ccc2
--- /dev/null
+++ b/www-client/netsurf/files/netsurf-3.10-julia-libutf8proc-header-location.patch
@@ -0,0 +1,34 @@
+From d585a1573819306bb3660db3f13a85b2fd254c63 Mon Sep 17 00:00:00 2001
+From: Michael Orlitzky <michael@orlitzky.com>
+Date: Wed, 17 Jun 2020 17:23:10 -0400
+Subject: [PATCH 1/1] utils/idna.c: adjust utf8proc.h header location.
+
+There are two upstreams for libutf8proc, and they each put utf8proc.h
+in a different location -- ostensibly as a performance art piece
+intended to remind the programmer that we as human beings are all
+slowly dying, and that our limited time here on earth should not be
+wasted. This commit switches the header location from the netsurf-
+upstream one that used to work, to the julia-upstream location that
+works now (that the Gentoo package follows the julia upstream).
+
+Bug: https://bugs.gentoo.org/721318
+---
+ utils/idna.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utils/idna.c b/utils/idna.c
+index 628ef1f..f6e498a 100644
+--- a/utils/idna.c
++++ b/utils/idna.c
+@@ -167,7 +167,7 @@ idna__ace_to_ucs4(const char *ace_label,
+
+ #ifdef WITH_UTF8PROC
+
+-#include <libutf8proc/utf8proc.h>
++#include <utf8proc.h>
+
+ int32_t idna_contexto[] = {
+ /* CONTEXTO codepoints which have a rule defined */
+--
+2.26.2
+
diff --git a/www-client/netsurf/files/netsurf-3.11-libressl-3.5.patch b/www-client/netsurf/files/netsurf-3.11-libressl-3.5.patch
new file mode 100644
index 0000000..5efb701
--- /dev/null
+++ b/www-client/netsurf/files/netsurf-3.11-libressl-3.5.patch
@@ -0,0 +1,27 @@
+X509_get_signature_nid(), ASN1_STRING_get0_data(), RSA_bits() and DH_bits()
+have been available since LibreSSL 2.7.
+DSA_bits(), RSA_get0_n(), RSA_get0_e() will be available in LibreSSL 3.5.
+
+--- a/content/fetchers/about/certificate.c
++++ b/content/fetchers/about/certificate.c
+@@ -137,7 +137,8 @@ static nserror free_ns_cert_info(struct ns_cert_info *cinfo)
+ /* OpenSSL 1.0.x, 1.0.2, 1.1.0 and 1.1.1 API all changed
+ * LibreSSL declares its OpenSSL version as 2.1 but only supports 1.0.x API
+ */
+-#if (defined(LIBRESSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x1010000fL))
++#if (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3050000fL) || \
++ (OPENSSL_VERSION_NUMBER < 0x1010000fL)
+ /* 1.0.x */
+
+ #if (defined(LIBRESSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x1000200fL))
+--- a/content/fetchers/curl.c
++++ b/content/fetchers/curl.c
+@@ -98,7 +98,7 @@
+ /* OpenSSL 1.0.x to 1.1.0 certificate reference counting changed
+ * LibreSSL declares its OpenSSL version as 2.1 but only supports the old way
+ */
+-#if (defined(LIBRESSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x1010000fL))
++#if (OPENSSL_VERSION_NUMBER < 0x1010000fL)
+ static int ns_X509_up_ref(X509 *cert)
+ {
+ cert->references++;
diff --git a/www-client/netsurf/metadata.xml b/www-client/netsurf/metadata.xml
new file mode 100644
index 0000000..d435571
--- /dev/null
+++ b/www-client/netsurf/metadata.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>philipp.ammann@posteo.de</email>
+ <name>Philipp Ammann</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <upstream>
+ <changelog>
+ https://download.netsurf-browser.org/netsurf/releases/ChangeLog.txt
+ </changelog>
+ </upstream>
+ <use>
+ <flag name="bmp">
+ Bitmap (BMP and ICO) image support via
+ <pkg>media-libs/libnsbmp</pkg>
+ </flag>
+ <flag name="gtk">Build GTK3 GUI</flag>
+ <flag name="psl">
+ Use public suffix list from <pkg>media-libs/libnspsl</pkg> to
+ detect supercookies (recommended)
+ </flag>
+ <flag name="rosprite">
+ RISC OS Sprite bitmap image support via
+ <pkg>media-libs/librosprite</pkg>
+ </flag>
+ <flag name="svgtiny">
+ Use <pkg>media-libs/libsvgtiny</pkg> instead of
+ <pkg>gnome-base/librsvg</pkg> for SVG support
+ </flag>
+ <flag name="truetype">
+ Use <pkg>media-libs/freetype</pkg> for text in the framebuffer
+ frontend
+ </flag>
+ </use>
+ <longdescription lang="en">
+ NetSurf is a free, open source web browser. It is written in C,
+ has its own layout and rendering engine entirely written from
+ scratch. It is small and capable of handling many of the web
+ standards in use today.
+
+ Whether you want to check your webmail, read the news or post to
+ discussion forums, NetSurf is your lightweight gateway to the
+ world wide web. Actively developed, NetSurf is continually
+ evolving and improving.
+ </longdescription>
+</pkgmetadata>
diff --git a/www-client/netsurf/netsurf-3.11.ebuild b/www-client/netsurf/netsurf-3.11.ebuild
new file mode 100644
index 0000000..585c83d
--- /dev/null
+++ b/www-client/netsurf/netsurf-3.11.ebuild
@@ -0,0 +1,145 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop netsurf toolchain-funcs
+
+DESCRIPTION="A free, open source web browser"
+HOMEPAGE="https://www.netsurf-browser.org/"
+SRC_URI="https://download.netsurf-browser.org/netsurf/releases/source/${P}-src.tar.gz"
+
+LICENSE="GPL-2 MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
+IUSE="bmp fbcon truetype +gif +gtk +javascript +jpeg
+ +png +psl rosprite +svg +svgtiny +webp"
+
+REQUIRED_USE="|| ( fbcon gtk )"
+
+RDEPEND="
+ dev-libs/libcss
+ dev-libs/libnsutils
+ dev-libs/openssl:=
+ dev-libs/libutf8proc
+ dev-libs/libxml2:2
+ net-misc/curl
+ net-libs/libdom
+ >=net-libs/libhubbub-0.3.8
+ bmp? ( media-libs/libnsbmp )
+ fbcon? (
+ dev-libs/libnsfb
+ truetype? (
+ media-fonts/dejavu
+ media-libs/freetype
+ )
+ )
+ gif? ( >=media-libs/libnsgif-1.0.0 )
+ gtk? (
+ dev-libs/glib:2
+ x11-libs/gtk+:3
+ )
+ javascript? (
+ dev-libs/nsgenbind
+ dev-lang/duktape:=
+ )
+ jpeg? ( media-libs/libjpeg-turbo:= )
+ png? ( media-libs/libpng:0= )
+ psl? ( media-libs/libnspsl )
+ rosprite? ( media-libs/librosprite )
+ svg? (
+ svgtiny? ( media-libs/libsvgtiny )
+ !svgtiny? ( gnome-base/librsvg:2 )
+ )
+ webp? ( media-libs/libwebp )"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ dev-libs/check
+ dev-perl/HTML-Parser
+ dev-build/netsurf-buildsystem
+ virtual/pkgconfig
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.10-julia-libutf8proc-header-location.patch"
+ "${FILESDIR}/${PN}-3.10-disable-failing-tests.patch"
+ "${FILESDIR}/${PN}-3.11-libressl-3.5.patch"
+)
+
+DOCS=(
+ README
+ docs/using-framebuffer.md
+ docs/ideas/{cache,css-engine,render-library}.txt
+)
+
+src_prepare() {
+ default
+ rm -r frontends/{amiga,atari,beos,monkey,riscos,windows} || die
+}
+
+_emake() {
+ netsurf_define_makeconf
+ local netsurf_makeconf=(
+ "${NETSURF_MAKECONF[@]}"
+ COMPONENT_TYPE=binary
+ NETSURF_FB_FONTLIB=$(usex truetype freetype internal)
+ NETSURF_FB_FONTPATH="${EPREFIX}/usr/share/fonts/dejavu"
+ NETSURF_USE_BMP=$(usex bmp YES NO)
+ NETSURF_USE_DUKTAPE=$(usex javascript YES NO)
+ NETSURF_USE_GIF=$(usex gif YES NO)
+ NETSURF_USE_JPEG=$(usex jpeg YES NO)
+ NETSURF_USE_PNG=$(usex png YES NO)
+ NETSURF_USE_NSPSL=$(usex psl YES NO)
+ NETSURF_USE_NSSVG=$(usex svg $(usex svgtiny YES NO) NO)
+ NETSURF_USE_OPENSSL=YES
+ NETSURF_USE_ROSPRITE=$(usex rosprite YES NO)
+ NETSURF_USE_RSVG=$(usex svg $(usex svgtiny NO YES) NO)
+ NETSURF_USE_WEBP=$(usex webp YES NO)
+ NETSURF_USE_VIDEO=NO
+ PKG_CONFIG=$(tc-getPKG_CONFIG)
+ )
+
+ emake "${netsurf_makeconf[@]}" $@
+}
+
+src_compile() {
+ # The build system only runs pkg-config to find librsvg's include
+ # dir for the gtk targets. So if you try to build the framebuffer
+ # target with NETSURF_USE_RSVG=YES, the build crashes on failing to
+ # find rsvg.h. To work around that, we set NETSURF_USE_RSVG=NO. It
+ # might be possible to fall back to svgtiny with USE="svg -svgtiny"
+ # if svgtiny works in a framebuffer, but then our (R)DEPEND would
+ # need some mangling to ensure that svgtiny is installed.
+ use fbcon && _emake NETSURF_USE_RSVG=NO TARGET=framebuffer
+
+ use gtk && _emake TARGET=gtk3
+}
+
+src_test() {
+ _emake test
+}
+
+src_install() {
+ if use fbcon ; then
+ # See earlier comments about rsvg.h.
+ _emake NETSURF_USE_RSVG=NO TARGET=framebuffer DESTDIR="${D}" install
+ elog "framebuffer binary has been installed as netsurf-fb"
+ make_desktop_entry "${EPREFIX}/usr/bin/netsurf-fb %u" \
+ NetSurf-framebuffer \
+ netsurf \
+ "Network;WebBrowser"
+ fi
+ if use gtk ; then
+ _emake TARGET=gtk3 DESTDIR="${D}" install
+ elog "netsurf gtk3 version has been installed as netsurf-gtk3"
+ make_desktop_entry "${EPREFIX}/usr/bin/netsurf-gtk3 %u" \
+ NetSurf-gtk3 \
+ netsurf \
+ "Network;WebBrowser"
+ fi
+
+ insinto /usr/share/pixmaps
+ doins frontends/gtk/res/netsurf.xpm
+ doman docs/netsurf-fb.1
+ doman docs/netsurf-gtk.1
+}
diff --git a/www-servers/apache/Manifest b/www-servers/apache/Manifest
new file mode 100644
index 0000000..5f16518
--- /dev/null
+++ b/www-servers/apache/Manifest
@@ -0,0 +1,2 @@
+DIST gentoo-apache-2.4.58-20231019.tar.bz2 26224 BLAKE2B 370f36dcbe9d10ed0dd415c2e28016c7897246b5c3f830e849e765c18a08be145c8a363f122dff2c4b8d5b1e53ff504a79d7512a58135899a539136b580524ed SHA512 60f68eb4168a86ee33525e7c90cf5af8da586ed31d12cc294ea6bf3bcb9f254ea7e1a4ca5db4846a0e92b97c1326f095aa3a9d5fdb9ed92c1c4726c5a825ab36
+DIST httpd-2.4.58.tar.bz2 7485817 BLAKE2B 2105b8fada99f1dda55201ed89ed5326f0edb078d352cbff44f02cde80d129b65b63e07366a9a744ba474be5687fa8d3d2d8ddc64ac914b47166607f3f4a9de2 SHA512 d6e73bf413a507ec16b621ff635e178206207a9e9810ce3944b3dc98d39cde8f225307110167fc9da5822175796c8cb66f98be5b9f0d8b76dcd83a401d39b2c1
diff --git a/www-servers/apache/apache-2.4.58-r2.ebuild b/www-servers/apache/apache-2.4.58-r2.ebuild
new file mode 100644
index 0000000..a274143
--- /dev/null
+++ b/www-servers/apache/apache-2.4.58-r2.ebuild
@@ -0,0 +1,257 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+# latest gentoo apache files
+GENTOO_PATCHSTAMP="20231019"
+GENTOO_DEVELOPER="graaff"
+GENTOO_PATCHNAME="gentoo-apache-2.4.58"
+
+# IUSE/USE_EXPAND magic
+IUSE_MPMS_FORK="prefork"
+IUSE_MPMS_THREAD="event worker"
+
+# << obsolete modules:
+# authn_default authz_default mem_cache
+# mem_cache is replaced by cache_disk
+# ?? buggy modules
+# proxy_scgi: startup error: undefined symbol "ap_proxy_release_connection", no fix found
+# >> added modules for reason:
+# compat: compatibility with 2.2 access control
+# authz_host: new module for access control
+# authn_core: functionality provided by authn_alias in previous versions
+# authz_core: new module, provides core authorization capabilities
+# cache_disk: replacement for mem_cache
+# lbmethod_byrequests: Split off from mod_proxy_balancer in 2.3
+# lbmethod_bytraffic: Split off from mod_proxy_balancer in 2.3
+# lbmethod_bybusyness: Split off from mod_proxy_balancer in 2.3
+# lbmethod_heartbeat: Split off from mod_proxy_balancer in 2.3
+# slotmem_shm: Slot-based shared memory provider (for lbmethod_byrequests).
+# socache_shmcb: shared object cache provider. Default config with ssl needs it
+# unixd: fixes startup error: Invalid command 'User'
+IUSE_MODULES="access_compat actions alias allowmethods asis auth_basic auth_digest auth_form
+authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authz_core
+authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex
+brotli cache cache_disk cache_socache cern_meta charset_lite cgi cgid dav dav_fs dav_lock
+dbd deflate dir dumpio env expires ext_filter file_cache filter headers http2
+ident imagemap include info lbmethod_byrequests lbmethod_bytraffic lbmethod_bybusyness
+lbmethod_heartbeat log_config log_forensic logio lua macro md mime mime_magic negotiation
+proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_hcheck proxy_html proxy_http proxy_scgi
+proxy_http2 proxy_fcgi proxy_uwsgi proxy_wstunnel rewrite ratelimit remoteip reqtimeout
+session session_cookie session_crypto session_dbd setenvif slotmem_shm socache_memcache
+socache_shmcb speling status substitute systemd tls unique_id userdir usertrack
+unixd version vhost_alias watchdog xml2enc"
+# The following are also in the source as of this version, but are not available
+# for user selection:
+# bucketeer case_filter case_filter_in echo http isapi optional_fn_export
+# optional_fn_import optional_hook_export optional_hook_import
+
+# inter-module dependencies
+# TODO: this may still be incomplete
+MODULE_DEPENDS="
+ auth_form:session
+ brotli:filter
+ dav_fs:dav
+ dav_lock:dav
+ deflate:filter
+ cache_disk:cache
+ ext_filter:filter
+ file_cache:cache
+ lbmethod_byrequests:proxy_balancer
+ lbmethod_byrequests:slotmem_shm
+ lbmethod_bytraffic:proxy_balancer
+ lbmethod_bybusyness:proxy_balancer
+ lbmethod_heartbeat:proxy_balancer
+ log_forensic:log_config
+ logio:log_config
+ cache_disk:cache
+ cache_socache:cache
+ md:watchdog
+ mime_magic:mime
+ proxy_ajp:proxy
+ proxy_balancer:proxy
+ proxy_balancer:slotmem_shm
+ proxy_connect:proxy
+ proxy_ftp:proxy
+ proxy_hcheck:proxy
+ proxy_hcheck:watchdog
+ proxy_html:proxy
+ proxy_html:xml2enc
+ proxy_http:proxy
+ proxy_http2:proxy
+ proxy_scgi:proxy
+ proxy_uwsgi:proxy
+ proxy_fcgi:proxy
+ proxy_wstunnel:proxy
+ session_cookie:session
+ session_dbd:dbd
+ session_dbd:session
+ socache_memcache:cache
+ substitute:filter
+"
+
+# module<->define mappings
+MODULE_DEFINES="
+ auth_digest:AUTH_DIGEST
+ authnz_ldap:AUTHNZ_LDAP
+ cache:CACHE
+ cache_disk:CACHE
+ cache_socache:CACHE
+ dav:DAV
+ dav_fs:DAV
+ dav_lock:DAV
+ file_cache:CACHE
+ http2:HTTP2
+ info:INFO
+ ldap:LDAP
+ lua:LUA
+ md:SSL
+ proxy:PROXY
+ proxy_ajp:PROXY
+ proxy_balancer:PROXY
+ proxy_connect:PROXY
+ proxy_fcgi:PROXY
+ proxy_ftp:PROXY
+ proxy_hcheck:PROXY
+ proxy_html:PROXY
+ proxy_http:PROXY
+ proxy_http2:PROXY
+ proxy_scgi:PROXY
+ proxy_uwsgi:PROXY
+ proxy_wstunnel:PROXY
+ socache_shmcb:SSL
+ socache_memcache:CACHE
+ ssl:SSL
+ status:STATUS
+ suexec:SUEXEC
+ systemd:SYSTEMD
+ userdir:USERDIR
+"
+
+# critical modules for the default config
+MODULE_CRITICAL="
+ authn_core
+ authz_core
+ authz_host
+ dir
+ mime
+ unixd
+"
+inherit apache-2 systemd tmpfiles toolchain-funcs
+
+DESCRIPTION="The Apache Web Server"
+HOMEPAGE="https://httpd.apache.org/"
+
+# some helper scripts are Apache-1.1, thus both are here
+LICENSE="Apache-2.0 Apache-1.1"
+SLOT="2"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x64-macos ~x64-solaris"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.4.57-libressl.patch
+ "${FILESDIR}"/libxmlv212.patch
+)
+
+pkg_setup() {
+ # dependent critical modules which are not allowed in global scope due
+ # to USE flag conditionals (bug #499260)
+ use ssl && MODULE_CRITICAL+=" socache_shmcb"
+ use doc && MODULE_CRITICAL+=" alias negotiation setenvif"
+ apache-2_pkg_setup
+}
+
+src_configure() {
+ # Brain dead check.
+ tc-is-cross-compiler && export ap_cv_void_ptr_lt_long="no"
+
+ apache-2_src_configure
+}
+
+src_compile() {
+ if tc-is-cross-compiler ; then
+ # This header is the same across targets, so use the build compiler.
+ pushd server >/dev/null
+ emake gen_test_char
+ tc-export_build_env BUILD_CC
+ ${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_CPPFLAGS} ${BUILD_LDFLAGS} \
+ gen_test_char.c -o gen_test_char $(apr-1-config --includes) || die
+ popd >/dev/null
+ fi
+
+ default
+}
+
+src_install() {
+ apache-2_src_install
+ local i
+ local apache_tools_prune_list=(
+ /usr/bin/{htdigest,logresolve,htpasswd,htdbm,ab,httxt2dbm}
+ /usr/sbin/{checkgid,fcgistarter,htcacheclean,rotatelogs}
+ /usr/share/man/man1/{logresolve.1,htdbm.1,htdigest.1,htpasswd.1,dbmmanage.1,ab.1}
+ /usr/share/man/man8/{rotatelogs.8,htcacheclean.8}
+ )
+ for i in ${apache_tools_prune_list[@]} ; do
+ rm "${ED}"/${i} || die "Failed to prune apache-tools bits"
+ done
+
+ dobin support/apxs
+
+ # Note: wait for mod_systemd to be included in some forthcoming release,
+ # Then apache2.4.service can be used and systemd support controlled
+ # through --enable-systemd
+ systemd_newunit "${FILESDIR}/apache2.4-hardened.service" "apache2.service"
+ dotmpfiles "${FILESDIR}/apache.conf"
+ #insinto /etc/apache2/modules.d
+ #doins "${FILESDIR}/00_systemd.conf"
+
+ # Install http2 module config
+ insinto /etc/apache2/modules.d
+ doins "${FILESDIR}"/41_mod_http2.conf
+
+ # Fix path to apache libdir
+ sed "s|@LIBDIR@|$(get_libdir)|" -i "${ED}"/usr/sbin/apache2ctl || die
+}
+
+pkg_postinst() {
+ apache-2_pkg_postinst || die "apache-2_pkg_postinst failed"
+
+ tmpfiles_process apache.conf #662544
+
+ # warnings that default config might not work out of the box
+ local mod cmod
+ for mod in ${MODULE_CRITICAL} ; do
+ if ! use "apache2_modules_${mod}"; then
+ echo
+ ewarn "Warning: Critical module not installed!"
+ ewarn "Modules 'authn_core', 'authz_core' and 'unixd'"
+ ewarn "are highly recomended but might not be in the base profile yet."
+ ewarn "Default config for ssl needs module 'socache_shmcb'."
+ ewarn "Enabling the following flags is highly recommended:"
+ for cmod in ${MODULE_CRITICAL} ; do
+ use "apache2_modules_${cmod}" || \
+ ewarn "+ apache2_modules_${cmod}"
+ done
+ echo
+ break
+ fi
+ done
+ # warning for proxy_balancer and missing load balancing scheduler
+ if use apache2_modules_proxy_balancer; then
+ local lbset=
+ for mod in lbmethod_byrequests lbmethod_bytraffic lbmethod_bybusyness lbmethod_heartbeat; do
+ if use "apache2_modules_${mod}"; then
+ lbset=1 && break
+ fi
+ done
+ if [[ ! ${lbset} ]] ; then
+ echo
+ ewarn "Info: Missing load balancing scheduler algorithm module"
+ ewarn "(They were split off from proxy_balancer in 2.3)"
+ ewarn "In order to get the ability of load balancing, at least"
+ ewarn "one of these modules has to be present:"
+ ewarn "lbmethod_byrequests lbmethod_bytraffic lbmethod_bybusyness lbmethod_heartbeat"
+ echo
+ fi
+ fi
+}
diff --git a/www-servers/apache/apache-2.4.58.ebuild b/www-servers/apache/apache-2.4.58.ebuild
new file mode 100644
index 0000000..7eddca0
--- /dev/null
+++ b/www-servers/apache/apache-2.4.58.ebuild
@@ -0,0 +1,264 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+# latest gentoo apache files
+GENTOO_PATCHSTAMP="20231019"
+GENTOO_DEVELOPER="graaff"
+GENTOO_PATCHNAME="gentoo-apache-2.4.58"
+
+# ancient hack: bug #502384
+IUSE="split-usr"
+
+# IUSE/USE_EXPAND magic
+IUSE_MPMS_FORK="prefork"
+IUSE_MPMS_THREAD="event worker"
+
+# << obsolete modules:
+# authn_default authz_default mem_cache
+# mem_cache is replaced by cache_disk
+# ?? buggy modules
+# proxy_scgi: startup error: undefined symbol "ap_proxy_release_connection", no fix found
+# >> added modules for reason:
+# compat: compatibility with 2.2 access control
+# authz_host: new module for access control
+# authn_core: functionality provided by authn_alias in previous versions
+# authz_core: new module, provides core authorization capabilities
+# cache_disk: replacement for mem_cache
+# lbmethod_byrequests: Split off from mod_proxy_balancer in 2.3
+# lbmethod_bytraffic: Split off from mod_proxy_balancer in 2.3
+# lbmethod_bybusyness: Split off from mod_proxy_balancer in 2.3
+# lbmethod_heartbeat: Split off from mod_proxy_balancer in 2.3
+# slotmem_shm: Slot-based shared memory provider (for lbmethod_byrequests).
+# socache_shmcb: shared object cache provider. Default config with ssl needs it
+# unixd: fixes startup error: Invalid command 'User'
+IUSE_MODULES="access_compat actions alias allowmethods asis auth_basic auth_digest auth_form
+authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authz_core
+authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex
+brotli cache cache_disk cache_socache cern_meta charset_lite cgi cgid dav dav_fs dav_lock
+dbd deflate dir dumpio env expires ext_filter file_cache filter headers http2
+ident imagemap include info lbmethod_byrequests lbmethod_bytraffic lbmethod_bybusyness
+lbmethod_heartbeat log_config log_forensic logio lua macro md mime mime_magic negotiation
+proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_hcheck proxy_html proxy_http proxy_scgi
+proxy_http2 proxy_fcgi proxy_uwsgi proxy_wstunnel rewrite ratelimit remoteip reqtimeout
+session session_cookie session_crypto session_dbd setenvif slotmem_shm socache_memcache
+socache_shmcb speling status substitute systemd tls unique_id userdir usertrack
+unixd version vhost_alias watchdog xml2enc"
+# The following are also in the source as of this version, but are not available
+# for user selection:
+# bucketeer case_filter case_filter_in echo http isapi optional_fn_export
+# optional_fn_import optional_hook_export optional_hook_import
+
+# inter-module dependencies
+# TODO: this may still be incomplete
+MODULE_DEPENDS="
+ auth_form:session
+ brotli:filter
+ dav_fs:dav
+ dav_lock:dav
+ deflate:filter
+ cache_disk:cache
+ ext_filter:filter
+ file_cache:cache
+ lbmethod_byrequests:proxy_balancer
+ lbmethod_byrequests:slotmem_shm
+ lbmethod_bytraffic:proxy_balancer
+ lbmethod_bybusyness:proxy_balancer
+ lbmethod_heartbeat:proxy_balancer
+ log_forensic:log_config
+ logio:log_config
+ cache_disk:cache
+ cache_socache:cache
+ md:watchdog
+ mime_magic:mime
+ proxy_ajp:proxy
+ proxy_balancer:proxy
+ proxy_balancer:slotmem_shm
+ proxy_connect:proxy
+ proxy_ftp:proxy
+ proxy_hcheck:proxy
+ proxy_hcheck:watchdog
+ proxy_html:proxy
+ proxy_html:xml2enc
+ proxy_http:proxy
+ proxy_http2:proxy
+ proxy_scgi:proxy
+ proxy_uwsgi:proxy
+ proxy_fcgi:proxy
+ proxy_wstunnel:proxy
+ session_cookie:session
+ session_dbd:dbd
+ session_dbd:session
+ socache_memcache:cache
+ substitute:filter
+"
+
+# module<->define mappings
+MODULE_DEFINES="
+ auth_digest:AUTH_DIGEST
+ authnz_ldap:AUTHNZ_LDAP
+ cache:CACHE
+ cache_disk:CACHE
+ cache_socache:CACHE
+ dav:DAV
+ dav_fs:DAV
+ dav_lock:DAV
+ file_cache:CACHE
+ http2:HTTP2
+ info:INFO
+ ldap:LDAP
+ lua:LUA
+ md:SSL
+ proxy:PROXY
+ proxy_ajp:PROXY
+ proxy_balancer:PROXY
+ proxy_connect:PROXY
+ proxy_fcgi:PROXY
+ proxy_ftp:PROXY
+ proxy_hcheck:PROXY
+ proxy_html:PROXY
+ proxy_http:PROXY
+ proxy_http2:PROXY
+ proxy_scgi:PROXY
+ proxy_uswgi:PROXY
+ proxy_wstunnel:PROXY
+ socache_shmcb:SSL
+ socache_memcache:CACHE
+ ssl:SSL
+ status:STATUS
+ suexec:SUEXEC
+ systemd:SYSTEMD
+ userdir:USERDIR
+"
+
+# critical modules for the default config
+MODULE_CRITICAL="
+ authn_core
+ authz_core
+ authz_host
+ dir
+ mime
+ unixd
+"
+inherit apache-2 systemd tmpfiles toolchain-funcs
+
+DESCRIPTION="The Apache Web Server"
+HOMEPAGE="https://httpd.apache.org/"
+
+# some helper scripts are Apache-1.1, thus both are here
+LICENSE="Apache-2.0 Apache-1.1"
+SLOT="2"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x64-macos ~x64-solaris"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.4.57-libressl.patch
+ "${FILESDIR}"/libxmlv212.patch
+)
+
+pkg_setup() {
+ # dependent critical modules which are not allowed in global scope due
+ # to USE flag conditionals (bug #499260)
+ use ssl && MODULE_CRITICAL+=" socache_shmcb"
+ use doc && MODULE_CRITICAL+=" alias negotiation setenvif"
+ apache-2_pkg_setup
+}
+
+src_configure() {
+ # Brain dead check.
+ tc-is-cross-compiler && export ap_cv_void_ptr_lt_long="no"
+
+ apache-2_src_configure
+}
+
+src_compile() {
+ if tc-is-cross-compiler ; then
+ # This header is the same across targets, so use the build compiler.
+ pushd server >/dev/null
+ emake gen_test_char
+ tc-export_build_env BUILD_CC
+ ${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_CPPFLAGS} ${BUILD_LDFLAGS} \
+ gen_test_char.c -o gen_test_char $(apr-1-config --includes) || die
+ popd >/dev/null
+ fi
+
+ default
+}
+
+src_install() {
+ apache-2_src_install
+ local i
+ local apache_tools_prune_list=(
+ /usr/bin/{htdigest,logresolve,htpasswd,htdbm,ab,httxt2dbm}
+ /usr/sbin/{checkgid,fcgistarter,htcacheclean,rotatelogs}
+ /usr/share/man/man1/{logresolve.1,htdbm.1,htdigest.1,htpasswd.1,dbmmanage.1,ab.1}
+ /usr/share/man/man8/{rotatelogs.8,htcacheclean.8}
+ )
+ for i in ${apache_tools_prune_list[@]} ; do
+ rm "${ED}"/${i} || die "Failed to prune apache-tools bits"
+ done
+
+ # install apxs in /usr/bin (bug #502384) and put a symlink into the
+ # old location until all ebuilds and eclasses have been modified to
+ # use the new location.
+ dobin support/apxs
+ use split-usr && dosym ../bin/apxs /usr/sbin/apxs
+
+ # Note: wait for mod_systemd to be included in some forthcoming release,
+ # Then apache2.4.service can be used and systemd support controlled
+ # through --enable-systemd
+ systemd_newunit "${FILESDIR}/apache2.4-hardened.service" "apache2.service"
+ dotmpfiles "${FILESDIR}/apache.conf"
+ #insinto /etc/apache2/modules.d
+ #doins "${FILESDIR}/00_systemd.conf"
+
+ # Install http2 module config
+ insinto /etc/apache2/modules.d
+ doins "${FILESDIR}"/41_mod_http2.conf
+
+ # Fix path to apache libdir
+ sed "s|@LIBDIR@|$(get_libdir)|" -i "${ED}"/usr/sbin/apache2ctl || die
+}
+
+pkg_postinst() {
+ apache-2_pkg_postinst || die "apache-2_pkg_postinst failed"
+
+ tmpfiles_process apache.conf #662544
+
+ # warnings that default config might not work out of the box
+ local mod cmod
+ for mod in ${MODULE_CRITICAL} ; do
+ if ! use "apache2_modules_${mod}"; then
+ echo
+ ewarn "Warning: Critical module not installed!"
+ ewarn "Modules 'authn_core', 'authz_core' and 'unixd'"
+ ewarn "are highly recomended but might not be in the base profile yet."
+ ewarn "Default config for ssl needs module 'socache_shmcb'."
+ ewarn "Enabling the following flags is highly recommended:"
+ for cmod in ${MODULE_CRITICAL} ; do
+ use "apache2_modules_${cmod}" || \
+ ewarn "+ apache2_modules_${cmod}"
+ done
+ echo
+ break
+ fi
+ done
+ # warning for proxy_balancer and missing load balancing scheduler
+ if use apache2_modules_proxy_balancer; then
+ local lbset=
+ for mod in lbmethod_byrequests lbmethod_bytraffic lbmethod_bybusyness lbmethod_heartbeat; do
+ if use "apache2_modules_${mod}"; then
+ lbset=1 && break
+ fi
+ done
+ if [[ ! ${lbset} ]] ; then
+ echo
+ ewarn "Info: Missing load balancing scheduler algorithm module"
+ ewarn "(They were split off from proxy_balancer in 2.3)"
+ ewarn "In order to get the ability of load balancing, at least"
+ ewarn "one of these modules has to be present:"
+ ewarn "lbmethod_byrequests lbmethod_bytraffic lbmethod_bybusyness lbmethod_heartbeat"
+ echo
+ fi
+ fi
+}
diff --git a/www-servers/apache/files/41_mod_http2.conf b/www-servers/apache/files/41_mod_http2.conf
new file mode 100644
index 0000000..e4c9454
--- /dev/null
+++ b/www-servers/apache/files/41_mod_http2.conf
@@ -0,0 +1,9 @@
+<IfDefine SSL>
+ <IfModule http2_module>
+ # enable debugging for this module
+ #LogLevel http2:info
+
+ #Enable HTTP/2 support
+ Protocols h2 h2c http/1.1
+ </IfModule>
+</IfDefine>
diff --git a/www-servers/apache/files/apache-2.4.57-libressl.patch b/www-servers/apache/files/apache-2.4.57-libressl.patch
new file mode 100644
index 0000000..8be5a55
--- /dev/null
+++ b/www-servers/apache/files/apache-2.4.57-libressl.patch
@@ -0,0 +1,40 @@
+https://github.com/apache/httpd/pull/384
+
+From: orbea <orbea@riseup.net>
+Date: Thu, 7 Sep 2023 12:52:13 -0700
+Subject: [PATCH] acinclude.m4: test for OPENSSL_NO_ENGINE
+
+With >= LibreSSL 3.8.1 the engine code has been removed and
+OPENSSL_NO_ENGINE has been defined, testing for this define during
+configure will prevent implicit function declarations when using an ssl
+implementation with the engine code disabled or removed.
+---
+ acinclude.m4 | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -587,10 +587,22 @@ AC_DEFUN([APACHE_CHECK_OPENSSL],[
+
+ dnl Run library and function checks
+ liberrors=""
++ AC_TRY_COMPILE([#include <openssl/opensslconf.h>],[
++#if defined(OPENSSL_NO_ENGINE)
++#error "Engine support disabled in <openssl/opensslconf.h>"
++#endif],
++ [AC_MSG_RESULT(OK)
++ ac_cv_openssl_engine=yes],
++ [AC_MSG_RESULT(FAILED)])
+ AC_CHECK_HEADERS([openssl/engine.h])
+ AC_CHECK_FUNCS([SSL_CTX_new], [], [liberrors="yes"])
+ AC_CHECK_FUNCS([OPENSSL_init_ssl])
+- AC_CHECK_FUNCS([ENGINE_init ENGINE_load_builtin_engines RAND_egd])
++ AC_CHECK_FUNCS([ENGINE_load_builtin_engines RAND_egd])
++ if test "x$ac_cv_openssl_engine" = "xyes"; then
++ AC_CHECK_FUNCS([ENGINE_init])
++ else
++ AC_MSG_WARN([OpenSSL engine support disabled])
++ fi
+ if test "x$liberrors" != "x"; then
+ AC_MSG_WARN([OpenSSL libraries are unusable])
+ fi
diff --git a/www-servers/apache/files/apache.conf b/www-servers/apache/files/apache.conf
new file mode 100644
index 0000000..74888d8
--- /dev/null
+++ b/www-servers/apache/files/apache.conf
@@ -0,0 +1,3 @@
+d /run/apache2 710 root apache
+d /run/apache_ssl_mutex
+d /var/cache/apache2 750 apache apache
diff --git a/www-servers/apache/files/apache2.4-hardened.service b/www-servers/apache/files/apache2.4-hardened.service
new file mode 100644
index 0000000..fe66567
--- /dev/null
+++ b/www-servers/apache/files/apache2.4-hardened.service
@@ -0,0 +1,25 @@
+[Unit]
+Description=The Apache HTTP Server
+After=network.target remote-fs.target nss-lookup.target
+
+[Service]
+EnvironmentFile=/etc/conf.d/apache2
+ExecStart=/usr/sbin/apache2 $APACHE2_OPTS -DFOREGROUND
+ExecReload=/usr/sbin/apache2 $APACHE2_OPTS -k graceful
+ExecStop=/usr/sbin/apache2 $APACHE2_OPTS -k graceful-stop
+# We want systemd to give httpd some time to finish gracefully, but still want
+# it to kill httpd after TimeoutStopSec if something went wrong during the
+# graceful stop. Normally, Systemd sends SIGTERM signal right after the
+# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
+# httpd time to finish.
+KillSignal=SIGCONT
+PrivateTmp=true
+#Hardening
+CapabilityBoundingSet=CAP_CHOWN CAP_SETGID CAP_SETUID CAP_DAC_OVERRIDE CAP_KILL CAP_NET_BIND_SERVICE CAP_IPC_LOCK
+SecureBits=noroot-locked
+ProtectSystem=full
+PrivateDevices=true
+MemoryDenyWriteExecute=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/www-servers/apache/files/libxmlv212.patch b/www-servers/apache/files/libxmlv212.patch
new file mode 100644
index 0000000..281633b
--- /dev/null
+++ b/www-servers/apache/files/libxmlv212.patch
@@ -0,0 +1,24 @@
+https://github.com/apache/httpd/pull/393
+
+From bd2c4e466e0949f6f770bbb2569ce5ae9b3965c0 Mon Sep 17 00:00:00 2001
+From: ttachi <tachihara@hotmail.com>
+Date: Fri, 17 Nov 2023 22:24:45 +0900
+Subject: [PATCH] mod_xml2enc: remove dependency on xmlstring header
+
+---
+ modules/filters/mod_xml2enc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/filters/mod_xml2enc.c b/modules/filters/mod_xml2enc.c
+index 34f8e8ee090..0d3d13c1239 100644
+--- a/modules/filters/mod_xml2enc.c
++++ b/modules/filters/mod_xml2enc.c
+@@ -209,7 +209,7 @@ static void sniff_encoding(request_rec* r, xml2ctx* ctx)
+
+ /* to sniff, first we look for BOM */
+ if (ctx->xml2enc == XML_CHAR_ENCODING_NONE) {
+- ctx->xml2enc = xmlDetectCharEncoding((const xmlChar*)ctx->buf,
++ ctx->xml2enc = xmlDetectCharEncoding((const unsigned char*)ctx->buf,
+ ctx->bytes);
+ if (HAVE_ENCODING(ctx->xml2enc)) {
+ ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(01432)
diff --git a/www-servers/apache/metadata.xml b/www-servers/apache/metadata.xml
new file mode 100644
index 0000000..2c46080
--- /dev/null
+++ b/www-servers/apache/metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>apache-bugs@gentoo.org</email>
+ <name>Apache project</name>
+ </maintainer>
+ <longdescription>
+ The Apache HTTP Server Project is an effort to develop and maintain an
+ open-source HTTP server for modern operating systems. The goal of this
+ project is to provide a secure, efficient and extensible server that
+ provides HTTP services in sync with the current HTTP standards.
+ </longdescription>
+ <use>
+ <flag name="suexec">Install suexec with apache</flag>
+ <flag name="suexec-caps">Install suexec with capabilities instead of SUID</flag>
+ <flag name="suexec-syslog">Log suexec to syslog instead of to a separate file</flag>
+ <flag name="static">Link in apache2 modules statically rather then plugins</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">apache/httpd</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/x11-apps/igt-gpu-tools/Manifest b/x11-apps/igt-gpu-tools/Manifest
deleted file mode 100644
index f9704cb..0000000
--- a/x11-apps/igt-gpu-tools/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-DIST igt-gpu-tools-1.23.tar.xz 1045716 BLAKE2B f5e55ce9b682f2a9f2c6ab73c1e8e933ebea09b343f3af02df50b5bdce3e2ac313b1f92709c6de0d9fc7ffe2e2c9dfa95d2918ae9bd561cc285cff30fe59c6fd SHA512 8697265a978359e28983f483bf95819844597fc2080923d15d0587f6d648081af27e8ea318873e20103bbf8446b9f1005c6bc90a6276d3169837abd181f96839
diff --git a/x11-apps/igt-gpu-tools/igt-gpu-tools-1.23-r1.ebuild b/x11-apps/igt-gpu-tools/igt-gpu-tools-1.23-r1.ebuild
deleted file mode 100644
index dd0926b..0000000
--- a/x11-apps/igt-gpu-tools/igt-gpu-tools-1.23-r1.ebuild
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright 1999-2019 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-EGIT_REPO_URI="https://gitlab.freedesktop.org/drm/${PN}.git"
-if [[ ${PV} = *9999* ]]; then
- GIT_ECLASS="git-r3"
-fi
-
-inherit ${GIT_ECLASS} meson
-
-DESCRIPTION="Intel GPU userland tools"
-
-HOMEPAGE="https://01.org/linuxgraphics https://gitlab.freedesktop.org/drm/igt-gpu-tools"
-if [[ ${PV} = *9999* ]]; then
- SRC_URI=""
-else
- KEYWORDS="~amd64 ~x86"
- SRC_URI="https://www.x.org/releases/individual/app/${P}.tar.xz"
-fi
-LICENSE="MIT"
-SLOT="0"
-IUSE="chamelium doc libressl man overlay sound valgrind video_cards_amdgpu video_cards_intel video_cards_nouveau X xv"
-REQUIRED_USE="
- || ( video_cards_amdgpu video_cards_intel video_cards_nouveau )
- overlay? (
- video_cards_intel
- || ( X xv )
- )
-"
-RESTRICT="test"
-
-RDEPEND="
- dev-libs/glib:2
- sys-apps/kmod:=
- sys-libs/libunwind:=
- sys-libs/zlib:=
- sys-process/procps:=
- virtual/libudev:=
- >=x11-libs/cairo-1.12.0[X?]
- >=x11-libs/libdrm-2.4.82[video_cards_amdgpu?,video_cards_intel?,video_cards_nouveau?]
- >=x11-libs/libpciaccess-0.10
- chamelium? (
- dev-libs/xmlrpc-c
- sci-libs/gsl
- x11-libs/pixman
- )
- !libressl? ( dev-libs/openssl:0= )
- libressl? ( dev-libs/libressl:0= )
- overlay? (
- >=x11-libs/libXrandr-1.3
- xv? (
- x11-libs/libX11
- x11-libs/libXext
- x11-libs/libXv
- )
- )
- sound? (
- sci-libs/gsl
- media-libs/alsa-lib:=
- )
- valgrind? ( dev-util/valgrind )
- "
-DEPEND="${RDEPEND}
- doc? ( >=dev-util/gtk-doc-1.25-r1 )
- man? ( dev-python/docutils )
- overlay? (
- >=dev-util/peg-0.1.18
- x11-base/xorg-proto
- )
- video_cards_intel? (
- sys-devel/bison
- sys-devel/flex
- )
-"
-
-src_prepare() {
- sed -e "s/rst2man/rst2man.py/" -i man/rst2man.sh
- sed -e "s/find_program('rst2man'/find_program('rst2man.py'/" -i man/meson.build
- default_src_prepare
-}
-
-src_configure() {
- local gpus=""
- use video_cards_amdgpu && gpus+="amdgpu,"
- use video_cards_intel && gpus+="intel,"
- use video_cards_nouveau && gpus+="nouveau,"
-
- local overlay_backends=""
- use overlay && use xv && overlay_backends+="xv,"
- use overlay && use X && overlay_backends+="x,"
-
- local emesonargs=(
- -Dbuild_audio=$(usex sound true false)
- -Dbuild_chamelium=$(usex chamelium true false)
- -Dbuild_docs=$(usex doc true false)
- -Dbuild_man=$(usex man true false)
- -Dbuild_overlay=$(usex overlay true false)
- -Dbuild_tests=$(usex doc true false) # Test build is required for docs
- -Doverlay_backends=${overlay_backends%?}
- -Dwith_libdrm=${gpus%?}
- -Dwith_valgrind=$(usex valgrind true false)
- )
- meson_src_configure
-}
diff --git a/x11-apps/igt-gpu-tools/metadata.xml b/x11-apps/igt-gpu-tools/metadata.xml
deleted file mode 100644
index 8c66887..0000000
--- a/x11-apps/igt-gpu-tools/metadata.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
-<maintainer type="project">
- <email>x11@gentoo.org</email>
- <name>X11</name>
-</maintainer>
-<use>
- <flag name="chamelium">Enables support for building Chamelium tests</flag>
- <flag name="man">Build and install man pages</flag>
- <flag name="overlay">Build the intel-gpu-overlay utility</flag>
- <flag name="valgrind">Support valgrind annotations</flag>
- <flag name="xv">Enable intel-gpu-overlay xv backend</flag>
- <flag name="X">Enable intel-gpu-overlay xlib/cairo backend</flag>
-</use>
-</pkgmetadata>