GUI: Added configuration for VS include paths
This commit is contained in:
parent
fb925069a5
commit
ff8c5f7457
|
@ -119,16 +119,6 @@ void CheckThread::runAddons(const QString &addonPath, const ImportProject::FileS
|
|||
continue;
|
||||
|
||||
QStringList args;
|
||||
#ifdef Q_OS_WIN
|
||||
// To create compile_commands.json in windows see:
|
||||
// https://bitsmaker.gitlab.io/post/clang-tidy-from-vs2015/
|
||||
|
||||
// TODO: Replace the "QDir::homePath()"
|
||||
args << "-isystem" << (QDir::homePath() + "/include");
|
||||
args << "-isystem" << (QDir::homePath() + "/include/c++");
|
||||
args << "-isystem" << (QDir::homePath() + "/include/c++/i686-w64-mingw32");
|
||||
args << "-fno-ms-compatibility";
|
||||
#endif
|
||||
for (std::list<std::string>::const_iterator I = fileSettings->includePaths.begin(); I != fileSettings->includePaths.end(); ++I)
|
||||
args << ("-I" + QString::fromStdString(*I));
|
||||
for (std::list<std::string>::const_iterator i = fileSettings->systemIncludePaths.begin(); i != fileSettings->systemIncludePaths.end(); ++i)
|
||||
|
@ -136,8 +126,36 @@ void CheckThread::runAddons(const QString &addonPath, const ImportProject::FileS
|
|||
foreach (QString D, QString::fromStdString(fileSettings->defines).split(";")) {
|
||||
args << ("-D" + D);
|
||||
}
|
||||
|
||||
if (!mClangPath.isEmpty()) {
|
||||
QDir dir(mClangPath + "/../lib/clang");
|
||||
foreach (QString ver, dir.entryList()) {
|
||||
QString includePath = dir.absolutePath() + '/' + ver + "/include";
|
||||
if (ver[0] != '.' && QDir(includePath).exists()) {
|
||||
args << "-isystem" << includePath;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
// To create compile_commands.json in windows see:
|
||||
// https://bitsmaker.gitlab.io/post/clang-tidy-from-vs2015/
|
||||
|
||||
foreach (QString s, mVsIncludePaths.split(";")) {
|
||||
if (!s.isEmpty()) {
|
||||
s.replace("\\", "/");
|
||||
args << "-isystem" << s;
|
||||
}
|
||||
}
|
||||
|
||||
args << "-fno-ms-compatibility";
|
||||
#endif
|
||||
|
||||
if (!fileSettings->standard.empty())
|
||||
args << (" -std=" + QString::fromStdString(fileSettings->standard));
|
||||
args << ("-std=" + QString::fromStdString(fileSettings->standard));
|
||||
else if (!mVsIncludePaths.isEmpty() && fileName.endsWith(".cpp"))
|
||||
args << "-std=c++14";
|
||||
|
||||
QString analyzerInfoFile;
|
||||
|
||||
|
@ -149,7 +167,6 @@ void CheckThread::runAddons(const QString &addonPath, const ImportProject::FileS
|
|||
QStringList args2(args);
|
||||
args2.insert(0,"-E");
|
||||
args2 << fileName;
|
||||
qDebug() << cmd << args2;
|
||||
QProcess process;
|
||||
process.start(cmd,args2);
|
||||
process.waitForFinished();
|
||||
|
@ -192,6 +209,9 @@ void CheckThread::runAddons(const QString &addonPath, const ImportProject::FileS
|
|||
{
|
||||
QString debug(cmd);
|
||||
foreach (QString arg, args) {
|
||||
if (arg.contains(" "))
|
||||
debug += " \"" + arg + '\"';
|
||||
else
|
||||
debug += ' ' + arg;
|
||||
}
|
||||
qDebug() << debug;
|
||||
|
|
|
@ -56,6 +56,10 @@ public:
|
|||
mAddons = addons;
|
||||
}
|
||||
|
||||
void setVsIncludePaths(const QString &s) {
|
||||
mVsIncludePaths = s;
|
||||
}
|
||||
|
||||
void setDataDir(const QString &dataDir) {
|
||||
mDataDir = dataDir;
|
||||
}
|
||||
|
@ -120,6 +124,7 @@ private:
|
|||
QStringList mFiles;
|
||||
bool mAnalyseWholeProgram;
|
||||
QStringList mAddons;
|
||||
QString mVsIncludePaths;
|
||||
QString mDataDir;
|
||||
QString mClangPath;
|
||||
};
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
#define SETTINGS_APPLICATION_DEFAULT "Default Application"
|
||||
#define SETTINGS_LANGUAGE "Application language"
|
||||
#define SETTINGS_GLOBAL_INCLUDE_PATHS "Global include paths"
|
||||
#define SETTINGS_VS_INCLUDE_PATHS "Visual studio include paths"
|
||||
#define SETTINGS_INLINE_SUPPRESSIONS "Inline suppressions"
|
||||
#define SETTINGS_INCONCLUSIVE_ERRORS "Inconclusive errors"
|
||||
#define SETTINGS_MRU_PROJECTS "MRU Projects"
|
||||
|
|
|
@ -414,6 +414,7 @@ void MainWindow::doAnalyzeProject(ImportProject p)
|
|||
//mThread->SetanalyzeProject(true);
|
||||
if (mProjectFile) {
|
||||
mThread->setAddons(mProjectFile->getAddons());
|
||||
mThread->setVsIncludePaths(mSettings->value(SETTINGS_VS_INCLUDE_PATHS).toString());
|
||||
#ifdef Q_OS_WIN
|
||||
// Try to autodetect clang
|
||||
if (QFileInfo("C:/Program Files/LLVM/bin/clang.exe").exists())
|
||||
|
|
|
@ -240,6 +240,16 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="mLabelVsInclude">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>Visual Studio include paths<br/>Open Visual Studio command prompt. Type &quot;SET INCLUDE&quot; and paste the outputs below:</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="mEditVsInclude"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
|
|
|
@ -54,6 +54,15 @@ SettingsDialog::SettingsDialog(ApplicationList *list,
|
|||
mUI.mShowStatistics->setCheckState(boolToCheckState(settings.value(SETTINGS_SHOW_STATISTICS, false).toBool()));
|
||||
mUI.mShowErrorId->setCheckState(boolToCheckState(settings.value(SETTINGS_SHOW_ERROR_ID, false).toBool()));
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
mUI.mLabelVsInclude->setVisible(true);
|
||||
mUI.mEditVsInclude->setVisible(true);
|
||||
mUI.mEditVsInclude->setText(settings.value(SETTINGS_VS_INCLUDE_PATHS, QString()).toString());
|
||||
#else
|
||||
mUI.mLabelVsInclude->setVisible(false);
|
||||
mUI.mEditVsInclude->setVisible(false);
|
||||
mUI.mEditVsInclude->setText(QString());
|
||||
#endif
|
||||
connect(mUI.mButtons, &QDialogButtonBox::accepted, this, &SettingsDialog::ok);
|
||||
connect(mUI.mButtons, &QDialogButtonBox::rejected, this, &SettingsDialog::reject);
|
||||
connect(mUI.mBtnAddApplication, SIGNAL(clicked()),
|
||||
|
@ -177,6 +186,13 @@ void SettingsDialog::saveSettingValues() const
|
|||
saveCheckboxValue(&settings, mUI.mShowStatistics, SETTINGS_SHOW_STATISTICS);
|
||||
saveCheckboxValue(&settings, mUI.mShowErrorId, SETTINGS_SHOW_ERROR_ID);
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
QString vsIncludePaths = mUI.mEditVsInclude->text();
|
||||
if (vsIncludePaths.startsWith("INCLUDE="))
|
||||
vsIncludePaths.remove(0, 8);
|
||||
settings.setValue(SETTINGS_VS_INCLUDE_PATHS, vsIncludePaths);
|
||||
#endif
|
||||
|
||||
const QListWidgetItem *currentLang = mUI.mListLanguages->currentItem();
|
||||
if (currentLang) {
|
||||
const QString langcode = currentLang->data(LangCodeRole).toString();
|
||||
|
|
|
@ -93,6 +93,7 @@ void ThreadHandler::check(const Settings &settings)
|
|||
|
||||
for (int i = 0; i < mRunningThreadCount; i++) {
|
||||
mThreads[i]->setAddons(mAddons);
|
||||
mThreads[i]->setVsIncludePaths(mVsIncludePaths);
|
||||
mThreads[i]->setClangPath(mClangPath);
|
||||
mThreads[i]->setDataDir(mDataDir);
|
||||
mThreads[i]->check(settings);
|
||||
|
|
|
@ -75,6 +75,10 @@ public:
|
|||
mAddons = addons;
|
||||
}
|
||||
|
||||
void setVsIncludePaths(const QString &s) {
|
||||
mVsIncludePaths = s;
|
||||
}
|
||||
|
||||
void setClangPath(const QString &p) {
|
||||
mClangPath = p;
|
||||
}
|
||||
|
@ -246,6 +250,7 @@ protected:
|
|||
bool mAnalyseWholeProgram;
|
||||
|
||||
QStringList mAddons;
|
||||
QString mVsIncludePaths;
|
||||
QString mClangPath;
|
||||
|
||||
QString mDataDir;
|
||||
|
|
Loading…
Reference in New Issue