summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanagerinterface.cpp
diff options
context:
space:
mode:
authorSergey Shambir <sergey.shambir.auto@gmail.com>2013-04-28 15:40:54 +0400
committerSergey Shambir <sergey.shambir.auto@gmail.com>2013-04-30 17:31:43 +0200
commitec8a01c150657b1037d835df52ef9e2467c71328 (patch)
tree38617a6bbe459c735444a594bfa1c40d436825d6 /src/plugins/cpptools/cppmodelmanagerinterface.cpp
parent6faf45a46572bb2c245fbc389094d39fdaefad23 (diff)
downloadqt-creator-ec8a01c150657b1037d835df52ef9e2467c71328.tar.gz
CppTools: added ProjectPart::evaluateToolchain()
At this moment each project manager duplicates code that reads C++ code model information from ProjectExplorer::ToolChain. This change provides unified way. Change-Id: If9ecfc40991aab90768dd69f5f10f31bbf5fbc21 Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanagerinterface.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanagerinterface.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.cpp b/src/plugins/cpptools/cppmodelmanagerinterface.cpp
index da9cc55605..909ed4c253 100644
--- a/src/plugins/cpptools/cppmodelmanagerinterface.cpp
+++ b/src/plugins/cpptools/cppmodelmanagerinterface.cpp
@@ -29,6 +29,8 @@
#include "cppmodelmanagerinterface.h"
+#include <projectexplorer/toolchain.h>
+#include <projectexplorer/headerpath.h>
#include <cplusplus/pp-engine.h>
#include <QtCore/QSet>
@@ -48,6 +50,61 @@
*/
using namespace CppTools;
+using namespace ProjectExplorer;
+
+/**
+ * @brief Retrieves info from concrete compiler using it's flags.
+ * @param tc Either nullptr or toolchain for project's active target.
+ * @param cxxflags C++ or Objective-C++ flags.
+ * @param cflags C or ObjectiveC flags if possible, \a cxxflags otherwise.
+ */
+void ProjectPart::evaluateToolchain(const ToolChain *tc,
+ const QStringList &cxxflags,
+ const QStringList &cflags,
+ const Utils::FileName &sysRoot)
+{
+ if (!tc)
+ return;
+ ToolChain::CompilerFlags cxx = tc->compilerFlags(cxxflags);
+ ToolChain::CompilerFlags c = (cxxflags == cflags)
+ ? cxx : tc->compilerFlags(cflags);
+
+ if (c | ToolChain::StandardC11)
+ cVersion = C11;
+ else if (c | ToolChain::StandardC99)
+ cVersion = C99;
+ else
+ cVersion = C89;
+
+ if (cxx | ToolChain::StandardCxx11)
+ cxxVersion = CXX11;
+ else
+ cxxVersion = CXX98;
+
+ if (cxx | ToolChain::BorlandExtensions)
+ cxxExtensions |= BorlandExtensions;
+ if (cxx | ToolChain::GnuExtensions)
+ cxxExtensions |= GnuExtensions;
+ if (cxx | ToolChain::MicrosoftExtensions)
+ cxxExtensions |= MicrosoftExtensions;
+ if (cxx | ToolChain::OpenMP)
+ cxxExtensions |= OpenMP;
+
+ QList<HeaderPath> headers = tc->systemHeaderPaths(cxxflags, sysRoot);
+ foreach (const HeaderPath &header, headers)
+ if (header.kind() == HeaderPath::FrameworkHeaderPath)
+ frameworkPaths << header.path();
+ else
+ includePaths << header.path();
+
+ QByteArray macros = tc->predefinedMacros(cxxflags);
+ if (!macros.isEmpty()) {
+ if (!defines.isEmpty())
+ defines += '\n';
+ defines += macros;
+ defines += '\n';
+ }
+}
static CppModelManagerInterface *g_instance = 0;