summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/compileroptionsbuilder.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-12-12 09:44:13 +0100
committerEike Ziller <eike.ziller@qt.io>2018-12-12 09:44:13 +0100
commit9084ca73dff77d3df8ce564a19016dfeb482ea6d (patch)
treed2adbbe2b307fd51c9dd347cc5cd4be7f9fe9203 /src/plugins/cpptools/compileroptionsbuilder.cpp
parent1a2a278eec7a8438006246f47932d614804e3894 (diff)
parent5cd4a73acab1ee3782747d5de55c0ae734bfba2f (diff)
downloadqt-creator-9084ca73dff77d3df8ce564a19016dfeb482ea6d.tar.gz
Merge remote-tracking branch 'origin/4.8'
Conflicts: qbs/modules/qtc/qtc.qbs qtcreator.pri src/plugins/cpptools/compileroptionsbuilder.cpp Change-Id: I87f47cecbb924064296a002fd9446a0627acad8e
Diffstat (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp')
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.cpp72
1 files changed, 34 insertions, 38 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp
index b70f5ca5bd..51f21cfb83 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.cpp
+++ b/src/plugins/cpptools/compileroptionsbuilder.cpp
@@ -242,40 +242,43 @@ static QString clangIncludeDirectory(const QString &clangVersion,
#endif
}
-static int lastIncludeIndex(const QStringList &options, const QRegularExpression &includePathRegEx)
-{
- int index = options.lastIndexOf(includePathRegEx);
-
- while (index > 0 && options[index - 1] != includeUserPathOption
- && options[index - 1] != includeSystemPathOption) {
- index = options.lastIndexOf(includePathRegEx, index - 1);
- }
-
- if (index == 0)
- index = -1;
-
- return index;
-}
-
-static int includeIndexForResourceDirectory(const QStringList &options, bool isMacOs = false)
+static QStringList insertResourceDirectory(const QStringList &options,
+ const QString &resourceDir,
+ bool isMacOs = false)
{
// include/c++, include/g++, libc++\include and libc++abi\include
static const QString cppIncludes = R"((.*[\/\\]include[\/\\].*(g\+\+|c\+\+).*))"
R"(|(.*libc\+\+[\/\\]include))"
R"(|(.*libc\+\+abi[\/\\]include))";
- static const QRegularExpression includeRegExp("\\A(" + cppIncludes + ")\\z");
- // The same as includeRegExp but also matches /usr/local/include
- static const QRegularExpression includeRegExpMac(
- "\\A(" + cppIncludes + R"(|([\/\\]usr[\/\\]local[\/\\]include))" + ")\\z");
+ QStringList optionsBeforeResourceDirectory;
+ QStringList optionsAfterResourceDirectory;
+ QRegularExpression includeRegExp;
+ if (!isMacOs) {
+ includeRegExp = QRegularExpression("\\A(" + cppIncludes + ")\\z");
+ } else {
+ // The same as includeRegExp but also matches /usr/local/include
+ includeRegExp = QRegularExpression(
+ "\\A(" + cppIncludes + R"(|([\/\\]usr[\/\\]local[\/\\]include))" + ")\\z");
+ }
- const int cppIncludeIndex = lastIncludeIndex(options,
- isMacOs ? includeRegExpMac : includeRegExp);
+ for (const QString &option : options) {
+ if (option == includeSystemPathOption)
+ continue;
- if (cppIncludeIndex > 0)
- return cppIncludeIndex + 1;
+ if (includeRegExp.match(option).hasMatch()) {
+ optionsBeforeResourceDirectory.push_back(includeSystemPathOption);
+ optionsBeforeResourceDirectory.push_back(option);
+ } else {
+ optionsAfterResourceDirectory.push_back(includeSystemPathOption);
+ optionsAfterResourceDirectory.push_back(option);
+ }
+ }
- return -1;
+ optionsBeforeResourceDirectory.push_back(includeSystemPathOption);
+ optionsBeforeResourceDirectory.push_back(resourceDir);
+
+ return optionsBeforeResourceDirectory + optionsAfterResourceDirectory;
}
void CompilerOptionsBuilder::insertWrappedQtHeaders()
@@ -354,20 +357,13 @@ void CompilerOptionsBuilder::addHeaderPathOptions()
// Exclude all built-in includes and Clang resource directory.
m_options.prepend("-nostdinc");
- const QString clangIncludePath = clangIncludeDirectory(m_clangVersion,
- m_clangResourceDirectory);
- const int includeIndexForResourceDir
- = includeIndexForResourceDirectory(builtInIncludes,
- m_projectPart.toolChainTargetTriple.contains(
- "darwin"));
+ const QString clangIncludePath
+ = clangIncludeDirectory(m_clangVersion, m_clangResourceDirectory);
- if (includeIndexForResourceDir >= 0) {
- builtInIncludes.insert(includeIndexForResourceDir, clangIncludePath);
- builtInIncludes.insert(includeIndexForResourceDir, includeSystemPathOption);
- } else {
- builtInIncludes.prepend(clangIncludePath);
- builtInIncludes.prepend(includeSystemPathOption);
- }
+ builtInIncludes = insertResourceDirectory(builtInIncludes,
+ clangIncludePath,
+ m_projectPart.toolChainTargetTriple.contains(
+ "darwin"));
}
m_options.append(builtInIncludes);