guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

09/09: gnu: Add blender@2.79b.


From: guix-commits
Subject: 09/09: gnu: Add blender@2.79b.
Date: Fri, 31 Jul 2020 13:40:22 -0400 (EDT)

mhw pushed a commit to branch master
in repository guix.

commit 96a655a77bb087397a9436391e472c36ff0a2ec2
Author: Mark H Weaver <mhw@netris.org>
AuthorDate: Fri Jul 31 13:04:36 2020 -0400

    gnu: Add blender@2.79b.
    
    Restore blender@2.79b, the last version that does not require OpenGL 3,
    and therefore the last version to work on many older computers.  Note
    that this commit relies on blender-2.79-newer-ffmpeg.patch and
    blender-2.79-python-3.7-fix.patch, which were left in the tree when
    blender@2.79b was previously removed in commit
    1f14453eedfede4626a78321c66a009c9997bee4.
    
    * gnu/packages/patches/blender-2.79-gcc8.patch,
    gnu/packages/patches/blender-2.79-gcc9.patch,
    gnu/packages/patches/blender-2.79-oiio2.patch,
    gnu/packages/patches/blender-2.79-python-3.8-fix.patch: New files.
    * gnu/local.mk (dist_patch_DATA): Add them.
    * gnu/packages/graphics.scm (blender-2.79): New variable.
---
 gnu/local.mk                                       |   4 +
 gnu/packages/graphics.scm                          |  96 +++++++
 gnu/packages/patches/blender-2.79-gcc8.patch       |  36 +++
 gnu/packages/patches/blender-2.79-gcc9.patch       |  53 ++++
 gnu/packages/patches/blender-2.79-oiio2.patch      | 284 +++++++++++++++++++++
 .../patches/blender-2.79-python-3.8-fix.patch      | 204 +++++++++++++++
 6 files changed, 677 insertions(+)

diff --git a/gnu/local.mk b/gnu/local.mk
index 52c295b..181212c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -823,8 +823,12 @@ dist_patch_DATA =                                          
\
   %D%/packages/patches/binutils-mingw-w64-timestamp.patch      \
   %D%/packages/patches/binutils-mingw-w64-deterministic.patch  \
   %D%/packages/patches/bitcoin-core-python-compat.patch                \
+  %D%/packages/patches/blender-2.79-gcc8.patch                 \
+  %D%/packages/patches/blender-2.79-gcc9.patch                 \
   %D%/packages/patches/blender-2.79-newer-ffmpeg.patch         \
+  %D%/packages/patches/blender-2.79-oiio2.patch                        \
   %D%/packages/patches/blender-2.79-python-3.7-fix.patch       \
+  %D%/packages/patches/blender-2.79-python-3.8-fix.patch       \
   %D%/packages/patches/bpftrace-disable-bfd-disasm.patch       \
   %D%/packages/patches/busybox-1.31.1-fix-build-with-glibc-2.31.patch \
   %D%/packages/patches/byobu-writable-status.patch             \
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index cc7e761..cdb13c2 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -295,6 +295,102 @@ compositing and motion tracking, even video editing and 
game creation.  The
 application can be customized via its API for Python scripting.")
     (license license:gpl2+)))
 
