[education/rkward] rkward/rbackend: Next attempt at fixing environment inside AppImage.
Thomas Friedrichsmeier
null at kde.org
Sun Jul 17 12:43:21 BST 2022
Git commit 3f8fd13e75fece2bc294fb71dced6ee3b36e1a51 by Thomas Friedrichsmeier.
Committed on 17/07/2022 at 11:42.
Pushed by tfry into branch 'master'.
Next attempt at fixing environment inside AppImage.
M +18 -0 rkward/rbackend/rkrinterface.cpp
https://invent.kde.org/education/rkward/commit/3f8fd13e75fece2bc294fb71dced6ee3b36e1a51
diff --git a/rkward/rbackend/rkrinterface.cpp b/rkward/rbackend/rkrinterface.cpp
index 7f63ca5b..11c0d3f6 100644
--- a/rkward/rbackend/rkrinterface.cpp
+++ b/rkward/rbackend/rkrinterface.cpp
@@ -380,6 +380,24 @@ void RInterface::handleRequest (RBackendRequest* request) {
RK_ASSERT (command->getDataLength () == 1);
RKSessionVars::setRVersion (command->stringVector ().value (0));
});
+
+ if (!qgetenv("APPDIR").isEmpty()) {
+ // Running inside an AppImage. As soon as R has started, it should behave as if running in the main (system) environment (esp. when calling helper binaries such as wget or gcc).
+ // Unset any paths starting with APPDIR, _except_ those inside R_HOME.
+ runStartupCommand(new RCommand("local({\n"
+ " appdir <- Sys.getenv(\"APPDIR\")\n"
+ " fix <- function(key) {\n"
+ " paths <- strsplit(Sys.getenv(key), \":\", fixed=TRUE)[[1]]\n"
+ " paths <- paths[!(startsWith(paths, appdir) & !startsWith(paths, R.home()))]\n"
+ " patharg <- list(paste(paths, collapse=\":\"))\n"
+ " names(patharg) <- key\n"
+ " do.call(Sys.setenv, patharg)\n"
+ " }\n"
+ " fix(\"LD_LIBRARY_PATH\")\n"
+ " fix(\"PATH\")\n"
+ "})\n", RCommand::App | RCommand::Sync), chain, [](RCommand*) {});
+ }
+
// find out about standard library locations
runStartupCommand(new RCommand("c(path.expand(Sys.getenv(\"R_LIBS_USER\")), .libPaths())\n", RCommand::GetStringVector | RCommand::App | RCommand::Sync), chain,
[this](RCommand *command) {
More information about the rkward-tracker
mailing list