[Pkg-kde-extras] Bug#1109894: unblock: rkward/0.8.0-4.2 (pre-approval)
Santiago Vila
sanvila at debian.org
Fri Jul 25 20:37:17 BST 2025
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: rkward at packages.debian.org, sanvila at debian.org, edd at debian.org
Control: affects -1 + src:rkward
User: release.debian.org at packages.debian.org
Usertags: unblock
Please unblock package rkward (pre-approval)
[ Reason ]
This should fix #1103204 and *also* allow the package to propagate to testing.
[ Impact ]
The package in testing currently FTBFS.
[ Tests ]
Version 0.8.0-4.1 has been in unstable for 25 days, and there are no
real code changes from 0.8.0-4.1 to 0.8.0-4.2.
[ Risks ]
Low risk. We are merely changing the overly strict depends line
so that the package can enter testing.
[ Checklist ]
[X] all changes are documented in the d/changelog
[X] I reviewed all changes and I approve them
[X] attach debdiff against the package in testing
[ Other info ]
This NMU upload was prepared by Dirk Eddelbuettel. I'm helping
him to fix the package by filing this report and doing the
final upload. We will wait for approval before upload.
The usual maintainers (in x-debbugs-Cc) are more than welcome to take
over and upload 0.8.0-5 instead, but they should show up before
the final upload.
unblock rkward/0.8.0-4.2
-------------- next part --------------
diff --git a/debian/.gitattributes b/debian/.gitattributes
deleted file mode 100644
index 6a03163..0000000
--- a/debian/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-changelog merge=dpkg-mergechangelogs
diff --git a/debian/changelog b/debian/changelog
index eb916ca..9d4b492 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,18 @@
+rkward (0.8.0-4.2) unstable; urgency=medium
+
+ * Non-maintainer upload.
+ * debian/control: Set depends to (hardcoded) 'r-base-core (>= 4.5.0-3)' to
+ permit transition to testing for upcoming release.
+
+ -- Dirk Eddelbuettel <edd at debian.org> Fri, 25 Jul 2025 12:17:47 -0500
+
+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.
diff --git a/debian/control b/debian/control
index eb68c50..187172f 100644
--- a/debian/control
+++ b/debian/control
@@ -42,7 +42,7 @@ Package: rkward
Architecture: any
Depends: rkward-data (= ${source:Version}),
${misc:Depends},
- ${rvers},
+ r-base-core (>= 4.5.0-3),
${rapivers},
${rgraphicsenginevers},
${shlibs:Depends}
diff --git a/debian/patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch b/debian/patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch
new file mode 100644
index 0000000..b70b7e1
--- /dev/null
+++ b/debian/patches/0001-Adjust-to-the-removal-of-Rf_addTaskCallback-in-R-dev.patch
@@ -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 --git a/debian/patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch b/debian/patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch
new file mode 100644
index 0000000..82ed346
--- /dev/null
+++ b/debian/patches/0002-Adjust-to-hiding-for-R_checkActivityEx-in-R-devel-fo.patch
@@ -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 --git a/debian/patches/series b/debian/patches/series
index c115b3f..6dda6d9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +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
More information about the pkg-kde-extras
mailing list