commit:     bbddf592412443f8f5cf43a2231ee36d9aae4f5e
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Mon Apr 21 18:06:05 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Apr 22 00:37:49 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=bbddf592

media-gfx/blender: update 4.3.2

Backport changes from 9999 to 4.3.2

package missing assets
add opengl use flag to select backend
unbundle bullet/glog/gflags
rename USE otf to truetype
fix compilation with openvdb-12
fix compilation with optix-8.1.0
refactor cuda configuration
refactor hip configuration
refactor optix configuration
implement optional expensive tests and need configuration

Closes: https://bugs.gentoo.org/947591
Closes: https://bugs.gentoo.org/947515
Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-gfx/blender/blender-3.6.18-r1.ebuild         |  12 +-
 media-gfx/blender/blender-4.1.1-r5.ebuild          |  16 +-
 media-gfx/blender/blender-4.2.4-r2.ebuild          |  16 +-
 media-gfx/blender/blender-4.3.2-r2.ebuild          | 443 +++++++++++++++------
 .../blender/files/blender-4.3.2-openvdb-12.patch   |  76 ++++
 .../blender/files/blender-4.3.2-optix-8.1.0.patch  |  34 ++
 media-gfx/blender/metadata.xml                     |   2 +-
 7 files changed, 464 insertions(+), 135 deletions(-)

diff --git a/media-gfx/blender/blender-3.6.18-r1.ebuild 
b/media-gfx/blender/blender-3.6.18-r1.ebuild
index 1d012d0577cc..bd3462a8b278 100644
--- a/media-gfx/blender/blender-3.6.18-r1.ebuild
+++ b/media-gfx/blender/blender-3.6.18-r1.ebuild
@@ -182,11 +182,13 @@ src_unpack() {
                subversion_fetch ${ASSETS_SVN_URL} ../lib/assets
        else
                default
-               if use test; then
-                       #The tests are downloaded from: 
https://svn.blender.org/svnroot/bf-blender/tags/blender-${SLOT}-release/lib/tests
-                       mkdir -p lib || die
-                       mv 
"${WORKDIR}/blender-${TEST_TARBALL_VERSION}-tests/tests" lib || die
-               fi
+
+               # BUG upstream returns LFS references instead of files
+               # if use test; then
+               #       #The tests are downloaded from: 
https://svn.blender.org/svnroot/bf-blender/tags/blender-${SLOT}-release/lib/tests
+               #       mkdir -p lib || die
+               #       mv 
"${WORKDIR}/blender-${TEST_TARBALL_VERSION}-tests/tests" lib || die
+               # fi
        fi
 
 }

