mana: fix plugin loading

This commit is contained in:
Florian Lüke 2025-01-02 22:07:00 +01:00
parent a4761647cd
commit 3bc9819c14

View file

@ -367,19 +367,26 @@ PluginWrapper load_mana_plugin(const std::string &filename,
PluginWrapper result;
result.pluginHandle = boost::dll::shared_library(filename, boost::dll::load_mode::rtld_global);
if (auto entryPoint = result.pluginHandle.get<mana_sink_plugin_t()>("mana_get_sink_plugin"))
try
{
std::vector<const char *> argv;
for (const auto &arg: pluginArgs)
argv.push_back(arg.data());
result.destSink = std::make_unique<mana::ManaCSink>(entryPoint(), argv.size(), argv.data());
if (auto entryPoint = result.pluginHandle.get<mana_sink_plugin_t()>("mana_get_sink_plugin"))
{
std::vector<const char *> argv;
for (const auto &arg: pluginArgs)
argv.push_back(arg.data());
result.destSink =
std::make_unique<mana::ManaCSink>(entryPoint(), argv.size(), argv.data());
}
}
else if (auto entryPoint = result.pluginHandle.get<mana::IManaPlugin *()>("mana_get_plugin"))
catch (const std::exception &e)
{
result.manaCppPlugin = std::unique_ptr<mana::IManaPlugin>(entryPoint());
if (!result.manaCppPlugin)
throw std::runtime_error("plugin {}: mana_get_plugin() returned nullptr");
result.destSink = result.manaCppPlugin->makeSink();
if (auto entryPoint = result.pluginHandle.get<mana::IManaPlugin *()>("mana_get_plugin"))
{
result.manaCppPlugin = std::unique_ptr<mana::IManaPlugin>(entryPoint());
if (!result.manaCppPlugin)
throw std::runtime_error("plugin {}: mana_get_plugin() returned nullptr");
result.destSink = result.manaCppPlugin->makeSink();
}
}
return result;