forked from qt-creator/qt-creator
Supply c++11 flags and per-project info to c++ code model.
A manual squash/merge of the changes below, plus a couple of subsequent
code fixes.
59085aa5fbb99e2d786cd2c1a06c24a111ccb49f:
Modify CppModel::ProjectInfo
Adding per project node information, to pass on the correct
defines/includes for each file, instead of aggregating them incorrectly.
Also split up SOURCES and OBJECTIVE_SOURCES.
Also ask the toolchain to convert the compilerflags to flags the
codemodel understands, for now only gcc and only c++11.
Also make the toolchain aware of the flags used to compile, so that it
can emit the correct defines.
Note: No header files are passed on.
74028802314cd4e75b41b46407433e07090a304d:
GCC: Evaluate cxxflags when checking for predefined macros
ebaaa4957e4c02cc9637a998eddae1d0acd74f83:
MSVC: Take cxxflags into account when checking for predefined macros
9bfce7e889bcf7bcc47bf880e3ea25945ca7d0d7:
Compile fixes
Change-Id: I9de94ad038dfc5dc1987732e84b13fb4419c96f5
Reviewed-by: Erik Verbruggen <erik.verbruggen@nokia.com>
This commit is contained in:
@@ -35,6 +35,9 @@
|
||||
|
||||
#include <cplusplus/CppDocument.h>
|
||||
#include <languageutils/fakemetaobject.h>
|
||||
#include <projectexplorer/project.h>
|
||||
#include <projectexplorer/toolchain.h>
|
||||
|
||||
#include <QObject>
|
||||
#include <QHash>
|
||||
#include <QPointer>
|
||||
@@ -66,33 +69,88 @@ class CPLUSPLUS_EXPORT CppModelManagerInterface : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum Language { CXX, OBJC };
|
||||
|
||||
class CPLUSPLUS_EXPORT ProjectPart
|
||||
{
|
||||
public:
|
||||
ProjectPart()
|
||||
: qtVersion(UnknownQt)
|
||||
{}
|
||||
|
||||
public: //attributes
|
||||
QStringList sourceFiles;
|
||||
QByteArray defines;
|
||||
QStringList includePaths;
|
||||
QStringList frameworkPaths;
|
||||
QStringList precompiledHeaders;
|
||||
Language language;
|
||||
ProjectExplorer::ToolChain::CompilerFlags flags;
|
||||
enum QtVersion {
|
||||
UnknownQt = -1,
|
||||
NoQt = 0,
|
||||
Qt4 = 1,
|
||||
Qt5 = 2
|
||||
};
|
||||
QtVersion qtVersion;
|
||||
|
||||
bool cpp0xEnabled() const
|
||||
{ return flags == ProjectExplorer::ToolChain::STD_CXX11; }
|
||||
|
||||
bool objcEnabled() const
|
||||
{ return language == CppModelManagerInterface::OBJC; }
|
||||
|
||||
typedef QSharedPointer<ProjectPart> Ptr;
|
||||
};
|
||||
|
||||
class ProjectInfo
|
||||
{
|
||||
public:
|
||||
ProjectInfo()
|
||||
{ }
|
||||
|
||||
ProjectInfo(QPointer<ProjectExplorer::Project> project)
|
||||
: project(project)
|
||||
ProjectInfo(QWeakPointer<ProjectExplorer::Project> project)
|
||||
: m_project(project)
|
||||
{ }
|
||||
|
||||
operator bool() const
|
||||
{ return ! project.isNull(); }
|
||||
{ return ! m_project.isNull(); }
|
||||
|
||||
bool isValid() const
|
||||
{ return ! project.isNull(); }
|
||||
{ return ! m_project.isNull(); }
|
||||
|
||||
bool isNull() const
|
||||
{ return project.isNull(); }
|
||||
{ return m_project.isNull(); }
|
||||
|
||||
public: // attributes
|
||||
QPointer<ProjectExplorer::Project> project;
|
||||
QString projectPath;
|
||||
QByteArray defines;
|
||||
QStringList sourceFiles;
|
||||
QStringList includePaths;
|
||||
QStringList frameworkPaths;
|
||||
QStringList precompiledHeaders;
|
||||
QWeakPointer<ProjectExplorer::Project> project() const
|
||||
{ return m_project; }
|
||||
|
||||
const QList<ProjectPart::Ptr> projectParts() const
|
||||
{ return m_projectParts; }
|
||||
|
||||
void clearProjectParts();
|
||||
void appendProjectPart(const ProjectPart::Ptr &part);
|
||||
|
||||
const QStringList includePaths() const
|
||||
{ return m_includePaths; }
|
||||
|
||||
const QStringList frameworkPaths() const
|
||||
{ return m_frameworkPaths; }
|
||||
|
||||
const QStringList sourceFiles() const
|
||||
{ return m_sourceFiles; }
|
||||
|
||||
const QByteArray defines() const
|
||||
{ return m_defines; }
|
||||
|
||||
private: // attributes
|
||||
QWeakPointer<ProjectExplorer::Project> m_project;
|
||||
QList<ProjectPart::Ptr> m_projectParts;
|
||||
// the attributes below are calculated from the project parts.
|
||||
QStringList m_includePaths;
|
||||
QStringList m_frameworkPaths;
|
||||
QStringList m_sourceFiles;
|
||||
QByteArray m_defines;
|
||||
};
|
||||
|
||||
class WorkingCopy
|
||||
@@ -110,6 +168,9 @@ public:
|
||||
QPair<QString, unsigned> get(const QString &fileName) const
|
||||
{ return _elements.value(fileName); }
|
||||
|
||||
QHashIterator<QString, QPair<QString, unsigned> > iterator() const
|
||||
{ return QHashIterator<QString, QPair<QString, unsigned> >(_elements); }
|
||||
|
||||
private:
|
||||
typedef QHash<QString, QPair<QString, unsigned> > Table;
|
||||
Table _elements;
|
||||
@@ -135,6 +196,7 @@ public:
|
||||
virtual QList<ProjectInfo> projectInfos() const = 0;
|
||||
virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0;
|
||||
virtual void updateProjectInfo(const ProjectInfo &pinfo) = 0;
|
||||
virtual QList<ProjectPart::Ptr> projectPart(const QString &fileName) const = 0;
|
||||
|
||||
virtual void addEditorSupport(CppTools::AbstractEditorSupport *editorSupport) = 0;
|
||||
virtual void removeEditorSupport(CppTools::AbstractEditorSupport *editorSupport) = 0;
|
||||
|
||||
Reference in New Issue
Block a user