diff options
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | cmake/modules/OCConfigPluginDir.cmake | 35 | ||||
-rw-r--r-- | config.h.in | 1 | ||||
-rw-r--r-- | src/gui/application.cpp | 6 |
4 files changed, 46 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b94b8390..0c0f72119 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,12 +21,16 @@ include(KDECompilerSettings NO_POLICY_SCOPE) set(CMAKE_POSITION_INDEPENDENT_CODE ON) +find_package(Qt5 REQUIRED COMPONENTS Core) + if(UNIT_TESTING) message(DEPRECATION "Setting UNIT_TESTING is deprecated please use BUILD_TESTING") set(BUILD_TESTING TRUE) endif() include(CTest) + +include(OCConfigPluginDir) include("${CMAKE_CURRENT_LIST_DIR}/THEME.cmake") set(synclib_NAME "${APPLICATION_EXECUTABLE}sync") diff --git a/cmake/modules/OCConfigPluginDir.cmake b/cmake/modules/OCConfigPluginDir.cmake new file mode 100644 index 000000000..af6421833 --- /dev/null +++ b/cmake/modules/OCConfigPluginDir.cmake @@ -0,0 +1,35 @@ +function(IS_SUBDIR ROOT CHILD OUT) + file(RELATIVE_PATH REL_PATH "${ROOT}" "${CHILD}") + string(REGEX MATCH "^\.\./" NOT_SUBDIR "${REL_PATH}") + if (NOT_SUBDIR) + set(${OUT} FALSE PARENT_SCOPE) + else() + set(${OUT} TRUE PARENT_SCOPE) + endif() +endfunction() + + +if (UNIX AND NOT APPLE) + set(OC_PLUGIN_DIR ${KDE_INSTALL_FULL_PLUGINDIR}) + IS_SUBDIR("${CMAKE_INSTALL_PREFIX}" "${OC_PLUGIN_DIR}" _is_subdir) + if (NOT _is_subdir) + if (KDE_INSTALL_USE_QT_SYS_PATHS) + message(FATAL_ERROR "Using KDE_INSTALL_USE_QT_SYS_PATHS with a non bundled Qt is not supported.") + else() + message(FATAL_ERROR "KDE_INSTALL_PLUGINDIR must be located in CMAKE_INSTALL_PREFIX") + endif() + endif() + + include(ECMQueryQmake) + query_qmake(_qt_plugin_dir QT_INSTALL_PLUGINS TRY) + # any sub dir of _qt_plugin_dir is sufficient + IS_SUBDIR("${_qt_plugin_dir}" "${OC_PLUGIN_DIR}" _is_subdir) + if (_is_subdir) + # no need to add a additional plugin dir + unset(OC_PLUGIN_DIR) + else() + # set plugin dir to a path relative to the binary + file(RELATIVE_PATH OC_PLUGIN_DIR "${CMAKE_INSTALL_FULL_BINDIR}" "${OC_PLUGIN_DIR}") + message(STATUS "Adding additional plugin path: ${OC_PLUGIN_DIR}") + endif() +endif() diff --git a/config.h.in b/config.h.in index 6e4371efb..7b3a835bd 100644 --- a/config.h.in +++ b/config.h.in @@ -27,6 +27,7 @@ #cmakedefine SYSCONFDIR "@SYSCONFDIR@" #cmakedefine SHAREDIR "@SHAREDIR@" +#cmakedefine OC_PLUGIN_DIR "@OC_PLUGIN_DIR@" #cmakedefine01 GUI_TESTING diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 88d362552..894c2a0fa 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -263,6 +263,12 @@ Application::Application(int &argc, char **argv) if (!AbstractNetworkJob::httpTimeout) AbstractNetworkJob::httpTimeout = cfg.timeout(); +#if defined(OC_PLUGIN_DIR) && defined(Q_OS_LINUX) + const QString extraPluginDir = QDir(QApplication::applicationDirPath()).filePath(QStringLiteral(OC_PLUGIN_DIR)); + qCInfo(lcApplication) << "Adding extra plugin search path:" << extraPluginDir; + this->addLibraryPath(extraPluginDir); +#endif + // Check vfs plugins if (Theme::instance()->showVirtualFilesOption() && bestAvailableVfsMode() == Vfs::Off) { qCWarning(lcApplication) << "Theme wants to show vfs mode, but no vfs plugins are available"; |