[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