foreach( const QFileInfo & f, list ) { QLibrary plugin_lib( f.absoluteFilePath() ); if( plugin_lib.load() == false || plugin_lib.resolve( "lmms_plugin_main" ) == NULL ) { continue; } QString desc_name = f.fileName().section( '.', 0, 0 ) + "_plugin_descriptor"; if( desc_name.left( 3 ) == "lib" ) { desc_name = desc_name.mid( 3 ); } Descriptor * plugin_desc = (Descriptor *) plugin_lib.resolve( desc_name.toUtf8().constData() ); if( plugin_desc == NULL ) { printf( "LMMS plugin %s does not have a " "plugin descriptor named %s!\n", f.absoluteFilePath().toUtf8().constData(), desc_name.toUtf8().constData() ); continue; } _plugin_descs.push_back( *plugin_desc ); }
Plugin * Plugin::instantiate( const QString & _plugin_name, Model * _parent, void * _data ) { QLibrary plugin_lib( configManager::inst()->pluginDir() + _plugin_name ); if( plugin_lib.load() == false ) { if( engine::hasGUI() ) { QMessageBox::information( NULL, tr( "Plugin not found" ), tr( "The plugin \"%1\" wasn't found " "or could not be loaded!\n" "Reason: \"%2\"" ).arg( _plugin_name ). arg( plugin_lib.errorString() ), QMessageBox::Ok | QMessageBox::Default ); } return new DummyPlugin(); } instantiationHook inst_hook = ( instantiationHook ) plugin_lib.resolve( "lmms_plugin_main" ); if( inst_hook == NULL ) { if( engine::hasGUI() ) { QMessageBox::information( NULL, tr( "Error while loading plugin" ), tr( "Failed to load plugin \"%1\"!" ).arg( _plugin_name ), QMessageBox::Ok | QMessageBox::Default ); } return new DummyPlugin(); } Plugin * inst = inst_hook( _parent, _data ); return inst; }
LadspaManager::LadspaManager() { // Make sure plugin search paths are set up PluginFactory::instance(); QStringList ladspaDirectories = QString( getenv( "LADSPA_PATH" ) ). split( LADSPA_PATH_SEPERATOR ); ladspaDirectories += ConfigManager::inst()->ladspaDir().split( ',' ); ladspaDirectories.push_back( "plugins:ladspa" ); #ifndef LMMS_BUILD_WIN32 ladspaDirectories.push_back( qApp->applicationDirPath() + '/' + LIB_DIR + "ladspa" ); ladspaDirectories.push_back( "/usr/lib/ladspa" ); ladspaDirectories.push_back( "/usr/lib64/ladspa" ); ladspaDirectories.push_back( "/usr/local/lib/ladspa" ); ladspaDirectories.push_back( "/usr/local/lib64/ladspa" ); ladspaDirectories.push_back( "/Library/Audio/Plug-Ins/LADSPA" ); #endif for( QStringList::iterator it = ladspaDirectories.begin(); it != ladspaDirectories.end(); ++it ) { QDir directory( ( *it ) ); QFileInfoList list = directory.entryInfoList(); for( QFileInfoList::iterator file = list.begin(); file != list.end(); ++file ) { const QFileInfo & f = *file; if( !f.isFile() || f.fileName().right( 3 ).toLower() != #ifdef LMMS_BUILD_WIN32 "dll" #else ".so" #endif ) { continue; } QLibrary plugin_lib( f.absoluteFilePath() ); if( plugin_lib.load() == true ) { LADSPA_Descriptor_Function descriptorFunction = ( LADSPA_Descriptor_Function ) plugin_lib.resolve( "ladspa_descriptor" ); if( descriptorFunction != NULL ) { addPlugins( descriptorFunction, f.fileName() ); } } else { qWarning() << plugin_lib.errorString(); } } } l_ladspa_key_t keys = m_ladspaManagerMap.keys(); for( l_ladspa_key_t::iterator it = keys.begin(); it != keys.end(); ++it ) { m_sortedPlugins.append( qMakePair( getName( *it ), *it ) ); } qSort( m_sortedPlugins ); }