# HG changeset patch # User Chris Cannam # Date 1146837883 0 # Node ID 45175d8c5dc52550e69c4510e245e9569b7de2d4 # Parent ac89a106f15511a6ed1f7e0a3089a49752a96fae * Fix failure to locate plugins by base name of .so file diff -r ac89a106f155 -r 45175d8c5dc5 plugin/LADSPAPluginFactory.cpp --- a/plugin/LADSPAPluginFactory.cpp Fri May 05 14:04:09 2006 +0000 +++ b/plugin/LADSPAPluginFactory.cpp Fri May 05 14:04:43 2006 +0000 @@ -410,7 +410,51 @@ LADSPAPluginFactory::loadLibrary(QString soName) { void *libraryHandle = DLOPEN(soName, RTLD_NOW); - if (libraryHandle) m_libraryHandles[soName] = libraryHandle; + if (libraryHandle) { + m_libraryHandles[soName] = libraryHandle; + std::cerr << "LADSPAPluginFactory::loadLibrary: Loaded library \"" << soName.toStdString() << "\"" << std::endl; + return; + } + + if (QFileInfo(soName).exists()) { + DLERROR(); + std::cerr << "LADSPAPluginFactory::loadLibrary: Library \"" << soName.toStdString() << "\" exists, but failed to load it" << std::endl; + return; + } + + std::vector pathList = getPluginPath(); + + QString fileName = QFile(soName).fileName(); + QString base = QFileInfo(soName).baseName(); + + for (std::vector::iterator i = pathList.begin(); + i != pathList.end(); ++i) { + + std::cerr << "Looking at: " << (*i).toStdString() << std::endl; + + QDir dir(*i, PLUGIN_GLOB, + QDir::Name | QDir::IgnoreCase, + QDir::Files | QDir::Readable); + + if (QFileInfo(dir.filePath(fileName)).exists()) { + std::cerr << "Loading: " << fileName.toStdString() << std::endl; + libraryHandle = DLOPEN(dir.filePath(fileName), RTLD_NOW); + if (libraryHandle) m_libraryHandles[soName] = libraryHandle; + return; + } + + for (unsigned int j = 0; j < dir.count(); ++j) { + QString file = dir.filePath(dir[j]); + if (QFileInfo(file).baseName() == base) { + std::cerr << "Loading: " << file.toStdString() << std::endl; + libraryHandle = DLOPEN(file, RTLD_NOW); + if (libraryHandle) m_libraryHandles[soName] = libraryHandle; + return; + } + } + } + + std::cerr << "LADSPAPluginFactory::loadLibrary: Failed to locate plugin library \"" << soName.toStdString() << "\"" << std::endl; } void