comparison plugin/LADSPAPluginFactory.cpp @ 106:45175d8c5dc5

* Fix failure to locate plugins by base name of .so file
author Chris Cannam
date Fri, 05 May 2006 14:04:43 +0000
parents c983dda79f72
children 4170b21773cf
comparison
equal deleted inserted replaced
105:ac89a106f155 106:45175d8c5dc5
408 408
409 void 409 void
410 LADSPAPluginFactory::loadLibrary(QString soName) 410 LADSPAPluginFactory::loadLibrary(QString soName)
411 { 411 {
412 void *libraryHandle = DLOPEN(soName, RTLD_NOW); 412 void *libraryHandle = DLOPEN(soName, RTLD_NOW);
413 if (libraryHandle) m_libraryHandles[soName] = libraryHandle; 413 if (libraryHandle) {
414 m_libraryHandles[soName] = libraryHandle;
415 std::cerr << "LADSPAPluginFactory::loadLibrary: Loaded library \"" << soName.toStdString() << "\"" << std::endl;
416 return;
417 }
418
419 if (QFileInfo(soName).exists()) {
420 DLERROR();
421 std::cerr << "LADSPAPluginFactory::loadLibrary: Library \"" << soName.toStdString() << "\" exists, but failed to load it" << std::endl;
422 return;
423 }
424
425 std::vector<QString> pathList = getPluginPath();
426
427 QString fileName = QFile(soName).fileName();
428 QString base = QFileInfo(soName).baseName();
429
430 for (std::vector<QString>::iterator i = pathList.begin();
431 i != pathList.end(); ++i) {
432
433 std::cerr << "Looking at: " << (*i).toStdString() << std::endl;
434
435 QDir dir(*i, PLUGIN_GLOB,
436 QDir::Name | QDir::IgnoreCase,
437 QDir::Files | QDir::Readable);
438
439 if (QFileInfo(dir.filePath(fileName)).exists()) {
440 std::cerr << "Loading: " << fileName.toStdString() << std::endl;
441 libraryHandle = DLOPEN(dir.filePath(fileName), RTLD_NOW);
442 if (libraryHandle) m_libraryHandles[soName] = libraryHandle;
443 return;
444 }
445
446 for (unsigned int j = 0; j < dir.count(); ++j) {
447 QString file = dir.filePath(dir[j]);
448 if (QFileInfo(file).baseName() == base) {
449 std::cerr << "Loading: " << file.toStdString() << std::endl;
450 libraryHandle = DLOPEN(file, RTLD_NOW);
451 if (libraryHandle) m_libraryHandles[soName] = libraryHandle;
452 return;
453 }
454 }
455 }
456
457 std::cerr << "LADSPAPluginFactory::loadLibrary: Failed to locate plugin library \"" << soName.toStdString() << "\"" << std::endl;
414 } 458 }
415 459
416 void 460 void
417 LADSPAPluginFactory::unloadLibrary(QString soName) 461 LADSPAPluginFactory::unloadLibrary(QString soName)
418 { 462 {