diff --git a/media-gfx/blender/blender-4.1.1-r5.ebuild 
b/media-gfx/blender/blender-4.1.1-r5.ebuild
index aac5acc037a0..cbe668c639ba 100644
--- a/media-gfx/blender/blender-4.1.1-r5.ebuild
+++ b/media-gfx/blender/blender-4.1.1-r5.ebuild
@@ -235,10 +235,11 @@ src_unpack() {
        else
                default
 
-               if use test; then
-                       mkdir -p "${S}/tests/data/" || die
-                       mv blender-test-data/* "${S}/tests/data/" || die
-               fi
+               # BUG upstream returns LFS references instead of files
+               # if use test; then
+               #       mkdir -p "${S}/tests/data/" || die
+               #       mv blender-test-data/* "${S}/tests/data/" || die
+               # fi
        fi
 }
 
@@ -510,6 +511,13 @@ src_install() {
 
        cmake_src_install
 
+       # X-KDE-RunOnDiscreteGpu is obsolete, so trim it
+       sed \
+               -e "s/=blender/=${P}/" \
+               -e "s/Name=Blender/Name=Blender Bin ${PV}/" \
+               -e "/X-KDE-RunOnDiscreteGpu.*/d" \
+               -i "${ED}/usr/share/applications/blender-${BV}.desktop" || die
+
        if use man; then
                # Slot the man page
                mv "${ED}/usr/share/man/man1/blender.1" 
"${ED}/usr/share/man/man1/blender-${BV}.1" || die

diff --git a/media-gfx/blender/blender-4.2.4-r2.ebuild 
b/media-gfx/blender/blender-4.2.4-r2.ebuild
index ac5f6e417696..00a3d3ca405f 100644
--- a/media-gfx/blender/blender-4.2.4-r2.ebuild
+++ b/media-gfx/blender/blender-4.2.4-r2.ebuild
@@ -224,10 +224,11 @@ src_unpack() {
        else
                default
 
-               if use test; then
-                       mkdir -p "${S}/tests/data/" || die
-                       mv blender-test-data/* "${S}/tests/data/" || die
-               fi
+               # BUG upstream returns LFS references instead of files
+               # if use test; then
+               #       mkdir -p "${S}/tests/data/" || die
+               #       mv blender-test-data/* "${S}/tests/data/" || die
+               # fi
        fi
 }
 
@@ -499,6 +500,13 @@ src_install() {
 
        cmake_src_install
 
+       # X-KDE-RunOnDiscreteGpu is obsolete, so trim it
+       sed \
+               -e "s/=blender/=${P}/" \
+               -e "s/Name=Blender/Name=Blender Bin ${PV}/" \
+               -e "/X-KDE-RunOnDiscreteGpu.*/d" \
+               -i "${ED}/usr/share/applications/blender-${BV}.desktop" || die
+
        if use man; then
                # Slot the man page
                mv "${ED}/usr/share/man/man1/blender.1" 
"${ED}/usr/share/man/man1/blender-${BV}.1" || die

diff --git a/media-gfx/blender/blender-4.3.2-r2.ebuild 
b/media-gfx/blender/blender-4.3.2-r2.ebuild
index 11a7fe03aad6..6e5459ec540a 100644
--- a/media-gfx/blender/blender-4.3.2-r2.ebuild
+++ b/media-gfx/blender/blender-4.3.2-r2.ebuild
@@ -1,47 +1,89 @@
 # Copyright 1999-2025 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
+# shellcheck disable=SC2207
+
+# TODO
+# - Package Hydra
+#      https://github.com/Ray-Tracing-Systems/HydraCore
+#      https://github.com/Ray-Tracing-Systems/HydraAPI
+# - Package USD
+#      https://github.com/PixarAnimationStudios/OpenUSD
+# - Package MaterialX
+#      https://github.com/AcademySoftwareFoundation/MaterialX
+# - Package Draco
+#      https://github.com/google/draco
+# - Package Audaspace
+#      https://github.com/neXyon/audaspace
+
 EAPI=8
 
-PYTHON_COMPAT=( python3_{11..12} )
+PYTHON_COMPAT=( python3_{11..13} )
 # NOTE must match media-libs/osl
-LLVM_COMPAT=( {15..18} )
+LLVM_COMPAT=( {15..19} )
 LLVM_OPTIONAL=1
 
-inherit check-reqs cmake cuda flag-o-matic llvm-r1 pax-utils python-single-r1 
toolchain-funcs xdg-utils
+ROCM_SKIP_GLOBALS=1
+
+inherit cuda rocm llvm-r1
+inherit eapi9-pipestatus check-reqs flag-o-matic pax-utils python-single-r1 
toolchain-funcs virtualx
+inherit cmake xdg-utils
 
 DESCRIPTION="3D Creation/Animation/Publishing System"
 HOMEPAGE="https://www.blender.org";
 
-if [[ ${PV} = *9999* ]] ; then
+# NOTE BLENDER_VERSION
+# 
https://projects.blender.org/blender/blender/src/branch/main/source/blender/blenkernel/BKE_blender_version.h
+BLENDER_BRANCH="$(ver_cut 1-2)"
+
+if [[ "${PV}" == *9999* ]]; then
        EGIT_LFS="yes"
        inherit git-r3
        EGIT_REPO_URI="https://projects.blender.org/blender/blender.git";
        EGIT_SUBMODULES=( '*' '-lib/*' )
+
+       if [[ "${PV}" == 9999* ]]; then
+               EGIT_BRANCH="main"
+       else
+               EGIT_BRANCH="blender-v${BLENDER_BRANCH}-release"
+       fi
+
        RESTRICT="!test? ( test )"
 else
        SRC_URI="
                https://download.blender.org/source/${P}.tar.xz
+               
https://github.com/negril/gentoo-overlay-vendored/raw/refs/heads/blobs/blender-assets-${PV}.tar.xz
        "
+       # BUG upstream returns LFS references instead of files
+       # SRC_URI+="
        #       test? (
-       #               
https://projects.blender.org/blender/blender-test-data/archive/blender-v$(ver_cut
 1-2)-release.tar.gz
+       #               
https://projects.blender.org/blender/blender-test-data/archive/blender-v${BLENDER_BRANCH}-release.tar.gz
        #       )
        # "
        KEYWORDS="~amd64 ~arm ~arm64"
-       RESTRICT="test" # the test archive returns LFS references.
+       RESTRICT="test" # the test archive contains LFS references
 fi
 
-LICENSE="GPL-3+ cycles? ( Apache-2.0 )"
-SLOT="${PV%.*}"
+# assets is CC0-1.0
+LICENSE="GPL-3+ cycles? ( Apache-2.0 ) CC0-1.0"
+SLOT="${BLENDER_BRANCH}"
+
+# NOTE +openpgl breaks on very old amd64 hardware
+# potentially mirror cpu_flags_x86 + REQUIRED_USE
 IUSE="
        alembic +bullet collada +color-management cuda +cycles 
+cycles-bin-kernels
        debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip jack
-       +opensubdiv +openvdb optix osl +otf +pdf +potrace +pugixml pulseaudio
-       renderdoc sdl +sndfile +tbb test +tiff valgrind vulkan wayland +webp X
-       jemalloc jpeg2k man +nanovdb ndof nls +oidn openal +openexr +openmp 
+openpgl
+       jemalloc jpeg2k man +nanovdb ndof nls +oidn openal +openexr +opengl 
+openmp +openpgl
+       +opensubdiv +openvdb optix osl +pdf +potrace +pugixml pulseaudio
+       renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan 
wayland +webp X
 "
 
+if [[ "${PV}" == *9999* ]]; then
+       IUSE+="experimental"
+fi
+
 REQUIRED_USE="${PYTHON_REQUIRED_USE}
+       || ( opengl vulkan )
        alembic? ( openexr )
        cuda? ( cycles )
        cycles? ( openexr tiff tbb )
@@ -52,12 +94,18 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
        openvdb? ( tbb openexr )
        optix? ( cuda )
        osl? ( cycles pugixml )
-       test? ( color-management )"
+       test? (
+               color-management
+               jpeg2k
+       )
+"
 
 # Library versions for official builds can be found in the blender source 
directory in:
 # build_files/build_environment/cmake/versions.cmake
 RDEPEND="${PYTHON_DEPS}
        app-arch/zstd
+       dev-cpp/gflags:=
+       dev-cpp/glog:=
        dev-libs/boost:=[nls?]
        dev-libs/lzo:2=
        $(python_gen_cond_dep '
@@ -75,17 +123,20 @@ RDEPEND="${PYTHON_DEPS}
        sys-libs/zlib:=
        virtual/glu
        virtual/libintl
-       virtual/opengl
+       virtual/opengl[X?]
        alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] )
+       bullet? ( sci-physics/bullet:=[double-precision] )
        collada? ( >=media-libs/opencollada-1.6.68 )
        color-management? ( media-libs/opencolorio:= )
        cuda? ( dev-util/nvidia-cuda-toolkit:= )
        embree? ( media-libs/embree:=[raymask] )
        ffmpeg? ( 
media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid]
 )
