diff options
author | Eike Ziller <eike.ziller@qt.io> | 2018-12-12 09:44:13 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2018-12-12 09:44:13 +0100 |
commit | 9084ca73dff77d3df8ce564a19016dfeb482ea6d (patch) | |
tree | d2adbbe2b307fd51c9dd347cc5cd4be7f9fe9203 /src/plugins/cpptools/compileroptionsbuilder.cpp | |
parent | 1a2a278eec7a8438006246f47932d614804e3894 (diff) | |
parent | 5cd4a73acab1ee3782747d5de55c0ae734bfba2f (diff) | |
download | qt-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.cpp | 72 |
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); |