22 #ifndef BASE_PLUGINS_H 23 #define BASE_PLUGINS_H 25 #include "common/array.h" 26 #include "common/fs.h" 27 #include "common/str.h" 28 #include "backends/plugins/elf/version.h" 30 #if defined(USE_ELF_LOADER) && defined(ELF_LOADER_CXA_ATEXIT) 34 #define INCLUDED_FROM_BASE_PLUGINS_H 35 #include "base/internal_plugins.h" 36 #undef INCLUDED_FROM_BASE_PLUGINS_H 42 #define PLUGIN_VERSION 1 45 PLUGIN_TYPE_ENGINE_DETECTION = 0,
48 PLUGIN_TYPE_DETECTION,
56 #define PLUGIN_TYPE_ENGINE_DETECTION_VERSION 1 57 #define PLUGIN_TYPE_ENGINE_VERSION 2 58 #define PLUGIN_TYPE_MUSIC_VERSION 1 59 #define PLUGIN_TYPE_DETECTION_VERSION 1 60 #define PLUGIN_TYPE_SCALER_VERSION 1 62 extern const int pluginTypeVersions[PLUGIN_TYPE_MAX];
68 #if defined(USE_ELF_LOADER) && defined(ELF_LOADER_CXA_ATEXIT) 69 #define PLUGIN_DYNAMIC_DSO_HANDLE \ 70 uint32 __dso_handle __attribute__((visibility("hidden"))) = 0; 75 #define PLUGIN_DYNAMIC_FINALIZE \ 76 PLUGIN_EXPORT void PLUGIN_finalize() { __cxxabiv1::__cxa_finalize(&__dso_handle); } 78 #define PLUGIN_DYNAMIC_DSO_HANDLE 79 #define PLUGIN_DYNAMIC_FINALIZE 83 #define PLUGIN_DYNAMIC_BUILD_DATE \ 84 PLUGIN_EXPORT const char *PLUGIN_getBuildDate() { return gScummVMPluginBuildDate; } 86 #define PLUGIN_DYNAMIC_BUILD_DATE 98 #define REGISTER_PLUGIN_STATIC(ID,TYPE,PLUGINCLASS) \ 99 extern const PluginType g_##ID##_type; \ 100 const PluginType g_##ID##_type = TYPE; \ 101 PluginObject *g_##ID##_getObject() { \ 102 return new PLUGINCLASS(); \ 104 void dummyFuncToAllowTrailingSemicolon_##ID##_() 106 #ifdef DYNAMIC_MODULES 117 #define REGISTER_PLUGIN_DYNAMIC(ID,TYPE,PLUGINCLASS) \ 119 PLUGIN_DYNAMIC_DSO_HANDLE \ 120 PLUGIN_DYNAMIC_FINALIZE \ 121 PLUGIN_DYNAMIC_BUILD_DATE \ 122 PLUGIN_EXPORT int32 PLUGIN_getVersion() { return PLUGIN_VERSION; } \ 123 PLUGIN_EXPORT int32 PLUGIN_getType() { return TYPE; } \ 124 PLUGIN_EXPORT int32 PLUGIN_getTypeVersion() { return TYPE##_VERSION; } \ 125 PLUGIN_EXPORT PluginObject *PLUGIN_getObject() { \ 126 return new PLUGINCLASS(); \ 129 void dummyFuncToAllowTrailingSemicolon_##ID##_() 131 #endif // DYNAMIC_MODULES 148 virtual const char *
getName()
const = 0;
163 Plugin() : _pluginObject(0), _type(PLUGIN_TYPE_MAX) {}
170 virtual bool loadPlugin() = 0;
171 virtual void unloadPlugin() = 0;
177 PluginType getType()
const;
182 T *pluginObject =
dynamic_cast<T *
>(_pluginObject);
186 return *pluginObject;
201 virtual bool loadPlugin();
202 virtual void unloadPlugin();
235 #ifdef DYNAMIC_MODULES 258 bool isFilePluginProvider() {
return true; }
290 #endif // DYNAMIC_MODULES 292 #define PluginMan PluginManager::instance() 303 ProviderList _providers;
305 bool tryLoadPlugin(
Plugin *plugin);
306 void addToPluginsInMemList(
Plugin *plugin);
312 void unloadAllPlugins();
316 static void destroy() {
delete _instance; _instance = 0; }
331 virtual void init() {}
332 virtual void loadFirstPlugin() {}
333 virtual bool loadNextPlugin() {
return false; }
334 virtual bool loadPluginFromEngineId(
const Common::String &engineId) {
return false; }
335 virtual void updateConfigWithFileName(
const Common::String &engineId) {}
336 virtual void loadDetectionPlugin() {}
337 virtual void unloadDetectionPlugin() {}
340 virtual void loadAllPlugins();
341 virtual void loadAllPluginsOfType(PluginType type);
343 void unloadPluginsExcept(PluginType type,
const Plugin *plugin,
bool deletePlugin =
true);
345 const PluginList &getPlugins(PluginType t) {
return _pluginsInMem[t]; }
359 bool _isDetectionLoaded;
361 PluginManagerUncached() : _detectionPlugin(
nullptr), _currentPlugin(
nullptr), _isDetectionLoaded(
false) {}
362 bool loadPluginByFileName(
const Common::Path &filename);
366 void init()
override;
367 void loadFirstPlugin()
override;
368 bool loadNextPlugin()
override;
369 bool loadPluginFromEngineId(
const Common::String &engineId)
override;
370 void updateConfigWithFileName(
const Common::String &engineId)
override;
371 #ifndef DETECTION_STATIC 372 void loadDetectionPlugin()
override;
373 void unloadDetectionPlugin()
override;
376 void loadAllPlugins()
override {}
377 void loadAllPluginsOfType(PluginType type)
override {}
Definition: plugins.h:197
T * iterator
Definition: array.h:54
Definition: plugins.h:352
virtual const char * getName() const =0
Definition: plugins.h:157
virtual bool isFilePluginProvider()
Definition: plugins.h:232
Definition: plugins.h:143
Definition: plugins.h:298
void NORETURN_PRE error(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
virtual Common::Path getFileName() const
Definition: plugins.h:194
Definition: plugins.h:215