git: 82160875da03 - main - graphics/blender: update to 5.0.1
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 14 Feb 2026 14:21:33 UTC
The branch main has been updated by fuz:
URL: https://cgit.FreeBSD.org/ports/commit/?id=82160875da03a97dcdb1178b26f29c627f11bb96
commit 82160875da03a97dcdb1178b26f29c627f11bb96
Author: Shane <FreeBSD@ShaneWare.Biz>
AuthorDate: 2026-02-05 00:28:07 +0000
Commit: Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2026-02-14 14:17:52 +0000
graphics/blender: update to 5.0.1
- a new port graphics/blender4 provides v4.5.x for compatibility
Changelog: https://developer.blender.org/docs/release_notes/5.0/
Changelog: https://developer.blender.org/docs/release_notes/5.0/corrective_releases/
Changelog: https://www.blender.org/download/lts/4-5/#versions
PR: 282988
Reported by: kunda <luzpaz@pm.me>
---
graphics/Makefile | 1 +
graphics/blender/Makefile | 176 +-
graphics/blender/Makefile.options | 39 +-
graphics/blender/Makefile.versions | 2 +-
graphics/blender/distinfo | 8 +-
graphics/blender/files/extra-patch-simd-off | 64 +
graphics/blender/files/patch-CMakeLists.txt | 14 -
...xtern_audaspace_plugins_ffmpeg_FFMPEGReader.cpp | 71 -
...xtern_audaspace_plugins_ffmpeg_FFMPEGWriter.cpp | 87 -
graphics/blender/files/patch-fmtlib | 3256 ++++++++++++++++++++
.../files/patch-intern_cycles_CMakeLists.txt | 18 +
.../files/patch-intern_ffmpeg_ffmpeg__compat.h | 18 -
...ch-source_blender_blenfont_intern_blf__glyph.cc | 14 +
...atch-source_blender_imbuf_intern_anim__movie.cc | 26 -
graphics/blender/pkg-plist | 584 ++--
graphics/blender4/Makefile | 257 ++
graphics/blender4/Makefile.options | 161 +
graphics/blender4/Makefile.versions | 4 +
graphics/blender4/distinfo | 3 +
graphics/blender4/files/blender.in | 6 +
graphics/blender4/files/extra-patch-simd-off | 37 +
...xtern_audaspace_plugins_ffmpeg_FFMPEGReader.cpp | 68 +
...-extern_audaspace_plugins_ffmpeg_FFMPEGReader.h | 14 +
.../files/patch-extern_lzma_CpuArch.c | 0
.../files/patch-intern_cycles_CMakeLists.txt | 18 +
...se_freedesktop_org.blender.Blender.metainfo.xml | 10 +
...er_blenlib_BLI__bit__span__to__index__ranges.hh | 14 +
...ender_imbuf_movie_intern_movie__write__audio.cc | 21 +
graphics/blender4/pkg-descr | 7 +
graphics/blender4/pkg-plist | 1453 +++++++++
30 files changed, 5840 insertions(+), 611 deletions(-)
diff --git a/graphics/Makefile b/graphics/Makefile
index aee3bf8c6003..53b66c0ad891 100644
--- a/graphics/Makefile
+++ b/graphics/Makefile
@@ -84,6 +84,7 @@
SUBDIR += bitmap
SUBDIR += blend2d
SUBDIR += blender
+ SUBDIR += blender4
SUBDIR += blender-doc
SUBDIR += bmeps
SUBDIR += bmp2html
diff --git a/graphics/blender/Makefile b/graphics/blender/Makefile
index f187fa70136c..2c171a7abc3e 100644
--- a/graphics/blender/Makefile
+++ b/graphics/blender/Makefile
@@ -1,58 +1,50 @@
PORTNAME= blender
-DISTVERSION= 4.2.0
-PORTREVISION= 16
+DISTVERSION= 5.0.1
+PORTREVISION= 0
CATEGORIES= graphics multimedia
MASTER_SITES= http://download.blender.org/source/ \
http://mirror.cs.umn.edu/blender.org/source/ \
http://public.planetmirror.com/pub/blender/source/
-PATCH_SITES= https://projects.blender.org/blender/blender/commit/
-PATCHFILES= 1c69154aaf033730a9e3882574d56ca6597b84ae.patch:-p1
-
MAINTAINER= FreeBSD@Shaneware.biz
COMMENT= 3D modeling/rendering/animation package
WWW= https://www.blender.org/
-BROKEN= Does not build with ffmpeg > 6
-
LICENSE= GPLv3+
LICENSE_FILE= ${WRKSRC}/doc/license/GPL3-license.txt
-ONLY_FOR_ARCHS= aarch64 amd64 powerpc64 powerpc64le riscv64
+ONLY_FOR_ARCHS= aarch64 amd64 powerpc64le riscv64
ONLY_FOR_ARCHS_REASON= static_assert(sizeof(unsigned long long) == sizeof(struct hipArray*))
BUILD_DEPENDS= ${PYNUMPY}
-LIB_DEPENDS= libboost_thread.so:devel/boost-libs \
- libfreetype.so:print/freetype2 \
+LIB_DEPENDS= libfreetype.so:print/freetype2 \
libepoxy.so:graphics/libepoxy \
libOpenImageIO.so:graphics/openimageio \
libpng.so:graphics/png \
+ libsamplerate.so:audio/libsamplerate \
libtiff.so:graphics/tiff \
libzstd.so:archivers/zstd
RUN_DEPENDS= ${PYNUMPY}
-# libboost_regex.so just acts as a placeholder; several boost
-# libraries are used, if either of the most common options in blender
-# are set. We will pull boost in just to be on the safe side.
-USES= cmake:noninja compiler:c++17-lang cpe eigen:3 jpeg llvm:build,run pkgconfig \
- python:3.11 shebangfix tar:xz xorg
+
+USES= cmake:noninja compiler:c++17-lang cpe eigen:3 jpeg llvm:build,run \
+ pkgconfig python:3.11 shebangfix tar:xz xorg
USE_XORG= x11 xext xfixes xmu xrender
-SHEBANG_FILES= scripts/modules/bl_i18n_utils/merge_po.py \
- scripts/modules/bl_i18n_utils/utils_rtl.py \
- scripts/modules/blend_render_info.py
+SHEBANG_FILES= scripts/modules/blend_render_info.py
CMAKE_ARGS= -DCMAKE_CXX_STANDARD:INTEGER=17 \
- -DLLVM_CONFIG:STRING="${LOCALBASE}/bin/llvm-config${LLVM_VERSION}"
+ -DLLVM_CONFIG:STRING="${LOCALBASE}/bin/llvm-config${LLVM_VERSION}" \
+ -DCMAKE_POLICY_DEFAULT_CMP0167=NEW
.if defined(WITH_DEBUG)
CMAKE_ARGS+= -DWITH_GHOST_DEBUG:BOOL=ON
.endif
CMAKE_ON= WITH_AUDASPACE WITH_BOOST WITH_CLANG WITH_GHOST_X11 WITH_GHOST_XDND \
- WITH_HYDRA WITH_IO_GPENCIL WITH_IO_PLY WITH_IO_STL WITH_IO_WAVEFRONT_OBJ \
+ WITH_HYDRA WITH_IO_PLY WITH_IO_STL WITH_IO_WAVEFRONT_OBJ \
WITH_LLVM WITH_OPENGL_BACKEND WITH_PYTHON WITH_SYSTEM_EIGEN3 \
- WITH_SYSTEM_FREETYPE WITH_X11_XINPUT WITH_X11_XF86VMODE WITH_X11_XFIXES
-CMAKE_OFF= WITH_GHOST_SDL WITH_INSTALL_PORTABLE LLVM_STATIC WITH_MATERIALX \
- WITH_MEM_JEMALLOC WITH_MEM_VALGRIND WITH_NANOVDB WITH_PYTHON_INSTALL \
- WITH_PYTHON_INSTALL_NUMPY
+ WITH_SYSTEM_FREETYPE WITH_X11_XINPUT WITH_X11_XFIXES
+CMAKE_OFF= WITH_GHOST_SDL WITH_INSTALL_PORTABLE WITH_LIBS_PRECOMPILED \
+ LLVM_STATIC WITH_MEM_JEMALLOC WITH_MEM_VALGRIND \
+ WITH_NANOVDB WITH_PYTHON_INSTALL WITH_PYTHON_INSTALL_NUMPY
CFLAGS+= ${CFLAGS_${CHOSEN_COMPILER_TYPE}}
CFLAGS_gcc= -Wno-float-conversion
@@ -65,143 +57,142 @@ OPTIONS_SUB= yes
.include "${.CURDIR}/Makefile.options"
+ALEMBIC_CMAKE_BOOL= WITH_ALEMBIC
ALEMBIC_IMPLIES= OPENEXR
ALEMBIC_LIB_DEPENDS= libAlembic.so:graphics/alembic
-ALEMBIC_CMAKE_BOOL= WITH_ALEMBIC
-AVI_CMAKE_BOOL= WITH_CODEC_AVI
BULLET_CMAKE_BOOL= WITH_BULLET
-CAMERATRACK_LIB_DEPENDS= libglog.so:devel/glog
CAMERATRACK_CMAKE_BOOL= WITH_LIBMV WITH_SYSTEM_GLOG
+CAMERATRACK_LIB_DEPENDS= libglog.so:devel/glog
CINEON_CMAKE_BOOL= WITH_IMAGE_CINEON
-COLLADA_LIB_DEPENDS= libOpenCOLLADABaseUtils.so:graphics/opencollada \
- libpcre.so:devel/pcre
-COLLADA_USES= gnome
-COLLADA_USE= GNOME=libxml2
-COLLADA_CMAKE_BOOL= WITH_OPENCOLLADA
-COMPOSITOR_CMAKE_BOOL= WITH_COMPOSITOR_CPU
+CYCLES_CMAKE_BOOL= WITH_CYCLES
CYCLES_IMPLIES= TBB
-CYCLES_LIB_DEPENDS= libgflags.so:devel/gflags
-CYCLES_CMAKE_BOOL= WITH_CYCLES WITH_CYCLES_LOGGING
CYCLES_LDFLAGS= -L${LOCALBASE}/lib -lgflags
-CYCLES_EMBR_IMPLIES= CYCLES
-CYCLES_EMBR_LIB_DEPENDS= libembree3.so:graphics/embree3
+CYCLES_LIB_DEPENDS= libgflags.so:devel/gflags
CYCLES_EMBR_CMAKE_BOOL= WITH_CYCLES_EMBREE
-CYCLES_ONEAPI_LIB_DEPENDS= libtbb.so:devel/onetbb
+CYCLES_EMBR_IMPLIES= CYCLES
+CYCLES_EMBR_LIB_DEPENDS= libembree4.so:graphics/embree
CYCLES_ONEAPI_CMAKE_BOOL= WITH_CYCLES_DEVICE_ONEAPI
-CYCLES_OSL_IMPLIES= CYCLES OPENEXR PUGIXML
-CYCLES_OSL_LIB_DEPENDS= liboslcomp.so:graphics/openshadinglanguage
+CYCLES_ONEAPI_LIB_DEPENDS= libtbb.so:devel/onetbb
CYCLES_OSL_CMAKE_BOOL= WITH_CYCLES_OSL
CYCLES_OSL_CMAKE_ON= -DOSL_SHADER_DIR:STRING="${LOCALBASE}/share/openshadinglanguage/shaders"
-DRACO_USE= LDCONFIG=${PYTHON_SITELIBDIR}
+CYCLES_OSL_IMPLIES= CYCLES OPENEXR PUGIXML
+CYCLES_OSL_LIB_DEPENDS= liboslcomp.so:graphics/openshadinglanguage
DRACO_CMAKE_BOOL= WITH_DRACO
-EBOOL_LIB_DEPENDS= libgmp.so:math/gmp
+DRACO_USE= LDCONFIG=${PYTHON_SITELIBDIR}
EBOOL_CMAKE_BOOL= WITH_GMP
-FFMPEG_LIB_DEPENDS= libavutil.so:multimedia/ffmpeg \
- libflite.so:audio/flite
+EBOOL_LIB_DEPENDS= libgmp.so:math/gmp
FFMPEG_CMAKE_BOOL= WITH_CODEC_FFMPEG
FFMPEG_LDFLAGS= -L${LOCALBASE}/lib -lflite -lflite_cmu_us_kal \
-lflite_cmulex -lflite_usenglish
+FFMPEG_LIB_DEPENDS= libavutil.so:multimedia/ffmpeg \
+ libflite.so:audio/flite
+FFTW3_CMAKE_BOOL= WITH_FFTW3
FFTW3_LIB_DEPENDS= libfftw3.so:math/fftw3 \
libfftw3f.so:math/fftw3-float
-FFTW3_CMAKE_BOOL= WITH_FFTW3
FREESTYLE_CMAKE_BOOL= WITH_FREESTYLE
-FRIBIDI_LIB_DEPENDS= libfribidi.so:converters/fribidi
FRIBIDI_CMAKE_BOOL= WITH_FRIBIDI
-HARFBUZZ_LIB_DEPENDS= libharfbuzz.so:print/harfbuzz
+FRIBIDI_LIB_DEPENDS= libfribidi.so:converters/fribidi
HARFBUZZ_CMAKE_BOOL= WITH_HARFBUZZ
-HARU_LIB_DEPENDS= libhpdf.so:print/libharu
+HARFBUZZ_LIB_DEPENDS= libharfbuzz.so:print/harfbuzz
HARU_CMAKE_BOOL= WITH_HARU
+HARU_LIB_DEPENDS= libhpdf.so:print/libharu
+HEADLESS_CMAKE_BOOL= WITH_HEADLESS
HEADLESS_PREVENTS= MENU XINPUT XF86VMODE
HEADLESS_PREVENTS_MSG= X11 options can't be used in headless mode
-HEADLESS_CMAKE_BOOL= WITH_HEADLESS
-INPUT_NDOF_LIB_DEPENDS= libspnav.so:misc/libspnav
INPUT_NDOF_CMAKE_BOOL= WITH_INPUT_NDOF
-JACK_LIB_DEPENDS= libjack.so:audio/jack
+INPUT_NDOF_LIB_DEPENDS= libspnav.so:misc/libspnav
JACK_CMAKE_BOOL= WITH_JACK WITH_JACK_DYNLOAD
-LZMA_CMAKE_BOOL= WITH_LZMA
-LZO_LIB_DEPENDS= liblzo2.so:archivers/lzo2
-LZO_CMAKE_BOOL= WITH_LZO WITH_SYSTEM_LZO
+JACK_LIB_DEPENDS= libjack.so:audio/jack
+MANIFOLD_CMAKE_BOOL= WITH_MANIFOLD
+MANIFOLD_LIB_DEPENDS= libmanifold.so:math/manifold
+MATERIALX_CMAKE_BOOL= WITH_MATERIALX
+MATERIALX_CMAKE_ON= -DMaterialX_DIR:STRING=${PREFIX}/lib/cmake/MaterialX \
+ -DMATERIALX_STDLIB_DIR:STRING=${PREFIX}/share/materialx \
+ -DMATERIALX_PYTHON_DIR:STRING=${PYTHON_SITELIBDIR}/MaterialX
+MATERIALX_LIB_DEPENDS= libMaterialXCore.so:graphics/materialx
MENU_USES= desktop-file-utils
-MOD_FLUID_IMPLIES= TBB
MOD_FLUID_CMAKE_BOOL= WITH_MOD_FLUID
-MOD_OCEANSIM_IMPLIES= FFTW3
+MOD_FLUID_IMPLIES= TBB
MOD_OCEANSIM_CMAKE_BOOL= WITH_MOD_OCEANSIM
+MOD_OCEANSIM_IMPLIES= FFTW3
MOD_REMESH_CMAKE_BOOL= WITH_MOD_REMESH
-# Use iconv:wchar_t to force the usage of iconv from ports.
-# libboost_locale.so uses libiconv_open, while we only provide
-# iconv_open in 10.x+
-NLS_USES= gettext-tools iconv:lib,wchar_t
NLS_CMAKE_BOOL= WITH_INTERNATIONAL
-OPENAL_USES= openal:al,alut
+NLS_USES= gettext-tools
OPENAL_CMAKE_BOOL= WITH_OPENAL
+OPENAL_USES= openal:al,alut
+OPENCOLORIO_CMAKE_BOOL= WITH_OPENCOLORIO
OPENCOLORIO_LIB_DEPENDS= libOpenColorIO.so:graphics/opencolorio \
libyaml-cpp.so:devel/yaml-cpp \
libexpat.so:textproc/expat2 \
libpystring.so:devel/pystring
OPENCOLORIO_USES= minizip
-OPENCOLORIO_CMAKE_BOOL= WITH_OPENCOLORIO
+OPENEXR_CFLAGS= -I${LOCALBASE}/include/Imath
+OPENEXR_CMAKE_BOOL= WITH_IMAGE_OPENEXR
OPENEXR_LIB_DEPENDS= libImath.so:math/Imath \
libOpenEXR.so:graphics/openexr
-OPENEXR_CMAKE_BOOL= WITH_IMAGE_OPENEXR
-OPENEXR_CFLAGS= -I${LOCALBASE}/include/Imath
+OPENIMAGEDN_CMAKE_BOOL= WITH_OPENIMAGEDENOISE
OPENIMAGEDN_IMPLIES= TBB
OPENIMAGEDN_LIB_DEPENDS= libOpenImageDenoise.so:graphics/oidn
-OPENIMAGEDN_CMAKE_BOOL= WITH_OPENIMAGEDENOISE
-OPENJPEG_LIB_DEPENDS= libopenjp2.so:graphics/openjpeg
OPENJPEG_CMAKE_BOOL= WITH_IMAGE_OPENJPEG
-OPENMP_CMAKE_BOOL= WITH_OPENMP
-OPENPGL_LIB_DEPENDS= libopenpgl.so:graphics/openpgl
+OPENJPEG_LIB_DEPENDS= libopenjp2.so:graphics/openjpeg
OPENPGL_CMAKE_BOOL= WITH_CYCLES_PATH_GUIDING
-OPENSUBDIV_LIB_DEPENDS= libosdCPU.so:graphics/opensubdiv
+OPENPGL_LIB_DEPENDS= libopenpgl.so:graphics/openpgl
OPENSUBDIV_CMAKE_BOOL= WITH_OPENSUBDIV
+OPENSUBDIV_LIB_DEPENDS= libosdCPU.so:graphics/opensubdiv
+OPENVDB_CMAKE_BOOL= WITH_OPENVDB WITH_OPENVDB_BLOSC
OPENVDB_IMPLIES= OPENEXR TBB
OPENVDB_LIB_DEPENDS= libopenvdb.so:misc/openvdb
-OPENVDB_CMAKE_BOOL= WITH_OPENVDB WITH_OPENVDB_BLOSC
-OPENXR_LIB_DEPENDS= libopenxr_loader.so:graphics/openxr
OPENXR_CMAKE_BOOL= WITH_XR_OPENXR
-POTRACE_LIB_DEPENDS= libpotrace.so:graphics/libpotrace
+OPENXR_LIB_DEPENDS= libopenxr_loader.so:graphics/openxr
+PIPEWIRE_CMAKE_BOOL= WITH_PIPEWIRE
+PIPEWIRE_LIB_DEPENDS= libpipewire-0.3.so:multimedia/pipewire
POTRACE_CMAKE_BOOL= WITH_POTRACE
-PUGIXML_LIB_DEPENDS= libpugixml.so:textproc/pugixml
-PUGIXML_CMAKE_BOOL= WITH_PUGIXML
-PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+POTRACE_LIB_DEPENDS= libpotrace.so:graphics/libpotrace
+PUGIXML_CMAKE_BOOL= WITH_PUGIXML WITH_IO_GREASE_PENCIL
+# GP IO needs pugixml - turn it off with pugi
+PUGIXML_LDFLAGS= -lfmt
+PUGIXML_LIB_DEPENDS= libpugixml.so:textproc/pugixml \
+ libfmt.so:devel/libfmt
+# libfmt is in place via openimageio, add here as we need -lfmt in LDFLAGS
PULSEAUDIO_CMAKE_BOOL= WITH_PULSEAUDIO WITH_PULSEAUDIO_DYNLOAD
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
QUADRIFLOW_CMAKE_BOOL= WITH_QUADRIFLOW
-SDL_USES= sdl
+RUBBERBAND_CMAKE_BOOL= WITH_RUBBERBAND
+RUBBERBAND_LIB_DEPENDS= librubberband.so:audio/rubberband
+SDL_CMAKE_BOOL= WITH_SDL
SDL_USE= SDL=sdl2
-SDL_CMAKE_BOOL= WITH_SDL WITH_SDL_DYNLOAD
+SDL_USES= sdl
SIMD_CMAKE_BOOL= WITH_CPU_SIMD
SIMD_EXTRA_PATCHES_OFF= ${PATCHDIR}/extra-patch-simd-off
-SNDFILE_LIB_DEPENDS= libsndfile.so:audio/libsndfile
SNDFILE_CMAKE_BOOL= WITH_CODEC_SNDFILE
-TBB_LIB_DEPENDS= libtbb.so:devel/onetbb
+SNDFILE_LIB_DEPENDS= libsndfile.so:audio/libsndfile
TBB_CMAKE_BOOL= WITH_TBB
+TBB_LIB_DEPENDS= libtbb.so:devel/onetbb
THUMBNAILER_CMAKE_BOOL= WITH_BLENDER_THUMBNAILER
-TRACE_LIB_DEPENDS= libpotrace.so:graphics/libpotrace
TRACE_CMAKE_BOOL= WITH_POTRACE
-USD_IMPLIES= TBB
-USD_BROKEN= require devel/tbb, which conflicts with devel/onetbb: \
- https://github.com/PixarAnimationStudios/OpenUSD/issues/1650
-USD_LIB_DEPENDS= libusd_usd.so:misc/usd
+TRACE_LIB_DEPENDS= libpotrace.so:graphics/libpotrace
+USD_BROKEN= does not build with current USD port
USD_CMAKE_BOOL= WITH_USD
+USD_IMPLIES= TBB
+USD_LIB_DEPENDS= libusd_ms.so:misc/usd
VULKAN_BUILD_DEPENDS= ${LOCALBASE}/include/vulkan/vulkan.h:graphics/vulkan-headers
+VULKAN_CMAKE_BOOL= WITH_VULKAN_BACKEND
+VULKAN_LDFLAGS= -lshaderc_shared -lSPIRV-Tools-shared
VULKAN_LIB_DEPENDS= libshaderc_shared.so:graphics/shaderc \
libSPIRV-Tools-shared.so:graphics/spirv-tools \
libvulkan.so:graphics/vulkan-loader
-VULKAN_CMAKE_BOOL= WITH_VULKAN_BACKEND
-VULKAN_LDFLAGS= -lshaderc_shared -lSPIRV-Tools-shared
-WAYLAND_CATEGORIES= wayland
+VULKAN_USES= localbase:ldflags # only relevant in the case of most options off
WAYLAND_BUILD_DEPENDS= wayland-protocols>=1.15:graphics/wayland-protocols \
wayland>=1.12:graphics/wayland \
libdecor>0:x11-toolkits/libdecor
-WAYLAND_LIB_DEPENDS= libxkbcommon.so:x11/libxkbcommon
+WAYLAND_CATEGORIES= wayland
WAYLAND_CMAKE_BOOL= WITH_GHOST_WAYLAND WITH_GHOST_WAYLAND_LIBDECOR \
WITH_GHOST_WAYLAND_DYNLOAD
-WEBP_LIB_DEPENDS= libwebp.so:graphics/webp
+WAYLAND_LIB_DEPENDS= libxkbcommon.so:x11/libxkbcommon
WEBP_CMAKE_BOOL= WITH_IMAGE_WEBP
-XF86VMODE_USE= XORG=xi,xxf86vm
-XF86VMODE_CMAKE_BOOL= WITH_X11_XF86VMODE
-XINPUT_USE= XORG=xi
+WEBP_LIB_DEPENDS= libwebp.so:graphics/webp
XINPUT_CMAKE_BOOL= WITH_X11_XINPUT
+XINPUT_USE= XORG=xi
post-patch:
${REINPLACE_CMD} -e 's|%%LLVM_VER%%|${LLVM_VERSION}|g' \
@@ -226,6 +217,7 @@ post-install-DRACO-on:
${INSTALL_LIB} ${INSTALL_WRKSRC}/lib/libextern_draco.so ${STAGEDIR}/${PYTHON_SITELIBDIR}/
${STRIP_CMD} ${STAGEDIR}/${PYTHON_SITELIBDIR}/libextern_draco.so
@${RM} -R ${STAGEDIR}/${DATADIR}/${DISTVERSION:R}/python
+ @${RM} ${STAGEDIR}/${DATADIR}/${DISTVERSION:R}/scripts/addons_core/io_scene_gltf2/libextern_draco.so
post-install-MENU-on:
@-update-desktop-database -q
diff --git a/graphics/blender/Makefile.options b/graphics/blender/Makefile.options
index b3b984aed64c..476e05338ea7 100644
--- a/graphics/blender/Makefile.options
+++ b/graphics/blender/Makefile.options
@@ -1,11 +1,8 @@
OPTIONS_DEFINE= \
ALEMBIC \
- AVI \
BULLET \
CAMERATRACK \
CINEON \
- COLLADA \
- COMPOSITOR \
CYCLES \
CYCLES_EMBR \
CYCLES_ONEAPI \
@@ -21,8 +18,8 @@ OPTIONS_DEFINE= \
HEADLESS \
INPUT_NDOF \
JACK \
- LZMA \
- LZO \
+ MANIFOLD \
+ MATERIALX \
MENU \
MOD_FLUID \
MOD_OCEANSIM \
@@ -33,15 +30,16 @@ OPTIONS_DEFINE= \
OPENEXR \
OPENIMAGEDN \
OPENJPEG \
- OPENMP \
OPENPGL \
OPENSUBDIV \
OPENVDB \
OPENXR \
+ PIPEWIRE \
POTRACE \
PUGIXML \
PULSEAUDIO \
QUADRIFLOW \
+ RUBBERBAND \
SDL \
SIMD \
SNDFILE \
@@ -52,16 +50,12 @@ OPTIONS_DEFINE= \
VULKAN \
WAYLAND \
WEBP \
- XINPUT \
- XF86VMODE
+ XINPUT
OPTIONS_DEFAULT= \
ALEMBIC \
- AVI \
BULLET \
CINEON \
- COLLADA \
- COMPOSITOR \
CYCLES \
CYCLES_ONEAPI \
DRACO \
@@ -73,8 +67,8 @@ OPTIONS_DEFAULT= \
HARFBUZZ \
HARU \
INPUT_NDOF \
- LZMA \
- LZO \
+ MANIFOLD \
+ MATERIALX \
MENU \
MOD_FLUID \
MOD_OCEANSIM \
@@ -89,14 +83,13 @@ OPTIONS_DEFAULT= \
PUGIXML \
PULSEAUDIO \
QUADRIFLOW \
- SDL \
+ RUBBERBAND \
TBB \
THUMBNAILER \
TRACE \
WAYLAND \
WEBP \
- XINPUT \
- XF86VMODE
+ XINPUT
# CAMERATRACK: libunwind only supports i386/amd64/aarch64/powerpc64/powerpc64le
# CYCLES_EMBR: embree only supports amd64 and i386
@@ -108,12 +101,9 @@ OPTIONS_DEFAULT_powerpc64= CAMERATRACK
OPTIONS_DEFAULT_powerpc64le= CAMERATRACK
ALEMBIC_DESC= Enable Alembic file support
-AVI_DESC= Enable Blender's own AVI file support
BULLET_DESC= Bullet physics engine
CAMERATRACK_DESC= Camera tracking support (amd64/aarch64/powerpc64/powerpc64le only)
CINEON_DESC= CINEON and DPX graphics format support
-COLLADA_DESC= Enable read/write support for COLLADA files
-COMPOSITOR_DESC= Use the tile-based nodal compositor
CYCLES_DESC= Cycles render engine support
CYCLES_EMBR_DESC= Embree support (amd64 only)
CYCLES_ONEAPI_DESC= Enable Cycles oneAPI compute support
@@ -128,8 +118,8 @@ HARFBUZZ_DESC= Enable features using harfbuzz OpenType text shaping engine
HARU_DESC= Enable libharu support
HEADLESS_DESC= Disable user interface (for render-farms)
INPUT_NDOF_DESC= Enable NDOF input device support
-LZMA_DESC= Best compression support
-LZO_DESC= Fast compression support
+MANIFOLD_DESC= Enable manifold boolean support
+MATERIALX_DESC= Enable MaterialX support
MENU_DESC= Install desktop menu
MOD_FLUID_DESC= Fluid simulation support
MOD_OCEANSIM_DESC= Ocean simulation support
@@ -141,17 +131,18 @@ OPENPGL_DESC= Open Path Guiding in Cycles (aarch64 and amd64 only)
OPENSUBDIV_DESC= Use the OpenSubDiv library for surface subdivision
OPENVDB_DESC= Use openVDB library for volumetric data
OPENXR_DESC= Enable VR features through the OpenXR specification
+PIPEWIRE_DESC= Enable Pipewire audio support
POTRACE_DESC= Enable features using libpotrace
PUGIXML_DESC= Enable pugixml support
QUADRIFLOW_DESC= Enable quadriflow remesher
-SDL_DESC= Audio and Joystick support using SDL
+RUBBERBAND_DESC= Use Rubber Band for audio time-stretching and pitch-scaling
+SDL_DESC= Audio support using SDL
SIMD_DESC= Use SIMD optimized routines (on amd64 require x86-64-v2 support)
TBB_DESC= Enable use of Intel's tbb
THUMBNAILER_DESC= Build blender thumbnailer
TRACE_DESC= Enable tracing image to GP stroke
USD_DESC= Universal Scene Description Support (aarch64 and amd64 only, broken)
-VULKAN_DESC= Enable Vulkan as graphics backend (only for development)
+VULKAN_DESC= Enable Vulkan as graphics backend
WAYLAND_DESC= Wayland support
WEBP_DESC= Enable webp image support
-XF86VMODE_DESC= X11 video mode switching support
XINPUT_DESC= X11 Xinput (tablet) support
diff --git a/graphics/blender/Makefile.versions b/graphics/blender/Makefile.versions
index 7c265f8dc837..1bcc989e4977 100644
--- a/graphics/blender/Makefile.versions
+++ b/graphics/blender/Makefile.versions
@@ -1,4 +1,4 @@
# Versions of Blender and its python dependency for use by depending ports, like add-ons
-BLENDER_BL_VERSION= 4.2.0
+BLENDER_BL_VERSION= 5.0.1
BLENDER_PY_VERSION= 3.11
diff --git a/graphics/blender/distinfo b/graphics/blender/distinfo
index a1a1b4896d9a..1d85359cbb39 100644
--- a/graphics/blender/distinfo
+++ b/graphics/blender/distinfo
@@ -1,5 +1,3 @@
-TIMESTAMP = 1735308535
-SHA256 (blender-4.2.0.tar.xz) = 30515eafbac3301bf33af859945315d209cac4f8ee1dc0e312b4fbce50a85be2
-SIZE (blender-4.2.0.tar.xz) = 72767404
-SHA256 (1c69154aaf033730a9e3882574d56ca6597b84ae.patch) = 2f2e5052195b99b5473e8ebafd88ae626a7927f1f4da2a0f2be11a794253dbd5
-SIZE (1c69154aaf033730a9e3882574d56ca6597b84ae.patch) = 856
+TIMESTAMP = 1766460211
+SHA256 (blender-5.0.1.tar.xz) = 0077a41f59843433154fdf2d8aeb6c43f6bf6951cd46987305e67f89cb4f1fbf
+SIZE (blender-5.0.1.tar.xz) = 88926056
diff --git a/graphics/blender/files/extra-patch-simd-off b/graphics/blender/files/extra-patch-simd-off
index dfc68d8b0419..1a1172360911 100644
--- a/graphics/blender/files/extra-patch-simd-off
+++ b/graphics/blender/files/extra-patch-simd-off
@@ -35,3 +35,67 @@
/* no SSE4.2 kernel on x86-64, part of regular kernel */
# ifdef WITH_KERNEL_AVX2
# define WITH_CYCLES_OPTIMIZED_KERNEL_AVX2
+--- source/blender/blenlib/BLI_bit_span_to_index_ranges.hh.orig 2025-12-24 21:09:10 UTC
++++ source/blender/blenlib/BLI_bit_span_to_index_ranges.hh
+@@ -111,7 +111,12 @@ inline void bits_to_index_ranges(const BitSpan bits, I
+ /* Loads the next 128 bit. */
+ const __m128i group = _mm_loadu_si128(reinterpret_cast<const __m128i *>(start + int_i));
+ /* Checks if all the 128 bits are zero. */
++#if BLI_HAVE_SSE4
+ const bool group_is_zero = _mm_testz_si128(group, group);
++#else
++ __m128i tmp = _mm_and_si128(group, group);
++ const bool group_is_zero = (_mm_movemask_epi8(tmp) == 0);
++#endif
+ if (group_is_zero) {
+ continue;
+ }
+--- source/blender/blenlib/intern/math_half.cc.orig 2025-12-24 21:19:17 UTC
++++ source/blender/blenlib/intern/math_half.cc
+@@ -271,6 +271,32 @@ void blender::math::float_to_half_array(const float *s
+ }
+ }
+
++#ifndef __SSE4_1__
++static inline __m128i srai_epi8_sse2(__m128i x, int imm)
++{
++ // Sign-extend bytes to 16-bit
++ __m128i sign = _mm_cmpgt_epi8(_mm_setzero_si128(), x); // 0xFF where x < 0
++ __m128i lo = _mm_unpacklo_epi8(x, sign);
++ __m128i hi = _mm_unpackhi_epi8(x, sign);
++
++ // Arithmetic shift right on 16-bit lanes
++ lo = _mm_srai_epi16(lo, imm);
++ hi = _mm_srai_epi16(hi, imm);
++
++ // Pack back to 8-bit (signed saturation)
++ return _mm_packs_epi16(lo, hi);
++}
++
++static inline __m128i blendv_epi8_sse2(__m128i a, __m128i b, __m128i mask)
++{
++ mask = srai_epi8_sse2(mask, 7);
++ return _mm_or_si128(
++ _mm_and_si128(mask, b),
++ _mm_andnot_si128(mask, a)
++ );
++}
++#endif
++
+ void blender::math::float_to_half_make_finite_array(const float *src, uint16_t *dst, size_t length)
+ {
+ size_t i = 0;
+@@ -320,8 +346,13 @@ void blender::math::float_to_half_make_finite_array(co
+ __m128i inf_res = _mm_or_si128(signbits, _mm_set1_epi16(0x7bffu)); /* +/- 65504 */
+ __m128i nan_res = signbits; /* +/- 0 */
+ /* Select final result. */
++#if __SSE4_1__
+ h4 = _mm_blendv_epi8(h4, inf_res, is_inf);
+ h4 = _mm_blendv_epi8(h4, nan_res, is_nan);
++#else
++ h4 = blendv_epi8_sse2(h4, inf_res, is_inf);
++ h4 = blendv_epi8_sse2(h4, nan_res, is_nan);
++#endif
+ h4 = _mm_and_si128(h4, _mm_set1_epi32(0xffff));
+ h4 = _mm_or_si128(h4, hi_part);
+ }
diff --git a/graphics/blender/files/patch-CMakeLists.txt b/graphics/blender/files/patch-CMakeLists.txt
deleted file mode 100644
index d83d786ddb30..000000000000
--- a/graphics/blender/files/patch-CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
---- CMakeLists.txt.orig 2024-07-04 15:30:32 UTC
-+++ CMakeLists.txt
-@@ -1197,11 +1197,6 @@ set_and_warn_dependency(WITH_PYTHON WITH_MOD_FLUID
- set_and_warn_dependency(WITH_PYTHON WITH_DRACO OFF)
- set_and_warn_dependency(WITH_PYTHON WITH_MOD_FLUID OFF)
-
--if(WITH_DRACO AND NOT WITH_PYTHON_INSTALL)
-- message(STATUS "WITH_DRACO requires WITH_PYTHON_INSTALL to be ON, disabling WITH_DRACO for now")
-- set(WITH_DRACO OFF)
--endif()
--
- # enable boost for cycles, audaspace or i18n
- # otherwise if the user disabled
-
diff --git a/graphics/blender/files/patch-extern_audaspace_plugins_ffmpeg_FFMPEGReader.cpp b/graphics/blender/files/patch-extern_audaspace_plugins_ffmpeg_FFMPEGReader.cpp
deleted file mode 100644
index 10a1cf924e53..000000000000
--- a/graphics/blender/files/patch-extern_audaspace_plugins_ffmpeg_FFMPEGReader.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
---- extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp.orig 2024-08-18 04:20:22 UTC
-+++ extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
-@@ -31,6 +31,10 @@ AUD_NAMESPACE_BEGIN
- #define FFMPEG_OLD_CODE
- #endif
-
-+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 28, 100)
-+#define HAVE_CH_LAYOUT
-+#endif
-+
- SampleFormat FFMPEGReader::convertSampleFormat(AVSampleFormat format)
- {
- switch(av_get_packed_sample_fmt(format))
-@@ -109,10 +113,16 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buf
- {
- auto ret = avcodec_receive_frame(m_codecCtx, m_frame);
-
-+#ifdef HAVE_CH_LAYOUT
-+ int nb_channels = m_codecCtx->ch_layout.nb_channels;
-+#else
-+ int nb_channels = m_codecCtx->channels;
-+#endif
-+
- if(ret != 0)
- break;
-
-- int data_size = av_samples_get_buffer_size(nullptr, m_codecCtx->channels, m_frame->nb_samples, m_codecCtx->sample_fmt, 1);
-+ int data_size = av_samples_get_buffer_size(nullptr, nb_channels, m_frame->nb_samples, m_codecCtx->sample_fmt, 1);
-
- if(buf_size - buf_pos < data_size)
- {
-@@ -122,12 +132,12 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buf
-
- if(m_tointerleave)
- {
-- int single_size = data_size / m_codecCtx->channels / m_frame->nb_samples;
-- for(int channel = 0; channel < m_codecCtx->channels; channel++)
-+ int single_size = data_size / nb_channels / m_frame->nb_samples;
-+ for(int channel = 0; channel < nb_channels; channel++)
- {
- for(int i = 0; i < m_frame->nb_samples; i++)
- {
-- std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((m_codecCtx->channels * i) + channel) * single_size,
-+ std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((nb_channels * i) + channel) * single_size,
- m_frame->data[channel] + i * single_size, single_size);
- }
- }
-@@ -207,7 +217,11 @@ void FFMPEGReader::init(int stream)
- if(avcodec_open2(m_codecCtx, aCodec, nullptr) < 0)
- AUD_THROW(FileException, "File couldn't be read, ffmpeg codec couldn't be opened.");
-
-+#ifdef HAVE_CH_LAYOUT
-+ m_specs.channels = (Channels) m_codecCtx->ch_layout.nb_channels;
-+#else
- m_specs.channels = (Channels) m_codecCtx->channels;
-+#endif
- m_tointerleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
-
- switch(av_get_packed_sample_fmt(m_codecCtx->sample_fmt))
-@@ -345,7 +359,11 @@ std::vector<StreamInfo> FFMPEGReader::queryStreams()
- info.specs.rate = m_formatCtx->streams[i]->codec->sample_rate;
- info.specs.format = convertSampleFormat(m_formatCtx->streams[i]->codec->sample_fmt);
- #else
-+#ifdef HAVE_CH_LAYOUT
-+ info.specs.channels = Channels(m_formatCtx->streams[i]->codecpar->ch_layout.nb_channels);
-+#else
- info.specs.channels = Channels(m_formatCtx->streams[i]->codecpar->channels);
-+#endif
- info.specs.rate = m_formatCtx->streams[i]->codecpar->sample_rate;
- info.specs.format = convertSampleFormat(AVSampleFormat(m_formatCtx->streams[i]->codecpar->format));
- #endif
diff --git a/graphics/blender/files/patch-extern_audaspace_plugins_ffmpeg_FFMPEGWriter.cpp b/graphics/blender/files/patch-extern_audaspace_plugins_ffmpeg_FFMPEGWriter.cpp
deleted file mode 100644
index f93ef6df1417..000000000000
--- a/graphics/blender/files/patch-extern_audaspace_plugins_ffmpeg_FFMPEGWriter.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
---- extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp.orig 2024-08-18 04:25:16 UTC
-+++ extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
-@@ -34,6 +34,10 @@ AUD_NAMESPACE_BEGIN
- #define FFMPEG_OLD_CODE
- #endif
-
-+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 28, 100)
-+#define HAVE_CH_LAYOUT
-+#endif
-+
- void FFMPEGWriter::encode()
- {
- sample_t* data = m_input_buffer.getBuffer();
-@@ -77,8 +81,12 @@ void FFMPEGWriter::encode()
-
- m_frame->nb_samples = m_input_samples;
- m_frame->format = m_codecCtx->sample_fmt;
-+#ifdef HAVE_CH_LAYOUT
-+ av_channel_layout_copy(&m_frame->ch_layout, &m_codecCtx->ch_layout);
-+#else
- m_frame->channel_layout = m_codecCtx->channel_layout;
- m_frame->channels = m_specs.channels;
-+#endif
-
- if(avcodec_fill_audio_frame(m_frame, m_specs.channels, m_codecCtx->sample_fmt, reinterpret_cast<data_t*>(data), m_input_buffer.getSize(), 0) < 0)
- AUD_THROW(FileException, "File couldn't be written, filling the audio frame failed with ffmpeg.");
-@@ -237,6 +245,39 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename
- break;
- }
-
-+#ifdef HAVE_CH_LAYOUT
-+ AVChannelLayout channel_layout{};
-+
-+ switch(m_specs.channels)
-+ {
-+ case CHANNELS_MONO:
-+ channel_layout = AV_CHANNEL_LAYOUT_MONO;
-+ break;
-+ case CHANNELS_STEREO:
-+ channel_layout = AV_CHANNEL_LAYOUT_STEREO;
-+ break;
-+ case CHANNELS_STEREO_LFE:
-+ channel_layout = AV_CHANNEL_LAYOUT_2POINT1;
-+ break;
-+ case CHANNELS_SURROUND4:
-+ channel_layout = AV_CHANNEL_LAYOUT_QUAD;
-+ break;
-+ case CHANNELS_SURROUND5:
-+ channel_layout = AV_CHANNEL_LAYOUT_5POINT0_BACK;
-+ break;
-+ case CHANNELS_SURROUND51:
-+ channel_layout = AV_CHANNEL_LAYOUT_5POINT1_BACK;
-+ break;
-+ case CHANNELS_SURROUND61:
-+ channel_layout = AV_CHANNEL_LAYOUT_6POINT1_BACK;
-+ break;
-+ case CHANNELS_SURROUND71:
-+ channel_layout = AV_CHANNEL_LAYOUT_7POINT1;
-+ break;
-+ default:
-+ AUD_THROW(FileException, "File couldn't be written, channel layout not supported.");
-+ }
-+#else
- uint64_t channel_layout = 0;
-
- switch(m_specs.channels)
-@@ -268,6 +309,7 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename
- default:
- AUD_THROW(FileException, "File couldn't be written, channel layout not supported.");
- }
-+#endif
-
- try
- {
-@@ -405,8 +447,12 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename
-
- m_codecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
- m_codecCtx->bit_rate = bitrate;
-+#ifdef HAVE_CH_LAYOUT
-+ av_channel_layout_copy(&m_codecCtx->ch_layout, &channel_layout);
-+#else
- m_codecCtx->channel_layout = channel_layout;
- m_codecCtx->channels = m_specs.channels;
-+#endif
- m_stream->time_base.num = m_codecCtx->time_base.num = 1;
- m_stream->time_base.den = m_codecCtx->time_base.den = m_codecCtx->sample_rate;
-
diff --git a/graphics/blender/files/patch-fmtlib b/graphics/blender/files/patch-fmtlib
new file mode 100644
index 000000000000..feea56e6e58a
--- /dev/null
+++ b/graphics/blender/files/patch-fmtlib
@@ -0,0 +1,3256 @@
+--- extern/binreloc/CMakeLists.txt.orig 2025-10-08 10:41:55 UTC
++++ extern/binreloc/CMakeLists.txt
+@@ -7,7 +7,7 @@ set(INC_SYS
+ )
+
+ set(INC_SYS
+-
++ PUBLIC include
+ )
+
+ set(SRC
+@@ -23,3 +23,4 @@ blender_add_lib(extern_binreloc "${SRC}" "${INC}" "${I
+
+
+ blender_add_lib(extern_binreloc "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
++add_library(bf::extern::binreloc ALIAS extern_binreloc)
+--- extern/CMakeLists.txt.orig 2025-10-08 10:41:55 UTC
++++ extern/CMakeLists.txt
+@@ -4,7 +4,9 @@ add_subdirectory(curve_fit_nd)
+
+ # Libs that adhere to strict flags
+ add_subdirectory(curve_fit_nd)
++add_subdirectory(fast_float)
+ add_subdirectory(fmtlib)
++add_subdirectory(json)
+ if(WITH_IO_FBX)
+ add_subdirectory(ufbx)
+ endif()
+--- extern/fast_float/CMakeLists.txt.orig 2025-12-23 01:40:52 UTC
++++ extern/fast_float/CMakeLists.txt
+@@ -0,0 +1,7 @@
++# SPDX-FileCopyrightText: 2023 Blender Foundation
++#
++# SPDX-License-Identifier: GPL-2.0-or-later
++
++add_library(extern_fast_float INTERFACE)
++target_include_directories(extern_fast_float SYSTEM INTERFACE ".")
++add_library(bf::extern::fast_float ALIAS extern_fast_float)
+--- extern/json/CMakeLists.txt.orig 2025-12-23 01:40:52 UTC
++++ extern/json/CMakeLists.txt
+@@ -0,0 +1,7 @@
++# SPDX-FileCopyrightText: 2023 Blender Foundation
++#
++# SPDX-License-Identifier: GPL-2.0-or-later
++
++add_library(extern_json INTERFACE)
++target_include_directories(extern_json SYSTEM INTERFACE "include")
++add_library(bf::extern::json ALIAS extern_json)
+--- extern/mantaflow/CMakeLists.txt.orig 2025-10-08 10:41:55 UTC
++++ extern/mantaflow/CMakeLists.txt
+@@ -68,8 +68,6 @@ set(INC_SYS
+ endif()
+
+ set(INC_SYS
+- ${PYTHON_INCLUDE_DIRS}
+- ${ZLIB_INCLUDE_DIRS}
+ )
+
+ if(WITH_MANTA_NUMPY AND WITH_PYTHON_NUMPY)
+@@ -229,8 +227,8 @@ set(LIB
+ set(LIB
+ PRIVATE bf::dependencies::optional::openvdb
+ PRIVATE bf::dependencies::optional::tbb
+- ${PYTHON_LINKFLAGS}
+- ${PYTHON_LIBRARIES}
++ PRIVATE bf::dependencies::optional::python
++ PRIVATE bf::dependencies::zlib
+ )
+
+ blender_add_lib(extern_mantaflow "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
+--- extern/vulkan_memory_allocator/CMakeLists.txt.orig 2025-10-08 10:41:56 UTC
++++ extern/vulkan_memory_allocator/CMakeLists.txt
+@@ -3,7 +3,7 @@ set(INC
+ # SPDX-License-Identifier: GPL-2.0-or-later
+
+ set(INC
+- .
++ PUBLIC .
+ )
+
+ set(INC_SYS
+@@ -20,6 +20,7 @@ blender_add_lib(extern_vulkan_memory_allocator "${SRC}
+ )
+
+ blender_add_lib(extern_vulkan_memory_allocator "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
++add_library(bf::extern::vulkan_memory_allocator ALIAS extern_vulkan_memory_allocator)
+
+ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+ target_compile_options(extern_vulkan_memory_allocator
+--- extern/wcwidth/CMakeLists.txt.orig 2025-10-08 10:41:56 UTC
++++ extern/wcwidth/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-# SPDX-FileCopyrightText: 2013 Blender Foundation
++# SPDX-FileCopyrightText: 2023 Blender Foundation
+ #
+ # SPDX-License-Identifier: GPL-2.0-or-later
+
+@@ -7,7 +7,7 @@ set(INC_SYS
+ )
+
+ set(INC_SYS
+-
++ PUBLIC .
+ )
+
+ set(SRC
+@@ -20,3 +20,4 @@ blender_add_lib(extern_wcwidth "${SRC}" "${INC}" "${IN
+ )
+
+ blender_add_lib(extern_wcwidth "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
++add_library(bf::extern::wcwidth ALIAS extern_wcwidth)
+--- intern/cycles/app/CMakeLists.txt.orig 2025-10-08 10:41:56 UTC
++++ intern/cycles/app/CMakeLists.txt
+@@ -35,10 +35,12 @@ if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_G
+
+ if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI)
+ list(APPEND INC_SYS
+- ${Epoxy_INCLUDE_DIRS}
+ ${SDL2_INCLUDE_DIRS}
+ )
+- list(APPEND LIB ${Epoxy_LIBRARIES} ${SDL2_LIBRARIES})
++ list(APPEND LIB
++ bf::dependencies::optional::epoxy
++ ${SDL2_LIBRARIES}
++ )
+ endif()
+
+ if(WITH_USD)
+@@ -47,13 +49,9 @@ if(WITH_USD)
+ -D__TBB_show_deprecation_message_atomic_H
+ -D__TBB_show_deprecation_message_task_H
+ )
+-
+- list(APPEND INC_SYS
+- ${USD_INCLUDE_DIRS}
+- )
+ list(APPEND LIB
+ cycles_hydra
+- ${USD_LIBRARIES}
++ bf::dependencies::optional::usd
+ )
+ endif()
+
+--- intern/cycles/blender/CMakeLists.txt.orig 2025-10-08 10:41:56 UTC
++++ intern/cycles/blender/CMakeLists.txt
+@@ -9,8 +9,6 @@ set(INC_SYS
+ )
+
+ set(INC_SYS
+- ${Epoxy_INCLUDE_DIRS}
+- ${PYTHON_INCLUDE_DIRS}
+ )
+
+ set(SRC
+@@ -70,9 +68,10 @@ set(LIB
+ cycles_subd
+ cycles_util
+
+- ${Epoxy_LIBRARIES}
+- ${PYTHON_LINKFLAGS}
+- ${PYTHON_LIBRARIES}
++ bf::dependencies::optional::epoxy
++ bf::dependencies::optional::python
++ bf::dependencies::optional::openimagedenoise
++ bf::dependencies::optional::openvdb
+ )
+
+ set(ADDON_FILES
+@@ -101,22 +100,6 @@ if(WITH_TBB)
+
+ if(WITH_TBB)
+ add_definitions(-DWITH_TBB)
+-endif()
+-
+-if(WITH_OPENVDB)
+- list(APPEND INC
+- ../../openvdb
+- )
+- list(APPEND LIB
+- ${OPENVDB_LIBRARIES}
+- )
+-endif()
+-
+-if(WITH_OPENIMAGEDENOISE)
+- add_definitions(-DWITH_OPENIMAGEDENOISE)
+- list(APPEND INC_SYS
+- ${OPENIMAGEDENOISE_INCLUDE_DIRS}
+- )
+ endif()
+
+ if(WITH_CYCLES_OSL)
+--- intern/cycles/device/CMakeLists.txt.orig 2025-10-08 10:41:56 UTC
++++ intern/cycles/device/CMakeLists.txt
+@@ -6,7 +6,8 @@ set(INC
+ ..
*** 6387 LINES SKIPPED ***