about summary refs log tree commit diff
path: root/pkgs/applications/misc/blender/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/misc/blender/default.nix')
-rw-r--r--pkgs/applications/misc/blender/default.nix126
1 files changed, 72 insertions, 54 deletions
diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix
index 0033d3e1bd2ab..d400dd1eba55e 100644
--- a/pkgs/applications/misc/blender/default.nix
+++ b/pkgs/applications/misc/blender/default.nix
@@ -5,7 +5,7 @@
   OpenAL,
   OpenGL,
   SDL,
-  addOpenGLRunpath,
+  addDriverRunpath,
   alembic,
   blender,
   boost,
@@ -16,10 +16,9 @@
   config,
   cudaPackages,
   cudaSupport ? config.cudaSupport,
-  darwin,
   dbus,
   embree,
-  fetchurl,
+  fetchgit,
   fetchzip,
   ffmpeg,
   fftw,
@@ -54,9 +53,7 @@
   libxkbcommon,
   llvmPackages,
   makeWrapper,
-  materialx,
   mesa,
-  ocl-icd,
   openal,
   opencollada,
   opencolorio,
@@ -71,7 +68,7 @@
   pkg-config,
   potrace,
   pugixml,
-  python311Packages, # must use instead of python3.pkgs, see https://github.com/NixOS/nixpkgs/issues/211340
+  python3Packages, # must use instead of python3.pkgs, see https://github.com/NixOS/nixpkgs/issues/211340
   rocmPackages, # comes with a significantly larger closure size
   runCommand,
   spaceNavSupport ? stdenv.isLinux,
@@ -86,7 +83,6 @@
 }:
 
 let
-  python3Packages = python311Packages;
   python3 = python3Packages.python;
   pyPkgsOpenusd = python3Packages.openusd.override { withOsl = false; };
 
@@ -104,35 +100,46 @@ in
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "blender";
-  version = "4.1.1";
+  version = "4.2.0";
 
-  src = fetchurl {
-    url = "https://download.blender.org/source/${finalAttrs.pname}-${finalAttrs.version}.tar.xz";
-    hash = "sha256-T7s69k0/hN9ccQN0hFQibBiFwawu1Tc9DOoegOgsCEg=";
-  };
+  srcs = [
+    (fetchzip {
+      name = "source";
+      url = "https://download.blender.org/source/blender-${finalAttrs.version}.tar.xz";
+      hash = "sha256-STG4IuEhkdA+sDPIpCAkSflyd3rSUZ9ZCS9PdB4vyTY=";
+    })
+    (fetchgit {
+      name = "assets";
+      url = "https://projects.blender.org/blender/blender-assets.git";
+      rev = "6864f1832e71a31e1e04f72bb7a5a1f53f0cd01c";
+      fetchLFS = true;
+      hash = "sha256-vepK0inPMuleAJBSipwoI99nMBBiFaK/eSMHDetEtjY=";
+    })
+  ];
+
+  postUnpack = ''
+    chmod -R u+w *
+    rm -r assets/working
+    mv assets --target-directory source/release/datafiles/
+  '';
+
+  sourceRoot = "source";
 
   patches = [ ./draco.patch ] ++ lib.optional stdenv.isDarwin ./darwin.patch;
 
   postPatch =
