25#include "common/array.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
62extern const int pluginTypeVersions[PLUGIN_TYPE_MAX];
68#if defined(USE_ELF_LOADER) && defined(ELF_LOADER_CXA_ATEXIT)
69#define PLUGIN_DYNAMIC_DSO_HANDLE \
70 __attribute__((visibility("hidden"))) void *__dso_handle = &__dso_handle;
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) \
118 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##_()
163 Plugin() : _pluginObject(0), _type(PLUGIN_TYPE_MAX) {}
170 virtual bool loadPlugin() = 0;
171 virtual void unloadPlugin() = 0;
178 const char *getName()
const;
182 T *pluginObject =
dynamic_cast<T *
>(_pluginObject);
184 error(
"Invalid cast of plugin %s", getName());
186 return *pluginObject;
201 bool loadPlugin()
override;
202 void unloadPlugin()
override;
235#ifdef DYNAMIC_MODULES
292#define PluginMan PluginManager::instance()
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:157
PluginType getType() const
virtual Common::Path getFileName() const
Definition: plugins.h:194
Definition: plugins.h:298
const Plugin * findEnginePlugin(const Common::String &engineId)
Definition: plugins.h:352
Definition: plugins.h:143
virtual const char * getName() const =0
Definition: plugins.h:215
virtual bool isFilePluginProvider()
Definition: plugins.h:232
virtual PluginList getPlugins()=0
Definition: plugins.h:197
void NORETURN_PRE error(MSVC_PRINTF const char *s,...) GCC_PRINTF(1