commit: 4ea6c0fe3f6b06b55fa389d11a49fcb6c7028dc3 Author: Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com> AuthorDate: Thu Nov 20 15:12:05 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Fri Nov 28 02:53:04 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4ea6c0fe
media-gfx/blender: add 4.5.5 4.5.9999, update 9999 Closes: https://bugs.gentoo.org/964984 Closes: https://bugs.gentoo.org/963487 Closes: https://bugs.gentoo.org/963109 Closes: https://bugs.gentoo.org/960390 Closes: https://bugs.gentoo.org/960371 Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/44694 Signed-off-by: Sam James <sam <AT> gentoo.org> media-gfx/blender/Manifest | 2 + .../{blender-9999.ebuild => blender-4.5.5.ebuild} | 256 +++++++++++++-------- ...blender-9999.ebuild => blender-4.5.9999.ebuild} | 255 ++++++++++++-------- media-gfx/blender/blender-9999.ebuild | 253 ++++++++++++-------- .../blender/files/blender-4.5.0-ffmpeg-8.0.patch | 40 ++++ .../files/blender-4.5.3-cmake-policy-3.10.patch | 68 ++++++ .../blender-9999-don-t-show-variable-names.patch | 25 ++ media-gfx/blender/metadata.xml | 1 - 8 files changed, 627 insertions(+), 273 deletions(-) diff --git a/media-gfx/blender/Manifest b/media-gfx/blender/Manifest index 088325664bcb..ac2b451f1578 100644 --- a/media-gfx/blender/Manifest +++ b/media-gfx/blender/Manifest @@ -4,5 +4,7 @@ DIST blender-4.2.9.tar.xz 72811408 BLAKE2B b33227a3d2ab97578d919d37419b5486e049d DIST blender-4.3.2.tar.xz 74473996 BLAKE2B 9a5c8973561f3296b0ec35990ab4951e34f7c0dd5bee3dd120a49989dc8ca7ebfc9610654e8be9d14463af2197626f490324cdd03118db755f5d0b1f7acce375 SHA512 44697faf9acc2c1e75783d432a1a0040339c3445834961a995e95974d4088e75ee5cb647a3908125259d1910d180910e5bc50d34d40d35f33e03197893581477 DIST blender-4.4.1.tar.xz 85518840 BLAKE2B a482a2d246222b5395f5e1c5cfa9fd2dbab0d5dc33145ec5cfaae3e7d7083e65034e1f5b54bc4605ab45905d08c2938c97ab488659d822997ee853c9e34fcc55 SHA512 db6b117b841890b172f4d13c6f38b73f36aae5648ed74f5233eb311328d467644005bd24fb4f9c7ea9b2dad7ff584fc7b3831f5ab34f3f900555c68f4af5b901 DIST blender-4.4.3.tar.xz 85519376 BLAKE2B bb2f93d96b98e4104f1e49f3bd9be8992e37d2005665ad913ccd7e9097fba4823567d0aba3cd6487097d52043c5681fde4489c040e24ae4df6014337eb97f9f5 SHA512 0a500a7abee2e2dea7cdc925539c3f906271525ec88877e12920315552a057072c68806d6cdf7a6eb43b2b7d611e8697c5ad093b22f2402f96a11718538012e6 +DIST blender-4.5.5.tar.xz 85095244 BLAKE2B 5578a45300622f71bb7dd679dcaa85f2de0a3db2ddc9e21a6890ed96b83d14f8b617058e8fc648ae0e02b70e5706c05427f9d1cf44848995ca95b5fd074d616f SHA512 14f340e44ee0f2971a9367f35a150bec61d7c378d1a5d60060e16c2e60f8fdffe71d2252e679698aa0a7a6b77e9b353c67d7494e8ba9990f479b834bb6d9b1de DIST blender-assets-4.3.2.tar.xz 8763844 BLAKE2B 0eca4a7bfb630096dfe9dd5f8c8071d9ca8c1aaab560a8694df4add507c3e8a641a4e0ad197f110b639d2d399a23c5c25af6fb060ca3316e1a44d286f6b23f7e SHA512 ce9483b3e5b83d1b29bdfa3a14f7be7176e85ec50a414213a67badcce3c24cd8da349fee22b08cc95d6e5906420bbcd5c5f15855445da6364e6054f968c20678 DIST blender-test-data-4.4.0.tar.xz 386262908 BLAKE2B 4b7f16f5d19d9569ae19a8e9feeb134841801c89ea64a787c1caa6a4bddce700ebe2a9a15cb2053701c404743dc0749643a1b03fc45f523f792e3729de11f0e8 SHA512 babd235aeb5cf87764b48000dc7776b5e8121d60d930f4aa92ea27cf275608cfc6c3ed47e59d499c85c670dc1ee329e26882e76d8a9a2567b42d3de551a5a9a0 +DIST blender-test-data-4.5.0-1.tar.xz 408765680 BLAKE2B b09840a18a78f8972424a58ad6b36c9e30019862c8217211ef09b9f910eb1ca9facc2ad14fb9bbb49dcf7c0ed7e082e7dcfc57c08daad9bf18fed4bfb2588b86 SHA512 09fcbb76a673a1e0c53f35bf60a74f09b5123ea37c99f5f0d027043caad184a16e3eea407c81027229e4a3a5c1ad8e66b4432ed90a9c8980e466e8b4575fa34b diff --git a/media-gfx/blender/blender-9999.ebuild b/media-gfx/blender/blender-4.5.5.ebuild similarity index 81% copy from media-gfx/blender/blender-9999.ebuild copy to media-gfx/blender/blender-4.5.5.ebuild index a8dfb518e25c..7673d182c357 100644 --- a/media-gfx/blender/blender-9999.ebuild +++ b/media-gfx/blender/blender-4.5.5.ebuild @@ -20,12 +20,12 @@ EAPI=8 PYTHON_COMPAT=( python3_{11..13} ) # NOTE must match media-libs/osl -LLVM_COMPAT=( {18..19} ) +LLVM_COMPAT=( {18..20} ) LLVM_OPTIONAL=1 ROCM_SKIP_GLOBALS=1 -inherit cuda rocm llvm-r1 +inherit cuda rocm llvm-r2 edo inherit eapi9-pipestatus check-reqs flag-o-matic multiprocessing pax-utils python-single-r1 toolchain-funcs virtualx inherit cmake xdg-utils @@ -52,10 +52,10 @@ else SRC_URI=" https://download.blender.org/source/${P}.tar.xz test? ( - https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0.tar.xz + https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0-1.tar.xz ) " - KEYWORDS="~amd64 ~arm ~arm64" + KEYWORDS="~amd64 ~arm64" fi # assets is CC0-1.0 @@ -67,7 +67,7 @@ SLOT="${BLENDER_BRANCH}" IUSE=" alembic +bullet collada +color-management cuda +cycles +cycles-bin-kernels debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip hiprt jack - +jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn oneapi openal +openexr +opengl +openpgl + jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn openal +openexr +opengl +openpgl +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml pulseaudio renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan wayland +webp X " @@ -106,21 +106,22 @@ RDEPEND="${PYTHON_DEPS} dev-libs/boost:=[nls?] dev-libs/lzo:2= $(python_gen_cond_dep ' + dev-python/cattrs[${PYTHON_USEDEP}] dev-python/cython[${PYTHON_USEDEP}] dev-python/numpy[${PYTHON_USEDEP}] - dev-python/zstandard[${PYTHON_USEDEP}] dev-python/requests[${PYTHON_USEDEP}] + dev-python/zstandard[${PYTHON_USEDEP}] ') media-libs/freetype:=[brotli] media-libs/libepoxy:= media-libs/libjpeg-turbo:= media-libs/libpng:= media-libs/libsamplerate - >=media-libs/openimageio-2.5.6.0:= - virtual/zlib:= + >=media-libs/openimageio-3.0.6.1:= virtual/glu virtual/libintl virtual/opengl[X?] + virtual/zlib:= alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] ) bullet? ( sci-physics/bullet:=[double-precision] ) collada? ( >=media-libs/opencollada-1.6.68 ) @@ -129,7 +130,7 @@ RDEPEND="${PYTHON_DEPS} embree? ( media-libs/embree:=[raymask] ) ffmpeg? ( media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid] ) fftw? ( sci-libs/fftw:3.0=[threads] ) - gmp? ( dev-libs/gmp[cxx] ) + gmp? ( dev-libs/gmp:=[cxx] ) gnome? ( gui-libs/libdecor ) hip? ( >=dev-util/hip-5.7:= @@ -147,24 +148,29 @@ RDEPEND="${PYTHON_DEPS} ) nls? ( virtual/libiconv ) openal? ( media-libs/openal ) - oidn? ( >=media-libs/oidn-2.1.0 ) - oneapi? ( dev-libs/intel-compute-runtime:=[l0] ) + oidn? ( >=media-libs/oidn-2.1.0:= ) openexr? ( >=dev-libs/imath-3.1.7:= >=media-libs/openexr-3.2.1:0= ) openpgl? ( media-libs/openpgl:= ) - opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,tbb?] ) + opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2:=[opengl,cuda?,tbb?] ) openvdb? ( >=media-gfx/openvdb-11.0.0:=[nanovdb?] dev-libs/c-blosc:= ) - optix? ( <dev-libs/optix-9:= ) + optix? ( + >=dev-libs/optix-8:= + osl? ( + >=media-libs/osl-1.14[clang-cuda] + ) + ) osl? ( - >=media-libs/osl-1.13:=[${LLVM_USEDEP}] + >=media-libs/osl-1.14:=[${LLVM_USEDEP}] media-libs/mesa[${LLVM_USEDEP}] ) - pdf? ( media-libs/libharu ) + pdf? ( media-libs/libharu:= ) + pipewire? ( >=media-video/pipewire-1.1.0:= ) potrace? ( media-gfx/potrace ) pugixml? ( dev-libs/pugixml ) pulseaudio? ( media-libs/libpulse ) @@ -181,6 +187,7 @@ RDEPEND="${PYTHON_DEPS} media-libs/mesa[wayland] sys-apps/dbus ) + webp? ( media-libs/libwebp:= ) vulkan? ( media-libs/shaderc dev-util/spirv-tools @@ -195,6 +202,7 @@ RDEPEND="${PYTHON_DEPS} ) X? ( x11-libs/libX11 + x11-libs/libXfixes x11-libs/libXi x11-libs/libXxf86vm ) @@ -202,6 +210,11 @@ RDEPEND="${PYTHON_DEPS} DEPEND="${RDEPEND} dev-cpp/eigen:= + test? ( + $(python_gen_cond_dep ' + media-libs/openimageio[jpeg2k,python,${PYTHON_SINGLE_USEDEP},tools] + ') + ) " if [[ "${PV}" == *9999* ]]; then @@ -245,7 +258,9 @@ PATCHES=( "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch" "${FILESDIR}/${PN}-4.1.1-numpy.patch" "${FILESDIR}/${PN}-4.3.2-system-glog.patch" - "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch" + "${FILESDIR}/${PN}-4.5.0-ffmpeg-8.0.patch" + "${FILESDIR}/${PN}-4.5.3-cmake-policy-3.10.patch" + "${FILESDIR}/${PN}-9999-don-t-show-variable-names.patch" ) blender_check_requirements() { @@ -279,18 +294,6 @@ blender_get_version() { 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/" - if ! command -v icpx &>/dev/null && ! command -v dpcpp &>/dev/null; then - eerror "Could not find icpx or dpcpp." - eerror "You need SYCL/DCP++ to enable oneapi support." - eerror "Try sys-devel/DPC++::science" - die "FindSYCL would fail. Aborting." - fi - fi } pkg_setup() { @@ -298,7 +301,7 @@ pkg_setup() { python-single-r1_pkg_setup if use osl; then - llvm-r1_pkg_setup + llvm-r2_pkg_setup fi } @@ -314,8 +317,12 @@ src_unpack() { # TODO if use test && [[ ${PV} != ${SLOT}.0 ]] ; then mv "blender-${BLENDER_BRANCH}.0/tests/"* "${S}/tests" || die + rmdir -p "blender-${BLENDER_BRANCH}.0/tests/" || die fi fi + + # clear cmake_minimum_required + rm -R "${S}/build_files/build_environment/patches" || die } src_prepare() { @@ -340,7 +347,7 @@ src_prepare() { -i release/freedesktop/blender.desktop || die sed \ - -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}" \ + -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T%/}\${CMAKE_INSTALL_PREFIX}|g}" \ -i CMakeLists.txt \ || die CMAKE_INSTALL_PREFIX_WITH_CONFIG @@ -400,7 +407,7 @@ src_prepare() { # Use slotted libhiprt64 sed \ - -e "s|\"libhiprt64.so\"|\"/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \ + -e "s|\"libhiprt64.so\"|\"${ESYSROOT}/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \ -i extern/hipew/src/hiprtew.cc || die } @@ -476,11 +483,10 @@ src_configure() { # GHOST Options: -DWITH_GHOST_WAYLAND="$(usex wayland)" - # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" + # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" # only visible with use wayland. see below -DWITH_GHOST_WAYLAND_DYNLOAD="no" -DWITH_GHOST_X11="$(usex X)" # -DWITH_GHOST_XDND=ON - # -DWITH_X11_XF86VMODE=ON # -DWITH_X11_XFIXES=ON # -DWITH_X11_XINPUT=ON # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland? @@ -514,7 +520,6 @@ src_configure() { -DWITH_PYTHON_INSTALL_NUMPY="no" -DWITH_PYTHON_INSTALL_ZSTANDARD="no" # -DWITH_PYTHON_MODULE="no" - -DWITH_PYTHON_SAFETY="OFF" -DWITH_PYTHON_SECURITY="yes" -DPYTHON_INCLUDE_DIR="$(python_get_includedir)" -DPYTHON_LIBRARY="$(python_get_library_path)" @@ -523,8 +528,8 @@ src_configure() { # Modifiers: -DWITH_MOD_FLUID="$(usex fluid)" - # -DWITH_MOD_REMESH=ON -DWITH_MOD_OCEANSIM="$(usex fftw)" + # -DWITH_MOD_REMESH=ON # Rendering: -DWITH_HYDRA="no" # TODO: Package Hydra @@ -533,13 +538,12 @@ src_configure() { -DWITH_CYCLES_OSL="$(usex osl)" -DWITH_CYCLES_EMBREE="$(usex embree)" -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)" + -DWITH_CYCLES_LOGGING="ON" # "$(usex debug)" -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)" -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)" -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex cycles-bin-kernels)")" - -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)" - -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi "$(usex cycles-bin-kernels)")" -DWITH_CYCLES_DEVICE_HIP="$(usex hip)" -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex cycles-bin-kernels)")" -DWITH_CYCLES_DEVICE_HIPRT="$(usex hip "$(usex hiprt)")" @@ -550,6 +554,22 @@ src_configure() { # -DWITH_CYCLES_STANDALONE_GUI=OFF -DWITH_BLENDER_THUMBNAILER="yes" + + -DWITH_ASSERT_ABORT="$(usex debug)" + -DWITH_ASSERT_RELEASE="no" # "$(usex debug)" + + # -DWITH_FREESTYLE=ON + # -DWITH_IK_ITASC=ON + # -DWITH_IK_SOLVER=ON + # -DWITH_INPUT_IME=ON + # -DWITH_LIBMV=ON + # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS=ON + # -DWITH_LZMA=ON + # -DWITH_LZO=ON + # -DWITH_UV_SLIM=ON + -DWITH_NINJA_POOL_JOBS="no" + # -DPOSTINSTALL_SCRIPT:PATH="" + # -DPOSTCONFIGURE_SCRIPT:PATH="" ) if has_version ">=dev-python/numpy-2"; then @@ -564,10 +584,18 @@ src_configure() { mycmakeargs+=( # -DWITH_BUILDINFO="no" -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)" + # -DWITH_COMPILER_ASAN="yes" + # -DWITH_STRSIZE_DEBUG="yes" + # -DWITH_CYCLES_NATIVE_ONLY="yes" + # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS="no" + # -DWITH_PYTHON_SAFETY="ON" # dev option + ) else mycmakeargs+=( - -DWITH_EXPERIMENTAL_FEATURES="no" + -DWITH_BUILDINFO="yes" + -DWITH_EXPERIMENTAL_FEATURES="OFF" + -DWITH_PYTHON_SAFETY="OFF" ) fi @@ -589,6 +617,10 @@ src_configure() { mycmakeargs+=( -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)" ) @@ -617,6 +649,7 @@ src_configure() { # This is currently needed on arm64 to get the NEON SIMD wrapper to compile the code successfully use arm64 && append-flags -flax-vector-conversions + # WITH_ASSERT_RELEASE filters this append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')" append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')" @@ -641,10 +674,9 @@ src_configure() { use optix && CYCLES_TEST_DEVICES+=( "OPTIX" ) use hip && CYCLES_TEST_DEVICES+=( "HIP" ) use hiprt && CYCLES_TEST_DEVICES+=( "HIP-RT" ) - use oneapi && CYCLES_TEST_DEVICES+=( "ONEAPI" ) fi mycmakeargs+=( - -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr" + -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T%/}/usr" -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" ) @@ -659,20 +691,31 @@ src_configure() { -DWITH_GPU_DRAW_TESTS="yes" - -DWITH_GPU_RENDER_TESTS="no" - -DWITH_GPU_RENDER_TESTS_HEADED="no" - -DWITH_GPU_RENDER_TESTS_SILENT="yes" + -DWITH_GPU_RENDER_TESTS="yes" + -DWITH_GPU_RENDER_TESTS_HEADED="yes" + # -DWITH_GPU_RENDER_TESTS_SILENT="yes" -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)" + # Run Python script outside Blender, using system default Python3 interpreter, + # NOT the one specified in `TEST_PYTHON_EXE`. -DWITH_SYSTEM_PYTHON_TESTS="yes" -DTEST_SYSTEM_PYTHON_EXE="${PYTHON}" + + # -DTEST_PYTHON_EXE="${T%/}/${EPYTHON}/bin/python" + + # -DWITH_LINUX_OFFICIAL_RELEASE_TESTS="yes" # Not needed? ) if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && use experimental; then mycmakeargs+=( + -DWITH_GPU_MESH_PAINT_TESTS="yes" + # -DWITH_UI_TESTS="$(usex wayland)" + -DWITH_UI_TESTS="yes" + -DWITH_TESTS_EXPERIMENTAL="yes" + # 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)" + -DWITH_UI_TESTS_HEADLESS="$(usex !X "$(usex wayland)")" -DWESTON_BIN="${ESYSROOT}/usr/bin/weston" ) fi @@ -689,7 +732,7 @@ src_configure() { src_test() { # 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 + DESTDIR="${T%/}" cmake_build install blender_get_version # Define custom blender data/script file paths, or we won't be able to find them otherwise during testing. @@ -703,7 +746,8 @@ src_test() { # TODO only picks first card addwrite "/dev/dri/card0" addwrite "/dev/dri/renderD128" - addwrite "/dev/udmabuf" + + [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf" if use cuda; then cuda_add_sandbox -w @@ -712,20 +756,15 @@ src_test() { fi local -x CMAKE_SKIP_TESTS=( - "^compositor_cpu_color$" - "^compositor_cpu_filter$" - "^cycles_image_colorspace_cpu$" "^script_pyapi_bpy_driver_secure_eval$" ) if [[ "${RUN_FAILING_TESTS:-0}" -eq 0 ]]; then einfo "not running failing tests RUN_FAILING_TESTS=${RUN_FAILING_TESTS}" CMAKE_SKIP_TESTS+=( - "^cycles_bsdf_cuda$" - "^cycles_image_data_types_cpu$" - "^cycles_image_data_types_optix$" - "^cycles_image_mapping_cpu$" - "^cycles_osl_cpu$" + # Needs testfiles update + "^io_fbx_import$" + "^cycles_camera_cpu$" ) fi @@ -736,20 +775,20 @@ src_test() { ) fi - if ! has_version "media-libs/openimageio[python]"; then + if has_version ">=media-video/ffmpeg-8"; then CMAKE_SKIP_TESTS+=( - # import OpenImageIO as oiio # ModuleNotFoundError: No module named 'OpenImageIO' - "^compositor_cpu_file_output$" + # output change TODO + "^sequencer_render_video_output$" ) fi - # oiio can't find webp due to missing cmake files # 937031 - sed -e "s/ WEBP//g" -i "${BUILD_DIR}/tests/python/CTestTestfile.cmake" || die - # For debugging, print out all information. local -x VERBOSE="$(usex debug "true" "false")" "${VERBOSE}" && einfo "VERBOSE=${VERBOSE}" + local -x DEBUG="$(usex debug "true" "false")" + "${DEBUG}" && einfo "DEBUG=${DEBUG}" + # Show the window in the foreground. # local -x USE_WINDOW="true" # non-zero [[ -v USE_WINDOW ]] && einfo "USE_WINDOW=${USE_WINDOW}" @@ -757,32 +796,43 @@ src_test() { # local -x USE_DEBUG="true" # non-zero [[ -v USE_DEBUG ]] && einfo "USE_DEBUG=${USE_DEBUG}" + # Environment OPENIMAGEIO_CUDA=0 trumps everything else, turns off + # Cuda functionality. We don't even initialize in this case. + local -x OPENIMAGEIO_CUDA=0 + + # Needed if openimageio wasn't build with -DNDEBUG + local -x OPENIMAGEIO_DEBUG=0 + + local -x CYCLESTEST_ARGS="-t 0" + if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then einfo "running expensive tests EXPENSIVE_TESTS=${EXPENSIVE_TESTS}" - # if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && - # use experimental && use wayland; then - # # This runs weston - # xdg_environment_reset - # fi - - 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 - # TODO use eapi9-pipestatus - local -x DISPLAY="$(grep "xserver listening on display" "${logfile}" | cut -d ' ' -f 5)" - - cmake_src_test + if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && + use experimental && use wayland; then + # This runs weston + xdg_environment_reset + fi - exit_code=$? - kill "${compositor}" - elif use X; then - virtx 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 --width=800 --height=600 --socket=wayland-5 --idle-time=0 2>"${logfile}" & + compositor=$! + local -x WAYLAND_DISPLAY=wayland-5 + sleep 1 # wait for xwayland to be up + # TODO use eapi9-pipestatus + 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 else cmake_src_test fi @@ -817,23 +867,23 @@ src_install() { addpredict /dev/dri addpredict /dev/nvidiactl - einfo "Generating Blender C/C++ API docs ..." cd "${CMAKE_USE_DIR}/doc/doxygen" || die - doxygen -u Doxyfile || die - doxygen || die "doxygen failed to build API docs." + sed -e "/^NUM_PROC_THREADS/s/1/$(makeopts_jobs)/" -i Doxyfile || die + edob -m "Generating Blender C/C++ API docs ..." doxygen -u Doxyfile + edob -m "Building API docs" doxygen cd "${CMAKE_USE_DIR}" || die einfo "Generating (BPY) Blender Python API docs ..." - "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed." + edo "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio - cd "${CMAKE_USE_DIR}/doc/python_api" || die - sphinx-build sphinx-in BPY_API || die "sphinx failed." + edo sphinx-build -j "$(makeopts_jobs)" doc/python_api/sphinx-in doc/python_api/BPY_API + cd "${CMAKE_USE_DIR}" || die docinto "html/API/python" - dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/" + dodoc -r "doc/python_api/BPY_API/" docinto "html/API/blender" - dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/" + dodoc -r "doc/doxygen/html/" fi # Fix doc installdir @@ -896,3 +946,27 @@ pkg_postrm() { ewarn fi } + +pkg_info () { + debugvars () { + local var + for var in "${@}"; do + [[ -v "${var}" ]] && echo "${var}: ${!var}" + done + } + + local blender_info_vars=( + CUDACXX + CUDAHOSTCXX + CUDAHOSTLD + CUDAARCHS + CUDAFLAGS + CUDA_PATH + CUDA_VERBOSE + NVCCFLAGS + NVCC_PREPEND_FLAGS + NVCC_APPPEND_FLAGS + ) + + debugvars "${blender_info_vars[@]}" +} diff --git a/media-gfx/blender/blender-9999.ebuild b/media-gfx/blender/blender-4.5.9999.ebuild similarity index 81% copy from media-gfx/blender/blender-9999.ebuild copy to media-gfx/blender/blender-4.5.9999.ebuild index a8dfb518e25c..eb94627db7db 100644 --- a/media-gfx/blender/blender-9999.ebuild +++ b/media-gfx/blender/blender-4.5.9999.ebuild @@ -20,12 +20,12 @@ EAPI=8 PYTHON_COMPAT=( python3_{11..13} ) # NOTE must match media-libs/osl -LLVM_COMPAT=( {18..19} ) +LLVM_COMPAT=( {18..20} ) LLVM_OPTIONAL=1 ROCM_SKIP_GLOBALS=1 -inherit cuda rocm llvm-r1 +inherit cuda rocm llvm-r2 edo inherit eapi9-pipestatus check-reqs flag-o-matic multiprocessing pax-utils python-single-r1 toolchain-funcs virtualx inherit cmake xdg-utils @@ -52,10 +52,10 @@ else SRC_URI=" https://download.blender.org/source/${P}.tar.xz test? ( - https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0.tar.xz + https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0-1.tar.xz ) " - KEYWORDS="~amd64 ~arm ~arm64" + KEYWORDS="~amd64 ~arm64" fi # assets is CC0-1.0 @@ -67,7 +67,7 @@ SLOT="${BLENDER_BRANCH}" IUSE=" alembic +bullet collada +color-management cuda +cycles +cycles-bin-kernels debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip hiprt jack - +jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn oneapi openal +openexr +opengl +openpgl + jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn openal +openexr +opengl +openpgl +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml pulseaudio renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan wayland +webp X " @@ -106,21 +106,22 @@ RDEPEND="${PYTHON_DEPS} dev-libs/boost:=[nls?] dev-libs/lzo:2= $(python_gen_cond_dep ' + dev-python/cattrs[${PYTHON_USEDEP}] dev-python/cython[${PYTHON_USEDEP}] dev-python/numpy[${PYTHON_USEDEP}] - dev-python/zstandard[${PYTHON_USEDEP}] dev-python/requests[${PYTHON_USEDEP}] + dev-python/zstandard[${PYTHON_USEDEP}] ') media-libs/freetype:=[brotli] media-libs/libepoxy:= media-libs/libjpeg-turbo:= media-libs/libpng:= media-libs/libsamplerate - >=media-libs/openimageio-2.5.6.0:= - virtual/zlib:= + >=media-libs/openimageio-3.0.6.1:= virtual/glu virtual/libintl virtual/opengl[X?] + virtual/zlib:= alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] ) bullet? ( sci-physics/bullet:=[double-precision] ) collada? ( >=media-libs/opencollada-1.6.68 ) @@ -129,7 +130,7 @@ RDEPEND="${PYTHON_DEPS} embree? ( media-libs/embree:=[raymask] ) ffmpeg? ( media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid] ) fftw? ( sci-libs/fftw:3.0=[threads] ) - gmp? ( dev-libs/gmp[cxx] ) + gmp? ( dev-libs/gmp:=[cxx] ) gnome? ( gui-libs/libdecor ) hip? ( >=dev-util/hip-5.7:= @@ -147,24 +148,29 @@ RDEPEND="${PYTHON_DEPS} ) nls? ( virtual/libiconv ) openal? ( media-libs/openal ) - oidn? ( >=media-libs/oidn-2.1.0 ) - oneapi? ( dev-libs/intel-compute-runtime:=[l0] ) + oidn? ( >=media-libs/oidn-2.1.0:= ) openexr? ( >=dev-libs/imath-3.1.7:= >=media-libs/openexr-3.2.1:0= ) openpgl? ( media-libs/openpgl:= ) - opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,tbb?] ) + opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2:=[opengl,cuda?,tbb?] ) openvdb? ( >=media-gfx/openvdb-11.0.0:=[nanovdb?] dev-libs/c-blosc:= ) - optix? ( <dev-libs/optix-9:= ) + optix? ( + >=dev-libs/optix-8:= + osl? ( + >=media-libs/osl-1.14[clang-cuda] + ) + ) osl? ( - >=media-libs/osl-1.13:=[${LLVM_USEDEP}] + >=media-libs/osl-1.14:=[${LLVM_USEDEP}] media-libs/mesa[${LLVM_USEDEP}] ) - pdf? ( media-libs/libharu ) + pdf? ( media-libs/libharu:= ) + pipewire? ( >=media-video/pipewire-1.1.0:= ) potrace? ( media-gfx/potrace ) pugixml? ( dev-libs/pugixml ) pulseaudio? ( media-libs/libpulse ) @@ -181,6 +187,7 @@ RDEPEND="${PYTHON_DEPS} media-libs/mesa[wayland] sys-apps/dbus ) + webp? ( media-libs/libwebp:= ) vulkan? ( media-libs/shaderc dev-util/spirv-tools @@ -195,6 +202,7 @@ RDEPEND="${PYTHON_DEPS} ) X? ( x11-libs/libX11 + x11-libs/libXfixes x11-libs/libXi x11-libs/libXxf86vm ) @@ -202,6 +210,11 @@ RDEPEND="${PYTHON_DEPS} DEPEND="${RDEPEND} dev-cpp/eigen:= + test? ( + $(python_gen_cond_dep ' + media-libs/openimageio[jpeg2k,python,${PYTHON_SINGLE_USEDEP},tools] + ') + ) " if [[ "${PV}" == *9999* ]]; then @@ -245,7 +258,9 @@ PATCHES=( "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch" "${FILESDIR}/${PN}-4.1.1-numpy.patch" "${FILESDIR}/${PN}-4.3.2-system-glog.patch" - "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch" + "${FILESDIR}/${PN}-4.5.0-ffmpeg-8.0.patch" + "${FILESDIR}/${PN}-4.5.3-cmake-policy-3.10.patch" + "${FILESDIR}/${PN}-9999-don-t-show-variable-names.patch" ) blender_check_requirements() { @@ -279,18 +294,6 @@ blender_get_version() { 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/" - if ! command -v icpx &>/dev/null && ! command -v dpcpp &>/dev/null; then - eerror "Could not find icpx or dpcpp." - eerror "You need SYCL/DCP++ to enable oneapi support." - eerror "Try sys-devel/DPC++::science" - die "FindSYCL would fail. Aborting." - fi - fi } pkg_setup() { @@ -298,7 +301,7 @@ pkg_setup() { python-single-r1_pkg_setup if use osl; then - llvm-r1_pkg_setup + llvm-r2_pkg_setup fi } @@ -314,8 +317,12 @@ src_unpack() { # TODO if use test && [[ ${PV} != ${SLOT}.0 ]] ; then mv "blender-${BLENDER_BRANCH}.0/tests/"* "${S}/tests" || die + rmdir -p "blender-${BLENDER_BRANCH}.0/tests/" || die fi fi + + # clear cmake_minimum_required + rm -R "${S}/build_files/build_environment/patches" || die } src_prepare() { @@ -340,7 +347,7 @@ src_prepare() { -i release/freedesktop/blender.desktop || die sed \ - -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}" \ + -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T%/}\${CMAKE_INSTALL_PREFIX}|g}" \ -i CMakeLists.txt \ || die CMAKE_INSTALL_PREFIX_WITH_CONFIG @@ -400,7 +407,7 @@ src_prepare() { # Use slotted libhiprt64 sed \ - -e "s|\"libhiprt64.so\"|\"/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \ + -e "s|\"libhiprt64.so\"|\"${ESYSROOT}/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \ -i extern/hipew/src/hiprtew.cc || die } @@ -476,11 +483,10 @@ src_configure() { # GHOST Options: -DWITH_GHOST_WAYLAND="$(usex wayland)" - # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" + # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" # only visible with use wayland. see below -DWITH_GHOST_WAYLAND_DYNLOAD="no" -DWITH_GHOST_X11="$(usex X)" # -DWITH_GHOST_XDND=ON - # -DWITH_X11_XF86VMODE=ON # -DWITH_X11_XFIXES=ON # -DWITH_X11_XINPUT=ON # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland? @@ -514,7 +520,6 @@ src_configure() { -DWITH_PYTHON_INSTALL_NUMPY="no" -DWITH_PYTHON_INSTALL_ZSTANDARD="no" # -DWITH_PYTHON_MODULE="no" - -DWITH_PYTHON_SAFETY="OFF" -DWITH_PYTHON_SECURITY="yes" -DPYTHON_INCLUDE_DIR="$(python_get_includedir)" -DPYTHON_LIBRARY="$(python_get_library_path)" @@ -523,8 +528,8 @@ src_configure() { # Modifiers: -DWITH_MOD_FLUID="$(usex fluid)" - # -DWITH_MOD_REMESH=ON -DWITH_MOD_OCEANSIM="$(usex fftw)" + # -DWITH_MOD_REMESH=ON # Rendering: -DWITH_HYDRA="no" # TODO: Package Hydra @@ -533,13 +538,12 @@ src_configure() { -DWITH_CYCLES_OSL="$(usex osl)" -DWITH_CYCLES_EMBREE="$(usex embree)" -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)" + -DWITH_CYCLES_LOGGING="ON" # "$(usex debug)" -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)" -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)" -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex cycles-bin-kernels)")" - -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)" - -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi "$(usex cycles-bin-kernels)")" -DWITH_CYCLES_DEVICE_HIP="$(usex hip)" -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex cycles-bin-kernels)")" -DWITH_CYCLES_DEVICE_HIPRT="$(usex hip "$(usex hiprt)")" @@ -550,6 +554,22 @@ src_configure() { # -DWITH_CYCLES_STANDALONE_GUI=OFF -DWITH_BLENDER_THUMBNAILER="yes" + + -DWITH_ASSERT_ABORT="$(usex debug)" + -DWITH_ASSERT_RELEASE="no" # "$(usex debug)" + + # -DWITH_FREESTYLE=ON + # -DWITH_IK_ITASC=ON + # -DWITH_IK_SOLVER=ON + # -DWITH_INPUT_IME=ON + # -DWITH_LIBMV=ON + # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS=ON + # -DWITH_LZMA=ON + # -DWITH_LZO=ON + # -DWITH_UV_SLIM=ON + -DWITH_NINJA_POOL_JOBS="no" + # -DPOSTINSTALL_SCRIPT:PATH="" + # -DPOSTCONFIGURE_SCRIPT:PATH="" ) if has_version ">=dev-python/numpy-2"; then @@ -564,10 +584,18 @@ src_configure() { mycmakeargs+=( # -DWITH_BUILDINFO="no" -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)" + # -DWITH_COMPILER_ASAN="yes" + # -DWITH_STRSIZE_DEBUG="yes" + # -DWITH_CYCLES_NATIVE_ONLY="yes" + # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS="no" + # -DWITH_PYTHON_SAFETY="ON" # dev option + ) else mycmakeargs+=( - -DWITH_EXPERIMENTAL_FEATURES="no" + -DWITH_BUILDINFO="yes" + -DWITH_EXPERIMENTAL_FEATURES="OFF" + -DWITH_PYTHON_SAFETY="OFF" ) fi @@ -589,6 +617,10 @@ src_configure() { mycmakeargs+=( -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)" ) @@ -617,6 +649,7 @@ src_configure() { # This is currently needed on arm64 to get the NEON SIMD wrapper to compile the code successfully use arm64 && append-flags -flax-vector-conversions + # WITH_ASSERT_RELEASE filters this append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')" append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')" @@ -641,10 +674,9 @@ src_configure() { use optix && CYCLES_TEST_DEVICES+=( "OPTIX" ) use hip && CYCLES_TEST_DEVICES+=( "HIP" ) use hiprt && CYCLES_TEST_DEVICES+=( "HIP-RT" ) - use oneapi && CYCLES_TEST_DEVICES+=( "ONEAPI" ) fi mycmakeargs+=( - -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr" + -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T%/}/usr" -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" ) @@ -659,20 +691,31 @@ src_configure() { -DWITH_GPU_DRAW_TESTS="yes" - -DWITH_GPU_RENDER_TESTS="no" - -DWITH_GPU_RENDER_TESTS_HEADED="no" - -DWITH_GPU_RENDER_TESTS_SILENT="yes" + -DWITH_GPU_RENDER_TESTS="yes" + -DWITH_GPU_RENDER_TESTS_HEADED="yes" + # -DWITH_GPU_RENDER_TESTS_SILENT="yes" -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)" + # Run Python script outside Blender, using system default Python3 interpreter, + # NOT the one specified in `TEST_PYTHON_EXE`. -DWITH_SYSTEM_PYTHON_TESTS="yes" -DTEST_SYSTEM_PYTHON_EXE="${PYTHON}" + + # -DTEST_PYTHON_EXE="${T%/}/${EPYTHON}/bin/python" + + # -DWITH_LINUX_OFFICIAL_RELEASE_TESTS="yes" # Not needed? ) if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && use experimental; then mycmakeargs+=( + -DWITH_GPU_MESH_PAINT_TESTS="yes" + # -DWITH_UI_TESTS="$(usex wayland)" + -DWITH_UI_TESTS="yes" + -DWITH_TESTS_EXPERIMENTAL="yes" + # 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)" + -DWITH_UI_TESTS_HEADLESS="$(usex !X "$(usex wayland)")" -DWESTON_BIN="${ESYSROOT}/usr/bin/weston" ) fi @@ -689,7 +732,7 @@ src_configure() { src_test() { # 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 + DESTDIR="${T%/}" cmake_build install blender_get_version # Define custom blender data/script file paths, or we won't be able to find them otherwise during testing. @@ -703,7 +746,8 @@ src_test() { # TODO only picks first card addwrite "/dev/dri/card0" addwrite "/dev/dri/renderD128" - addwrite "/dev/udmabuf" + + [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf" if use cuda; then cuda_add_sandbox -w @@ -712,20 +756,14 @@ src_test() { fi local -x CMAKE_SKIP_TESTS=( - "^compositor_cpu_color$" - "^compositor_cpu_filter$" - "^cycles_image_colorspace_cpu$" "^script_pyapi_bpy_driver_secure_eval$" ) if [[ "${RUN_FAILING_TESTS:-0}" -eq 0 ]]; then einfo "not running failing tests RUN_FAILING_TESTS=${RUN_FAILING_TESTS}" CMAKE_SKIP_TESTS+=( - "^cycles_bsdf_cuda$" - "^cycles_image_data_types_cpu$" - "^cycles_image_data_types_optix$" - "^cycles_image_mapping_cpu$" - "^cycles_osl_cpu$" + # Does try to import from weird paths + "^io_fbx_import$" ) fi @@ -736,20 +774,20 @@ src_test() { ) fi - if ! has_version "media-libs/openimageio[python]"; then + if has_version ">=media-video/ffmpeg-8"; then CMAKE_SKIP_TESTS+=( - # import OpenImageIO as oiio # ModuleNotFoundError: No module named 'OpenImageIO' - "^compositor_cpu_file_output$" + # output change TODO + "^sequencer_render_video_output$" ) fi - # oiio can't find webp due to missing cmake files # 937031 - sed -e "s/ WEBP//g" -i "${BUILD_DIR}/tests/python/CTestTestfile.cmake" || die - # For debugging, print out all information. local -x VERBOSE="$(usex debug "true" "false")" "${VERBOSE}" && einfo "VERBOSE=${VERBOSE}" + local -x DEBUG="$(usex debug "true" "false")" + "${DEBUG}" && einfo "DEBUG=${DEBUG}" + # Show the window in the foreground. # local -x USE_WINDOW="true" # non-zero [[ -v USE_WINDOW ]] && einfo "USE_WINDOW=${USE_WINDOW}" @@ -757,32 +795,43 @@ src_test() { # local -x USE_DEBUG="true" # non-zero [[ -v USE_DEBUG ]] && einfo "USE_DEBUG=${USE_DEBUG}" + # Environment OPENIMAGEIO_CUDA=0 trumps everything else, turns off + # Cuda functionality. We don't even initialize in this case. + local -x OPENIMAGEIO_CUDA=0 + + # Needed if openimageio wasn't build with -DNDEBUG + local -x OPENIMAGEIO_DEBUG=0 + + local -x CYCLESTEST_ARGS="-t 0" + if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then einfo "running expensive tests EXPENSIVE_TESTS=${EXPENSIVE_TESTS}" - # if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && - # use experimental && use wayland; then - # # This runs weston - # xdg_environment_reset - # fi - - 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 - # TODO use eapi9-pipestatus - local -x DISPLAY="$(grep "xserver listening on display" "${logfile}" | cut -d ' ' -f 5)" - - cmake_src_test + if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && + use experimental && use wayland; then + # This runs weston + xdg_environment_reset + fi - exit_code=$? - kill "${compositor}" - elif use X; then - virtx 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 --width=800 --height=600 --socket=wayland-5 --idle-time=0 2>"${logfile}" & + compositor=$! + local -x WAYLAND_DISPLAY=wayland-5 + sleep 1 # wait for xwayland to be up + # TODO use eapi9-pipestatus + 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 else cmake_src_test fi @@ -817,23 +866,23 @@ src_install() { addpredict /dev/dri addpredict /dev/nvidiactl - einfo "Generating Blender C/C++ API docs ..." cd "${CMAKE_USE_DIR}/doc/doxygen" || die - doxygen -u Doxyfile || die - doxygen || die "doxygen failed to build API docs." + sed -e "/^NUM_PROC_THREADS/s/1/$(makeopts_jobs)/" -i Doxyfile || die + edob -m "Generating Blender C/C++ API docs ..." doxygen -u Doxyfile + edob -m "Building API docs" doxygen cd "${CMAKE_USE_DIR}" || die einfo "Generating (BPY) Blender Python API docs ..." - "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed." + edo "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio - cd "${CMAKE_USE_DIR}/doc/python_api" || die - sphinx-build sphinx-in BPY_API || die "sphinx failed." + edo sphinx-build -j "$(makeopts_jobs)" doc/python_api/sphinx-in doc/python_api/BPY_API + cd "${CMAKE_USE_DIR}" || die docinto "html/API/python" - dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/" + dodoc -r "doc/python_api/BPY_API/" docinto "html/API/blender" - dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/" + dodoc -r "doc/doxygen/html/" fi # Fix doc installdir @@ -896,3 +945,27 @@ pkg_postrm() { ewarn fi } + +pkg_info () { + debugvars () { + local var + for var in "${@}"; do + [[ -v "${var}" ]] && echo "${var}: ${!var}" + done + } + + local blender_info_vars=( + CUDACXX + CUDAHOSTCXX + CUDAHOSTLD + CUDAARCHS + CUDAFLAGS + CUDA_PATH + CUDA_VERBOSE + NVCCFLAGS + NVCC_PREPEND_FLAGS + NVCC_APPPEND_FLAGS + ) + + debugvars "${blender_info_vars[@]}" +} diff --git a/media-gfx/blender/blender-9999.ebuild b/media-gfx/blender/blender-9999.ebuild index a8dfb518e25c..467a83667254 100644 --- a/media-gfx/blender/blender-9999.ebuild +++ b/media-gfx/blender/blender-9999.ebuild @@ -20,12 +20,12 @@ EAPI=8 PYTHON_COMPAT=( python3_{11..13} ) # NOTE must match media-libs/osl -LLVM_COMPAT=( {18..19} ) +LLVM_COMPAT=( {18..20} ) LLVM_OPTIONAL=1 ROCM_SKIP_GLOBALS=1 -inherit cuda rocm llvm-r1 +inherit cuda rocm llvm-r2 edo inherit eapi9-pipestatus check-reqs flag-o-matic multiprocessing pax-utils python-single-r1 toolchain-funcs virtualx inherit cmake xdg-utils @@ -55,7 +55,7 @@ else https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0.tar.xz ) " - KEYWORDS="~amd64 ~arm ~arm64" + KEYWORDS="~amd64 ~arm64" fi # assets is CC0-1.0 @@ -67,7 +67,7 @@ SLOT="${BLENDER_BRANCH}" IUSE=" alembic +bullet collada +color-management cuda +cycles +cycles-bin-kernels debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip hiprt jack - +jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn oneapi openal +openexr +opengl +openpgl + jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn openal +openexr +opengl +openpgl +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml pulseaudio renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan wayland +webp X " @@ -106,21 +106,22 @@ RDEPEND="${PYTHON_DEPS} dev-libs/boost:=[nls?] dev-libs/lzo:2= $(python_gen_cond_dep ' + dev-python/cattrs[${PYTHON_USEDEP}] dev-python/cython[${PYTHON_USEDEP}] dev-python/numpy[${PYTHON_USEDEP}] - dev-python/zstandard[${PYTHON_USEDEP}] dev-python/requests[${PYTHON_USEDEP}] + dev-python/zstandard[${PYTHON_USEDEP}] ') media-libs/freetype:=[brotli] media-libs/libepoxy:= media-libs/libjpeg-turbo:= media-libs/libpng:= media-libs/libsamplerate - >=media-libs/openimageio-2.5.6.0:= - virtual/zlib:= + >=media-libs/openimageio-3.0.6.1:= virtual/glu virtual/libintl virtual/opengl[X?] + virtual/zlib:= alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] ) bullet? ( sci-physics/bullet:=[double-precision] ) collada? ( >=media-libs/opencollada-1.6.68 ) @@ -129,7 +130,7 @@ RDEPEND="${PYTHON_DEPS} embree? ( media-libs/embree:=[raymask] ) ffmpeg? ( media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid] ) fftw? ( sci-libs/fftw:3.0=[threads] ) - gmp? ( dev-libs/gmp[cxx] ) + gmp? ( dev-libs/gmp:=[cxx] ) gnome? ( gui-libs/libdecor ) hip? ( >=dev-util/hip-5.7:= @@ -147,24 +148,29 @@ RDEPEND="${PYTHON_DEPS} ) nls? ( virtual/libiconv ) openal? ( media-libs/openal ) - oidn? ( >=media-libs/oidn-2.1.0 ) - oneapi? ( dev-libs/intel-compute-runtime:=[l0] ) + oidn? ( >=media-libs/oidn-2.1.0:= ) openexr? ( >=dev-libs/imath-3.1.7:= >=media-libs/openexr-3.2.1:0= ) openpgl? ( media-libs/openpgl:= ) - opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,tbb?] ) + opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2:=[opengl,cuda?,tbb?] ) openvdb? ( >=media-gfx/openvdb-11.0.0:=[nanovdb?] dev-libs/c-blosc:= ) - optix? ( <dev-libs/optix-9:= ) + optix? ( + >=dev-libs/optix-8:= + osl? ( + >=media-libs/osl-1.14[clang-cuda] + ) + ) osl? ( - >=media-libs/osl-1.13:=[${LLVM_USEDEP}] + >=media-libs/osl-1.14:=[${LLVM_USEDEP}] media-libs/mesa[${LLVM_USEDEP}] ) - pdf? ( media-libs/libharu ) + pdf? ( media-libs/libharu:= ) + pipewire? ( >=media-video/pipewire-1.1.0:= ) potrace? ( media-gfx/potrace ) pugixml? ( dev-libs/pugixml ) pulseaudio? ( media-libs/libpulse ) @@ -181,6 +187,7 @@ RDEPEND="${PYTHON_DEPS} media-libs/mesa[wayland] sys-apps/dbus ) + webp? ( media-libs/libwebp:= ) vulkan? ( media-libs/shaderc dev-util/spirv-tools @@ -195,6 +202,7 @@ RDEPEND="${PYTHON_DEPS} ) X? ( x11-libs/libX11 + x11-libs/libXfixes x11-libs/libXi x11-libs/libXxf86vm ) @@ -202,6 +210,11 @@ RDEPEND="${PYTHON_DEPS} DEPEND="${RDEPEND} dev-cpp/eigen:= + test? ( + $(python_gen_cond_dep ' + media-libs/openimageio[jpeg2k,python,${PYTHON_SINGLE_USEDEP},tools] + ') + ) " if [[ "${PV}" == *9999* ]]; then @@ -245,7 +258,9 @@ PATCHES=( "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch" "${FILESDIR}/${PN}-4.1.1-numpy.patch" "${FILESDIR}/${PN}-4.3.2-system-glog.patch" - "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch" + "${FILESDIR}/${PN}-4.5.0-ffmpeg-8.0.patch" + "${FILESDIR}/${PN}-4.5.3-cmake-policy-3.10.patch" + "${FILESDIR}/${PN}-9999-don-t-show-variable-names.patch" ) blender_check_requirements() { @@ -279,18 +294,6 @@ blender_get_version() { 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/" - if ! command -v icpx &>/dev/null && ! command -v dpcpp &>/dev/null; then - eerror "Could not find icpx or dpcpp." - eerror "You need SYCL/DCP++ to enable oneapi support." - eerror "Try sys-devel/DPC++::science" - die "FindSYCL would fail. Aborting." - fi - fi } pkg_setup() { @@ -298,7 +301,7 @@ pkg_setup() { python-single-r1_pkg_setup if use osl; then - llvm-r1_pkg_setup + llvm-r2_pkg_setup fi } @@ -314,8 +317,12 @@ src_unpack() { # TODO if use test && [[ ${PV} != ${SLOT}.0 ]] ; then mv "blender-${BLENDER_BRANCH}.0/tests/"* "${S}/tests" || die + rmdir -p "blender-${BLENDER_BRANCH}.0/tests/" || die fi fi + + # clear cmake_minimum_required + rm -R "${S}/build_files/build_environment/patches" || die } src_prepare() { @@ -340,7 +347,7 @@ src_prepare() { -i release/freedesktop/blender.desktop || die sed \ - -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}" \ + -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T%/}\${CMAKE_INSTALL_PREFIX}|g}" \ -i CMakeLists.txt \ || die CMAKE_INSTALL_PREFIX_WITH_CONFIG @@ -400,7 +407,7 @@ src_prepare() { # Use slotted libhiprt64 sed \ - -e "s|\"libhiprt64.so\"|\"/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \ + -e "s|\"libhiprt64.so\"|\"${ESYSROOT}/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \ -i extern/hipew/src/hiprtew.cc || die } @@ -476,11 +483,10 @@ src_configure() { # GHOST Options: -DWITH_GHOST_WAYLAND="$(usex wayland)" - # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" + # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" # only visible with use wayland. see below -DWITH_GHOST_WAYLAND_DYNLOAD="no" -DWITH_GHOST_X11="$(usex X)" # -DWITH_GHOST_XDND=ON - # -DWITH_X11_XF86VMODE=ON # -DWITH_X11_XFIXES=ON # -DWITH_X11_XINPUT=ON # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland? @@ -514,7 +520,6 @@ src_configure() { -DWITH_PYTHON_INSTALL_NUMPY="no" -DWITH_PYTHON_INSTALL_ZSTANDARD="no" # -DWITH_PYTHON_MODULE="no" - -DWITH_PYTHON_SAFETY="OFF" -DWITH_PYTHON_SECURITY="yes" -DPYTHON_INCLUDE_DIR="$(python_get_includedir)" -DPYTHON_LIBRARY="$(python_get_library_path)" @@ -523,8 +528,8 @@ src_configure() { # Modifiers: -DWITH_MOD_FLUID="$(usex fluid)" - # -DWITH_MOD_REMESH=ON -DWITH_MOD_OCEANSIM="$(usex fftw)" + # -DWITH_MOD_REMESH=ON # Rendering: -DWITH_HYDRA="no" # TODO: Package Hydra @@ -533,13 +538,12 @@ src_configure() { -DWITH_CYCLES_OSL="$(usex osl)" -DWITH_CYCLES_EMBREE="$(usex embree)" -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)" + -DWITH_CYCLES_LOGGING="ON" # "$(usex debug)" -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)" -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)" -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex cycles-bin-kernels)")" - -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)" - -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi "$(usex cycles-bin-kernels)")" -DWITH_CYCLES_DEVICE_HIP="$(usex hip)" -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex cycles-bin-kernels)")" -DWITH_CYCLES_DEVICE_HIPRT="$(usex hip "$(usex hiprt)")" @@ -550,6 +554,22 @@ src_configure() { # -DWITH_CYCLES_STANDALONE_GUI=OFF -DWITH_BLENDER_THUMBNAILER="yes" + + -DWITH_ASSERT_ABORT="$(usex debug)" + -DWITH_ASSERT_RELEASE="no" # "$(usex debug)" + + # -DWITH_FREESTYLE=ON + # -DWITH_IK_ITASC=ON + # -DWITH_IK_SOLVER=ON + # -DWITH_INPUT_IME=ON + # -DWITH_LIBMV=ON + # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS=ON + # -DWITH_LZMA=ON + # -DWITH_LZO=ON + # -DWITH_UV_SLIM=ON + -DWITH_NINJA_POOL_JOBS="no" + # -DPOSTINSTALL_SCRIPT:PATH="" + # -DPOSTCONFIGURE_SCRIPT:PATH="" ) if has_version ">=dev-python/numpy-2"; then @@ -564,10 +584,18 @@ src_configure() { mycmakeargs+=( # -DWITH_BUILDINFO="no" -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)" + # -DWITH_COMPILER_ASAN="yes" + # -DWITH_STRSIZE_DEBUG="yes" + # -DWITH_CYCLES_NATIVE_ONLY="yes" + # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS="no" + # -DWITH_PYTHON_SAFETY="ON" # dev option + ) else mycmakeargs+=( - -DWITH_EXPERIMENTAL_FEATURES="no" + -DWITH_BUILDINFO="yes" + -DWITH_EXPERIMENTAL_FEATURES="OFF" + -DWITH_PYTHON_SAFETY="OFF" ) fi @@ -589,6 +617,10 @@ src_configure() { mycmakeargs+=( -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)" ) @@ -617,6 +649,7 @@ src_configure() { # This is currently needed on arm64 to get the NEON SIMD wrapper to compile the code successfully use arm64 && append-flags -flax-vector-conversions + # WITH_ASSERT_RELEASE filters this append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')" append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')" @@ -641,10 +674,9 @@ src_configure() { use optix && CYCLES_TEST_DEVICES+=( "OPTIX" ) use hip && CYCLES_TEST_DEVICES+=( "HIP" ) use hiprt && CYCLES_TEST_DEVICES+=( "HIP-RT" ) - use oneapi && CYCLES_TEST_DEVICES+=( "ONEAPI" ) fi mycmakeargs+=( - -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr" + -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T%/}/usr" -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" ) @@ -659,20 +691,31 @@ src_configure() { -DWITH_GPU_DRAW_TESTS="yes" - -DWITH_GPU_RENDER_TESTS="no" - -DWITH_GPU_RENDER_TESTS_HEADED="no" - -DWITH_GPU_RENDER_TESTS_SILENT="yes" + -DWITH_GPU_RENDER_TESTS="yes" + -DWITH_GPU_RENDER_TESTS_HEADED="yes" + # -DWITH_GPU_RENDER_TESTS_SILENT="yes" -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)" + # Run Python script outside Blender, using system default Python3 interpreter, + # NOT the one specified in `TEST_PYTHON_EXE`. -DWITH_SYSTEM_PYTHON_TESTS="yes" -DTEST_SYSTEM_PYTHON_EXE="${PYTHON}" + + # -DTEST_PYTHON_EXE="${T%/}/${EPYTHON}/bin/python" + + # -DWITH_LINUX_OFFICIAL_RELEASE_TESTS="yes" # Not needed? ) if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && use experimental; then mycmakeargs+=( + -DWITH_GPU_MESH_PAINT_TESTS="yes" + # -DWITH_UI_TESTS="$(usex wayland)" + -DWITH_UI_TESTS="yes" + -DWITH_TESTS_EXPERIMENTAL="yes" + # 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)" + -DWITH_UI_TESTS_HEADLESS="$(usex !X "$(usex wayland)")" -DWESTON_BIN="${ESYSROOT}/usr/bin/weston" ) fi @@ -689,7 +732,7 @@ src_configure() { src_test() { # 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 + DESTDIR="${T%/}" cmake_build install blender_get_version # Define custom blender data/script file paths, or we won't be able to find them otherwise during testing. @@ -703,7 +746,8 @@ src_test() { # TODO only picks first card addwrite "/dev/dri/card0" addwrite "/dev/dri/renderD128" - addwrite "/dev/udmabuf" + + [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf" if use cuda; then cuda_add_sandbox -w @@ -712,20 +756,14 @@ src_test() { fi local -x CMAKE_SKIP_TESTS=( - "^compositor_cpu_color$" - "^compositor_cpu_filter$" - "^cycles_image_colorspace_cpu$" "^script_pyapi_bpy_driver_secure_eval$" ) if [[ "${RUN_FAILING_TESTS:-0}" -eq 0 ]]; then einfo "not running failing tests RUN_FAILING_TESTS=${RUN_FAILING_TESTS}" CMAKE_SKIP_TESTS+=( - "^cycles_bsdf_cuda$" - "^cycles_image_data_types_cpu$" - "^cycles_image_data_types_optix$" - "^cycles_image_mapping_cpu$" - "^cycles_osl_cpu$" + # Does try to import from weird paths + "^io_fbx_import$" ) fi @@ -736,20 +774,20 @@ src_test() { ) fi - if ! has_version "media-libs/openimageio[python]"; then + if has_version ">=media-video/ffmpeg-8"; then CMAKE_SKIP_TESTS+=( - # import OpenImageIO as oiio # ModuleNotFoundError: No module named 'OpenImageIO' - "^compositor_cpu_file_output$" + # output change TODO + "^sequencer_render_video_output$" ) fi - # oiio can't find webp due to missing cmake files # 937031 - sed -e "s/ WEBP//g" -i "${BUILD_DIR}/tests/python/CTestTestfile.cmake" || die - # For debugging, print out all information. local -x VERBOSE="$(usex debug "true" "false")" "${VERBOSE}" && einfo "VERBOSE=${VERBOSE}" + local -x DEBUG="$(usex debug "true" "false")" + "${DEBUG}" && einfo "DEBUG=${DEBUG}" + # Show the window in the foreground. # local -x USE_WINDOW="true" # non-zero [[ -v USE_WINDOW ]] && einfo "USE_WINDOW=${USE_WINDOW}" @@ -757,32 +795,43 @@ src_test() { # local -x USE_DEBUG="true" # non-zero [[ -v USE_DEBUG ]] && einfo "USE_DEBUG=${USE_DEBUG}" + # Environment OPENIMAGEIO_CUDA=0 trumps everything else, turns off + # Cuda functionality. We don't even initialize in this case. + local -x OPENIMAGEIO_CUDA=0 + + # Needed if openimageio wasn't build with -DNDEBUG + local -x OPENIMAGEIO_DEBUG=0 + + local -x CYCLESTEST_ARGS="-t 0" + if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then einfo "running expensive tests EXPENSIVE_TESTS=${EXPENSIVE_TESTS}" - # if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && - # use experimental && use wayland; then - # # This runs weston - # xdg_environment_reset - # fi - - 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 - # TODO use eapi9-pipestatus - local -x DISPLAY="$(grep "xserver listening on display" "${logfile}" | cut -d ' ' -f 5)" - - cmake_src_test + if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && + use experimental && use wayland; then + # This runs weston + xdg_environment_reset + fi - exit_code=$? - kill "${compositor}" - elif use X; then - virtx 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 --width=800 --height=600 --socket=wayland-5 --idle-time=0 2>"${logfile}" & + compositor=$! + local -x WAYLAND_DISPLAY=wayland-5 + sleep 1 # wait for xwayland to be up + # TODO use eapi9-pipestatus + 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 else cmake_src_test fi @@ -817,23 +866,23 @@ src_install() { addpredict /dev/dri addpredict /dev/nvidiactl - einfo "Generating Blender C/C++ API docs ..." cd "${CMAKE_USE_DIR}/doc/doxygen" || die - doxygen -u Doxyfile || die - doxygen || die "doxygen failed to build API docs." + sed -e "/^NUM_PROC_THREADS/s/1/$(makeopts_jobs)/" -i Doxyfile || die + edob -m "Generating Blender C/C++ API docs ..." doxygen -u Doxyfile + edob -m "Building API docs" doxygen cd "${CMAKE_USE_DIR}" || die einfo "Generating (BPY) Blender Python API docs ..." - "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed." + edo "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio - cd "${CMAKE_USE_DIR}/doc/python_api" || die - sphinx-build sphinx-in BPY_API || die "sphinx failed." + edo sphinx-build -j "$(makeopts_jobs)" doc/python_api/sphinx-in doc/python_api/BPY_API + cd "${CMAKE_USE_DIR}" || die docinto "html/API/python" - dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/" + dodoc -r "doc/python_api/BPY_API/" docinto "html/API/blender" - dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/" + dodoc -r "doc/doxygen/html/" fi # Fix doc installdir @@ -896,3 +945,27 @@ pkg_postrm() { ewarn fi } + +pkg_info () { + debugvars () { + local var + for var in "${@}"; do + [[ -v "${var}" ]] && echo "${var}: ${!var}" + done + } + + local blender_info_vars=( + CUDACXX + CUDAHOSTCXX + CUDAHOSTLD + CUDAARCHS + CUDAFLAGS + CUDA_PATH + CUDA_VERBOSE + NVCCFLAGS + NVCC_PREPEND_FLAGS + NVCC_APPPEND_FLAGS + ) + + debugvars "${blender_info_vars[@]}" +} diff --git a/media-gfx/blender/files/blender-4.5.0-ffmpeg-8.0.patch b/media-gfx/blender/files/blender-4.5.0-ffmpeg-8.0.patch new file mode 100644 index 000000000000..89c8689d51c0 --- /dev/null +++ b/media-gfx/blender/files/blender-4.5.0-ffmpeg-8.0.patch @@ -0,0 +1,40 @@ +diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp +index efe36df4204..2a4dcd45f07 100644 +--- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp ++++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp +@@ -285,9 +285,11 @@ FFMPEGReader::FFMPEGReader(std::shared_ptr<Buffer> buffer, int stream) : + m_membuffer(buffer), + m_membufferpos(0) + { +- m_membuf = reinterpret_cast<data_t*>(av_malloc(AV_INPUT_BUFFER_MIN_SIZE + AV_INPUT_BUFFER_PADDING_SIZE)); ++ // Default buffer size (aligns with the x86 page size), taken from FFmpeg's "doc/examples/avio_read_callback.c" example ++ size_t avio_ctx_buffer_size = 4096; ++ m_membuf = reinterpret_cast<data_t*>(av_malloc(avio_ctx_buffer_size)); + +- m_aviocontext = avio_alloc_context(m_membuf, AV_INPUT_BUFFER_MIN_SIZE, 0, this, read_packet, nullptr, seek_packet); ++ m_aviocontext = avio_alloc_context(m_membuf, avio_ctx_buffer_size, 0, this, read_packet, nullptr, seek_packet); + + if(!m_aviocontext) + { +diff --git a/source/blender/imbuf/movie/intern/movie_write_audio.cc b/source/blender/imbuf/movie/intern/movie_write_audio.cc +index 16d01359a60..2af40944c2e 100644 +--- a/source/blender/imbuf/movie/intern/movie_write_audio.cc ++++ b/source/blender/imbuf/movie/intern/movie_write_audio.cc +@@ -334,12 +334,11 @@ AVStream *alloc_audio_stream(MovieWriter *context, + c->time_base.num = 1; + c->time_base.den = c->sample_rate; + +- if (c->frame_size == 0) { +- /* Used to be if ((c->codec_id >= CODEC_ID_PCM_S16LE) && (c->codec_id <= CODEC_ID_PCM_DVD)) +- * not sure if that is needed anymore, so let's try out if there are any +- * complaints regarding some FFMPEG versions users might have. */ +- context->audio_input_samples = AV_INPUT_BUFFER_MIN_SIZE * 8 / c->bits_per_coded_sample / +- audio_channels; ++ if (c->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE) { ++ /* If the audio format has a variable frame size, default to 10000. ++ * This logic is taken from the FFmpeg "doc/examples/mux.c" example ++ */ ++ context->audio_input_samples = 10000; + } + else { + context->audio_input_samples = c->frame_size; diff --git a/media-gfx/blender/files/blender-4.5.3-cmake-policy-3.10.patch b/media-gfx/blender/files/blender-4.5.3-cmake-policy-3.10.patch new file mode 100644 index 000000000000..f23f96e38ad4 --- /dev/null +++ b/media-gfx/blender/files/blender-4.5.3-cmake-policy-3.10.patch @@ -0,0 +1,68 @@ +From 16b2913ada2929608b6a1ad4b75a9be036cf506e Mon Sep 17 00:00:00 2001 +From: Paul Zander <[email protected]> +Date: Thu, 30 Oct 2025 12:05:29 +0100 +Subject: [PATCH 1/3] build_files: allow cmake policy 3.10 + +Signed-off-by: Paul Zander <[email protected]> + +diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt +index af93de4..94fbca8 100644 +--- a/build_files/build_environment/CMakeLists.txt ++++ b/build_files/build_environment/CMakeLists.txt +@@ -14,7 +14,7 @@ + # + ################################################################################################## + +-cmake_minimum_required(VERSION 3.5) ++cmake_minimum_required(VERSION 3.5...3.10) + project("BlenderDependencies") + if(POLICY CMP0135) + cmake_policy(SET CMP0135 NEW) # CMake 3.24+ Set the date/time for extracted files to time of extraction +-- +2.51.2 + + +From 756762326790f95bff3fb1f9c92805be92029fcb Mon Sep 17 00:00:00 2001 +From: Paul Zander <[email protected]> +Date: Thu, 30 Oct 2025 12:05:49 +0100 +Subject: [PATCH 2/3] extern/quadriflow/lemon: allow cmake policy 3.10 + +Signed-off-by: Paul Zander <[email protected]> + +diff --git a/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt b/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt +index a56dbc5..459aff4 100644 +--- a/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt ++++ b/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt +@@ -1,4 +1,4 @@ +-CMAKE_MINIMUM_REQUIRED(VERSION 3.1) ++CMAKE_MINIMUM_REQUIRED(VERSION 3.1...3.10) + + SET(PROJECT_NAME "LEMON") + PROJECT(${PROJECT_NAME}) +-- +2.51.2 + + +From 6512020264db7523123aa26dabba621783484815 Mon Sep 17 00:00:00 2001 +From: Paul Zander <[email protected]> +Date: Thu, 30 Oct 2025 12:05:56 +0100 +Subject: [PATCH 3/3] intern/ghost: allow cmake policy 3.10 + +Signed-off-by: Paul Zander <[email protected]> + +diff --git a/intern/ghost/test/CMakeLists.txt b/intern/ghost/test/CMakeLists.txt +index 60fab05..ff95da2 100644 +--- a/intern/ghost/test/CMakeLists.txt ++++ b/intern/ghost/test/CMakeLists.txt +@@ -15,7 +15,7 @@ cmake_policy(SET CMP0010 NEW) + # Input directories must have `CMakeLists.txt`. + cmake_policy(SET CMP0014 NEW) + +-cmake_minimum_required(VERSION 3.5) ++cmake_minimum_required(VERSION 3.5...3.10) + + project(GhostMultiTest) + +-- +2.51.2 + diff --git a/media-gfx/blender/files/blender-9999-don-t-show-variable-names.patch b/media-gfx/blender/files/blender-9999-don-t-show-variable-names.patch new file mode 100644 index 000000000000..98ee4403c8e8 --- /dev/null +++ b/media-gfx/blender/files/blender-9999-don-t-show-variable-names.patch @@ -0,0 +1,25 @@ +From b15763a8a1dca3e8feb7852e14c5cb84f9aacca5 Mon Sep 17 00:00:00 2001 +From: Paul Zander <[email protected]> +Date: Sun, 17 Aug 2025 17:43:48 +0200 +Subject: [PATCH] don't show variable names + +Signed-off-by: Paul Zander <[email protected]> + +diff --git a/source/blender/nodes/composite/nodes/node_composite_pixelate.cc b/source/blender/nodes/composite/nodes/node_composite_pixelate.cc +index 1315312c612..e2cdbabcc31 100644 +--- a/source/blender/nodes/composite/nodes/node_composite_pixelate.cc ++++ b/source/blender/nodes/composite/nodes/node_composite_pixelate.cc +@@ -99,8 +99,8 @@ class PixelateOperation : public NodeOperation { + } + } + +- int2 size = end - start; +- int count = size.x * size.y; ++ int2 pixel = end - start; ++ int count = pixel.x * pixel.y; + output.store_pixel(texel, accumulated_color / count); + }); + } +-- +2.50.1 + diff --git a/media-gfx/blender/metadata.xml b/media-gfx/blender/metadata.xml index dfbf4a93c976..f4e8a4fed5e8 100644 --- a/media-gfx/blender/metadata.xml +++ b/media-gfx/blender/metadata.xml @@ -66,7 +66,6 @@ Enable NDOF input devices (SpaceNavigator and friends). </flag> <flag name="oidn">Enable OpenImageDenoiser Support</flag> - <flag name="oneapi">Build cycles renderer with Intel oneAPI SyCL support</flag> <flag name="openpgl">Enable path guiding support in Cycles</flag> <flag name="opensubdiv"> Add rendering support form OpenSubdiv from Dreamworks Animation