-    (
-      if stdenv.isDarwin then
-        ''
-          : > build_files/cmake/platform/platform_apple_xcode.cmake
-          substituteInPlace source/creator/CMakeLists.txt \
-            --replace-fail '${"$"}{LIBDIR}/python' \
-                      '${python3}' \
-            --replace-fail '${"$"}{LIBDIR}/materialx/' '${materialx}/'
-          substituteInPlace build_files/cmake/platform/platform_apple.cmake \
-            --replace-fail '${"$"}{LIBDIR}/brotli/lib/libbrotlicommon-static.a' \
-                      '${lib.getLib brotli}/lib/libbrotlicommon.dylib' \
-            --replace-fail '${"$"}{LIBDIR}/brotli/lib/libbrotlidec-static.a' \
-                      '${lib.getLib brotli}/lib/libbrotlidec.dylib'
-        ''
-      else
-        ''
-          substituteInPlace extern/clew/src/clew.c --replace '"libOpenCL.so"' '"${ocl-icd}/lib/libOpenCL.so"'
-        ''
-    )
+    (lib.optionalString stdenv.isDarwin ''
+      : > build_files/cmake/platform/platform_apple_xcode.cmake
+      substituteInPlace source/creator/CMakeLists.txt \
+        --replace-fail '${"$"}{LIBDIR}/python' \
+                  '${python3}' \
+        --replace-fail '${"$"}{LIBDIR}/materialx/' '${python3Packages.materialx}/'
+      substituteInPlace build_files/cmake/platform/platform_apple.cmake \
+        --replace-fail '${"$"}{LIBDIR}/brotli/lib/libbrotlicommon-static.a' \
+                  '${lib.getLib brotli}/lib/libbrotlicommon.dylib' \
+        --replace-fail '${"$"}{LIBDIR}/brotli/lib/libbrotlidec-static.a' \
+                  '${lib.getLib brotli}/lib/libbrotlidec.dylib'
+    '')
     + (lib.optionalString hipSupport ''
       substituteInPlace extern/hipew/src/hipew.c --replace '"/opt/rocm/hip/lib/libamdhip64.so"' '"${rocmPackages.clr}/lib/libamdhip64.so"'
       substituteInPlace extern/hipew/src/hipew.c --replace '"opt/rocm/hip/bin"' '"${rocmPackages.clr}/bin"'
@@ -154,7 +161,7 @@ stdenv.mkDerivation (finalAttrs: {
       "-DWITH_FFTW3=ON"
       "-DWITH_IMAGE_OPENJPEG=ON"
       "-DWITH_INSTALL_PORTABLE=OFF"
-      "-DMaterialX_DIR=${materialx}/lib/cmake/MaterialX"
+      "-DMaterialX_DIR=${python3Packages.materialx}/lib/cmake/MaterialX"
       "-DWITH_MOD_OCEANSIM=ON"
       "-DWITH_OPENCOLLADA=${if colladaSupport then "ON" else "OFF"}"
       "-DWITH_OPENCOLORIO=ON"
@@ -177,7 +184,9 @@ stdenv.mkDerivation (finalAttrs: {
       "-DWITH_GHOST_WAYLAND_DYNLOAD=OFF"
       "-DWITH_GHOST_WAYLAND_LIBDECOR=ON"
     ]
-    ++ lib.optionals (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) [ "-DWITH_CYCLES_EMBREE=OFF" ]
+    ++ lib.optionals (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) [
+      "-DWITH_CYCLES_EMBREE=OFF"
+    ]
     ++ lib.optionals stdenv.isDarwin [
       "-DLIBDIR=/does-not-exist"
       "-DWITH_CYCLES_OSL=OFF" # causes segfault on aarch64-darwin
@@ -192,6 +201,17 @@ stdenv.mkDerivation (finalAttrs: {
       "-DWITH_CYCLES_DEVICE_OPTIX=ON"
     ];
 
+  preConfigure = ''
+    (
+      expected_python_version=$(grep -E --only-matching 'set\(_PYTHON_VERSION_SUPPORTED [0-9.]+\)' build_files/cmake/Modules/FindPythonLibsUnix.cmake | grep -E --only-matching '[0-9.]+')
+      actual_python_version=$(python -c 'import sys; print(".".join(map(str, sys.version_info[0:2])))')
+      if ! [[ "$actual_python_version" = "$expected_python_version" ]]; then
+        echo "wrong Python version, expected '$expected_python_version', got '$actual_python_version'" >&2
+        exit 1
+      fi
+    )
+  '';
+
   nativeBuildInputs =
     [
       cmake
@@ -200,7 +220,7 @@ stdenv.mkDerivation (finalAttrs: {
       python3Packages.wrapPython
     ]
     ++ lib.optionals cudaSupport [
-      addOpenGLRunpath
+      addDriverRunpath
       cudaPackages.cuda_nvcc
     ]
     ++ lib.optionals waylandSupport [ pkg-config ];
@@ -225,7 +245,6 @@ stdenv.mkDerivation (finalAttrs: {
       libsndfile
       libtiff
       libwebp
-      materialx
       opencolorio
       openexr
       openimageio
@@ -236,6 +255,7 @@ stdenv.mkDerivation (finalAttrs: {
       potrace
       pugixml
       python3
+      python3Packages.materialx
       tbb
       zlib
       zstd
@@ -291,7 +311,7 @@ stdenv.mkDerivation (finalAttrs: {
       ps = python3Packages;
     in
     [
-      materialx
+      ps.materialx
       ps.numpy
       ps.requests
       ps.zstandard
@@ -320,15 +340,16 @@ stdenv.mkDerivation (finalAttrs: {
 
   # Set RUNPATH so that libcuda and libnvrtc in /run/opengl-driver(-32)/lib can be
   # found. See the explanation in libglvnd.
-  postFixup = lib.optionalString cudaSupport ''
-    for program in $out/bin/blender $out/bin/.blender-wrapped; do
-      isELF "$program" || continue
-      addOpenGLRunpath "$program"
-    done
-  ''
-  + lib.optionalString stdenv.isDarwin ''
-    makeWrapper $out/Applications/Blender.app/Contents/MacOS/Blender $out/bin/blender
-  '';
+  postFixup =
+    lib.optionalString cudaSupport ''
+      for program in $out/bin/blender $out/bin/.blender-wrapped; do
+        isELF "$program" || continue
+        addDriverRunpath "$program"
+      done
+    ''
+    + lib.optionalString stdenv.isDarwin ''
+      makeWrapper $out/Applications/Blender.app/Contents/MacOS/Blender $out/bin/blender
+    '';
 
   passthru = {
     python = python3;
@@ -342,9 +363,7 @@ stdenv.mkDerivation (finalAttrs: {
       };
 
     tests = {
-      render = runCommand "${finalAttrs.pname}-test" {
-        nativeBuildInputs = [ mesa.llvmpipeHook ];
-      } ''
+      render = runCommand "${finalAttrs.pname}-test" { nativeBuildInputs = [ mesa.llvmpipeHook ]; } ''
         set -euo pipefail
         cat <<'PYTHON' > scene-config.py
         import bpy
@@ -359,7 +378,7 @@ stdenv.mkDerivation (finalAttrs: {
         PYTHON
 
         mkdir $out
-        for engine in BLENDER_EEVEE CYCLES; do
+        for engine in BLENDER_EEVEE_NEXT CYCLES; do
           echo "Rendering with $engine..."
           # Beware that argument order matters
           ${lib.getExe finalAttrs.finalPackage} \
@@ -396,7 +415,9 @@ stdenv.mkDerivation (finalAttrs: {
     # They comment two licenses: GPLv2 and Blender License, but they
     # say: "We've decided to cancel the BL offering for an indefinite period."
     # OptiX, enabled with cudaSupport, is non-free.
-    license = with lib.licenses; [ gpl2Plus ] ++ lib.optional cudaSupport (unfree // { shortName = "NVidia OptiX EULA"; });
+    license =
+      with lib.licenses;
+      [ gpl2Plus ] ++ lib.optional cudaSupport (unfree // { shortName = "NVidia OptiX EULA"; });
 
     platforms = [
       "aarch64-linux"
@@ -406,10 +427,7 @@ stdenv.mkDerivation (finalAttrs: {
     ];
     # the current apple sdk is too old (currently 11_0) and fails to build "metal" on x86_64-darwin
     broken = stdenv.hostPlatform.system == "x86_64-darwin";
-    maintainers = with lib.maintainers; [
-      goibhniu
-      veprbl
-    ];
+    maintainers = with lib.maintainers; [ veprbl ];
     mainProgram = "blender";
   };
 })