(define-module (vfx packages main)
#:use-module (gnu packages)
#:use-module (gnu packages jemalloc)
#:use-module (gnu packages boost)
#:use-module (gnu packages tbb)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages xorg)
#:use-module (gnu packages gl)
#:use-module (gnu packages graphics)
#:use-module (gnu packages image)
#:use-module (gnu packages audio)
#:use-module (gnu packages pulseaudio)
#:use-module (gnu packages video)
#:use-module (gnu packages algebra)
#:use-module (gnu packages compression)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages xml)
#:use-module (vfx packages base)
#:use-module (vfx packages pixar)
#:use-module (guix)
#:use-module (guix build-system cmake)
#:use-module ((guix licenses) #:prefix license:))
(define-public blender
(package
(name "blender")
(version "3.3.1+")
(source (origin
(method url-fetch)
(uri (string-append "https://download.blender.org/source/"
"blender-" version ".tar.xz"))
(sha256
(base32
; v3.4.1: "1hwixcp18dq7cdw2d7ygmd8ana5nnmf9h73jyh8903175094qz14"))))
"1jlc26axbhh97d2j6kfg9brgiq8j412mgmw7p41ah34apzq4inia"))))
(build-system cmake-build-system)
(arguments
(let ((python-version (version-major+minor (package-version python))))
`(;; Test files are very large and not included in the release tarball.
#:tests? #f
#:configure-flags
(list "-DWITH_CODEC_FFMPEG=ON"
"-DWITH_CODEC_SNDFILE=ON"
"-DWITH_CYCLES=ON"
"-DWITH_DOC_MANPAGE=ON"
"-DWITH_FFTW3=ON"
"-DWITH_IMAGE_OPENJPEG=ON"
"-DWITH_INPUT_NDOF=ON"
"-DWITH_INSTALL_PORTABLE=OFF"
"-DWITH_JACK=ON"
"-DWITH_MOD_OCEANSIM=ON"
"-DWITH_OPENVDB=ON"
"-DWITH_OPENSUBDIV=ON"
"-DWITH_PYTHON_INSTALL=OFF"
(string-append "-DPYTHON_LIBRARY=python" ,python-version)
(string-append "-DPYTHON_LIBPATH=" (assoc-ref %build-inputs "python")
"/lib")
(string-append "-DPYTHON_INCLUDE_DIR=" (assoc-ref %build-inputs "python")
"/include/python" ,python-version)
(string-append "-DPYTHON_VERSION=" ,python-version)
(string-append "-DPYTHON_NUMPY_INCLUDE_DIRS="
(assoc-ref %build-inputs "python-numpy")
"/lib/python" ,python-version "/site-packages/numpy/core/include/")
(string-append "-DPYTHON_NUMPY_PATH="
(assoc-ref %build-inputs "python-numpy")
"/lib/python" ,python-version "/site-packages/"))
#:phases
(modify-phases %standard-phases
;; XXX This file doesn't exist in the Git sources but will probably
;; exist in the eventual 2.80 source tarball.
(add-after 'unpack 'fix-broken-import
(lambda _
(substitute* "release/scripts/addons/io_scene_fbx/json2fbx.py"
(("import encode_bin") "from . import encode_bin"))
#t))
(add-after 'set-paths 'add-ilmbase-include-path
(lambda* (#:key inputs #:allow-other-keys)
;; OpenEXR propagates ilmbase, but its include files do not
;; appear in the C_INCLUDE_PATH, so we need to add
;; "$ilmbase/include/OpenEXR/" to the C_INCLUDE_PATH to satisfy
;; the dependency on "half.h" and "Iex.h".
(let ((headers (string-append
(assoc-ref inputs "ilmbase")
"/include/OpenEXR")))
(setenv "C_INCLUDE_PATH"
(string-append headers ":"
(or (getenv "C_INCLUDE_PATH") "")))
(setenv "CPLUS_INCLUDE_PATH"
(string-append headers ":"
(or (getenv "CPLUS_INCLUDE_PATH") ""))))))))))
(inputs
`(("boost" ,boost)
("jemalloc" ,jemalloc)
("libx11" ,libx11)
("libxi" ,libxi)
("libxrender" ,libxrender)
("opencolorio" ,opencolorio-2.2)
("openimageio" ,openimageio-2.4)
("openexr" ,openexr-2)
("opensubdiv" ,opensubdiv-3.5)
("ilmbase" ,ilmbase)
("openjpeg" ,openjpeg)
("libjpeg" ,libjpeg-turbo)
("libpng" ,libpng)
("libtiff" ,libtiff)
("ffmpeg" ,ffmpeg)
("fftw" ,fftw)
("gmp" ,gmp) ;; needed for boolean operations on meshes
("jack" ,jack-1)
("libsndfile" ,libsndfile)
("freetype" ,freetype)
("glew" ,glew)
("openal" ,openal)
("pugixml" ,pugixml)
("python" ,python)
("python-numpy" ,python-numpy)
("openvdb" ,openvdb-10.0)
("tbb" ,tbb-2020)
("zlib" ,zlib)
("zstd" ,zstd "lib")
("embree" ,embree)))
(home-page "https://blender.org/")
(synopsis "3D graphics creation suite")
(description
"Blender is a 3D graphics creation suite. It supports the entirety of
the 3D pipeline—modeling, rigging, animation, simulation, rendering,
compositing and motion tracking, even video editing and game creation. The
application can be customized via its API for Python scripting.")
(license license:gpl2+)))