Files
GDevelop/Core/GDCore/IDE/ExtensionsLoader.h
2023-04-28 11:58:51 +02:00

77 lines
2.6 KiB
C++

/*
* GDevelop Core
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights
* reserved. This project is released under the MIT License.
*/
#ifndef EXTENSIONSLOADER_H
#define EXTENSIONSLOADER_H
#include <vector>
#include "GDCore/String.h"
namespace gd {
class Platform;
}
namespace gd {
/**
* \brief Internal class loading static extensions.
*
* Class that load extensions and store them in a Platform.
*
* \note This is for loading extensions declared in C++, usually in
* files called "Extension.cpp" or "JsExtension.cpp".
* GDevelop 5 extensions can also be declared directly in JavaScript.
* See newIDE/app/src/JsExtensionsLoader and "JsExtension.js" files
* for extensions declared in JavaScript.
*/
class GD_CORE_API ExtensionsLoader {
public:
/**
* \brief Load all extensions located in the extensions directory for a
* platform.
*
* \param directory The directory where extensions must be searched.
* \param platform The platform the extensions belongs to.
* \param forgiving If set to true, files will try to be opened, but a failure
* when searching for the platform creation function symbol won't be logged as
* an error. (All other errors are still reported as usual).
*
* \note Extensions files must have extensions *.xgd(w|l|m)(e),
* w for Windows, l for Linux, m for Mac, e for Edittime extensions.
*/
static void LoadAllExtensions(const gd::String& directory,
gd::Platform& platform,
bool forgiving = false);
/**
* \brief Load an extension from a file and add it to a platform.
*
* \param fullpath The fullpath to the extension file.
* \param platform The platform the extension belongs to.
* \param forgiving If set to true, files will try to be opened, but a failure
* when searching for the platform creation function symbol won't be logged as
* an error. (All other errors are still reported as usual).
*/
static void LoadExtension(const gd::String& fullpath,
gd::Platform& platform,
bool forgiving = false);
/**
* \brief To be called when extensions loading is done.
*
* This is necessary on Linux to make symbols exported by extensions
* available. \param directory The directory where extensions have been loaded
* from.
*/
static void ExtensionsLoadingDone(const gd::String& directory);
private:
ExtensionsLoader(){};
virtual ~ExtensionsLoader(){};
};
} // namespace gd
#endif // EXTENSIONSLOADER_H