commit:     74f0e599968c2fefb2c971afc64bf17c5f279a95
Author:     Brett A C Sheffield <bacs <AT> librecast <DOT> net>
AuthorDate: Sat Jan 24 18:24:12 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Feb  9 23:44:37 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=74f0e599

dev-python/blake3: do not use vendored C sources

Fix build with USE="-rust" to not use bundled outdated blake3 C sources,
but depend on dev-libs/blake3 package.

Closes: https://bugs.gentoo.org/943281
Signed-off-by: Brett A C Sheffield <bacs <AT> librecast.net>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-python/blake3/blake3-1.0.8-r1.ebuild           | 144 +++++++++++++++++++++
 .../files/blake3-1.0.8-use-installed-library.patch |  49 +++++++
 2 files changed, 193 insertions(+)

diff --git a/dev-python/blake3/blake3-1.0.8-r1.ebuild 
b/dev-python/blake3/blake3-1.0.8-r1.ebuild
new file mode 100644
index 000000000000..1769be858af7
--- /dev/null
+++ b/dev-python/blake3/blake3-1.0.8-r1.ebuild
@@ -0,0 +1,144 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CARGO_OPTIONAL=1
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=standalone
+PYTHON_COMPAT=( python3_{11..14} )
+
+RUST_MIN_VER="1.80.0"
+CRATES="
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+       [email protected]
+"
+
+inherit cargo distutils-r1
+
+MY_P=blake3-py-${PV}
+DESCRIPTION="Python bindings for the BLAKE3 cryptographic hash function"
+HOMEPAGE="
+       https://github.com/oconnor663/blake3-py/
+       https://pypi.org/project/blake3/
+"
+SRC_URI="
+       https://github.com/oconnor663/blake3-py/archive/${PV}.tar.gz
+               -> ${MY_P}.gh.tar.gz
+       rust? (
+               ${CARGO_CRATE_URIS}
+       )
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="
+       || ( CC0-1.0 Apache-2.0 )
+       rust? (
+"
+# Dependent crate licenses
+LICENSE+="
+       Apache-2.0-with-LLVM-exceptions BSD-2 MIT Unicode-3.0
+       || ( Apache-2.0 CC0-1.0 MIT-0 )
+"
+LICENSE+="
+       )
+"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="+rust"
+
+DEPEND="
+       !rust? ( dev-libs/blake3:= )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="
+       ${DEPEND}
+       rust? (
+               ${RUST_DEPEND}
+               dev-util/maturin[${PYTHON_USEDEP}]
+       )
+       !rust? (
+               dev-python/setuptools[${PYTHON_USEDEP}]
+               dev-python/wheel[${PYTHON_USEDEP}]
+       )
+       test? (
+               dev-python/numpy[${PYTHON_USEDEP}]
+       )
+"
+
+QA_FLAGS_IGNORED="usr/lib.*/py.*/site-packages/blake3/blake3.*.so"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+pkg_setup() {
+       use rust && rust_pkg_setup
+}
+
+src_unpack() {
+       # Do this unconditionally as it has sensible behaviour even
+       # w/ USE=-rust.
+       cargo_src_unpack
+}
+
+PATCHES=(
+       # Link against shared blake3 library. Bug 943281.
+       "${FILESDIR}/${P}-use-installed-library.patch"
+)
+
+src_prepare() {
+       distutils-r1_src_prepare
+
+       # sed the package name and version to improve compatibility
+       sed -e 's:blake3_experimental_c:blake3:' \
+               -e "s:0[.]0[.]1:${PV}:" \
+               -i c_impl/setup.py || die
+
+       # remove vendored C sources to ensure we don't use accidentally
+       rm -r c_impl/vendor || die
+}
+
+python_compile() {
+       local DISTUTILS_USE_PEP517=$(usex rust maturin setuptools)
+
+       if ! use rust; then
+               export FORCE_SYSTEM_BLAKE3=1
+               cd c_impl || die
+       fi
+       distutils-r1_python_compile
+       if ! use rust; then
+               cd - >/dev/null || die
+       fi
+}

diff --git a/dev-python/blake3/files/blake3-1.0.8-use-installed-library.patch 
b/dev-python/blake3/files/blake3-1.0.8-use-installed-library.patch
new file mode 100644
index 000000000000..5f96470ad213
--- /dev/null
+++ b/dev-python/blake3/files/blake3-1.0.8-use-installed-library.patch
@@ -0,0 +1,49 @@
+# Link against shared blake3 library. Gentoo bug 943281.
+# Set FORCE_SYSTEM_BLAKE3=1 to force use of installed system library.
+
+diff --git a/c_impl/setup.py b/c_impl/setup.py
+index 417385b..2a664f0 100644
+--- a/c_impl/setup.py
++++ b/c_impl/setup.py
+@@ -69,6 +69,9 @@ def is_aarch64():
+ def force_intrinsics():
+     return os.environ.get("FORCE_INTRINSICS") == "1"
+ 
++def force_system_blake3():
++    # force use of system library for blake3
++    return os.environ.get("FORCE_SYSTEM_BLAKE3") == "1"
+ 
+ def compile_x86_intrinsics():
+     object_files = []
+@@ -203,9 +206,17 @@ def prepare_extension():
+         "vendor/blake3_dispatch.c",
+         "vendor/blake3_portable.c",
+     ]
++    include_dirs=[
++        "vendor",
++    ],
++    extra_link_args = [ "-lblake3" ]
+     target = platform.machine()
+     extra_objects = []
+-    if is_macos():
++    if force_system_blake3():
++        print("using installed system library")
++        sources = sources[:1]
++        include_dirs = []
++    elif is_macos():
+         # On macOS we build a "universal" binary containing both x86 and ARM
+         # code.
+         extra_objects = compile_macos_universal_staticlib()
+@@ -239,10 +250,9 @@ def prepare_extension():
+     return setuptools.Extension(
+         "blake3",
+         sources=sources,
+-        include_dirs=[
+-            "vendor",
+-        ],
++        include_dirs=include_dirs,
+         extra_objects=extra_objects,
++        extra_link_args=extra_link_args,
+         define_macros=[
+             ("SETUP_PY_VERSION", escape_preprocessor_string(VERSION)),
+             ("SETUP_PY_DESCRIPTION", escape_preprocessor_string(DESCRIPTION)),

Reply via email to