+(define-public blender-2.79
+  (package
+    (name "blender")
+    (version "2.79b")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.blender.org/source/";
+                                  "blender-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1g4kcdqmf67srzhi3hkdnr4z1ph4h9sza1pahz38mrj998q4r52c"))
+              (patches (search-patches "blender-2.79-newer-ffmpeg.patch"
+                                       "blender-2.79-oiio2.patch"
+                                       ;; The following patches may be
+                                       ;; needed when the default GCC is
+                                       ;; updated:
+                                       ;;   "blender-2.79-gcc8.patch"
+                                       ;;   "blender-2.79-gcc9.patch"
+                                       "blender-2.79-python-3.7-fix.patch"
+                                       "blender-2.79-python-3.8-fix.patch"))))
+    (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_GAMEENGINE=ON"
+               "-DWITH_IMAGE_OPENJPEG=ON"
+               "-DWITH_INPUT_NDOF=ON"
+               "-DWITH_INSTALL_PORTABLE=OFF"
+               "-DWITH_JACK=ON"
+               "-DWITH_MOD_OCEANSIM=ON"
+               "-DWITH_PLAYER=ON"
+               "-DWITH_PYTHON_INSTALL=OFF"
+               "-DWITH_PYTHON_INSTALL=OFF"
+               "-DWITH_SYSTEM_OPENJPEG=ON"
+               (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))
+         #:phases
+         (modify-phases %standard-phases
+           (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 CPATH, so we need to add "$ilmbase/include/OpenEXR/" 
to
+               ;; the CPATH to satisfy the dependency on "half.h".
+               (setenv "CPATH"
+                       (string-append (assoc-ref inputs "ilmbase")
+                                      "/include/OpenEXR"
+                                      ":" (or (getenv "CPATH") "")))
+               #t))))))
+    (inputs
+     `(("boost" ,boost)
+       ("jemalloc" ,jemalloc)
+       ("libx11" ,libx11)
+       ("openimageio" ,openimageio)
+       ("openexr" ,openexr)
+       ("ilmbase" ,ilmbase)
+       ("openjpeg" ,openjpeg)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("ffmpeg" ,ffmpeg)
+       ("fftw" ,fftw)
+       ("jack" ,jack-1)
+       ("libsndfile" ,libsndfile)
+       ("freetype" ,freetype)
+       ("glew" ,glew)
+       ("openal" ,openal)
+       ("python" ,python)
+       ("zlib" ,zlib)))
+    (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.
+
+NOTE: This older version of Blender is the last release that does not require
+OpenGL 3.  It is retained for use with older computers.")
+    (license license:gpl2+)))
+
 (define-public assimp
   (package
     (name "assimp")
diff --git a/gnu/packages/patches/blender-2.79-gcc8.patch 
b/gnu/packages/patches/blender-2.79-gcc8.patch
new file mode 100644
index 0000000..6a91863
--- /dev/null
+++ b/gnu/packages/patches/blender-2.79-gcc8.patch
@@ -0,0 +1,36 @@
+diff --git a/intern/itasc/kdl/tree.hpp b/intern/itasc/kdl/tree.hpp
+index c8a253fc901..bd35f82d185 100644
+--- a/intern/itasc/kdl/tree.hpp
++++ b/intern/itasc/kdl/tree.hpp
+@@ -34,7 +34,7 @@ namespace KDL
+     //Forward declaration
+     class TreeElement;
+     // Eigen allocator is needed for alignment of Eigen data types
+-    typedef std::map<std::string,TreeElement, std::less<std::string>, 
Eigen::aligned_allocator<std::pair<std::string, TreeElement> > > SegmentMap;
++    typedef std::map<std::string,TreeElement, std::less<std::string>, 
Eigen::aligned_allocator<std::pair<const std::string, TreeElement> > > 
SegmentMap;
+ 
+     class TreeElement
+     {
+diff --git a/intern/cycles/util/util_sseb.h b/intern/cycles/util/util_sseb.h
+index 6e669701f3b..977976c3fc0 100644
+--- a/intern/cycles/util/util_sseb.h
++++ b/intern/cycles/util/util_sseb.h
+@@ -22,6 +22,9 @@ CCL_NAMESPACE_BEGIN
+ 
+ #ifdef __KERNEL_SSE2__
+ 
++struct ssei;
++struct ssef;
++
+ /*! 4-wide SSE bool type. */
+ struct sseb
+ {
+@@ -116,7 +119,7 @@ __forceinline const sseb unpacklo( const sseb& a, const 
sseb& b ) { return _mm_u
+ __forceinline const sseb unpackhi( const sseb& a, const sseb& b ) { return 
_mm_unpackhi_ps(a, b); }
+ 
+ template<size_t i0, size_t i1, size_t i2, size_t i3> __forceinline const sseb 
shuffle( const sseb& a ) {
+-      return _mm_shuffle_epi32(a, _MM_SHUFFLE(i3, i2, i1, i0));
++      return _mm_castsi128_ps(_mm_shuffle_epi32(a, _MM_SHUFFLE(i3, i2, i1, 
i0)));
+ }
+ 
+ template<> __forceinline const sseb shuffle<0, 1, 0, 1>( const sseb& a ) {
diff --git a/gnu/packages/patches/blender-2.79-gcc9.patch 
b/gnu/packages/patches/blender-2.79-gcc9.patch
new file mode 100644
index 0000000..d538a02
--- /dev/null
+++ b/gnu/packages/patches/blender-2.79-gcc9.patch
@@ -0,0 +1,53 @@
+commit e6d803fd4a383cecf8c643095f093a31c944b785
+Author: Robert-André Mauchin <zebob.m@gmail.com>
+Date:   Wed Apr 3 01:36:52 2019 +0200
+
+    Fix for GCC9 new OpenMP data sharing
+    
+    GCC 9 started implementing the OpenMP 4.0 and later behavior. When not 
using
+    default clause or when using default(shared), this makes no difference, but
+    if using default(none), previously the choice was not specify the const
+    qualified variables on the construct at all, or specify in firstprivate
+    clause. In GCC 9 as well as for OpenMP 4.0 compliance, those variables need
+    to be specified on constructs in which they are used, either in shared or
+    in firstprivate clause. Specifying them in firstprivate clause is one way 
to
+    achieve compatibility with both older GCC versions and GCC 9,
+    another option is to drop the default(none) clause.
+    
+    This patch thus drops the default(none) clause.
+    
+    See https://gcc.gnu.org/gcc-9/porting_to.html#ompdatasharing
+    
+    Signed-off-by: Robert-André Mauchin <zebob.m@gmail.com>
+
+diff --git a/intern/elbeem/intern/solver_main.cpp 
b/intern/elbeem/intern/solver_main.cpp
+index 68f7c04cd54..514087b6130 100644
+--- a/intern/elbeem/intern/solver_main.cpp
++++ b/intern/elbeem/intern/solver_main.cpp
+@@ -381,7 +381,7 @@ LbmFsgrSolver::mainLoop(const int lev)
+       GRID_REGION_INIT();
+ #if PARALLEL==1
+       const int gDebugLevel = ::gDebugLevel;
+-#pragma omp parallel default(none) num_threads(mNumOMPThreads) \
++#pragma omp parallel num_threads(mNumOMPThreads) \
+   reduction(+: \
+         calcCurrentMass,calcCurrentVolume, \
+               calcCellsFilled,calcCellsEmptied, \
+@@ -1126,7 +1126,7 @@ LbmFsgrSolver::preinitGrids()
+               GRID_REGION_INIT();
+ #if PARALLEL==1
+       const int gDebugLevel = ::gDebugLevel;
+-#pragma omp parallel default(none) num_threads(mNumOMPThreads) \
++#pragma omp parallel num_threads(mNumOMPThreads) \
+   reduction(+: \
+         calcCurrentMass,calcCurrentVolume, \
+               calcCellsFilled,calcCellsEmptied, \
+@@ -1164,7 +1164,7 @@ LbmFsgrSolver::standingFluidPreinit()
+       GRID_REGION_INIT();
+ #if PARALLEL==1
+       const int gDebugLevel = ::gDebugLevel;
+-#pragma omp parallel default(none) num_threads(mNumOMPThreads) \
++#pragma omp parallel num_threads(mNumOMPThreads) \
+   reduction(+: \
+         calcCurrentMass,calcCurrentVolume, \
+               calcCellsFilled,calcCellsEmptied, \
diff --git a/gnu/packages/patches/blender-2.79-oiio2.patch 
b/gnu/packages/patches/blender-2.79-oiio2.patch
new file mode 100644
index 0000000..1c3606a
--- /dev/null
+++ b/gnu/packages/patches/blender-2.79-oiio2.patch
@@ -0,0 +1,284 @@
+From: Sergey Sharybin <sergey@blender.org>
+Date: Fri, 28 Dec 2018 11:25:35 +0100
+Subject: adapt_build_against_OIIO2
+
+---
+ intern/cycles/blender/blender_python.cpp           |  2 +-
+ intern/cycles/graph/node_xml.cpp                   |  2 +-
+ intern/cycles/render/buffers.cpp                   |  4 ++--
+ intern/cycles/render/image.cpp                     | 15 ++++--------
+ intern/cycles/render/image.h                       |  3 ++-
+ intern/cycles/util/util_unique_ptr.h               | 28 ++++++++++++++++++++++
+ .../blender/imbuf/intern/oiio/openimageio_api.cpp  | 19 +++++++--------
+ 7 files changed, 48 insertions(+), 25 deletions(-)
+ create mode 100644 intern/cycles/util/util_unique_ptr.h
+
+diff --git a/intern/cycles/blender/blender_python.cpp 
b/intern/cycles/blender/blender_python.cpp
+index 54973fd..bee6dd1 100644
+--- a/intern/cycles/blender/blender_python.cpp
++++ b/intern/cycles/blender/blender_python.cpp
+@@ -493,7 +493,7 @@ static PyObject *osl_update_node_func(PyObject * /*self*/, 
PyObject *args)
+                               socket_type = "NodeSocketString";
+                               data_type = BL::NodeSocket::type_STRING;
+                               if(param->validdefault)
+-                                      default_string = param->sdefault[0];
++                                      default_string = 
param->sdefault[0].string();
+                       }
+                       else
+                               continue;
+diff --git a/intern/cycles/graph/node_xml.cpp 
b/intern/cycles/graph/node_xml.cpp
+index d26b3b2..2a24104 100644
+--- a/intern/cycles/graph/node_xml.cpp
++++ b/intern/cycles/graph/node_xml.cpp
+@@ -250,7 +250,7 @@ void xml_read_node(XMLReader& reader, Node *node, xml_node 
xml_node)
+               }
+       }
+ 
+-      if(node->name)
++      if(!node->name.empty())
+               reader.node_map[node->name] = node;
+ }
+ 
+diff --git a/intern/cycles/render/buffers.cpp 
b/intern/cycles/render/buffers.cpp
+index cf402c3..f84a37a 100644
+--- a/intern/cycles/render/buffers.cpp
++++ b/intern/cycles/render/buffers.cpp
+@@ -27,6 +27,7 @@
+ #include "util/util_opengl.h"
+ #include "util/util_time.h"
+ #include "util/util_types.h"
++#include "util/util_unique_ptr.h"
+ 
+ CCL_NAMESPACE_BEGIN
+ 
+@@ -453,7 +454,7 @@ void DisplayBuffer::write(Device *device, const string& 
filename)
+       device->pixels_copy_from(rgba, 0, w, h);
+ 
+       /* write image */
+-      ImageOutput *out = ImageOutput::create(filename);
++      unique_ptr<ImageOutput> out = 
unique_ptr<ImageOutput>(ImageOutput::create(filename));
+       ImageSpec spec(w, h, 4, TypeDesc::UINT8);
+       int scanlinesize = w*4*sizeof(uchar);
+ 
+@@ -468,7 +469,6 @@ void DisplayBuffer::write(Device *device, const string& 
filename)
+ 
+       out->close();
+ 
+-      delete out;
+ }
+ 
+ device_memory& DisplayBuffer::rgba_data()
+diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
+index 595eb46..a143b02 100644
+--- a/intern/cycles/render/image.cpp
++++ b/intern/cycles/render/image.cpp
+@@ -23,6 +23,7 @@
+ #include "util/util_path.h"
+ #include "util/util_progress.h"
+ #include "util/util_texture.h"
++#include "util/util_unique_ptr.h"
+ 
+ #ifdef WITH_OSL
+ #include <OSL/oslexec.h>
+@@ -148,7 +149,7 @@ ImageDataType ImageManager::get_image_metadata(const 
string& filename,
+               return IMAGE_DATA_TYPE_BYTE4;
+       }
+ 
+-      ImageInput *in = ImageInput::create(filename);
++      unique_ptr<ImageInput> in(ImageInput::create(filename));
+ 
+       if(in) {
+               ImageSpec spec;
+@@ -194,7 +195,6 @@ ImageDataType ImageManager::get_image_metadata(const 
string& filename,
+                       in->close();
+               }
+ 
+-              delete in;
+       }
+ 
+       if(is_half) {
+@@ -449,7 +449,7 @@ void ImageManager::tag_reload_image(const string& filename,
+ }
+ 
+ bool ImageManager::file_load_image_generic(Image *img,
+-                                           ImageInput **in,
++                                           unique_ptr<ImageInput> *in,
+                                            int &width,
+                                            int &height,
+                                            int &depth,
+@@ -465,7 +465,7 @@ bool ImageManager::file_load_image_generic(Image *img,
+               }
+ 
+               /* load image from file through OIIO */
+-              *in = ImageInput::create(img->filename);
++              *in = unique_ptr<ImageInput>(ImageInput::create(img->filename));
+ 
+               if(!*in)
+                       return false;
+@@ -477,8 +477,6 @@ bool ImageManager::file_load_image_generic(Image *img,
+                       config.attribute("oiio:UnassociatedAlpha", 1);
+ 
+               if(!(*in)->open(img->filename, spec, config)) {
+-                      delete *in;
+-                      *in = NULL;
+                       return false;
+               }
+ 
+@@ -500,8 +498,6 @@ bool ImageManager::file_load_image_generic(Image *img,
+       if(!(components >= 1 && components <= 4)) {
+               if(*in) {
+                       (*in)->close();
+-                      delete *in;
+-                      *in = NULL;
+               }
+ 
+               return false;
+@@ -519,7 +515,7 @@ bool ImageManager::file_load_image(Image *img,
+                                    device_vector<DeviceType>& tex_img)
+ {
+       const StorageType alpha_one = (FileFormat == TypeDesc::UINT8)? 255 : 1;
+-      ImageInput *in = NULL;
++      unique_ptr<ImageInput> in = NULL;
+       int width, height, depth, components;
+       if(!file_load_image_generic(img, &in, width, height, depth, 
components)) {
+               return false;
+@@ -575,7 +571,6 @@ bool ImageManager::file_load_image(Image *img,
+               }
+               cmyk = strcmp(in->format_name(), "jpeg") == 0 && components == 
4;
+               in->close();
+-              delete in;
+       }
+       else {
+               if(FileFormat == TypeDesc::FLOAT) {
+diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
+index db7e28a..f4a14f4 100644
+--- a/intern/cycles/render/image.h
++++ b/intern/cycles/render/image.h
+@@ -23,6 +23,7 @@
+ #include "util/util_image.h"
+ #include "util/util_string.h"
+ #include "util/util_thread.h"
++#include "util/util_unique_ptr.h"
+ #include "util/util_vector.h"
+ 
+ CCL_NAMESPACE_BEGIN
+@@ -133,7 +134,7 @@ private:
+       bool pack_images;
+ 
+       bool file_load_image_generic(Image *img,
+-                                   ImageInput **in,
++                                   unique_ptr<ImageInput> *in,
+                                    int &width,
+                                    int &height,
+                                    int &depth,
+diff --git a/intern/cycles/util/util_unique_ptr.h 
b/intern/cycles/util/util_unique_ptr.h
+new file mode 100644
+index 0000000..1ceae73
+--- /dev/null
++++ b/intern/cycles/util/util_unique_ptr.h
+@@ -0,0 +1,28 @@
++/*
++ * Copyright 2011-2013 Blender Foundation
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++#ifndef __UTIL_UNIQUE_PTR_H__
++#define __UTIL_UNIQUE_PTR_H__
++
++#include <memory>
++
++CCL_NAMESPACE_BEGIN
++
++using std::unique_ptr;
++
++CCL_NAMESPACE_END
++
++#endif  /* __UTIL_UNIQUE_PTR_H__ */
+diff --git a/source/blender/imbuf/intern/oiio/openimageio_api.cpp 
b/source/blender/imbuf/intern/oiio/openimageio_api.cpp
+index b123d50..7f2fac9 100644
+--- a/source/blender/imbuf/intern/oiio/openimageio_api.cpp
++++ b/source/blender/imbuf/intern/oiio/openimageio_api.cpp
+@@ -35,6 +35,11 @@
+ #include "utfconv.h"
+ #endif
+ 
++// NOTE: Keep first, BLI_path_util conflicts with OIIO's format.
++#include <memory>
++#include <openimageio_api.h>
++#include <OpenImageIO/imageio.h>
++
+ extern "C"
+ {
+ #include "MEM_guardedalloc.h"
+@@ -48,12 +53,10 @@ extern "C"
+ #include "IMB_colormanagement_intern.h"
+ }
+ 
+-#include <openimageio_api.h>
+-#include <OpenImageIO/imageio.h>
+-
+ OIIO_NAMESPACE_USING
+ 
+ using std::string;
++using std::unique_ptr;
+ 
+ typedef unsigned char uchar;
+ 
+@@ -197,7 +200,6 @@ int imb_save_photoshop(struct ImBuf *ibuf, const char * 
/*name*/, int flags)
+ 
+ struct ImBuf *imb_load_photoshop(const char *filename, int flags, char 
colorspace[IM_MAX_SPACE])
+ {
+-      ImageInput *in = NULL;
+       struct ImBuf *ibuf = NULL;
+       int width, height, components;
+       bool is_float, is_alpha;
+@@ -210,7 +212,7 @@ struct ImBuf *imb_load_photoshop(const char *filename, int 
flags, char colorspac
+ 
+       colorspace_set_default_role(colorspace, IM_MAX_SPACE, 
COLOR_ROLE_DEFAULT_BYTE);
+ 
+-      in = ImageInput::create(filename);
++      unique_ptr<ImageInput> in(ImageInput::create(filename));
+       if (!in) {
+               std::cerr << __func__ << ": ImageInput::create() failed:" << 
std::endl
+                         << OIIO_NAMESPACE::geterror() << std::endl;
+@@ -223,7 +225,6 @@ struct ImBuf *imb_load_photoshop(const char *filename, int 
flags, char colorspac
+       if (!in->open(filename, spec, config)) {
+               std::cerr << __func__ << ": ImageInput::open() failed:" << 
std::endl
+                         << in->geterror() << std::endl;
+-              delete in;
+               return NULL;
+       }
+ 
+@@ -249,19 +250,17 @@ struct ImBuf *imb_load_photoshop(const char *filename, 
int flags, char colorspac
+       if (!(components >= 1 && components <= 4)) {
+               if (in) {
+                       in->close();
+-                      delete in;
+               }
+               return NULL;
+       }
+ 
+       if (is_float)
+-              ibuf = imb_oiio_load_image_float(in, width, height, components, 
flags, is_alpha);
++              ibuf = imb_oiio_load_image_float(in.get(), width, height, 
components, flags, is_alpha);
+       else
+-              ibuf = imb_oiio_load_image(in, width, height, components, 
flags, is_alpha);
++              ibuf = imb_oiio_load_image(in.get(), width, height, components, 
flags, is_alpha);
+ 
+       if (in) {
+               in->close();
+-              delete in;
+       }
+ 
+       if (!ibuf)
diff --git a/gnu/packages/patches/blender-2.79-python-3.8-fix.patch 
b/gnu/packages/patches/blender-2.79-python-3.8-fix.patch
new file mode 100644
index 0000000..18d2544
--- /dev/null
+++ b/gnu/packages/patches/blender-2.79-python-3.8-fix.patch
@@ -0,0 +1,204 @@
+From 4b663ecf264020b1d7003a137ce84b06d7ec4ce6 Mon Sep 17 00:00:00 2001
+From: bartus <szczepaniak.bartek+github@gmail.com>
+Date: Sat, 16 Nov 2019 20:29:30 +0100
+Subject: [PATCH] Add python 3.8 support.
+
+---
+ source/blender/python/generic/py_capi_utils.c | 27 +++++++++++++++----
+ 1 file changed, 22 insertions(+), 5 deletions(-)
+
+diff --git a/source/blender/python/generic/py_capi_utils.c 
b/source/blender/python/generic/py_capi_utils.c
+index 545e0506f84..a7eab70600b 100644
+--- a/source/blender/python/generic/py_capi_utils.c
++++ b/source/blender/python/generic/py_capi_utils.c
+@@ -696,9 +696,16 @@ PyObject *PyC_UnicodeFromByte(const char *str)
+  ****************************************************************************/
+ PyObject *PyC_DefaultNameSpace(const char *filename)
+ {
++      #if PY_VERSION_HEX >= 0x03080000
++      PyObject *modules = PyImport_GetModuleDict();
++      PyObject *builtins = PyEval_GetBuiltins();
++      #else
+       PyInterpreterState *interp = PyThreadState_GET()->interp;
++      PyObject *modules = interp->modules;
++      PyObject *builtins = interp->builtins;
++      #endif
+       PyObject *mod_main = PyModule_New("__main__");
+-      PyDict_SetItemString(interp->modules, "__main__", mod_main);
++      PyDict_SetItemString(modules, "__main__", mod_main);
+       Py_DECREF(mod_main); /* sys.modules owns now */
+       PyModule_AddStringConstant(mod_main, "__name__", "__main__");
+       if (filename) {
+@@ -706,8 +713,8 @@ PyObject *PyC_DefaultNameSpace(const char *filename)
+                * note: this wont map to a real file when executing 
text-blocks and buttons. */
+               PyModule_AddObject(mod_main, "__file__", 
PyC_UnicodeFromByte(filename));
+       }
+-      PyModule_AddObject(mod_main, "__builtins__", interp->builtins);
+-      Py_INCREF(interp->builtins); /* AddObject steals a reference */
++      PyModule_AddObject(mod_main, "__builtins__", builtins);
++      Py_INCREF(builtins); /* AddObject steals a reference */
+       return PyModule_GetDict(mod_main);
+ }
+ 
+@@ -734,15 +741,25 @@ bool PyC_NameSpace_ImportArray(PyObject *py_dict, const 
char *imports[])
+ /* restore MUST be called after this */
+ void PyC_MainModule_Backup(PyObject **main_mod)
+ {
++      #if PY_VERSION_HEX >= 0x03080000
++      PyObject *modules = PyImport_GetModuleDict();
++      #else
+       PyInterpreterState *interp = PyThreadState_GET()->interp;
+-      *main_mod = PyDict_GetItemString(interp->modules, "__main__");
++      PyObject *modules = interp->modules;
++      #endif
++      *main_mod = PyDict_GetItemString(modules, "__main__");
+       Py_XINCREF(*main_mod); /* don't free */
+ }
+ 
+ void PyC_MainModule_Restore(PyObject *main_mod)
+ {
++      #if PY_VERSION_HEX >= 0x03080000
++      PyObject *modules = PyImport_GetModuleDict();
++      #else
+       PyInterpreterState *interp = PyThreadState_GET()->interp;
+-      PyDict_SetItemString(interp->modules, "__main__", main_mod);
++      PyObject *modules = interp->modules;
++      #endif
++      PyDict_SetItemString(modules, "__main__", main_mod);
+       Py_XDECREF(main_mod);
+ }
+ 
+-- 
+2.24.0
+
+From 44f719b63238503ef8f933f55383c6d4798995cc Mon Sep 17 00:00:00 2001
+From: Campbell Barton <ideasman42@gmail.com>
+Date: Thu, 13 Sep 2018 17:06:07 +1000
+Subject: [PATCH] Cleanup: use PyImport_GetModuleDict
+
+Replace direct access using PyThreadState_GET
+---
+ source/blender/python/bmesh/bmesh_py_api.c        | 2 +-
+ source/blender/python/generic/idprop_py_api.c     | 2 +-
+ source/blender/python/intern/bpy_interface.c      | 2 +-
+ source/blender/python/intern/gpu.c                | 4 ++--
+ source/blender/python/mathutils/mathutils.c       | 2 +-
+ source/blender/python/mathutils/mathutils_noise.c | 5 +++--
+ source/gameengine/Ketsji/KX_PythonInit.cpp        | 2 +-
+ 7 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/source/blender/python/bmesh/bmesh_py_api.c 
b/source/blender/python/bmesh/bmesh_py_api.c
+index d5973baeadb..d7324eabb6c 100644
+--- a/source/blender/python/bmesh/bmesh_py_api.c
++++ b/source/blender/python/bmesh/bmesh_py_api.c
+@@ -196,7 +196,7 @@ PyObject *BPyInit_bmesh(void)
+ {
+       PyObject *mod;
+       PyObject *submodule;
+-      PyObject *sys_modules = PyThreadState_GET()->interp->modules;
++      PyObject *sys_modules = PyImport_GetModuleDict();
+ 
+       BPy_BM_init_types();
+       BPy_BM_init_types_select();
+diff --git a/source/blender/python/generic/idprop_py_api.c 
b/source/blender/python/generic/idprop_py_api.c
+index 4d4d5232800..8bed0f28cba 100644
+--- a/source/blender/python/generic/idprop_py_api.c
++++ b/source/blender/python/generic/idprop_py_api.c
+@@ -1795,7 +1795,7 @@ PyObject *BPyInit_idprop(void)
+ {
+       PyObject *mod;
+       PyObject *submodule;
+-      PyObject *sys_modules = PyThreadState_GET()->interp->modules;
++      PyObject *sys_modules = PyImport_GetModuleDict();
+ 
+       mod = PyModule_Create(&IDProp_module_def);
+ 
+diff --git a/source/blender/python/intern/bpy_interface.c 
b/source/blender/python/intern/bpy_interface.c
+index 7ca087e4993..123c938b921 100644
+--- a/source/blender/python/intern/bpy_interface.c
++++ b/source/blender/python/intern/bpy_interface.c
+@@ -537,7 +537,7 @@ static bool python_script_exec(
+ 
+       if (py_dict) {
+ #ifdef PYMODULE_CLEAR_WORKAROUND
+-              PyModuleObject *mmod = (PyModuleObject 
*)PyDict_GetItemString(PyThreadState_GET()->interp->modules, "__main__");
++              PyModuleObject *mmod = (PyModuleObject 
*)PyDict_GetItemString(PyImport_GetModuleDict(), "__main__");
+               PyObject *dict_back = mmod->md_dict;
+               /* freeing the module will clear the namespace,
+                * gives problems running classes defined in this namespace 
being used later. */
+diff --git a/source/blender/python/intern/gpu.c 
b/source/blender/python/intern/gpu.c
+index 43796dc9474..d902b6838f4 100644
+--- a/source/blender/python/intern/gpu.c
++++ b/source/blender/python/intern/gpu.c
+@@ -326,7 +326,7 @@ PyObject *GPU_initPython(void)
+ {
+       PyObject *module;
+       PyObject *submodule;
+-      PyObject *sys_modules = PyThreadState_GET()->interp->modules;
++      PyObject *sys_modules = PyImport_GetModuleDict();
+ 
+       module = PyInit_gpu();
+ 
+@@ -337,6 +337,6 @@ PyObject *GPU_initPython(void)
+       PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), 
submodule);
+       Py_INCREF(submodule);
+ 
+-      PyDict_SetItem(PyImport_GetModuleDict(), 
PyModule_GetNameObject(module), module);
++      PyDict_SetItem(sys_modules, PyModule_GetNameObject(module), module);
+       return module;
+ }
+diff --git a/source/blender/python/mathutils/mathutils.c 
b/source/blender/python/mathutils/mathutils.c
+index a3a4e7f313b..f021d456b3a 100644
+--- a/source/blender/python/mathutils/mathutils.c
++++ b/source/blender/python/mathutils/mathutils.c
+@@ -615,7 +615,7 @@ PyMODINIT_FUNC PyInit_mathutils(void)
+ {
+       PyObject *mod;
+       PyObject *submodule;
+-      PyObject *sys_modules = PyThreadState_GET()->interp->modules;
++      PyObject *sys_modules = PyImport_GetModuleDict();
+ 
+       if (PyType_Ready(&vector_Type) < 0)
+               return NULL;
+diff --git a/source/blender/python/mathutils/mathutils_noise.c 
b/source/blender/python/mathutils/mathutils_noise.c
+index 839d1ffc588..834322c0aed 100644
+--- a/source/blender/python/mathutils/mathutils_noise.c
++++ b/source/blender/python/mathutils/mathutils_noise.c
+@@ -845,6 +845,7 @@ static struct PyModuleDef M_Noise_module_def = {
+ /*----------------------------MODULE INIT-------------------------*/
+ PyMODINIT_FUNC PyInit_mathutils_noise(void)
+ {
++      PyObject *sys_modules = PyImport_GetModuleDict();
+       PyObject *submodule = PyModule_Create(&M_Noise_module_def);
+       PyObject *item_types, *item_metrics;
+ 
+@@ -852,11 +853,11 @@ PyMODINIT_FUNC PyInit_mathutils_noise(void)
+       setRndSeed(0);
+ 
+       PyModule_AddObject(submodule, "types", (item_types = 
PyInit_mathutils_noise_types()));
+-      PyDict_SetItemString(PyThreadState_GET()->interp->modules, 
"noise.types", item_types);
++      PyDict_SetItemString(sys_modules, "noise.types", item_types);
+       Py_INCREF(item_types);
+ 
+       PyModule_AddObject(submodule, "distance_metrics", (item_metrics = 
PyInit_mathutils_noise_metrics()));
+-      PyDict_SetItemString(PyThreadState_GET()->interp->modules, 
"noise.distance_metrics", item_metrics);
++      PyDict_SetItemString(sys_modules, "noise.distance_metrics", 
item_metrics);
+       Py_INCREF(item_metrics);
+ 
+       return submodule;
+diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp 
b/source/gameengine/Ketsji/KX_PythonInit.cpp
+index 251273cf7a8..9611a4ea49b 100644
+--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
++++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
+@@ -2234,7 +2234,7 @@ PyMODINIT_FUNC initBGE(void)
+ {
+       PyObject *mod;
+       PyObject *submodule;
+-      PyObject *sys_modules = PyThreadState_GET()->interp->modules;
++      PyObject *sys_modules = PyImport_GetModuleDict();
+       const char *mod_full;
+ 
+       mod = PyModule_Create(&BGE_module_def);
+-- 
+2.25.0
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]