void ModuleManager::InitializeBuiltins() { PluginManager & pm = PluginManager::Get(); for (auto moduleMain : builtinModuleList()) { ModuleInterfaceHandle module { moduleMain(this, NULL), ModuleInterfaceDeleter{} }; if (module->Initialize()) { // Register the provider ModuleInterface *pInterface = module.get(); const PluginID & id = pm.RegisterPlugin(pInterface); // Need to remember it mDynModules[id] = std::move(module); // Allow the module to auto-register children pInterface->AutoRegisterPlugins(pm); } else { // Don't leak! Destructor of module does that. } } }
bool ModuleManager::DiscoverProviders() { InitializeBuiltins(); wxArrayString provList; wxArrayString pathList; // Code from LoadLadspa that might be useful in load modules. wxString pathVar = wxString::FromUTF8(getenv("AUDACITY_MODULES_PATH")); if (pathVar != wxT("")) { wxGetApp().AddMultiPathsToPathList(pathVar, pathList); } else { wxGetApp().AddUniquePathToPathList(FileNames::ModulesDir(), pathList); } #if defined(__WXMSW__) wxGetApp().FindFilesInPathList(wxT("*.dll"), pathList, provList); #elif defined(__WXMAC__) wxGetApp().FindFilesInPathList(wxT("*.dylib"), pathList, provList); #else wxGetApp().FindFilesInPathList(wxT("*.so"), pathList, provList); #endif PluginManager & pm = PluginManager::Get(); for (int i = 0, cnt = provList.GetCount(); i < cnt; i++) { ModuleInterface *module = LoadModule(provList[i]); if (module) { // Register the provider pm.RegisterPlugin(module); // Now, allow the module to auto-register children module->AutoRegisterPlugins(pm); } } return true; }
void ModuleManager::InitializeBuiltins() { PluginManager & pm = PluginManager::Get(); for (size_t i = 0, cnt = pBuiltinModuleList->GetCount(); i < cnt; i++) { ModuleInterface *module = ((ModuleMain) (*pBuiltinModuleList)[i])(this, NULL); if (module->Initialize()) { // Register the provider const PluginID & id = pm.RegisterPlugin(module); // Need to remember it mDynModules[id] = module; // Allow the module to auto-register children module->AutoRegisterPlugins(pm); } } }