# HG changeset patch
# User Chris Cannam
# Date 1478009207 0
# Node ID c6bdf247016a9f264a05082f9725b93171d17dac
# Parent 42a4b058f8ba26c7bf35edf70784a1934e6b4d47
Support multiple plugin checker helpers, as for multiple piper servers
diff -r 42a4b058f8ba -r c6bdf247016a files.pri
--- a/files.pri Tue Nov 01 12:09:05 2016 +0000
+++ b/files.pri Tue Nov 01 14:06:47 2016 +0000
@@ -7,6 +7,7 @@
base/Command.h \
base/Debug.h \
base/Exceptions.h \
+ base/HelperExecPath.h \
base/LogRange.h \
base/MagnitudeRange.h \
base/Pitch.h \
@@ -144,6 +145,7 @@
base/Command.cpp \
base/Debug.cpp \
base/Exceptions.cpp \
+ base/HelperExecPath.cpp \
base/LogRange.cpp \
base/Pitch.cpp \
base/PlayParameterRepository.cpp \
diff -r 42a4b058f8ba -r c6bdf247016a plugin/PiperVampPluginFactory.cpp
--- a/plugin/PiperVampPluginFactory.cpp Tue Nov 01 12:09:05 2016 +0000
+++ b/plugin/PiperVampPluginFactory.cpp Tue Nov 01 14:06:47 2016 +0000
@@ -4,7 +4,7 @@
Sonic Visualiser
An audio file viewer and annotation editor.
Centre for Digital Music, Queen Mary, University of London.
- This file copyright 2006 Chris Cannam and QMUL.
+ This file copyright 2006-2016 Chris Cannam and QMUL.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -37,6 +37,7 @@
#include
#include "base/Profiler.h"
+#include "base/HelperExecPath.h"
#include "vamp-client/ProcessQtTransport.h"
#include "vamp-client/CapnpRRClient.h"
@@ -47,41 +48,16 @@
PiperVampPluginFactory::PiperVampPluginFactory()
{
- // Server must exist either in the same directory as this one or
- // (preferably) a subdirectory called "piper-bin".
- //!!! todo: merge this with plugin scan checker thingy used in main.cpp?
-
- QString myDir = QCoreApplication::applicationDirPath();
- QString name = "piper-vamp-simple-server";
- QStringList suffixes = getServerSuffixes();
- QString extension = "";
-#ifdef _WIN32
- extension = ".exe";
-#endif
+ QString serverName = "piper-vamp-simple-server";
- for (QString s: suffixes) {
-
- QString path = myDir + "/piper-bin/" + name + s + extension;
-
- if (QFile(path).exists()) {
- m_servers.push_back(path);
- } else {
- cerr << "NOTE: Piper Vamp server " << name << s
- << " not found at " << path
- << ", trying in my own directory" << endl;
- path = myDir + "/" + name + s + extension;
-
- if (QFile(path).exists()) {
- m_servers.push_back(path);
- } else {
- cerr << "NOTE: Piper Vamp server " << name << s
- << " not found at " << path << endl;
- }
- }
- }
+ m_servers = HelperExecPath::getHelperExecutables(serverName);
if (m_servers.empty()) {
- cerr << "NOTE: No Piper Vamp servers found" << endl;
+ cerr << "NOTE: No Piper Vamp servers found in installation;"
+ << " found none of the following:" << endl;
+ for (auto d: HelperExecPath::getHelperCandidatePaths(serverName)) {
+ cerr << "NOTE: " << d << endl;
+ }
}
}
diff -r 42a4b058f8ba -r c6bdf247016a plugin/PluginScan.cpp
--- a/plugin/PluginScan.cpp Tue Nov 01 12:09:05 2016 +0000
+++ b/plugin/PluginScan.cpp Tue Nov 01 14:06:47 2016 +0000
@@ -15,6 +15,7 @@
#include "PluginScan.h"
#include "base/Debug.h"
+#include "base/HelperExecPath.h"
#include "checker/knownplugins.h"
@@ -50,22 +51,36 @@
}
PluginScan::~PluginScan() {
- delete m_kp;
+ clear();
delete m_logger;
}
void
-PluginScan::scan(QString helperExecutablePath)
+PluginScan::scan()
{
- delete m_kp;
+ QStringList helperPaths =
+ HelperExecPath::getHelperExecutables("plugin-checker-helper");
+
+ clear();
+
+ for (auto p: helperPaths) {
+ try {
+ KnownPlugins *kp = new KnownPlugins(p.toStdString(), m_logger);
+ m_kp.push_back(kp);
+ m_succeeded = true;
+ } catch (const std::exception &e) {
+ cerr << "ERROR: PluginScan::scan: " << e.what()
+ << " (with helper path = " << p << ")" << endl;
+ }
+ }
+}
+
+void
+PluginScan::clear()
+{
+ for (auto &p: m_kp) delete p;
+ m_kp.clear();
m_succeeded = false;
- try {
- m_kp = new KnownPlugins(helperExecutablePath.toStdString(), m_logger);
- m_succeeded = true;
- } catch (const std::exception &e) {
- cerr << "ERROR: PluginScan::scan: " << e.what() << endl;
- m_kp = 0;
- }
}
QStringList
@@ -80,9 +95,10 @@
}
QStringList candidates;
- if (!m_kp) return candidates;
- auto c = m_kp->getCandidateLibrariesFor(kpt);
- for (auto s: c) candidates.push_back(s.c_str());
+ for (auto kp: m_kp) {
+ auto c = kp->getCandidateLibrariesFor(kpt);
+ for (auto s: c) candidates.push_back(s.c_str());
+ }
return candidates;
}
@@ -96,20 +112,23 @@
"installed alongside %1?
")
.arg(QCoreApplication::applicationName());
}
- if (!m_kp) {
+ if (m_kp.empty()) {
return QObject::tr("Did not scan for plugins"
"Apparently no scan for plugins was attempted "
"(internal error?)
");
}
- string report = m_kp->getFailureReport();
+ QString report;
+ for (auto kp: m_kp) {
+ report += QString::fromStdString(kp->getFailureReport());
+ }
if (report == "") {
- return QString(report.c_str());
+ return report;
}
return QObject::tr("Failed to load plugins"
"Failed to load one or more plugin libraries:
")
- + QString(report.c_str())
+ + report
+ QObject::tr("These plugins may be incompatible with the system, "
"and will be ignored during this run of %1.
")
.arg(QCoreApplication::applicationName());
diff -r 42a4b058f8ba -r c6bdf247016a plugin/PluginScan.h
--- a/plugin/PluginScan.h Tue Nov 01 12:09:05 2016 +0000
+++ b/plugin/PluginScan.h Tue Nov 01 14:06:47 2016 +0000
@@ -16,6 +16,7 @@
#define PLUGIN_SCAN_H
#include
+#include
class KnownPlugins;
@@ -24,7 +25,7 @@
public:
static PluginScan *getInstance();
- void scan(QString helperExecutablePath);
+ void scan();
bool scanSucceeded() const;
@@ -40,7 +41,10 @@
private:
PluginScan();
~PluginScan();
- KnownPlugins *m_kp;
+
+ void clear();
+
+ std::vector m_kp;
bool m_succeeded;
class Logger;