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.
This commit is contained in:
parent
d4c9e81c07
commit
96a655a77b
@ -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 \
|
||||
|
@ -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")
|
||||
|
36
gnu/packages/patches/blender-2.79-gcc8.patch
Normal file
36
gnu/packages/patches/blender-2.79-gcc8.patch
Normal file
@ -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 ) {
|
53
gnu/packages/patches/blender-2.79-gcc9.patch
Normal file
53
gnu/packages/patches/blender-2.79-gcc9.patch
Normal file
@ -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, \
|
284
gnu/packages/patches/blender-2.79-oiio2.patch
Normal file
284
gnu/packages/patches/blender-2.79-oiio2.patch
Normal file
@ -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)
|
204
gnu/packages/patches/blender-2.79-python-3.8-fix.patch
Normal file
204
gnu/packages/patches/blender-2.79-python-3.8-fix.patch
Normal file
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user