Skip to content

Commit 1207531

Browse files
IOBYTEDaniel Marjamäki
authored andcommitted
Fixed cppcheck-opensource#1698 (Add define support to GUI)
1 parent 5dfbb38 commit 1207531

4 files changed

Lines changed: 84 additions & 0 deletions

File tree

gui/mainwindow.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,15 @@ Settings MainWindow::GetCppcheckSettings()
332332
incdir += "/";
333333
result._includePaths.push_back(incdir.toStdString());
334334
}
335+
336+
QStringList defines = pfile.GetDefines();
337+
QString define;
338+
foreach(define, defines)
339+
{
340+
if (!result.userDefines.empty())
341+
result.userDefines += ";";
342+
result.userDefines += define.toStdString();
343+
}
335344
}
336345
}
337346

gui/projectfile.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ static const char ClassNameAttrib[] = "name";
2929
static const char IncludDirElementName[] = "includedir";
3030
static const char DirElementName[] = "dir";
3131
static const char DirNameAttrib[] = "name";
32+
static const char DefinesElementName[] = "defines";
33+
static const char DefineName[] = "define";
34+
static const char DefineNameAttrib[] = "name";
3235

3336
ProjectFile::ProjectFile(QObject *parent) :
3437
QObject(parent)
@@ -66,6 +69,10 @@ bool ProjectFile::Read(const QString &filename)
6669

6770
if (insideProject && xmlReader.name() == IncludDirElementName)
6871
ReadIncludeDirs(xmlReader);
72+
73+
if (insideProject && xmlReader.name() == DefinesElementName)
74+
ReadDefines(xmlReader);
75+
6976
break;
7077

7178
case QXmlStreamReader::EndElement:
@@ -101,6 +108,11 @@ QStringList ProjectFile::GetIncludeDirs() const
101108
return mIncludeDirs;
102109
}
103110

111+
QStringList ProjectFile::GetDefines() const
112+
{
113+
return mDefines;
114+
}
115+
104116
void ProjectFile::ReadAutoAllocClasses(QXmlStreamReader &reader)
105117
{
106118
QXmlStreamReader::TokenType type;
@@ -184,3 +196,44 @@ void ProjectFile::ReadIncludeDirs(QXmlStreamReader &reader)
184196
}
185197
while (!allRead);
186198
}
199+
200+
void ProjectFile::ReadDefines(QXmlStreamReader &reader)
201+
{
202+
QXmlStreamReader::TokenType type;
203+
bool allRead = false;
204+
do
205+
{
206+
type = reader.readNext();
207+
switch (type)
208+
{
209+
case QXmlStreamReader::StartElement:
210+
// Read define-elements
211+
if (reader.name().toString() == DefineName)
212+
{
213+
QXmlStreamAttributes attribs = reader.attributes();
214+
QString name = attribs.value("", DefineNameAttrib).toString();
215+
if (!name.isEmpty())
216+
mDefines << name;
217+
}
218+
break;
219+
220+
case QXmlStreamReader::EndElement:
221+
if (reader.name().toString() == DefinesElementName)
222+
allRead = true;
223+
break;
224+
225+
// Not handled
226+
case QXmlStreamReader::NoToken:
227+
case QXmlStreamReader::Invalid:
228+
case QXmlStreamReader::StartDocument:
229+
case QXmlStreamReader::EndDocument:
230+
case QXmlStreamReader::Characters:
231+
case QXmlStreamReader::Comment:
232+
case QXmlStreamReader::DTD:
233+
case QXmlStreamReader::EntityReference:
234+
case QXmlStreamReader::ProcessingInstruction:
235+
break;
236+
}
237+
}
238+
while (!allRead);
239+
}

gui/projectfile.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ class ProjectFile : public QObject
5959
*/
6060
QStringList GetIncludeDirs() const;
6161

62+
/**
63+
* @brief Get list of defines.
64+
* @return list of defines.
65+
*/
66+
QStringList GetDefines() const;
67+
6268
protected:
6369
/**
6470
* @brief Read list of automatically deallocated classes from XML.
@@ -72,6 +78,12 @@ class ProjectFile : public QObject
7278
*/
7379
void ReadIncludeDirs(QXmlStreamReader &reader);
7480

81+
/**
82+
* @brief Read list of defines from XML.
83+
* @param reader XML stream reader.
84+
*/
85+
void ReadDefines(QXmlStreamReader &reader);
86+
7587
private:
7688

7789
/**
@@ -88,6 +100,11 @@ class ProjectFile : public QObject
88100
* @brief List of include directories used to search include files.
89101
*/
90102
QStringList mIncludeDirs;
103+
104+
/**
105+
* @brief List of defines.
106+
*/
107+
QStringList mDefines;
91108
};
92109
/// @}
93110
#endif // PROJECT_FILE_H

gui/projectfile.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ program. The format is:
2222
<dir name="c:/projects/framework/" />
2323
<dir name="c:/Program Files/Visual Studio 8/VC/include/" />
2424
</includedir>
25+
<defines>
26+
<define name="__cplusplus" />
27+
<define name="_MSC_VER=1400" />
28+
<define name="_WIN32" />
29+
</defines>
2530
</project>
2631

2732
See also gui.cppcheck file in gui-directory of cppcheck sources.

0 commit comments

Comments
 (0)