[Pkg-kde-extras] Bug#1110100: trixie-pu: package rkward/0.8.0-4.1~deb13u1
Adrian Bunk
bunk at debian.org
Tue Jul 29 20:42:56 BST 2025
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: rkward at packages.debian.org
Control: affects -1 + src:rkward
User: release.debian.org at packages.debian.org
Usertags: pu
rkward started to FTBFS when R 4.5.0 entered unstable and trixie
relatively late, and cannot migrate due to R 4.5.1 now being
unmigratable in unstable.
Rebuilding the package in trixie is the easy solution.
The unrelated older change of using the system kdsingleapplication
instead of a vendored version is also included, it's in general
desirable for security support and has been in unstable for over
3 months without problems reported.
The additional Standards-Version and debian/copyright updates
shouldn't be problematic.
-------------- next part --------------
diffstat for rkward-0.8.0 rkward-0.8.0
changelog | 26 +
control | 3
copyright | 11
patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch | 145 ++++++++++
patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch | 39 ++
patches/series | 3
patches/upstream_Make-it-possible-to-build-against-system-kdsingleapp.patch | 57 +++
7 files changed, 272 insertions(+), 12 deletions(-)
diff -Nru rkward-0.8.0/debian/changelog rkward-0.8.0/debian/changelog
--- rkward-0.8.0/debian/changelog 2025-02-11 21:12:08.000000000 +0200
+++ rkward-0.8.0/debian/changelog 2025-07-29 17:20:42.000000000 +0300
@@ -1,3 +1,29 @@
+rkward (0.8.0-4.1~deb13u1) trixie; urgency=medium
+
+ * Non-maintainer upload.
+ * Rebuild for trixie.
+
+ -- Adrian Bunk <bunk at debian.org> Tue, 29 Jul 2025 17:20:42 +0300
+
+rkward (0.8.0-4.1) unstable; urgency=medium
+
+ * Non-maintainer upload.
+ * Backport upstream fixes for R 4.5. (Closes: #1103204)
+
+ -- Adrian Bunk <bunk at debian.org> Mon, 30 Jun 2025 15:53:42 +0300
+
+rkward (0.8.0-4) unstable; urgency=medium
+
+ * Team upload.
+ * Bump Standards-Version to 4.7.2, no changes required.
+ * Simplify GPL license text in debian/copyright.
+ * Use the system version of kdsingleapplication:
+ - backport upstream commit 997c8a7280fe0f99a29465f67b56fd001cdac4e1; patch
+ upstream_Make-it-possible-to-build-against-system-kdsingleapp.patch
+ - add the libkdsingleapplication-qt6-dev build dependency
+
+ -- Pino Toscano <pino at debian.org> Fri, 11 Apr 2025 04:57:31 +0200
+
rkward (0.8.0-3) unstable; urgency=medium
* Team upload.
diff -Nru rkward-0.8.0/debian/control rkward-0.8.0/debian/control
--- rkward-0.8.0/debian/control 2025-02-06 11:32:37.000000000 +0200
+++ rkward-0.8.0/debian/control 2025-04-10 21:16:25.000000000 +0300
@@ -13,6 +13,7 @@
qt6-5compat-dev (>= 6.6.0~),
qt6-declarative-dev (>= 6.6.0~),
qt6-webengine-dev (>= 6.6.0~),
+ libkdsingleapplication-qt6-dev (>= 1.1.0~),
libkf6archive-dev (>= 6.0.0~),
libkf6breezeicons-dev (>= 6.0.0~),
libkf6config-dev (>= 6.0.0~),
@@ -31,7 +32,7 @@
qt6-svg-plugins <!nocheck>,
xauth <!nocheck>,
xvfb <!nocheck>,
-Standards-Version: 4.7.0
+Standards-Version: 4.7.2
Vcs-Browser: https://salsa.debian.org/qt-kde-team/extras/rkward
Vcs-Git: https://salsa.debian.org/qt-kde-team/extras/rkward.git
Homepage: https://rkward.kde.org
diff -Nru rkward-0.8.0/debian/copyright rkward-0.8.0/debian/copyright
--- rkward-0.8.0/debian/copyright 2025-02-05 14:10:41.000000000 +0200
+++ rkward-0.8.0/debian/copyright 2025-04-10 17:31:41.000000000 +0300
@@ -18,17 +18,6 @@
version 2 of the License, or (at your option) any later
version.
.
- This program is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the GNU General Public License for more
- details.
- .
- You should have received a copy of the GNU General Public
- License along with this package; if not, write to the Free
- Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- Boston, MA 02110-1301 USA
- .
On Debian systems, the full text of the GNU General Public
License version 2 can be found in the file
`/usr/share/common-licenses/GPL-2'.
diff -Nru rkward-0.8.0/debian/patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch rkward-0.8.0/debian/patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch
--- rkward-0.8.0/debian/patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch 1970-01-01 02:00:00.000000000 +0200
+++ rkward-0.8.0/debian/patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch 2025-06-30 15:44:28.000000000 +0300
@@ -0,0 +1,145 @@
+From 9fc53972f94bcc6e22ba0ffc2bd246cdee1bf119 Mon Sep 17 00:00:00 2001
+From: Thomas Friedrichsmeier <thomas.friedrichsmeier at kdemail.net>
+Date: Sun, 28 Jul 2024 15:51:08 +0200
+Subject: Adjust to the removal of Rf_addTaskCallback() in R (devel) 4.5
+
+---
+ rkward/autotests/core_test.cpp | 28 ++++++++++++++++++++
+ rkward/rbackend/rkrapi.h | 1 -
+ rkward/rbackend/rkrbackend.cpp | 47 +++++-----------------------------
+ 3 files changed, 35 insertions(+), 41 deletions(-)
+
+diff --git a/rkward/autotests/core_test.cpp b/rkward/autotests/core_test.cpp
+index a3514ff61..e8daf14e7 100644
+--- a/rkward/autotests/core_test.cpp
++++ b/rkward/autotests/core_test.cpp
+@@ -303,6 +303,34 @@ private Q_SLOTS:
+ cleanGlobalenv();
+ }
+
++ void userCommandTest() {
++ // Two commands submitted on one user line should both be run
++ runCommandWithTimeout(new RCommand("print('first'); print('second')", RCommand::User), nullptr, [](RCommand *command) {
++ QVERIFY(!command->failed());
++ QVERIFY(command->fullOutput().contains("first"));
++ QVERIFY(command->fullOutput().contains("second"));
++ });
++ // Also, of course for commands on separate lines:
++ runCommandWithTimeout(new RCommand("print('first')\nprint('second')", RCommand::User), nullptr, [](RCommand *command) {
++ QVERIFY(!command->failed());
++ QVERIFY(command->fullOutput().contains("first"));
++ QVERIFY(command->fullOutput().contains("second"));
++ });
++ // or multi-line commands:
++ runCommandWithTimeout(new RCommand("{ print('first')\nprint('second') }", RCommand::User), nullptr, [](RCommand *command) {
++ QVERIFY(!command->failed());
++ QVERIFY(command->fullOutput().contains("first"));
++ QVERIFY(command->fullOutput().contains("second"));
++ });
++ // However, if a partial command fails, the next part should not get parsed:
++ runCommandWithTimeout(new RCommand("stop('first'); print('second')", RCommand::User), nullptr, [](RCommand *command) {
++ QVERIFY(command->failed());
++ QVERIFY(command->fullOutput().contains("first"));
++ QVERIFY(!command->fullOutput().contains("second"));
++ });
++ // TODO: verify that calls to readline() and browser() are handled, correctly
++ }
++
+ void commandOrderAndOutputTest() {
+ // commands shall run in the order 1, 3, 2, 5, 4, but also, of course, all different types of output shall be captured
+ QStringList output;
+diff --git a/rkward/rbackend/rkrapi.h b/rkward/rbackend/rkrapi.h
+index cb68aa4ad..643ac8983 100644
+--- a/rkward/rbackend/rkrapi.h
++++ b/rkward/rbackend/rkrapi.h
+@@ -228,7 +228,6 @@ IMPORT_R_API(Rf_GetOption);
+ IMPORT_R_API(Rf_GetOption1);
+ IMPORT_R_API(Rf_KillAllDevices);
+ IMPORT_R_API(Rf_ScalarInteger);
+-IMPORT_R_API(Rf_addTaskCallback);
+ IMPORT_R_API(Rf_allocList);
+ IMPORT_R_API(Rf_allocVector);
+ IMPORT_R_API(Rf_asChar);
+diff --git a/rkward/rbackend/rkrbackend.cpp b/rkward/rbackend/rkrbackend.cpp
+index 6130f18c1..5eea2bd20 100644
+--- a/rkward/rbackend/rkrbackend.cpp
++++ b/rkward/rbackend/rkrbackend.cpp
+@@ -133,38 +133,6 @@ void RKRBackend::clearPendingInterrupt () {
+ extern SEXP RKWard_RData_Tag;
+
+ // ############## R Standard callback overrides BEGIN ####################
+-Rboolean RKToplevelStatementFinishedCallback (SEXP expr, SEXP value, Rboolean succeeded, Rboolean visible, void *) {
+- RK_TRACE (RBACKEND);
+- Q_UNUSED (expr);
+- Q_UNUSED (value);
+- Q_UNUSED (visible);
+-
+- if ((RKRBackend::repl_status.eval_depth == 0) && (!RKRBackend::repl_status.browser_context)) { // Yes, toplevel-handlers _do_ get called in a browser context!
+- RK_ASSERT (RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandRunning);
+- if (succeeded) {
+- RKRBackend::repl_status.user_command_successful_up_to = RKRBackend::repl_status.user_command_parsed_up_to;
+- if (RKRBackend::repl_status.user_command_completely_transmitted) {
+- RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::NoUserCommand;
+- RKRBackend::this_pointer->commandFinished ();
+- } else RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandTransmitted;
+- } else {
+- // well, this point of code is never reached with R up to 2.12.0. Instead failed user commands are handled in doError().
+- RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandFailed;
+- }
+- }
+-
+- return (Rboolean) true;
+-}
+-
+-void RKInsertToplevelStatementFinishedCallback (void *) {
+- RK_TRACE (RBACKEND);
+-
+- if (RKRBackend::this_pointer->r_running) {
+- int pos;
+- RFn::Rf_addTaskCallback(&RKToplevelStatementFinishedCallback, nullptr, &RKInsertToplevelStatementFinishedCallback, "_rkward_main_callback", &pos);
+- }
+-}
+-
+ void RKTransmitNextUserCommandChunk (unsigned char* buf, int buflen) {
+ RK_TRACE (RBACKEND);
+
+@@ -284,7 +252,7 @@ int RReadConsole (const char* prompt, unsigned char* buf, int buflen, int hist)
+ // This can mean three different things:
+ // 1) User called readline ()
+ // 2) User called browser ()
+- // 3) R jumped us back to toplevel behind our backs.
++ // 3) The user command has finished (successfully or not)
+ // Let's find out, which one it is.
+ if (hist && (RKRBackend::default_global_context != ROb(R_GlobalContext))) {
+ break; // this looks like a call to browser(). Will be handled below.
+@@ -296,13 +264,13 @@ int RReadConsole (const char* prompt, unsigned char* buf, int buflen, int hist)
+ n_frames = dummy->intVector ().at (0);
+ }
+ // What the ??? Why does this simple version always return 0?
+- //int n_frames = RKRSupport::SEXPToInt (RKRSupport::callSimpleFun0 (RFn::Rf_install ("sys.nframe"), ROb(R_GlobalEnv)));
++ //int n_frames = RKRSupport::SEXPToInt (RKRSupport::callSimpleFun0 (RFn::Rf_install ("sys.nframe"), ROb(R_GlobalEnv);
+ if (n_frames < 1) {
+- // No active frames? This can't be a call to readline(), then, so probably R jumped us back to toplevel, behind our backs.
+- // For safety, let's reset and start over.
+- RKRBackend::this_pointer->current_command->status |= RCommand::Failed | RCommand::ErrorOther;
+- RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::ReplIterationKilled;
+- RFn::Rf_error(""); // to discard the buffer
++ // No active frames? This can't be a call to readline(), so the previous command must have finished.
++ if (RKRBackend::repl_status.user_command_completely_transmitted) {
++ RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::NoUserCommand;
++ RKRBackend::this_pointer->commandFinished ();
++ } else RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandTransmitted;
+ } else {
+ // A call to readline(). Will be handled below
+ break;
+@@ -1108,7 +1076,6 @@ bool RKRBackend::startR () {
+ RFn::R_registerRoutines(RFn::R_getEmbeddingDllInfo(), nullptr, callMethods, nullptr, nullptr);
+
+ connectCallbacks();
+- RKInsertToplevelStatementFinishedCallback(nullptr);
+ RKREventLoop::setRKEventHandler(doPendingPriorityCommands);
+ default_global_context = ROb(R_GlobalContext);
+ #ifdef Q_OS_WIN
+--
+2.30.2
+
diff -Nru rkward-0.8.0/debian/patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch rkward-0.8.0/debian/patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch
--- rkward-0.8.0/debian/patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch 1970-01-01 02:00:00.000000000 +0200
+++ rkward-0.8.0/debian/patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch 2025-06-30 15:44:28.000000000 +0300
@@ -0,0 +1,39 @@
+From 51b0b0bf5a15d742f20922713018125036df9aa3 Mon Sep 17 00:00:00 2001
+From: Thomas Friedrichsmeier <thomas.friedrichsmeier at kdemail.net>
+Date: Mon, 29 Jul 2024 14:58:22 +0200
+Subject: Adjust to hiding for R_checkActivityEx in R-devel (for R 4.5)
+
+---
+ rkward/rbackend/rkrapi.h | 2 +-
+ rkward/rbackend/rkreventloop.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/rkward/rbackend/rkrapi.h b/rkward/rbackend/rkrapi.h
+index 643ac8983..e72f817e2 100644
+--- a/rkward/rbackend/rkrapi.h
++++ b/rkward/rbackend/rkrapi.h
+@@ -323,7 +323,7 @@ IMPORT_R_API(ptr_R_WriteConsoleEx);
+
+ IMPORT_R_API(R_InputHandlers);
+ IMPORT_R_API(R_PolledEvents);
+-IMPORT_R_API(R_checkActivityEx);
++IMPORT_R_API(R_checkActivity);
+ IMPORT_R_API(R_runHandlers);
+ IMPORT_R_API(addInputHandler);
+
+diff --git a/rkward/rbackend/rkreventloop.cpp b/rkward/rbackend/rkreventloop.cpp
+index 8671cc725..19a510479 100644
+--- a/rkward/rbackend/rkreventloop.cpp
++++ b/rkward/rbackend/rkreventloop.cpp
+@@ -19,7 +19,7 @@ static void processX11EventsWorker (void *) {
+ #ifndef Q_OS_WIN
+ for (;;) {
+ fd_set *what;
+- what = RFn::R_checkActivityEx(ROb(R_wait_usec) > 0 ? ROb(R_wait_usec) : 50, 1, RK_doIntr);
++ what = RFn::R_checkActivity(ROb(R_wait_usec) > 0 ? ROb(R_wait_usec) : 50, 1);
+ RFn::R_runHandlers(ROb(R_InputHandlers), what);
+ if (!what) break;
+ }
+--
+2.30.2
+
diff -Nru rkward-0.8.0/debian/patches/series rkward-0.8.0/debian/patches/series
--- rkward-0.8.0/debian/patches/series 2025-02-06 11:37:02.000000000 +0200
+++ rkward-0.8.0/debian/patches/series 2025-06-30 15:53:42.000000000 +0300
@@ -1,2 +1,5 @@
upstream_Also-set-file-modes-when-creating-reproducible-archi.patch
+upstream_Make-it-possible-to-build-against-system-kdsingleapp.patch
tests-disable-encodingtest.diff
+0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch
+0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch
diff -Nru rkward-0.8.0/debian/patches/upstream_Make-it-possible-to-build-against-system-kdsingleapp.patch rkward-0.8.0/debian/patches/upstream_Make-it-possible-to-build-against-system-kdsingleapp.patch
--- rkward-0.8.0/debian/patches/upstream_Make-it-possible-to-build-against-system-kdsingleapp.patch 1970-01-01 02:00:00.000000000 +0200
+++ rkward-0.8.0/debian/patches/upstream_Make-it-possible-to-build-against-system-kdsingleapp.patch 2025-04-10 21:13:58.000000000 +0300
@@ -0,0 +1,57 @@
+From 997c8a7280fe0f99a29465f67b56fd001cdac4e1 Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm at gentoo.org>
+Date: Mon, 22 Jul 2024 22:20:26 +0200
+Subject: [PATCH] Make it possible to build against system kdsingleapplication
+
+Bundling must be avoided wherever possible.
+
+Signed-off-by: Andreas Sturmlechner <asturm at gentoo.org>
+---
+ CMakeLists.txt | 10 +++++++++-
+ rkward/main.cpp | 2 +-
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3b9833164..1af6cd172 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -26,6 +26,15 @@ FIND_PACKAGE(Qt6 6.6 CONFIG REQUIRED COMPONENTS Widgets Core Xml Network Qml Pri
+ FIND_PACKAGE(KF6 6.0.0 REQUIRED COMPONENTS CoreAddons DocTools I18n XmlGui TextEditor WidgetsAddons Parts Config Notifications WindowSystem Archive BreezeIcons OPTIONAL_COMPONENTS Crash)
+ FIND_PACKAGE(Gettext REQUIRED)
+
++FIND_PACKAGE(KDSingleApplication-qt6 1.1.0 QUIET)
++if(KDSingleApplication-qt6_FOUND)
++ message(STATUS "Using system KDSingleApplication")
++else()
++ message(STATUS "Using bundled KDSingleApplication")
++ add_subdirectory(3rdparty/KDSingleApplication)
++ add_definitions(-DKDSINGLEAPPLICATION_STATIC_BUILD)
++endif()
++
+ IF(FORCE_PRETTY_MAKEFILE)
+ SET(CMAKE_VERBOSE_MAKEFILE OFF)
+ ENDIF(FORCE_PRETTY_MAKEFILE)
+@@ -37,7 +46,6 @@ remove_definitions(-DQT_NO_CAST_FROM_ASCII) # TODO remove to compley to KDECompi
+ #uncomment the line below to save ~250-350kB in object size
+ #ADD_DEFINITIONS(-DRKWARD_NO_TRACE)
+
+-ADD_SUBDIRECTORY(3rdparty/KDSingleApplication)
+ ADD_SUBDIRECTORY(rkward)
+ ADD_SUBDIRECTORY(doc)
+ ADD_SUBDIRECTORY(tests)
+diff --git a/rkward/main.cpp b/rkward/main.cpp
+index 2804e99d8..df959ba82 100644
+--- a/rkward/main.cpp
++++ b/rkward/main.cpp
+@@ -72,7 +72,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
+ #include "rbackend/rksessionvars.h"
+ #include "windows/rkdebugmessagewindow.h"
+ #include "misc/rkcommonfunctions.h"
+-#include "../3rdparty/KDSingleApplication/kdsingleapplication.h"
++#include "kdsingleapplication.h"
+ #include "misc/rkcommandlineargs.h"
+
+ #ifdef Q_OS_WIN
+--
+2.47.2
+
More information about the pkg-kde-extras
mailing list