commit: 491ca2960bcc7f5a74f4d4428d38e3b3680350c0 Author: Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com> AuthorDate: Tue May 6 21:13:13 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Thu May 8 06:26:53 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=491ca296
media-gfx/blender: backport changes to 4.2.9 Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/41967 Signed-off-by: Sam James <sam <AT> gentoo.org> media-gfx/blender/blender-4.2.9-r1.ebuild | 246 +++++++++++++++++++++--------- 1 file changed, 172 insertions(+), 74 deletions(-) diff --git a/media-gfx/blender/blender-4.2.9-r1.ebuild b/media-gfx/blender/blender-4.2.9-r1.ebuild index 5f72c39c10bf..0d486b771b9c 100644 --- a/media-gfx/blender/blender-4.2.9-r1.ebuild +++ b/media-gfx/blender/blender-4.2.9-r1.ebuild @@ -3,21 +3,36 @@ EAPI=8 -PYTHON_COMPAT=( python3_{11..13} ) +PYTHON_COMPAT=( python3_{11..12} ) # NOTE must match media-libs/osl LLVM_COMPAT=( {17..18} ) LLVM_OPTIONAL=1 -inherit check-reqs cmake cuda flag-o-matic llvm-r1 pax-utils python-single-r1 toolchain-funcs xdg-utils +inherit check-reqs cmake cuda flag-o-matic llvm-r1 pax-utils python-single-r1 toolchain-funcs xdg-utils virtualx DESCRIPTION="3D Creation/Animation/Publishing System" HOMEPAGE="https://www.blender.org" +# # NOTE BLENDER_VERSION +# https://projects.blender.org/blender/blender/src/branch/main/source/blender/blenkernel/BKE_blender_version.h +# BLENDER_RELEASE=4.4 +BLENDER_BRANCH="$(ver_cut 1-2)" + if [[ ${PV} = *9999* ]] ; then - EGIT_LFS="yes" inherit git-r3 + + EGIT_LFS="yes" EGIT_REPO_URI="https://projects.blender.org/blender/blender.git" EGIT_SUBMODULES=( '*' '-lib/*' ) + if ver_test "${BLENDER_BRANCH}" -lt "4.2"; then + ADDONS_EGIT_REPO_URI="https://projects.blender.org/blender/blender-addons.git" + fi + + # if ver_test "${BLENDER_BRANCH}" -lt "${BLENDER_RELEASE}"; then + if [[ ${PV} != 9999* ]] ; then + EGIT_BRANCH="blender-v${BLENDER_BRANCH}-release" + fi + RESTRICT="!test? ( test )" else SRC_URI=" @@ -32,15 +47,21 @@ else fi LICENSE="GPL-3+ cycles? ( Apache-2.0 )" -SLOT="${PV%.*}" +SLOT="${BLENDER_BRANCH}" + +# NOTE +openpgl breaks on very old amd64 hardware IUSE=" alembic +bullet collada +color-management cuda +cycles +cycles-bin-kernels debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip jack jemalloc jpeg2k man +nanovdb ndof nls +oidn openal +openexr +openmp +openpgl - +opensubdiv +openvdb optix osl +otf +pdf +potrace +pugixml pulseaudio - renderdoc sdl +sndfile +tbb test +tiff valgrind vulkan wayland +webp X + +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} alembic? ( openexr ) cuda? ( cycles ) @@ -134,7 +155,7 @@ RDEPEND="${PYTHON_DEPS} dev-util/glslang media-libs/vulkan-loader ) - otf? ( + truetype? ( media-libs/harfbuzz ) renderdoc? ( @@ -181,9 +202,8 @@ PATCHES=( "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch" "${FILESDIR}/${PN}-4.1.1-numpy.patch" "${FILESDIR}/${PN}-4.2.9-python3.12.patch" - "${FILESDIR}/${PN}-4.2.9-python3.13.patch" - "${FILESDIR}/${PN}-4.2.9-python3.12_1.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-glog.patch" "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch" @@ -199,14 +219,10 @@ blender_check_requirements() { blender_get_version() { # Get blender version from blender itself. + # NOTE maps x0y to x.y + # TODO this can potentially break for x > 9 and y > 9 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} - fi + BV=${BV:0:1}.${BV:2} } pkg_pretend() { @@ -228,14 +244,20 @@ src_unpack() { EGIT_SUBMODULES+=( '-tests/*' ) fi git-r3_src_unpack + + # NOTE Add-ons bundled with Blender releases up to Blender 4.1. Blender 4.2 LTS and later include only a handful + # of core add-ons, while others are part of the Extensions Platform at https://extensions.blender.org + ver_test "${BLENDER_BRANCH}" -ge "4.2" && return + + git-r3_fetch "${ADDONS_EGIT_REPO_URI}" + git-r3_checkout "${ADDONS_EGIT_REPO_URI}" "${S}/scripts/addons" else default - # 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 + if use test; then + mkdir -p "${S}/tests/data/" || die + mv blender-test-data/* "${S}/tests/data/" || die + fi fi } @@ -265,22 +287,45 @@ 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}/usr|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 + + local info_file test_file + if ver_test -ge 4; then + info_file="metainfo" + test_file="build_files/cmake/testing.cmake" + else + info_file="appdata" + test_file="build_files/cmake/Modules/GTestTesting.cmake" + fi 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.${info_file}.xml" \ + "release/freedesktop/blender-${BV}.${info_file}.xml" \ + || die 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}/usr|g}" \ + -i "${test_file}" \ + || die "REPLACE.*TEST_INSTALL_DIR" + + sed '1i #include <cstdint>' -i extern/gtest/src/gtest-death-test.cc || die fi if use vulkan; then @@ -301,8 +346,15 @@ src_configure() { 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_LIBS_PRECOMPILED="no" + -DBUILD_SHARED_LIBS="no" # this over-ridden by cmake.eclass + -DPYTHON_INCLUDE_DIR="$(python_get_includedir)" -DPYTHON_LIBRARY="$(python_get_library_path)" -DPYTHON_VERSION="${EPYTHON/python/}" @@ -311,7 +363,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) @@ -337,15 +388,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 "$(usex !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 @@ -365,20 +415,21 @@ src_configure() { -DWITH_POTRACE=$(usex potrace) -DWITH_PUGIXML=$(usex pugixml) -DWITH_PULSEAUDIO=$(usex pulseaudio) - -DWITH_PYTHON_INSTALL=no - -DWITH_PYTHON_INSTALL_NUMPY=no - -DWITH_PYTHON_INSTALL_ZSTANDARD=no + -DWITH_PYTHON_INSTALL="no" + -DWITH_PYTHON_INSTALL_NUMPY="no" + -DWITH_PYTHON_INSTALL_ZSTANDARD="no" -DWITH_RENDERDOC="$(usex renderdoc)" -DWITH_SDL=$(usex sdl) - -DWITH_STATIC_LIBS=no - -DWITH_STRICT_BUILD_OPTIONS=yes - -DWITH_SYSTEM_EIGEN3=yes - -DWITH_SYSTEM_FREETYPE=yes - -DWITH_SYSTEM_LZO=yes + -DWITH_STATIC_LIBS="no" + -DWITH_STRICT_BUILD_OPTIONS="yes" + -DWITH_SYSTEM_EIGEN3="yes" + -DWITH_SYSTEM_FREETYPE="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_XR_OPENXR="no" + -DWITH_UNITY_BUILD="no" ) if has_version ">=dev-python/numpy-2"; then @@ -390,14 +441,24 @@ src_configure() { # requires dev-vcs/git if [[ ${PV} = *9999* ]] ; then - mycmakeargs+=( -DWITH_BUILDINFO="yes" ) + mycmakeargs+=( + -DWITH_BUILDINFO="yes" + -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)" + ) else mycmakeargs+=( -DWITH_BUILDINFO="no" ) fi if use cuda; then + if [[ -z "${CUDAARCHS}" ]]; then + CUDAARCHS="all-major" + else + CUDAARCHS="sm_${CUDAARCHS}" + fi + mycmakeargs+=( -DCUDA_NVCC_FLAGS="--compiler-bindir;$(cuda_gccdir)" + -DCYCLES_CUDA_BINARIES_ARCH="${CUDAARCHS}" ) fi @@ -426,7 +487,7 @@ 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. @@ -454,7 +515,8 @@ src_configure() { use hip && CYCLES_TEST_DEVICES+=( "HIP" ) fi mycmakeargs+=( - -DCYCLES_TEST_DEVICES:STRING="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" + -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr" + -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" -DWITH_COMPOSITOR_REALTIME_TESTS=yes -DWITH_GPU_DRAW_TESTS=yes -DWITH_GPU_RENDER_TESTS=yes @@ -470,16 +532,13 @@ src_test() { 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 not 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 vaild, 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!" if use cuda; then cuda_add_sandbox -w @@ -487,13 +546,58 @@ src_test() { addwrite "/dev/char/" fi - if use X; then + addwrite "/dev/char/" + addwrite "/dev/nvidiactl" + addwrite "/dev/nvidia0" + addwrite "/dev/nvidia-modeset" + addwrite "/dev/dri/" + + local -x CMAKE_SKIP_TESTS=( + draw + gpu + script_load_modules + script_bundled_modules + script_pyapi_bpy_driver_secure_eval + blendfile_versioning_5_over_8 + blendfile_versioning_7_over_8 + cycles_motion_blur_cpu + cycles_volume_cpu + cycles_motion_blur_cuda + cycles_volume_cuda + eevee_next_grease_pencil + eevee_next_light + eevee_next_motion_blur + eevee_next_pointcloud + eevee_next_render_layer + eevee_next_volume + workbench_motion_blur + workbench_volume + compositor_multiple_node_setups_realtime + compositor_distort_realtime + ) + + if use wayland; then xdg_environment_reset - fi - addwrite /dev/dri + local compositor exit_code + local logfile=${T}/weston.log + weston --xwayland --backend=headless --socket=wayland-5 --idle-time=0 2>"${logfile}" & + compositor=$! + export WAYLAND_DISPLAY=wayland-5 + sleep 1 # wait for xwayland to be up + export DISPLAY=$(grep "xserver listening on display" "${logfile}" | cut -d ' ' -f 5) + + cmake_src_test - cmake_src_test + exit_code=$? + kill "${compositor}" + + elif use X; then + xdg_environment_reset + virtx cmake_src_test + else + cmake_src_test + fi # Clean up the image directory for src_install rm -fr "${T}/usr" || die @@ -518,16 +622,9 @@ src_install() { 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 @@ -560,8 +657,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() {
