[rkward/frameworks] rkward: Bring back some of the logic we needed for finding the frontend executable. We now need it for finding the backend executable (which is still in libexec, i.e. a separate directory, now).

Thomas Friedrichsmeier null at kde.org
Tue May 16 14:18:53 UTC 2017


Git commit d7228406ee08c4f5d66c5ca0c741053d2de63bfe by Thomas Friedrichsmeier.
Committed on 16/05/2017 at 14:17.
Pushed by tfry into branch 'frameworks'.

Bring back some of the logic we needed for finding the frontend executable. We now need it for finding the backend executable (which is still in libexec, i.e. a separate directory, now).

M  +6    -6    rkward/CMakeLists.txt
M  +1    -0    rkward/rbackend/CMakeLists.txt
M  +5    -0    rkward/rbackend/rkfrontendtransmitter.cpp

https://commits.kde.org/rkward/d7228406ee08c4f5d66c5ca0c741053d2de63bfe

diff --git a/rkward/CMakeLists.txt b/rkward/CMakeLists.txt
index f80b068d..f6f78dda 100755
--- a/rkward/CMakeLists.txt
+++ b/rkward/CMakeLists.txt
@@ -33,21 +33,21 @@ SET(RKWard_Sources
 	rkconsole.cpp
 )
 
-# somehow the needed libdirs for R do not get passed down automatically
+# somehow the detected R paths from FindR.cmake do not get passed down automatically
+GET_DIRECTORY_PROPERTY(R_EXECUTABLE DIRECTORY rbackend DEFINITION R_EXECUTABLE)
 GET_DIRECTORY_PROPERTY(R_SHAREDLIBDIR DIRECTORY rbackend LINK_DIRECTORIES)
 LINK_DIRECTORIES(${R_SHAREDLIBDIR})
 
-GET_DIRECTORY_PROPERTY(R_EXECUTABLE DIRECTORY rbackend DEFINITION R_EXECUTABLE)
 ADD_CUSTOM_COMMAND (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rkward.ico"
 			COMMAND cmake -E copy "${CMAKE_CURRENT_SOURCE_DIR}/icons/app-icon/rkward.ico"
 			"${CMAKE_CURRENT_BINARY_DIR}/rkward.ico")
 
-add_executable(rkward ${RKWard_Sources} rkward_windows_icon.rc rkward.ico)
+ADD_EXECUTABLE(rkward ${RKWard_Sources} rkward_windows_icon.rc rkward.ico)
 # NOTE: These definitions are needed for the startup procedure (main.cpp), only.
 # We should switch with to target_compile_definitions once we require CMAKE 2.6+
-add_definitions (-DR_EXECUTABLE="${R_EXECUTABLE}")
-add_definitions (-DINSTALL_PATH="${CMAKE_INSTALL_PREFIX}")
-add_definitions (-DR_LIBS="${R_LIBDIR}")
+ADD_DEFINITIONS(-DR_EXECUTABLE="${R_EXECUTABLE}")
+ADD_DEFINITIONS(-DINSTALL_PATH="${CMAKE_INSTALL_PREFIX}")
+ADD_DEFINITIONS(-DR_LIBS="${R_LIBDIR}")
 SET_TARGET_PROPERTIES(rkward PROPERTIES
         MACOSX_BUNDLE_BUNDLE_NAME "RKWard")
 
diff --git a/rkward/rbackend/CMakeLists.txt b/rkward/rbackend/CMakeLists.txt
index 77786cf7..e4116695 100644
--- a/rkward/rbackend/CMakeLists.txt
+++ b/rkward/rbackend/CMakeLists.txt
@@ -54,6 +54,7 @@ SET (
 	rktransmitter.cpp
 )
 ADD_DEFINITIONS (-DRKWARD_SPLIT_PROCESS)
+ADD_DEFINITIONS (-DRKWARD_BACKEND_PATH="${CMAKE_INSTALL_PREFIX}/${LIBEXEC_INSTALL_DIR}")
 LINK_DIRECTORIES(${R_SHAREDLIBDIR})
 ADD_EXECUTABLE(rkward.rbackend ${rbackend_BACKEND_SRCS})
 TARGET_LINK_LIBRARIES(rkward.rbackend rkgraphicsdevice.backend ${R_USED_LIBS} ${CMAKE_THREAD_LIBS_INIT} Qt5::Network Qt5::Core ${LibIntl_LIBRARIES})
diff --git a/rkward/rbackend/rkfrontendtransmitter.cpp b/rkward/rbackend/rkfrontendtransmitter.cpp
index 2f62e860..a55c8f66 100644
--- a/rkward/rbackend/rkfrontendtransmitter.cpp
+++ b/rkward/rbackend/rkfrontendtransmitter.cpp
@@ -102,6 +102,11 @@ void RKFrontendTransmitter::run () {
 	args.append ("--locale-dir=" + localeDir ().toUtf8 ().toPercentEncoding ());
 	connect (backend, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &RKFrontendTransmitter::backendExit);
 	QString backend_executable = findBackendAtPath (QCoreApplication::applicationDirPath ());
+#ifdef Q_OS_MAC
+	if (backend_executable.isNull ()) backend_executable = findBackendAtPath (QCoreApplication::applicationDirPath () + "/rkward.frontend.app/Contents/MacOS"); 	// this is for running directly from a build tree
+#endif
+	if (backend_executable.isEmpty ()) backend_executable = findBackendAtPath (RKWARD_BACKEND_PATH);
+	if (backend_executable.isNull ()) backend_executable = findBackendAtPath (QCoreApplication::applicationDirPath () + "../lib/libexec");
 	if (backend_executable.isEmpty ()) backend_executable = findBackendAtPath (QCoreApplication::applicationDirPath () + "/rbackend");	// for running directly from the build-dir
 #ifdef Q_OS_MAC
         if (backend_executable.isEmpty ()) backend_executable = findBackendAtPath (QCoreApplication::applicationDirPath () + "/../../../rbackend");



More information about the rkward-tracker mailing list