From 6ae75ecafed3b06013b49fd30edd97ee2e040969 Mon Sep 17 00:00:00 2001 From: humbletim Date: Thu, 25 Jul 2019 21:53:17 -0400 Subject: [PATCH] segregated scripting/ plugins (re: permissions checkbox) --- cmake/macros/SetupHifiClientServerPlugin.cmake | 8 +++++++- libraries/plugins/src/plugins/PluginManager.cpp | 14 +++++++++++++- libraries/plugins/src/plugins/PluginManager.h | 4 ++++ plugins/KasenAPIExample/CMakeLists.txt | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cmake/macros/SetupHifiClientServerPlugin.cmake b/cmake/macros/SetupHifiClientServerPlugin.cmake index bc66484c30..1ce0b0ca6e 100644 --- a/cmake/macros/SetupHifiClientServerPlugin.cmake +++ b/cmake/macros/SetupHifiClientServerPlugin.cmake @@ -7,7 +7,8 @@ # macro(SETUP_HIFI_CLIENT_SERVER_PLUGIN) set(${TARGET_NAME}_SHARED 1) - setup_hifi_library(${ARGV}) + set(PLUGIN_SUBFOLDER ${ARGN}) + setup_hifi_library() if (BUILD_CLIENT) add_dependencies(interface ${TARGET_NAME}) @@ -27,6 +28,11 @@ macro(SETUP_HIFI_CLIENT_SERVER_PLUGIN) set(SERVER_PLUGIN_PATH "plugins") endif() + if (PLUGIN_SUBFOLDER) + set(CLIENT_PLUGIN_PATH "${CLIENT_PLUGIN_PATH}/${PLUGIN_SUBFOLDER}") + set(SERVER_PLUGIN_PATH "${SERVER_PLUGIN_PATH}/${PLUGIN_SUBFOLDER}") + endif() + if (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_GENERATOR STREQUAL "Unix Makefiles") set(CLIENT_PLUGIN_FULL_PATH "${CMAKE_BINARY_DIR}/interface/${CLIENT_PLUGIN_PATH}/") set(SERVER_PLUGIN_FULL_PATH "${CMAKE_BINARY_DIR}/assignment-client/${SERVER_PLUGIN_PATH}/") diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index 420842b453..8f1184904e 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -110,6 +110,16 @@ int PluginManager::instantiate() { pluginDir.setNameFilters(QStringList() << "libplugins_lib*.so"); #endif auto candidates = pluginDir.entryList(); + + if (_enableScriptingPlugins.get()) { + QDir scriptingPluginDir{ pluginDir }; + scriptingPluginDir.cd("scripting"); + qCDebug(plugins) << "Loading scripting plugins from " << scriptingPluginDir.path(); + for (auto plugin : scriptingPluginDir.entryList()) { + candidates << "scripting/" + plugin; + } + } + for (auto plugin : candidates) { qCDebug(plugins) << "Attempting plugin" << qPrintable(plugin); QSharedPointer loader(new QPluginLoader(pluginPath + plugin)); @@ -144,7 +154,9 @@ int PluginManager::instantiate() { qCDebug(plugins) << " " << qPrintable(loader->errorString()); } } - } else qWarning() << "pluginPath does not exit..." << pluginDir; + } else { + qWarning() << "pluginPath does not exit..." << pluginDir; + } }); return loadedPlugins; } diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index e0d35a690d..eb377a2c8e 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -10,6 +10,7 @@ #include #include +#include #include "Forward.h" @@ -70,6 +71,9 @@ private: using LoaderList = QList; const LoaderList& getLoadedPlugins() const; + Setting::Handle _enableScriptingPlugins { + "private/enableScriptingPlugins", (bool)qgetenv("enableScriptingPlugins").toInt() + }; }; // TODO: we should define this value in CMake, and then use CMake diff --git a/plugins/KasenAPIExample/CMakeLists.txt b/plugins/KasenAPIExample/CMakeLists.txt index 14e2dc0b3d..96ac84e10d 100644 --- a/plugins/KasenAPIExample/CMakeLists.txt +++ b/plugins/KasenAPIExample/CMakeLists.txt @@ -1,3 +1,3 @@ set(TARGET_NAME KasenAPIExample) -setup_hifi_client_server_plugin() +setup_hifi_client_server_plugin(scripting) link_hifi_libraries(shared plugins avatars networking graphics gpu)