summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'media-gfx')
-rw-r--r--media-gfx/krita/files/krita-5.2.6-py3.13.patch120
-rw-r--r--media-gfx/krita/krita-5.2.6.ebuild4
2 files changed, 123 insertions, 1 deletions
diff --git a/media-gfx/krita/files/krita-5.2.6-py3.13.patch b/media-gfx/krita/files/krita-5.2.6-py3.13.patch
new file mode 100644
index 000000000000..6714059895d0
--- /dev/null
+++ b/media-gfx/krita/files/krita-5.2.6-py3.13.patch
@@ -0,0 +1,120 @@
+From 0f43ec3158225092f6a02422eb90c56421326570 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= <zebob.m@gmail.com>
+Date: Tue, 18 Jun 2024 22:05:34 +0200
+Subject: [PATCH] Changes to build pykrita with Python 3.13
+
+Python 3.11 deprecated Py_SetPath() in 2022 and Python 3.13 removed it.
+Instead one needs to use the new PyConfig API (PEP 587) added to Python
+3.8.
+
+Fix: #488680
+---
+ .../extensions/pykrita/plugin/utilities.cpp | 61 +++++++++++++++++--
+ plugins/extensions/pykrita/plugin/utilities.h | 4 +-
+ 2 files changed, 57 insertions(+), 8 deletions(-)
+
+diff --git a/plugins/extensions/pykrita/plugin/utilities.cpp b/plugins/extensions/pykrita/plugin/utilities.cpp
+index 4f58183238..1e497b2681 100644
+--- a/plugins/extensions/pykrita/plugin/utilities.cpp
++++ b/plugins/extensions/pykrita/plugin/utilities.cpp
+@@ -19,8 +19,10 @@
+ #include <cmath>
+ #include <Python.h>
+
++#include <QDebug>
+ #include <QDir>
+ #include <QLibrary>
++#include <QProcessEnvironment>
+ #include <QString>
+ #include <QStringList>
+ #include <QVector>
+@@ -412,18 +414,65 @@ bool Python::setPath(const QStringList& scriptPaths)
+ joinedPaths = joinedPaths + pathSeparator + originalPath;
+ }
+ dbgScript << "Setting python paths:" << joinedPaths;
++
+ #ifdef Q_OS_WIN
+- QVector<wchar_t> joinedPathsWChars(joinedPaths.size() + 1, 0);
+- joinedPaths.toWCharArray(joinedPathsWChars.data());
+- Py_SetPath(joinedPathsWChars.data());
++ PyStatus status;
++ PyConfig config;
++ PyConfig_InitPythonConfig(&config);
++
++ for (const QString& path : joinedPaths.split(pathSeparator)) {
++ status = PyWideStringList_Append(&config.module_search_paths, path.toStdWString().c_str());
++ if (PyStatus_Exception(status)) {
++ qDebug() << "Error appending to PyWideStringList:" << status.err_msg;
++ dbgScript << "Error appending to PyWideStringList";
++ return false;
++ }
++ }
++
++ config.module_search_paths_set = true;
++ qDebug() << "Set module_search_paths";
++
++ status = Py_InitializeFromConfig(&config);
++ if (PyStatus_Exception(status)) {
++ qDebug() << "Cannot initialize Py_InitializeFromConfig:" << status.err_msg;
++ Py_ExitStatusException(status);
++ PyConfig_Clear(&config);
++ dbgScript << "Cannot initialize Py_InitializeFromConfig config";
++ return false;
++ }
++
++ PyConfig_Clear(&config);
+ #else
+ if (runningInBundle) {
+- QVector<wchar_t> joinedPathsWChars(joinedPaths.size() + 1, 0);
+- joinedPaths.toWCharArray(joinedPathsWChars.data());
+- Py_SetPath(joinedPathsWChars.data());
++ PyStatus status;
++ PyConfig config;
++ PyConfig_InitPythonConfig(&config);
++
++ for (const QString& path : joinedPaths.split(pathSeparator)) {
++ status = PyWideStringList_Append(&config.module_search_paths, path.toStdWString().c_str());
++ if (PyStatus_Exception(status)) {
++ qDebug() << "Error appending to PyWideStringList:" << status.err_msg;
++ dbgScript << "Error appending to PyWideStringList";
++ return false;
++ }
++ }
++
++ config.module_search_paths_set = true;
++
++ status = Py_InitializeFromConfig(&config);
++ if (PyStatus_Exception(status)) {
++ Py_ExitStatusException(status);
++ qDebug() << "Cannot initialize Py_InitializeFromConfig 2:" << status.err_msg;
++ PyConfig_Clear(&config);
++ dbgScript << "Cannot initialize Py_InitializeFromConfig config";
++ return false;
++ }
++
++ PyConfig_Clear(&config);
+ }
+ else {
+ qputenv("PYTHONPATH", joinedPaths.toLocal8Bit());
++ qDebug() << "Set PYTHONPATH environment variable";
+ }
+ #endif
+ isPythonPathSet = true;
+diff --git a/plugins/extensions/pykrita/plugin/utilities.h b/plugins/extensions/pykrita/plugin/utilities.h
+index fb309bd0b8..aec47da239 100644
+--- a/plugins/extensions/pykrita/plugin/utilities.h
++++ b/plugins/extensions/pykrita/plugin/utilities.h
+@@ -81,8 +81,8 @@ public:
+ static bool libraryLoad();
+
+ /**
+- * Set the Python paths by calling Py_SetPath. This should be called before
+- * initialization to ensure the proper libraries get loaded.
++ * Set the Python paths by calling Py_InitializeFromConfig. This should be
++ * called before initialization to ensure the proper libraries get loaded.
+ */
+ static bool setPath(const QStringList& scriptPaths);
+
+--
+2.45.2
+
diff --git a/media-gfx/krita/krita-5.2.6.ebuild b/media-gfx/krita/krita-5.2.6.ebuild
index 0a1c86338154..dd17eae36561 100644
--- a/media-gfx/krita/krita-5.2.6.ebuild
+++ b/media-gfx/krita/krita-5.2.6.ebuild
@@ -4,7 +4,7 @@
EAPI=8
ECM_TEST="forceoptional"
-PYTHON_COMPAT=( python3_{10..12} )
+PYTHON_COMPAT=( python3_{10..13} )
KFMIN=5.115.0
QTMIN=5.15.12
inherit ecm kde.org python-single-r1
@@ -96,6 +96,8 @@ PATCHES=(
# downstream
"${FILESDIR}"/${PN}-5.2.3-tests-optional.patch
"${FILESDIR}"/${PN}-5.2.2-fftw.patch # bug 913518
+ # Fedora, non-upstreamed:
+ "${FILESDIR}"/${P}-py3.13.patch # bug 943149
# git master
"${FILESDIR}"/${PN}-5.1.5-sip-6.8.patch # bug 919139
)