public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andreas Sturmlechner" <asturm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/kde:master commit in: media-gfx/krita/, media-gfx/krita/files/
Date: Mon, 25 Nov 2024 22:52:01 +0000 (UTC)	[thread overview]
Message-ID: <1732575030.96a63e864379619689ed79680582c93429102fd5.asturm@gentoo> (raw)

commit:     96a63e864379619689ed79680582c93429102fd5
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sat Nov  9 15:16:23 2024 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Mon Nov 25 22:50:30 2024 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=96a63e86

media-gfx/krita: enable py3.13

KDE-bug: https://bugs.kde.org/show_bug.cgi?id=488680
See also: https://bugzilla.redhat.com/show_bug.cgi?id=2278646

Closes: https://bugs.gentoo.org/943149
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 media-gfx/krita/files/krita-5.2.6-py3.13.patch | 120 +++++++++++++++++++++++++
 media-gfx/krita/krita-9999.ebuild              |   4 +-
 2 files changed, 123 insertions(+), 1 deletion(-)

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 0000000000..6714059895
--- /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-9999.ebuild b/media-gfx/krita/krita-9999.ebuild
index 69c40eb547..11531fa6fa 100644
--- a/media-gfx/krita/krita-9999.ebuild
+++ b/media-gfx/krita/krita-9999.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
 )
 
 pkg_setup() {


             reply	other threads:[~2024-11-25 22:52 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-25 22:52 Andreas Sturmlechner [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-02-13 22:17 [gentoo-commits] proj/kde:master commit in: media-gfx/krita/, media-gfx/krita/files/ Andreas Sturmlechner
2021-03-26 21:18 Andreas Sturmlechner
2020-07-12 22:55 Andreas Sturmlechner
2020-07-12 22:55 Andreas Sturmlechner
2016-10-27 19:42 Michael Palimaka
2016-09-22 11:38 Michael Palimaka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1732575030.96a63e864379619689ed79680582c93429102fd5.asturm@gentoo \
    --to=asturm@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox