GUI: Refactoring run-addons
This commit is contained in:
parent
61eccd7070
commit
5c9f010a61
|
@ -72,38 +72,13 @@ void CheckThread::run()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString addonPath = getAddonPath();
|
const QString addonPath = getAddonPath();
|
||||||
|
|
||||||
bool needDump = mAddons.contains("y2038") || mAddons.contains("threadsafety") || mAddons.contains("cert") || mAddons.contains("misra");
|
|
||||||
QString file = mResult.getNextFile();
|
QString file = mResult.getNextFile();
|
||||||
while (!file.isEmpty() && mState == Running) {
|
while (!file.isEmpty() && mState == Running) {
|
||||||
qDebug() << "Checking file" << file;
|
qDebug() << "Checking file" << file;
|
||||||
mCppcheck.check(file.toStdString());
|
mCppcheck.check(file.toStdString());
|
||||||
if (!mAddons.isEmpty()) {
|
runAddons(addonPath, nullptr, file);
|
||||||
if (needDump) {
|
|
||||||
mCppcheck.settings().dump = true;
|
|
||||||
mCppcheck.check(file.toStdString());
|
|
||||||
mCppcheck.settings().dump = false;
|
|
||||||
}
|
|
||||||
foreach (const QString addon, mAddons) {
|
|
||||||
if (addon == "clang")
|
|
||||||
continue;
|
|
||||||
QProcess process;
|
|
||||||
QString a;
|
|
||||||
if (QFileInfo(addonPath + '/' + addon + ".py").exists())
|
|
||||||
a = addonPath + '/' + addon + ".py";
|
|
||||||
else if (QFileInfo(addonPath + '/' + addon + '/' + addon + ".py").exists())
|
|
||||||
a = addonPath + '/' + addon + '/' + addon + ".py";
|
|
||||||
else
|
|
||||||
continue;
|
|
||||||
QString dumpFile = file + ".dump";
|
|
||||||
QString cmd = "python " + a + ' ' + dumpFile;
|
|
||||||
qDebug() << cmd;
|
|
||||||
process.start(cmd);
|
|
||||||
process.waitForFinished();
|
|
||||||
parseAddonErrors(process.readAllStandardError(), addon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
emit fileChecked(file);
|
emit fileChecked(file);
|
||||||
|
|
||||||
if (mState == Running)
|
if (mState == Running)
|
||||||
|
@ -115,45 +90,7 @@ void CheckThread::run()
|
||||||
file = QString::fromStdString(fileSettings.filename);
|
file = QString::fromStdString(fileSettings.filename);
|
||||||
qDebug() << "Checking file" << file;
|
qDebug() << "Checking file" << file;
|
||||||
mCppcheck.check(fileSettings);
|
mCppcheck.check(fileSettings);
|
||||||
if (!mAddons.isEmpty()) {
|
runAddons(addonPath, &fileSettings, QString::fromStdString(fileSettings.filename));
|
||||||
if (needDump) {
|
|
||||||
mCppcheck.settings().dump = true;
|
|
||||||
mCppcheck.check(fileSettings);
|
|
||||||
mCppcheck.settings().dump = false;
|
|
||||||
}
|
|
||||||
foreach (const QString addon, mAddons) {
|
|
||||||
QProcess process;
|
|
||||||
if (addon == "clang") {
|
|
||||||
QString cmd("clang --analyze");
|
|
||||||
for (std::list<std::string>::const_iterator I = fileSettings.includePaths.begin(); I != fileSettings.includePaths.end(); ++I)
|
|
||||||
cmd += " -I" + QString::fromStdString(*I);
|
|
||||||
foreach (QString D, QString::fromStdString(fileSettings.defines).split(";"))
|
|
||||||
cmd += " -D" + D;
|
|
||||||
QString fileName = QString::fromStdString(fileSettings.filename);
|
|
||||||
if (fileName.endsWith(".cpp"))
|
|
||||||
cmd += " -std=c++11";
|
|
||||||
cmd += ' ' + fileName;
|
|
||||||
qDebug() << cmd;
|
|
||||||
process.start(cmd);
|
|
||||||
process.waitForFinished(600*1000);
|
|
||||||
parseClangErrors(process.readAllStandardError());
|
|
||||||
} else {
|
|
||||||
QString a;
|
|
||||||
if (QFileInfo(addonPath + '/' + addon + ".py").exists())
|
|
||||||
a = addonPath + '/' + addon + ".py";
|
|
||||||
else if (QFileInfo(addonPath + '/' + addon + '/' + addon + ".py").exists())
|
|
||||||
a = addonPath + '/' + addon + '/' + addon + ".py";
|
|
||||||
else
|
|
||||||
continue;
|
|
||||||
QString dumpFile = QString::fromStdString(fileSettings.filename + ".dump");
|
|
||||||
QString cmd = "python " + a + ' ' + dumpFile;
|
|
||||||
qDebug() << cmd;
|
|
||||||
process.start(cmd);
|
|
||||||
process.waitForFinished();
|
|
||||||
parseAddonErrors(process.readAllStandardError(), addon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
emit fileChecked(file);
|
emit fileChecked(file);
|
||||||
|
|
||||||
if (mState == Running)
|
if (mState == Running)
|
||||||
|
@ -168,13 +105,72 @@ void CheckThread::run()
|
||||||
emit done();
|
emit done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CheckThread::runAddons(const QString &addonPath, const ImportProject::FileSettings *fileSettings, const QString &fileName)
|
||||||
|
{
|
||||||
|
bool hasdump = false;
|
||||||
|
|
||||||
|
foreach (const QString addon, mAddons) {
|
||||||
|
if (addon == "clang") {
|
||||||
|
if (!fileSettings)
|
||||||
|
continue;
|
||||||
|
QString cmd("clang --analyze");
|
||||||
|
for (std::list<std::string>::const_iterator I = fileSettings->includePaths.begin(); I != fileSettings->includePaths.end(); ++I)
|
||||||
|
cmd += " -I" + QString::fromStdString(*I);
|
||||||
|
foreach (QString D, QString::fromStdString(fileSettings->defines).split(";")) {
|
||||||
|
cmd += " -D" + D;
|
||||||
|
}
|
||||||
|
if (fileName.endsWith(".cpp"))
|
||||||
|
cmd += " -std=c++11";
|
||||||
|
cmd += ' ' + fileName;
|
||||||
|
qDebug() << cmd;
|
||||||
|
|
||||||
|
QProcess process;
|
||||||
|
process.start(cmd);
|
||||||
|
process.waitForFinished(600*1000);
|
||||||
|
parseClangErrors(process.readAllStandardError());
|
||||||
|
} else {
|
||||||
|
QString a;
|
||||||
|
if (QFileInfo(addonPath + '/' + addon + ".py").exists())
|
||||||
|
a = addonPath + '/' + addon + ".py";
|
||||||
|
else if (QFileInfo(addonPath + '/' + addon + '/' + addon + ".py").exists())
|
||||||
|
a = addonPath + '/' + addon + '/' + addon + ".py";
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!hasdump) {
|
||||||
|
// TODO: Generate dump file in buildDir.
|
||||||
|
// Otherwise a mutex might be needed
|
||||||
|
const std::string buildDir = mCppcheck.settings().buildDir;
|
||||||
|
mCppcheck.settings().buildDir.clear();
|
||||||
|
mCppcheck.settings().dump = true;
|
||||||
|
if (fileSettings)
|
||||||
|
mCppcheck.check(*fileSettings);
|
||||||
|
else
|
||||||
|
mCppcheck.check(fileName.toStdString());
|
||||||
|
mCppcheck.settings().dump = false;
|
||||||
|
mCppcheck.settings().buildDir = buildDir;
|
||||||
|
hasdump = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString dumpFile = fileName + ".dump";
|
||||||
|
QString cmd = "python " + a + ' ' + dumpFile;
|
||||||
|
qDebug() << cmd;
|
||||||
|
QProcess process;
|
||||||
|
process.start(cmd);
|
||||||
|
process.waitForFinished();
|
||||||
|
parseAddonErrors(process.readAllStandardError(), addon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CheckThread::stop()
|
void CheckThread::stop()
|
||||||
{
|
{
|
||||||
mState = Stopping;
|
mState = Stopping;
|
||||||
mCppcheck.terminate();
|
mCppcheck.terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CheckThread::getAddonPath() const {
|
QString CheckThread::getAddonPath() const
|
||||||
|
{
|
||||||
if (QFileInfo(mDataDir + "/threadsafety.py").exists())
|
if (QFileInfo(mDataDir + "/threadsafety.py").exists())
|
||||||
return mDataDir;
|
return mDataDir;
|
||||||
else if (QDir(mDataDir + "/addons").exists())
|
else if (QDir(mDataDir + "/addons").exists())
|
||||||
|
|
|
@ -108,6 +108,8 @@ protected:
|
||||||
private:
|
private:
|
||||||
QString getAddonPath() const;
|
QString getAddonPath() const;
|
||||||
|
|
||||||
|
void runAddons(const QString &addonPath, const ImportProject::FileSettings *fileSettings, const QString &fileName);
|
||||||
|
|
||||||
void parseAddonErrors(QString err, QString tool);
|
void parseAddonErrors(QString err, QString tool);
|
||||||
void parseClangErrors(QString err);
|
void parseClangErrors(QString err);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue