diff options
Diffstat (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp')
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 76 |
1 files changed, 35 insertions, 41 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 7ee9b6bdf8..0c8c5d9305 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -45,36 +45,39 @@ #include <QRegularExpression> #include <QtGlobal> +using namespace ProjectExplorer; +using namespace Utils; + namespace CppTools { -static const char defineOption[] = "-D"; -static const char undefineOption[] = "-U"; +const char defineOption[] = "-D"; +const char undefineOption[] = "-U"; -static const char includeUserPathOption[] = "-I"; -static const char includeUserPathOptionWindows[] = "/I"; -static const char includeSystemPathOption[] = "-isystem"; +const char includeUserPathOption[] = "-I"; +const char includeUserPathOptionWindows[] = "/I"; +const char includeSystemPathOption[] = "-isystem"; -static const char includeFileOptionGcc[] = "-include"; -static const char includeFileOptionCl[] = "/FI"; +const char includeFileOptionGcc[] = "-include"; +const char includeFileOptionCl[] = "/FI"; -static QByteArray macroOption(const ProjectExplorer::Macro ¯o) +static QByteArray macroOption(const Macro ¯o) { switch (macro.type) { - case ProjectExplorer::MacroType::Define: + case MacroType::Define: return defineOption; - case ProjectExplorer::MacroType::Undefine: + case MacroType::Undefine: return undefineOption; default: return QByteArray(); } } -static QByteArray toDefineOption(const ProjectExplorer::Macro ¯o) +static QByteArray toDefineOption(const Macro ¯o) { return macro.toKeyValue(macroOption(macro)); } -static QString defineDirectiveToDefineOption(const ProjectExplorer::Macro ¯o) +static QString defineDirectiveToDefineOption(const Macro ¯o) { const QByteArray option = toDefineOption(macro); return QString::fromUtf8(option); @@ -104,7 +107,7 @@ CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart, UseLanguageDefines useLanguageDefines, UseBuildSystemWarnings useBuildSystemWarnings, const QString &clangVersion, - const QString &clangIncludeDirectory) + const FilePath &clangIncludeDirectory) : m_projectPart(projectPart) , m_useSystemHeader(useSystemHeader) , m_useTweakedHeaderPaths(useTweakedHeaderPaths) @@ -122,13 +125,11 @@ QStringList CompilerOptionsBuilder::build(ProjectFile::Kind fileKind, evaluateCompilerFlags(); if (fileKind == ProjectFile::CHeader || fileKind == ProjectFile::CSource) { - QTC_ASSERT(m_projectPart.languageVersion <= Utils::LanguageVersion::LatestC, - return QStringList();); + QTC_ASSERT(m_projectPart.languageVersion <= LanguageVersion::LatestC, return {}); } if (fileKind == ProjectFile::CXXHeader || fileKind == ProjectFile::CXXSource) { - QTC_ASSERT(m_projectPart.languageVersion > Utils::LanguageVersion::LatestC, - return QStringList();); + QTC_ASSERT(m_projectPart.languageVersion > LanguageVersion::LatestC, return {}); } addCompilerFlags(); @@ -276,7 +277,7 @@ void CompilerOptionsBuilder::addMsvcExceptions() { if (!m_clStyle) return; - if (Utils::anyOf(m_projectPart.toolChainMacros, [](const ProjectExplorer::Macro ¯o) { + if (Utils::anyOf(m_projectPart.toolChainMacros, [](const Macro ¯o) { return macro.key == "_CPPUNWIND"; })) { enableExceptions(); @@ -289,7 +290,7 @@ void CompilerOptionsBuilder::enableExceptions() // This is most likely due to incomplete exception support of clang. // However, as we need exception support only in the frontend, // enabling them explicitly should be fine. - if (m_projectPart.languageVersion > ::Utils::LanguageVersion::LatestC) + if (m_projectPart.languageVersion > LanguageVersion::LatestC) add("-fcxx-exceptions"); add("-fexceptions"); } @@ -345,9 +346,6 @@ void CompilerOptionsBuilder::addHeaderPathOptions() filter.process(); - using ProjectExplorer::HeaderPath; - using ProjectExplorer::HeaderPathType; - for (const HeaderPath &headerPath : qAsConst(filter.userHeaderPaths)) addIncludeDirOptionForPath(headerPath); for (const HeaderPath &headerPath : qAsConst(filter.systemHeaderPaths)) @@ -408,11 +406,11 @@ void CompilerOptionsBuilder::addProjectMacros() addMacros(m_projectPart.projectMacros); } -void CompilerOptionsBuilder::addMacros(const ProjectExplorer::Macros ¯os) +void CompilerOptionsBuilder::addMacros(const Macros ¯os) { QStringList options; - for (const ProjectExplorer::Macro ¯o : macros) { + for (const Macro ¯o : macros) { if (excludeDefineDirective(macro)) continue; @@ -445,8 +443,7 @@ void CompilerOptionsBuilder::updateFileLanguage(ProjectFile::Kind fileKind) return; } - const bool objcExt = m_projectPart.languageExtensions - & Utils::LanguageExtension::ObjectiveC; + const bool objcExt = m_projectPart.languageExtensions & LanguageExtension::ObjectiveC; const QStringList options = createLanguageOptionGcc(fileKind, objcExt); if (options.isEmpty()) return; @@ -461,9 +458,6 @@ void CompilerOptionsBuilder::updateFileLanguage(ProjectFile::Kind fileKind) void CompilerOptionsBuilder::addLanguageVersionAndExtensions() { - using Utils::LanguageExtension; - using Utils::LanguageVersion; - if (m_compilerFlags.isLanguageVersionSpecified) return; @@ -494,7 +488,7 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions() // Continue in case no cl-style option could be chosen. } - const Utils::LanguageExtensions languageExtensions = m_projectPart.languageExtensions; + const LanguageExtensions languageExtensions = m_projectPart.languageExtensions; const bool gnuExtensions = languageExtensions & LanguageExtension::Gnu; switch (m_projectPart.languageVersion) { @@ -546,9 +540,9 @@ static QByteArray toMsCompatibilityVersionFormat(const QByteArray &mscFullVer) + mscFullVer.mid(2, 2); } -static QByteArray msCompatibilityVersionFromDefines(const ProjectExplorer::Macros ¯os) +static QByteArray msCompatibilityVersionFromDefines(const Macros ¯os) { - for (const ProjectExplorer::Macro ¯o : macros) { + for (const Macro ¯o : macros) { if (macro.key == "_MSC_FULL_VER") return toMsCompatibilityVersionFormat(macro.value); } @@ -656,24 +650,24 @@ void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc() } } -void CompilerOptionsBuilder::addIncludeDirOptionForPath(const ProjectExplorer::HeaderPath &path) +void CompilerOptionsBuilder::addIncludeDirOptionForPath(const HeaderPath &path) { - if (path.type == ProjectExplorer::HeaderPathType::Framework) { + if (path.type == HeaderPathType::Framework) { QTC_ASSERT(!isClStyle(), return;); add({"-F", QDir::toNativeSeparators(path.path)}); return; } bool systemPath = false; - if (path.type == ProjectExplorer::HeaderPathType::BuiltIn) { + if (path.type == HeaderPathType::BuiltIn) { systemPath = true; - } else if (path.type == ProjectExplorer::HeaderPathType::System) { + } else if (path.type == HeaderPathType::System) { if (m_useSystemHeader == UseSystemHeader::Yes) systemPath = true; } else { // ProjectExplorer::HeaderPathType::User - if (m_useSystemHeader == UseSystemHeader::Yes - && !path.path.startsWith(m_projectPart.project->rootProjectDirectory().toString())) { + if (m_useSystemHeader == UseSystemHeader::Yes && m_projectPart.hasProject() + && !Utils::FilePath::fromString(path.path).isChildOf(m_projectPart.topLevelProject)) { systemPath = true; } } @@ -686,7 +680,7 @@ void CompilerOptionsBuilder::addIncludeDirOptionForPath(const ProjectExplorer::H add({includeUserPathOption, QDir::toNativeSeparators(path.path)}); } -bool CompilerOptionsBuilder::excludeDefineDirective(const ProjectExplorer::Macro ¯o) const +bool CompilerOptionsBuilder::excludeDefineDirective(const Macro ¯o) const { // Avoid setting __cplusplus & co as this might conflict with other command line flags. // Clang should set __cplusplus based on -std= and -fms-compatibility-version version. @@ -730,7 +724,7 @@ bool CompilerOptionsBuilder::excludeDefineDirective(const ProjectExplorer::Macro QStringList CompilerOptionsBuilder::wrappedQtHeadersIncludePath() const { - if (m_projectPart.qtVersion == Utils::QtVersion::None) + if (m_projectPart.qtVersion == QtVersion::None) return {}; return {"wrappedQtHeaders", "wrappedQtHeaders/QtCore"}; } @@ -786,7 +780,7 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() qgetenv("QTC_CLANG_CMD_OPTIONS_BLACKLIST")) .split(';', Qt::SkipEmptyParts); - const Utils::Id &toolChain = m_projectPart.toolchainType; + const Id toolChain = m_projectPart.toolchainType; bool containsDriverMode = false; bool skipNext = false; const QStringList allFlags = m_projectPart.compilerFlags + m_projectPart.extraCodeModelFlags; |