diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 28 | ||||
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.h | 31 |
2 files changed, 31 insertions, 28 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 8ec63484f9..e722722e25 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -170,11 +170,6 @@ void CompilerOptionsBuilder::add(const QString &option) m_options.append(option); } -void CompilerOptionsBuilder::addDefine(const ProjectExplorer::Macro ¯o) -{ - m_options.append(defineDirectiveToDefineOption(macro)); -} - void CompilerOptionsBuilder::addWordWidth() { const QString argument = m_projectPart.toolChainWordWidth == ProjectPart::WordWidth64Bit @@ -211,7 +206,7 @@ static QString creatorResourcePath() #ifndef UNIT_TESTS return Core::ICore::resourcePath(); #else - return QString(); + return QDir::toNativeSeparators(QString::fromUtf8(QTC_RESOURCE_DIR "")); #endif } @@ -221,7 +216,7 @@ static QString clangIncludeDirectory(const QString &clangVersion, #ifndef UNIT_TESTS return Core::ICore::clangIncludeDirectory(clangVersion, clangResourceDirectory); #else - return QString(); + return QDir::toNativeSeparators(QString::fromUtf8(CLANG_RESOURCE_DIR "")); #endif } @@ -238,12 +233,20 @@ static int lastIncludeIndex(const QStringList &options, const QRegularExpression return index; } -static int includeIndexForResourceDirectory(const QStringList &options) +static int includeIndexForResourceDirectory(const QStringList &options, bool isMacOs = false) { // include/c++/{version}, include/c++/v1 and include/g++ - const int cppIncludeIndex = lastIncludeIndex( - options, - QRegularExpression("\\A.*[\\/\\\\]include[\\/\\\\].*(g\\+\\+.*\\z|c\\+\\+[\\/\\\\](v1\\z|\\d+.*\\z))")); + static const QRegularExpression includeRegExp( + R"(\A.*[\/\\]include[\/\\].*(g\+\+.*\z|c\+\+[\/\\](v1\z|\d+.*\z)))"); + + // The same as includeRegExp but also matches /usr/local/include + static const QRegularExpression includeRegExpMac( + R"(\A(.*[\/\\]include[\/\\].*(g\+\+.*\z|c\+\+[\/\\](v1\z|\d+.*\z))))" + R"(|([\/\\]usr[\/\\]local[\/\\]include\z))"); + + const int cppIncludeIndex = lastIncludeIndex(options, isMacOs + ? includeRegExpMac + : includeRegExp); if (cppIncludeIndex > 0) return cppIncludeIndex + 1; @@ -317,7 +320,8 @@ void CompilerOptionsBuilder::addHeaderPathOptions() const QString clangIncludePath = clangIncludeDirectory(m_clangVersion, m_clangResourceDirectory); - int includeIndexForResourceDir = includeIndexForResourceDirectory(builtInIncludes); + int includeIndexForResourceDir = includeIndexForResourceDirectory( + builtInIncludes, m_projectPart.toolChainTargetTriple.contains("darwin")); if (includeIndexForResourceDir >= 0) { builtInIncludes.insert(includeIndexForResourceDir, clangIncludePath); diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index ba29d6e430..1274c1b860 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -56,33 +56,27 @@ public: SkipBuiltIn skipBuiltInHeaderPathsAndDefines = SkipBuiltIn::No, QString clangVersion = QString(), QString clangResourceDirectory = QString()); - virtual ~CompilerOptionsBuilder() {} - - virtual void addTargetTriple(); - virtual void addExtraCodeModelFlags(); - virtual void enableExceptions(); - virtual void insertWrappedQtHeaders(); - virtual void addOptionsForLanguage(bool checkForBorlandExtensions = true); - virtual void updateLanguageOption(ProjectFile::Kind fileKind); - - virtual void addExtraOptions() {} QStringList build(ProjectFile::Kind fileKind, PchUsage pchUsage); QStringList options() const; - // Add custom options - void add(const QString &option); - void addDefine(const ProjectExplorer::Macro &marco); - + virtual void addExtraOptions() {} // Add options based on project part + virtual void addToolchainAndProjectMacros(); void addWordWidth(); void addToolchainFlags(); void addHeaderPathOptions(); void addPrecompiledHeaderOptions(PchUsage pchUsage); - virtual void addToolchainAndProjectMacros(); void addMacros(const ProjectExplorer::Macros ¯os); + void addTargetTriple(); + void addExtraCodeModelFlags(); + void enableExceptions(); + void insertWrappedQtHeaders(); + void addOptionsForLanguage(bool checkForBorlandExtensions = true); + void updateLanguageOption(ProjectFile::Kind fileKind); + void addMsvcCompatibilityVersion(); void undefineCppLanguageFeatureMacrosForMsvc2015(); void addDefineFunctionMacrosMsvc(); @@ -97,8 +91,13 @@ protected: virtual QString defineOption() const; virtual QString undefineOption() const; virtual QString includeOption() const; + + // Add custom options + void add(const QString &option); + QString includeDirOptionForPath(const QString &path) const; - const ProjectPart m_projectPart; + + const ProjectPart &m_projectPart; private: QByteArray macroOption(const ProjectExplorer::Macro ¯o) const; |