Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected]
Control: affects -1 + src:rkward
User: [email protected]
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.
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 <[email protected]>  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 <[email protected]>  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 <[email protected]>  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 <[email protected]>
+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 <[email protected]>
+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 <[email protected]>
+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 <[email protected]>
+---
+ 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
+
_______________________________________________
pkg-kde-extras mailing list
[email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/pkg-kde-extras

Reply via email to