-       fftw? ( sci-libs/fftw:3.0= )
+       fftw? ( sci-libs/fftw:3.0=[threads] )
        gmp? ( dev-libs/gmp[cxx] )
        gnome? ( gui-libs/libdecor )
-       hip? ( >=dev-util/hip-5.7 )
+       hip? (
+               >=dev-util/hip-5.7:=
+       )
        jack? ( virtual/jack )
        jemalloc? ( dev-libs/jemalloc:= )
        jpeg2k? ( media-libs/openjpeg:2= )
@@ -101,7 +152,7 @@ RDEPEND="${PYTHON_DEPS}
                >=media-libs/openexr-3.2.1:0=
        )
        openpgl? ( media-libs/openpgl:= )
-       opensubdiv? ( >=media-libs/opensubdiv-3.5.0 )
+       opensubdiv? ( 
>=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,openmp?,tbb?] )
        openvdb? (
                >=media-gfx/openvdb-11.0.0:=[nanovdb?]
                dev-libs/c-blosc:=
@@ -134,7 +185,7 @@ RDEPEND="${PYTHON_DEPS}
                dev-util/glslang
                media-libs/vulkan-loader
        )
-       otf? (
+       truetype? (
                media-libs/harfbuzz
        )
        renderdoc? (
@@ -149,11 +200,19 @@ RDEPEND="${PYTHON_DEPS}
 
 DEPEND="${RDEPEND}
        dev-cpp/eigen:=
-       vulkan? (
-               dev-util/spirv-headers
-               dev-util/vulkan-headers
+"
+
+if [[ "${PV}" == *9999* ]]; then
+DEPEND+="
+       test? (
+               experimental? (
+                       wayland? (
+                               dev-libs/weston
+                       )
+               )
        )
 "
+fi
 
 BDEPEND="
        virtual/pkgconfig
@@ -166,6 +225,10 @@ BDEPEND="
                dev-texlive/texlive-latex
                dev-texlive/texlive-latexextra
        )
+       vulkan? (
+               dev-util/spirv-headers
+               dev-util/vulkan-headers
+       )
        nls? ( sys-devel/gettext )
        wayland? (
                dev-util/wayland-scanner
@@ -177,10 +240,13 @@ BDEPEND="
 
 PATCHES=(
        "${FILESDIR}/${PN}-4.0.2-FindClang.patch"
-       "${FILESDIR}/${PN}-4.0.2-CUDA_NVCC_FLAGS.patch"
        "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch"
        "${FILESDIR}/${PN}-4.1.1-numpy.patch"
        "${FILESDIR}/${PN}-4.3.2-ffmpeg7.patch"
+       "${FILESDIR}/${PN}-4.3.2-openvdb-12.patch"
+       "${FILESDIR}/${PN}-4.3.2-optix-8.1.0.patch"
+       "${FILESDIR}/${PN}-4.3.2-system-gtest.patch"
+       "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch"
 )
 
 blender_check_requirements() {
@@ -192,38 +258,43 @@ blender_check_requirements() {
 }
 
 blender_get_version() {
+       if [[ -n "${BV}" && -n "${BVC}" ]]; then
+               return
+       fi
+
+       local status
        # Get blender version from blender itself.
-       BV=$(grep "BLENDER_VERSION " 
source/blender/blenkernel/BKE_blender_version.h | cut -d " " -f 3; assert)
-       if ((${BV:0:1} < 3)) ; then
-               # Add period (290 -> 2.90).
-               BV=${BV:0:1}.${BV:1}
-       else
-               # Add period and skip the middle number (301 -> 3.1)
-               BV=${BV:0:1}.${BV:2}
+       # mirrors build_files/cmake/macros.cmake function(get_blender_version)
+       # NOTE maps x0y to x.y
+       # TODO this can potentially break for x > 9 and y > 9
+       BV="$(grep "define BLENDER_VERSION " 
source/blender/blenkernel/BKE_blender_version.h | cut -d ' ' -f 3)"
+       status="$(pipestatus -v)" || die "fails to detect BLENDER_VERSION, 
(PIPESTATUS: ${status})"
+       BV="$(printf "%d.%d" "${BV:0: -2}" "${BV: -2}")"
+
+       if [[ "${PV}" != 9999* && "${BLENDER_BRANCH}" != "${BV}" ]]; then
+               eerror "ebuild (${BLENDER_BRANCH}) and code (${BV}) version 
mismatch"
+               die "blender_get_version"
        fi
+
+       BVC="$(grep "define BLENDER_VERSION_CYCLE " 
source/blender/blenkernel/BKE_blender_version.h | cut -d ' ' -f 3)"
+       status="$(pipestatus -v)" || die "fails to detect 
BLENDER_VERSION_CYCLE, (PIPESTATUS: ${status})"
 }
 
 pkg_pretend() {
        blender_check_requirements
-
-       if use oneapi; then
-               einfo "The Intel oneAPI support is rudimentary."
-               einfo ""
-               einfo "Please report any bugs you find to 
https://bugs.gentoo.org/";
-       fi
 }
 
 pkg_setup() {
+       blender_check_requirements
+       python-single-r1_pkg_setup
+
        if use osl; then
                llvm-r1_pkg_setup
        fi
-
-       blender_check_requirements
-       python-single-r1_pkg_setup
 }
 
 src_unpack() {
-       if [[ ${PV} = *9999* ]] ; then
+       if [[ "${PV}" == *9999* ]]; then
                if ! use test; then
                        EGIT_SUBMODULES+=( '-tests/*' )
                fi
@@ -231,10 +302,11 @@ src_unpack() {
        else
                default
 
-               if use test; then
-                       mkdir -p "${S}/tests/data/" || die
-                       mv blender-test-data/* "${S}/tests/data/" || die
-               fi
+               # BUG upstream returns LFS references instead of files
+               # if use test; then
+               #       mkdir -p "${S}/tests/data/" || die
+               #       mv blender-test-data/* "${S}/tests/data/" || die
+               # fi
        fi
 }
 
@@ -245,11 +317,6 @@ src_prepare() {
 
        blender_get_version
 
-       # Disable MS Windows help generation. The variable doesn't do what it
-       # it sounds like.
-       sed -e "s|GENERATE_HTMLHELP      = YES|GENERATE_HTMLHELP      = NO|" \
-               -i doc/doxygen/Doxyfile || die
-
        # Prepare icons and .desktop files for slotting.
        sed \
                -e "s|blender.svg|blender-${BV}.svg|" \
@@ -264,22 +331,62 @@ src_prepare() {
                -e "s|Icon=blender|Icon=blender-${BV}|" \
                -i release/freedesktop/blender.desktop || die
 
-       sed -e 
"s|\${CMAKE_INSTALL_PREFIX}/\${BLENDER_BIN}|${T}/usr/\${BLENDER_BIN}|g" -i 
source/creator/CMakeLists.txt || die
+       sed \
+               -e 
"/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}"
 \
+               -i CMakeLists.txt \
+               || die CMAKE_INSTALL_PREFIX_WITH_CONFIG
 
        mv \
-               release/freedesktop/icons/scalable/apps/blender.svg \
-               "release/freedesktop/icons/scalable/apps/blender-${BV}.svg" || 
die
+               "release/freedesktop/icons/scalable/apps/blender.svg" \
+               "release/freedesktop/icons/scalable/apps/blender-${BV}.svg" \
+               || die
+       mv \
+               "release/freedesktop/icons/symbolic/apps/blender-symbolic.svg" \
+               
"release/freedesktop/icons/symbolic/apps/blender-${BV}-symbolic.svg" \
+               || die
+       mv \
+               "release/freedesktop/blender.desktop" \
+               "release/freedesktop/blender-${BV}.desktop" \
+               || die
+
        mv \
-               release/freedesktop/icons/symbolic/apps/blender-symbolic.svg \
-               
"release/freedesktop/icons/symbolic/apps/blender-${BV}-symbolic.svg" || die
-       mv release/freedesktop/blender.desktop 
"release/freedesktop/blender-${BV}.desktop" || die
-       mv release/freedesktop/org.blender.Blender.metainfo.xml 
"release/freedesktop/blender-${BV}.metainfo.xml"
-       mv release/freedesktop/org.blender.Blender.appdata.xml 
"release/freedesktop/blender-${BV}.appdata.xml"
+               "release/freedesktop/org.blender.Blender.metainfo.xml" \
+               "release/freedesktop/blender-${BV}.metainfo.xml" \
+               || die
+
+       sed \
+               -e "s#\(set(cycles_kernel_runtime_lib_target_path 
\)\${cycles_kernel_runtime_lib_target_path}\(/lib)\)#\1\${CYCLES_INSTALL_PATH}\2#"
 \
+               -i intern/cycles/kernel/CMakeLists.txt \
+               || die
+
+       if use hip; then
+               # fix hardcoded path
+               sed \
+                       -e "s#opt/rocm/hip/bin#$(hipconfig -p)/bin#g" \
+                       -i extern/hipew/src/hipew.c \
+                       || die
+       fi
 
        if use test; then
                # Without this the tests will try to use /usr/bin/blender and 
/usr/share/blender/ to run the tests.
-               sed -e "s|set(TEST_INSTALL_DIR.*|set(TEST_INSTALL_DIR 
${T}/usr)|g" -i tests/CMakeLists.txt || die
-               sed -e "s|string(REPLACE.*|set(TEST_INSTALL_DIR ${T}/usr)|g" -i 
build_files/cmake/testing.cmake || die
+               sed \
+                       -e 
"/string(REPLACE.*TEST_INSTALL_DIR/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}"
 \
+                       -i "build_files/cmake/testing.cmake" \
+                       || die "REPLACE.*TEST_INSTALL_DIR"
+
+               # assertEquals was deprecated in Python-3.2 use assertEqual 
instead
+               sed \
+                       -e 's/assertEquals/assertEqual/g' \
+                       -i tests/python/bl_animation_action.py \
+                       || die
+
+               sed -e '1i #include <cstdint>' -i 
extern/gtest/src/gtest-death-test.cc || die
+       else
+               cmake_comment_add_subdirectory tests
+       fi
+
+       if [[ "${PV}" != *9999* ]]; then
+               rm "${WORKDIR}/blender-assets/publish/LICENSE" || die
        fi
 
        if use vulkan; then
@@ -294,14 +401,23 @@ src_configure() {
        filter-lto
 
        # Workaround for bug #922600
-       append-ldflags $(test-flags-CCLD -Wl,--undefined-version)
+       append-ldflags "$(test-flags-CCLD -Wl,--undefined-version)"
 
        append-lfs-flags
        blender_get_version
 
        local mycmakeargs=(
-               -DWITH_LIBS_PRECOMPILED=no
-               -DBUILD_SHARED_LIBS=no
+               -DCMAKE_POLICY_DEFAULT_CMP0177="OLD"
+
+               # we build a host-specific binary
+               -DWITH_INSTALL_PORTABLE="no"
+               -DWITH_CPU_CHECK="no"
+
+               -DWITH_STRICT_BUILD_OPTIONS="yes"
+               -DWITH_LIBS_PRECOMPILED="no"
+               -DBUILD_SHARED_LIBS="no" # quadriflow only?
+               -DWITH_STATIC_LIBS=OFF
+
                -DPYTHON_INCLUDE_DIR="$(python_get_includedir)"
                -DPYTHON_LIBRARY="$(python_get_library_path)"
                -DPYTHON_VERSION="${EPYTHON/python/}"
@@ -310,7 +426,6 @@ src_configure() {
                -DWITH_BULLET=$(usex bullet)
                -DWITH_CODEC_FFMPEG=$(usex ffmpeg)
                -DWITH_CODEC_SNDFILE=$(usex sndfile)
-               -DWITH_CPU_CHECK=no
 
                -DWITH_CYCLES=$(usex cycles)
 
@@ -336,15 +451,14 @@ src_configure() {
                -DWITH_GHOST_X11=$(usex X)
                -DWITH_GMP=$(usex gmp)
                -DWITH_GTESTS=$(usex test)
-               -DWITH_HARFBUZZ="$(usex otf)"
+               -DWITH_HARFBUZZ="$(usex truetype)"
                -DWITH_HARU=$(usex pdf)
-               -DWITH_HEADLESS=$($(use X || use wayland) && echo OFF || echo 
ON)
+               -DWITH_HEADLESS="$(usex !X "$(use !wayland)")"
                -DWITH_HYDRA="no" # TODO: Package Hydra
                -DWITH_IMAGE_OPENEXR=$(usex openexr)
                -DWITH_IMAGE_OPENJPEG=$(usex jpeg2k)
                -DWITH_IMAGE_WEBP=$(usex webp)
                -DWITH_INPUT_NDOF=$(usex ndof)
-               -DWITH_INSTALL_PORTABLE="no"
                -DWITH_INTERNATIONAL=$(usex nls)
                -DWITH_JACK=$(usex jack)
                -DWITH_MATERIALX="no" # TODO: Package MaterialX
@@ -356,6 +470,7 @@ src_configure() {
                -DWITH_OPENAL=$(usex openal)
                -DWITH_OPENCOLLADA=$(usex collada)
                -DWITH_OPENCOLORIO=$(usex color-management)
+               -DWITH_OPENGL_BACKEND=$(usex opengl)
                -DWITH_OPENIMAGEDENOISE=$(usex oidn)
                -DWITH_OPENMP=$(usex openmp)
                -DWITH_OPENSUBDIV=$(usex opensubdiv)
@@ -369,15 +484,16 @@ src_configure() {
                -DWITH_PYTHON_INSTALL_ZSTANDARD=no
                -DWITH_RENDERDOC="$(usex renderdoc)"
                -DWITH_SDL=$(usex sdl)
-               -DWITH_STATIC_LIBS=no
-               -DWITH_STRICT_BUILD_OPTIONS=yes
+               -DWITH_SYSTEM_BULLET="yes"
                -DWITH_SYSTEM_EIGEN3=yes
                -DWITH_SYSTEM_FREETYPE=yes
+               -DWITH_SYSTEM_GFLAGS="yes"
+               -DWITH_SYSTEM_GLOG="yes"
                -DWITH_SYSTEM_LZO=yes
                -DWITH_TBB=$(usex tbb)
                -DWITH_USD="no" # TODO: Package USD
-               -DWITH_VULKAN_BACKEND="$(usex vulkan)"
                -DWITH_XR_OPENXR=no
+               -DWITH_UNITY_BUILD="no"
        )
 
        if has_version ">=dev-python/numpy-2"; then
@@ -388,29 +504,44 @@ src_configure() {
        fi
 
        # requires dev-vcs/git
-       if [[ ${PV} = *9999* ]] ; then
-               mycmakeargs+=( -DWITH_BUILDINFO="yes" )
+       if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]]; then
+               mycmakeargs+=(
+                       # -DWITH_BUILDINFO="no"
+                       -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)"
+               )
        else
-               mycmakeargs+=( -DWITH_BUILDINFO="no" )
+               mycmakeargs+=(
+                       -DWITH_EXPERIMENTAL_FEATURES="no"
+               )
        fi
 
        if use cuda; then
-               mycmakeargs+=(
-                       -DCUDA_NVCC_FLAGS="--compiler-bindir;$(cuda_gccdir)"
-               )
+               # Ease compiling with required gcc similar to cuda_sanitize but 
for cmake
+               if use cycles-bin-kernels; then
+                       local -x CUDAHOSTCXX="$(cuda_gccdir)"
+                       local -x CUDAHOSTLD="$(tc-getCXX)"
+
+                       if [[ -n "${CUDAARCHS}" ]]; then
+                               mycmakeargs+=(
+                                       -DCYCLES_CUDA_BINARIES_ARCH="$(echo 
"${CUDAARCHS}" | sed -e 's/^/sm_/g' -e 's/;/;sm_/g')"
+                               )
+                       fi
+               fi
        fi
 
        if use hip; then
                mycmakeargs+=(
-                       -DROCM_PATH="$(hipconfig -R)"
+                       -DHIP_ROOT_DIR="$(hipconfig -p)"
                        -DHIP_HIPCC_FLAGS="-fcf-protection=none"
+                       
-DCMAKE_HIP_LINK_EXECUTABLE="$(get_llvm_prefix)/bin/clang++"
+                       -DCYCLES_HIP_BINARIES_ARCH="$(get_amdgpu_flags)"
                )
        fi
 
        if use optix; then
                mycmakeargs+=(
-                       -DCYCLES_RUNTIME_OPTIX_ROOT_DIR="${EPREFIX}"/opt/optix
-                       -DOPTIX_ROOT_DIR="${EPREFIX}"/opt/optix
+                       -DCYCLES_RUNTIME_OPTIX_ROOT_DIR="${ESYSROOT}/opt/optix"
+                       -DOPTIX_ROOT_DIR="${ESYSROOT}/opt/optix"
                )
        fi
 
@@ -425,17 +556,13 @@ src_configure() {
        use arm64 && append-flags -flax-vector-conversions
 
        append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
-       append-cppflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
+       append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
 
-       if tc-is-gcc ; then
-               # These options only exist when GCC is detected.
+       if tc-is-gcc; then
                # We disable these to respect the user's choice of linker.
                mycmakeargs+=(
                        -DWITH_LINKER_GOLD=no
-                       -DWITH_LINKER_LLD=no
                )
-               # Ease compiling with required gcc similar to cuda_sanitize but 
for cmake
-               use cuda && use cycles-bin-kernels && mycmakeargs+=( 
-DCUDA_HOST_COMPILER="$(cuda_gccdir)" )
        fi
 
        if tc-is-clang || use osl; then
@@ -445,7 +572,7 @@ src_configure() {
                )
        fi
 
-       if use test ; then
+       if use test; then
                local CYCLES_TEST_DEVICES=( "CPU" )
                if use cycles-bin-kernels; then
                        use cuda && CYCLES_TEST_DEVICES+=( "CUDA" )
@@ -453,46 +580,110 @@ src_configure() {
                        use hip && CYCLES_TEST_DEVICES+=( "HIP" )
                fi
                mycmakeargs+=(
-                       -DCYCLES_TEST_DEVICES:STRING="$(local IFS=";"; echo 
"${CYCLES_TEST_DEVICES[*]}")"
-                       -DWITH_COMPOSITOR_REALTIME_TESTS=yes
-                       -DWITH_GPU_DRAW_TESTS=yes
-                       -DWITH_GPU_RENDER_TESTS=yes
+                       -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr"
+                       -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo 
"${CYCLES_TEST_DEVICES[*]}")"
                )
+
+               # NOTE in lieu of a FEATURE/build_options
+               if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then
+                       mycmakeargs+=(
+                               -DWITH_COMPOSITOR_REALTIME_TESTS="yes"
+
+                               -DWITH_CYCLES_TEST_OSL="$(usex osl)"
+
+                               -DWITH_GPU_DRAW_TESTS="yes"
+
+                               -DWITH_GPU_RENDER_TESTS="yes"
+                               -DWITH_GPU_RENDER_TESTS_SILENT="no"
+                       )
+
+                       if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && 
use experimental; then
+                               mycmakeargs+=(
+                                       # Enable user-interface tests using a 
headless display server.
+                                       # Currently this depends on 
WITH_GHOST_WAYLAND and the weston compositor (Experimental)
+                                       -DWITH_UI_TESTS="$(usex wayland)"
+                                       
-DWESTON_BIN="${ESYSROOT}/usr/bin/weston"
+                               )
+                       fi
+               else
+                       mycmakeargs+=(
+                               -DWITH_GPU_RENDER_TESTS="no"
+                       )
+               fi
        fi
 
        cmake_src_configure
 }
 
 src_test() {
-       # A lot of tests needs to have access to the installed data files.
+       # A lot of tests need to have access to the installed data files.
        # So install them into the image directory now.
        DESTDIR="${T}" cmake_build install
 
        blender_get_version
-       # By default, blender will look for system scripts and data in
-       # /usr/share/, but until this is installed, they are not necessarily
-       # available there.  Use this to have blender search the intermediate
-       # install directory instead.
-       export BLENDER_SYSTEM_RESOURCES="${T}/usr/share/blender/${BV}"
+       # Define custom blender data/script file paths, or we won't be able to 
find them otherwise during testing.
+       # (Because the data is in the image directory and it will default to 
look in /usr/share)
+       local -x BLENDER_SYSTEM_RESOURCES="${T%/}/usr/share/blender/${BV}"
 
-       # Brake check:  Make sure the above path is valid.
-       # If not, blender will fallback to the default path which is not what
-       # we want.
-       [ -d "$BLENDER_SYSTEM_RESOURCES" ] || die "The custom script path is 
invalid, fix the ebuild!"
+       # Sanity check that the script and datafile path is valid.
+       # If they are not valid, blender will fallback to the default path 
which is not what we want.
+       [[ -d "${BLENDER_SYSTEM_RESOURCES}" ]] || die "The custom resources 
path is invalid, fix the ebuild!"
+
+       # TODO only picks first card
+       addwrite "/dev/dri/card0"
+       addwrite "/dev/dri/renderD128"
+       addwrite "/dev/udmabuf"
 
        if use cuda; then
                cuda_add_sandbox -w
-               addwrite "/dev/dri/renderD128"
                addwrite "/dev/char/"
        fi
 
-       if use X; then
-               xdg_environment_reset
+       if ! has_version "media-libs/openusd"; then
+               CMAKE_SKIP_TESTS+=(
+                       # from pxr import Usd # ModuleNotFoundError: No module 
named 'pxr'
+                       "^script_bundled_modules$"
+               )
        fi
 
-       addwrite /dev/dri
+       # For debugging, print out all information.
+       local -x VERBOSE="$(usex debug "true" "false")"
+
+       # Show the window in the foreground.
+       local -x USE_WINDOW="false"
+       local -x USE_DEBUG="false"
+
+       if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then
+               if [[ "${USE_WINDOW}" = "true" ]] &&
+                [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] &&
+                       use experimental && use wayland; then
+                               # This runs weston
+                               xdg_environment_reset
+               fi
 
-       cmake_src_test
+               if [[ "${USE_WINDOW}" == "true" ]]; then
+                       xdg_environment_reset
+                       # WITH_GPU_RENDER_TESTS_HEADED
+                       if use wayland; then
+                               local compositor exit_code
+                               local logfile=${T}/weston.log
+                               weston --xwayland --backend=headless 
--socket=wayland-5 --idle-time=0 2>"${logfile}" &
+                               compositor=$!
+                               local -x WAYLAND_DISPLAY=wayland-5
+                               sleep 1 # wait for xwayland to be up
+                               local -x DISPLAY="$(grep "xserver listening on 
display" "${logfile}" | cut -d ' ' -f 5)"
+
+                               cmake_src_test
+
+                               exit_code=$?
+                               kill "${compositor}"
+                       elif use X; then
+                               virtx cmake_src_test
+                       fi
+               fi
+       else
+               cmake_src_test
+       fi
 
        # Clean up the image directory for src_install
        rm -fr "${T}/usr" || die
@@ -506,22 +697,22 @@ src_install() {
 
        cmake_src_install
 
+       # X-KDE-RunOnDiscreteGpu is obsolete, so trim it
+       sed \
+               -e "s/=blender/=${P}/" \
+               -e "s/Name=Blender/Name=Blender Bin ${PV}/" \
+               -e "/X-KDE-RunOnDiscreteGpu.*/d" \
+               -i "${ED}/usr/share/applications/blender-${BV}.desktop" || die
+
        if use man; then
                # Slot the man page
                mv "${ED}/usr/share/man/man1/blender.1" 
"${ED}/usr/share/man/man1/blender-${BV}.1" || die
        fi
 
        if use doc; then
-               # By default, blender will look for system scripts and data in
-               # /usr/share/, but until this is installed, they are not 
necessarily
-               # available there.  Use this to have blender search the 
intermediate
-               # install directory instead.
-               export BLENDER_SYSTEM_RESOURCES="${ED}/usr/share/blender/${BV}"
-
-               # Brake check:  Make sure the above path is valid.
-               # If not, blender will fallback to the default path which is 
not what
-               # we want.
-               [ -d "$BLENDER_SYSTEM_RESOURCES" ] || die "The custom script 
path is invalid, fix the ebuild!"
+               # Define custom blender data/script file paths. Otherwise 
Blender will not be able to find them during doc building.
+               # (Because the data is in the image directory and it will 
default to look in /usr/share)
+               local -x 
BLENDER_SYSTEM_RESOURCES="${ED}/usr/share/blender/${BV}"
 
                # Workaround for binary drivers.
                addpredict /dev/ati
@@ -547,6 +738,11 @@ src_install() {
                dodoc -r "${CMAKE_USE_DIR}"/doc/doxygen/html/.
        fi
 
+       if [[ "${PV}" != *9999* ]]; then
+               insinto "/usr/share/blender/${BV}/datafiles/assets"
+               doins -r "${WORKDIR}/blender-assets/publish/"*
+       fi
+
        # Fix doc installdir
        docinto html
        dodoc "${CMAKE_USE_DIR}"/release/text/readme.html
@@ -554,8 +750,9 @@ src_install() {
 
        python_optimize "${ED}/usr/share/blender/${BV}/scripts"
 
-       mv "${ED}/usr/bin/blender-thumbnailer" 
"${ED}/usr/bin/blender-${BV}-thumbnailer" || die
-       mv "${ED}/usr/bin/blender" "${ED}/usr/bin/blender-${BV}" || die
+       mv "${ED}/usr/bin/blender-thumbnailer" 
"${ED}/usr/bin/blender-${BV}-thumbnailer" \
+               || die "blender-thumbnailer version rename failed"
+       mv "${ED}/usr/bin/blender" "${ED}/usr/bin/blender-${BV}" || die 
"blender version rename failed"
 }
 
 pkg_postinst() {
@@ -569,7 +766,7 @@ pkg_postinst() {
        elog "changing the 'Temporary Files' directory in Blender preferences."
        elog
 
-       if use osl; then
+       if use osl && ! has_version "media-libs/mesa[${LLVM_USEDEP}]"; then
                ewarn ""
                ewarn "OSL is know to cause runtime segfaults if Mesa has been 
linked to"
                ewarn "an other LLVM version than what OSL is linked to."
@@ -577,11 +774,12 @@ pkg_postinst() {
                ewarn ""
        fi
 
+       # NOTE build_files/cmake/Modules/FindPythonLibsUnix.cmake: 
set(_PYTHON_VERSION_SUPPORTED 3.11)
        if ! use python_single_target_python3_11; then
                elog "You are building Blender with a newer python version than"
                elog "supported by this version upstream."
                elog "If you experience breakages with e.g. plugins, please 
switch to"
-               elog "python_single_target_python3_11 instead."
+               elog "PYTHON_SINGLE_TARGET: python3_11 instead."
                elog "Bug: https://bugs.gentoo.org/737388";
                elog
        fi
@@ -596,9 +794,12 @@ pkg_postrm() {
        xdg_mimeinfo_database_update
        xdg_desktop_database_update
 
-       ewarn ""
-       ewarn "You may want to remove the following directory."
-       ewarn "~/.config/${PN}/${BV}/cache/"
-       ewarn "It may contain extra render kernels not tracked by portage"
-       ewarn ""
+       if [[ -z "${REPLACED_BY_VERSION}" ]]; then
+               ewarn
+               ewarn "You may want to remove the following directories"
+               ewarn "- ~/.config/${PN}/${BV}/cache/"
+               ewarn "- ~/.cache/cycles/"
+               ewarn "It may contain extra render kernels not tracked by 
portage"
+               ewarn
+       fi
 }

diff --git a/media-gfx/blender/files/blender-4.3.2-openvdb-12.patch 
b/media-gfx/blender/files/blender-4.3.2-openvdb-12.patch
new file mode 100644
index 000000000000..02cca15f7c94
--- /dev/null
+++ b/media-gfx/blender/files/blender-4.3.2-openvdb-12.patch
@@ -0,0 +1,76 @@
+https://projects.blender.org/blender/blender/pulls/131833
+From 91412f2a28db69ac2a73c1bc646e350063d8ddd5 Mon Sep 17 00:00:00 2001
+From: Brecht Van Lommel <bre...@blender.org>
+Date: Fri, 13 Dec 2024 04:29:29 +0100
+Subject: [PATCH] Cycles: Support building with OpenVDB 12
+
+---
+ intern/cycles/scene/image_vdb.cpp | 20 +++++++++++++++-----
+ intern/cycles/scene/image_vdb.h   |  8 +++++++-
+ 2 files changed, 22 insertions(+), 6 deletions(-)
+
+diff --git a/intern/cycles/scene/image_vdb.cpp 
b/intern/cycles/scene/image_vdb.cpp
+index d94a7973adc..42964fac81d 100644
+--- a/intern/cycles/scene/image_vdb.cpp
++++ b/intern/cycles/scene/image_vdb.cpp
+@@ -55,23 +55,33 @@ struct ToNanoOp {
+       try {
+ #    if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \
+         (NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER 
>= 6)
++#      if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \
++          (NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER 
>= 7)
++        /* OpenVDB 12. */
++        using nanovdb::tools::createNanoGrid;
++        using nanovdb::tools::StatsMode;
++#      else
+         /* OpenVDB 11. */
++        using nanovdb::createNanoGrid;
++        using nanovdb::StatsMode;
++#      endif
++
+         if constexpr (std::is_same_v<FloatGridType, openvdb::FloatGrid>) {
+           openvdb::FloatGrid 
floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
+           if (precision == 0) {
+-            nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, 
nanovdb::FpN>(floatgrid);
++            nanogrid = createNanoGrid<openvdb::FloatGrid, 
nanovdb::FpN>(floatgrid);
+           }
+           else if (precision == 16) {
+-            nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, 
nanovdb::Fp16>(floatgrid);
++            nanogrid = createNanoGrid<openvdb::FloatGrid, 
nanovdb::Fp16>(floatgrid);
+           }
+           else {
+-            nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, 
float>(floatgrid);
++            nanogrid = createNanoGrid<openvdb::FloatGrid, float>(floatgrid);
+           }
+         }
+         else if constexpr (std::is_same_v<FloatGridType, openvdb::Vec3fGrid>) 
{
+           openvdb::Vec3fGrid 
floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
+-          nanogrid = nanovdb::createNanoGrid<openvdb::Vec3fGrid, 
nanovdb::Vec3f>(
+-              floatgrid, nanovdb::StatsMode::Disable);
++          nanogrid = createNanoGrid<openvdb::Vec3fGrid, 
nanovdb::Vec3f>(floatgrid,
++                                                                        
StatsMode::Disable);
+         }
+ #    else
+         /* OpenVDB 10. */
+diff --git a/intern/cycles/scene/image_vdb.h b/intern/cycles/scene/image_vdb.h
+index 49853cf3753..e0af9b87db1 100644
+--- a/intern/cycles/scene/image_vdb.h
++++ b/intern/cycles/scene/image_vdb.h
+@@ -9,7 +9,13 @@
+ #  include <openvdb/openvdb.h>
+ #endif
+ #ifdef WITH_NANOVDB
+-#  include <nanovdb/util/GridHandle.h>
++#  include <nanovdb/NanoVDB.h>
++#  if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \
++      (NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER >= 
7)
++#    include <nanovdb/GridHandle.h>
++#  else
++#    include <nanovdb/util/GridHandle.h>
++#  endif
+ #endif
+ 
+ #include "scene/image.h"
+-- 
+2.45.2
+

diff --git a/media-gfx/blender/files/blender-4.3.2-optix-8.1.0.patch 
b/media-gfx/blender/files/blender-4.3.2-optix-8.1.0.patch
new file mode 100644
index 000000000000..092c30db2bc5
--- /dev/null
+++ b/media-gfx/blender/files/blender-4.3.2-optix-8.1.0.patch
@@ -0,0 +1,34 @@
+From 7ce8dbf5f82af7c80890d18b27e1d9df6009d5b4 Mon Sep 17 00:00:00 2001
+From: Patrick Mours <pmo...@nvidia.com>
+Date: Mon, 18 Nov 2024 13:16:41 +0100
+Subject: [PATCH] Change OptiX function table name for OptiX 8.1 support
+
+---
+ intern/cycles/device/optix/device.cpp | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/intern/cycles/device/optix/device.cpp 
b/intern/cycles/device/optix/device.cpp
+index 60a1dbfe4e3..c8608ab5d75 100644
+--- a/intern/cycles/device/optix/device.cpp
++++ b/intern/cycles/device/optix/device.cpp
+@@ -21,12 +21,16 @@
+ #  include <optix_function_table_definition.h>
+ #endif
+ 
++#ifndef OPTIX_FUNCTION_TABLE_SYMBOL
++#  define OPTIX_FUNCTION_TABLE_SYMBOL g_optixFunctionTable
++#endif
++
+ CCL_NAMESPACE_BEGIN
+ 
+ bool device_optix_init()
+ {
+ #ifdef WITH_OPTIX
+-  if (g_optixFunctionTable.optixDeviceContextCreate != NULL) {
++  if (OPTIX_FUNCTION_TABLE_SYMBOL.optixDeviceContextCreate != NULL) {
+     /* Already initialized function table. */
+     return true;
+   }
+-- 
+2.47.2
+

diff --git a/media-gfx/blender/metadata.xml b/media-gfx/blender/metadata.xml
index 6c565f9d227f..09310cae2fcc 100644
--- a/media-gfx/blender/metadata.xml
+++ b/media-gfx/blender/metadata.xml
@@ -51,7 +51,7 @@
                        Use embree to accelerate certain areas of the Cycles 
render engine.
                </flag>
                <flag name="experimental">
-                       Build Experimental Blender Modules
+                       Enable experimental features
                </flag>
                <flag name="fluid">
                        Adds fluid simulation support via the built-in 
Mantaflow library.


Reply via email to