Nixpkgs: Provide Blender 2.8 beta as an option

Created on 5 Feb 2019  路  9Comments  路  Source: NixOS/nixpkgs

Issue description

My daughter wants to use Blender 2.8 on my Nixos machine.

Steps to reproduce

diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix
index 89bd8ee4b3e..bd1f93acf10 100644
--- a/pkgs/applications/misc/blender/default.nix
+++ b/pkgs/applications/misc/blender/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, lib, fetchurl, boost, cmake, ffmpeg, gettext, glew
+{ stdenv, lib, fetchgit, boost, cmake, ffmpeg, gettext, glew
 , ilmbase, libXi, libX11, libXext, libXrender
 , libjpeg, libpng, libsamplerate, libsndfile
-, libtiff, libGLU_combined, openal, opencolorio, openexr, openimageio, openjpeg_1, pythonPackages
+, libtiff, libGLU_combined, openal, opencolorio, openexr, openimageio, openjpeg_1, pythonPackages, python37
 , zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd
 , jackaudioSupport ? false, libjack2
 , cudaSupport ? false, cudatoolkit
@@ -11,14 +11,16 @@

 with lib;

-let python = pythonPackages.python; in
+let python = python37.withPackages(ps: with ps; [ numpy ]); in

 stdenv.mkDerivation rec {
-  name = "blender-2.79b";
+  name = "blender-2.8-beta";

-  src = fetchurl {
-    url = "https://download.blender.org/source/${name}.tar.gz";
-    sha256 = "1g4kcdqmf67srzhi3hkdnr4z1ph4h9sza1pahz38mrj998q4r52c";
+  src = fetchgit {
+    url = "https://git.blender.org/blender.git";
+    deepClone = true;
+    rev = "38984b10ff7b8c61c5e1b85a971c77841de5f4e7";
+    sha256 = "1p6w9wch16270wvr0ccy9hp5mw02r90y16695zcy46ins39l5y60";
   };

   buildInputs =
@@ -35,7 +37,6 @@ stdenv.mkDerivation rec {

   postPatch =
     ''
-      substituteInPlace doc/manpage/blender.1.py --replace /usr/bin/python ${python}/bin/python3
       substituteInPlace extern/clew/src/clew.c --replace '"libOpenCL.so"' '"${ocl-icd}/lib/libOpenCL.so"'
     '';

@@ -55,8 +56,8 @@ stdenv.mkDerivation rec {
       "-DPYTHON_LIBPATH=${python}/lib"
       "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}m"
       "-DPYTHON_VERSION=${python.pythonVersion}"
-      "-DWITH_PYTHON_INSTALL=OFF"
-      "-DWITH_PYTHON_INSTALL_NUMPY=OFF"
+      "-DWITH_PYTHON_INSTALL=ON"
+      "-DWITH_PYTHON_INSTALL_NUMPY=ON"
     ]
     ++ optional jackaudioSupport "-DWITH_JACK=ON"
     ++ optionals cudaSupport
@@ -70,14 +71,14 @@ stdenv.mkDerivation rec {

   # Since some dependencies are built with gcc 6, we need gcc 6's
   # libstdc++ in our RPATH. Sigh.
-  NIX_LDFLAGS = optionalString cudaSupport "-rpath ${stdenv.cc.cc.lib}/lib";
+  #NIX_LDFLAGS = optionalString cudaSupport "-rpath ${stdenv.cc.cc.lib}/lib";

   enableParallelBuilding = true;

   postInstall = optionalString enableNumpy
     ''
       wrapProgram $out/bin/blender \
-        --prefix PYTHONPATH : ${pythonPackages.numpy}/${python.sitePackages}
+        --prefix PYTHONPATH : ${python37Packages.numpy}/${python.sitePackages}
     '';

   meta = with stdenv.lib; {
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index abef81c16e7..3bc6c3fdb73 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -16223,8 +16223,8 @@ in

   blender = callPackage  ../applications/misc/blender {
     cudaSupport = config.cudaSupport or false;
-    pythonPackages = python35Packages;
-    stdenv = overrideCC stdenv gcc6;
+    pythonPackages = python37Packages;
+    #stdenv = overrideCC stdenv gcc6;
   };

   bluefish = callPackage ../applications/editors/bluefish {

Technical details

  • system: "x86_64-linux"

    • host os: Linux 4.14.78, NixOS, 18.09.1023.06fb0253afa (Jellyfish)

    • multi-user?: yes

    • sandbox: yes

    • version: nix-env (Nix) 2.1.1

    • nixpkgs: /nix/var/nix/profiles/per-user/root/channels/nixos

Most helpful comment

Since there isn't always a beta, I don't think there's really much point to adding Blender 2.8 beta. Personally, I just use an overlay which I update weekly.

self: super:

let
  inherit (self.pkgs) fetchgit python36Packages;
  inherit (python36Packages) numpy python;
in {
  blender = (super.blender.override {
    pythonPackages = python36Packages;
  }).overrideAttrs (oldAttrs: rec {
    name = "blender-2.80.beta-${version}";
    version = "141c6073ca39";

    src = fetchgit {
      url = "https://git.blender.org/blender.git";
      rev = version;
      sha256 = "0g02y05hr5vim5g6myy16c1dvx6ah8xbjd1j5jw62qd10yfg4kfp";
    };

    cmakeFlags = oldAttrs.cmakeFlags ++ [
      "-DPYTHON_NUMPY_PATH=${numpy}/${python.sitePackages}"
    ];
  });
}

All 9 comments

Since there isn't always a beta, I don't think there's really much point to adding Blender 2.8 beta. Personally, I just use an overlay which I update weekly.

self: super:

let
  inherit (self.pkgs) fetchgit python36Packages;
  inherit (python36Packages) numpy python;
in {
  blender = (super.blender.override {
    pythonPackages = python36Packages;
  }).overrideAttrs (oldAttrs: rec {
    name = "blender-2.80.beta-${version}";
    version = "141c6073ca39";

    src = fetchgit {
      url = "https://git.blender.org/blender.git";
      rev = version;
      sha256 = "0g02y05hr5vim5g6myy16c1dvx6ah8xbjd1j5jw62qd10yfg4kfp";
    };

    cmakeFlags = oldAttrs.cmakeFlags ++ [
      "-DPYTHON_NUMPY_PATH=${numpy}/${python.sitePackages}"
    ];
  });
}

Thanks a lot, this is what I ended up using (with python 3.7, a more recent version, and python + numpy enabled):

  nixpkgs.overlays = [
    (self: super:
    let
      inherit (self.pkgs) fetchgit python37Packages;
      inherit (python37Packages) numpy python;
    in {
      blender = (super.blender.override {
      pythonPackages = python37Packages;
    }).overrideAttrs (oldAttrs: rec {
      name = "blender-2.80.beta-${version}";
      version = "38984b10ff7b8c61c5e1b85a971c77841de5f4e7";

      src = fetchgit {
        url = "https://git.blender.org/blender.git";
        rev = version;
        sha256 = "1p6w9wch16270wvr0ccy9hp5mw02r90y16695zcy46ins39l5y60";
      };

      cmakeFlags = oldAttrs.cmakeFlags ++ [
        "-DPYTHON_NUMPY_PATH=${numpy}/${python.sitePackages}"
        "-DWITH_PYTHON_INSTALL=ON"
        "-DWITH_PYTHON_INSTALL_NUMPY=ON"
      ];
     });
    } 
  )
  ];

So this issue can be closed?

Closing as there is a workaround. Let's hope 2.8 final comes soon :)

sorry for comenting here, but blender 2.8 is out for some time now, and no version on nixos (at least on stable)... anyone know any reason for this?

It's on master. Hasn't been backported and there are no plans to (or at least from me).

Hm, ok... so. best practice now is trying to install from master? I ask because i never did nothing like this, the more "brave" i was is using unstable rs

You can just selectively install blender from the unstable{,-small} channel while keeping the rest of your configuration intact.

Ah ok, will try that. Thanks!

Was this page helpful?
0 / 5 - 0 ratings