[Pkg-kde-extras] Bug#1109894: unblock: rkward/0.8.0-4.2 (pre-approval)
Jochen Sprickerhof
jspricke at debian.org
Sun Jul 27 12:58:32 BST 2025
Hi Santiago,
I am not part of the release team.
An alternative option would be to revert src:r-base in unstable to the
version in testing to comply with the freeze policy [1]. Please use the
+really convention in such a case [2].
[1] https://release.debian.org/testing/freeze_policy.html#hard
[2] https://www.debian.org/doc/debian-policy/ch-controlfields.html#epochs-should-be-used-sparingly
Cheers Jochen
* Santiago Vila <sanvila at debian.org> [2025-07-25 21:37]:
>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
>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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-kde-extras/attachments/20250727/c9edd4d6/attachment.sig>
More information about the pkg-kde-extras
mailing list