diff options
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 38 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodemodelinspectordumper.cpp | 20 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodemodelinspectordumper.h | 4 | ||||
-rw-r--r-- | src/plugins/cpptools/cppmodelmanager.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cppprojectinfogenerator.cpp | 52 | ||||
-rw-r--r-- | src/plugins/cpptools/cppprojectinfogenerator.h | 2 | ||||
-rw-r--r-- | src/plugins/cpptools/cppprojectpartchooser.cpp | 3 | ||||
-rw-r--r-- | src/plugins/cpptools/cpprawprojectpart.cpp | 2 | ||||
-rw-r--r-- | src/plugins/cpptools/cpprawprojectpart.h | 4 | ||||
-rw-r--r-- | src/plugins/cpptools/projectpart.cpp | 9 | ||||
-rw-r--r-- | src/plugins/cpptools/projectpart.h | 37 |
11 files changed, 68 insertions, 108 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index b05bd09d1f..9113d69747 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -59,7 +59,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind, m_options.clear(); if (fileKind == ProjectFile::CHeader || fileKind == ProjectFile::CSource) { - QTC_ASSERT(m_projectPart.languageVersion <= ProjectPart::LatestCVersion, + QTC_ASSERT(m_projectPart.languageVersion <= ProjectExplorer::LanguageVersion::LatestC, return QStringList();); } @@ -196,7 +196,7 @@ void CompilerOptionsBuilder::addExtraCodeModelFlags() void CompilerOptionsBuilder::enableExceptions() { - if (m_projectPart.languageVersion > ProjectPart::LatestCVersion) + if (m_projectPart.languageVersion > ProjectExplorer::LanguageVersion::LatestC) add(QLatin1String("-fcxx-exceptions")); add(QLatin1String("-fexceptions")); } @@ -378,7 +378,8 @@ void CompilerOptionsBuilder::addMacros(const ProjectExplorer::Macros ¯os) void CompilerOptionsBuilder::updateLanguageOption(ProjectFile::Kind fileKind) { - const bool objcExt = m_projectPart.languageExtensions & ProjectPart::ObjectiveCExtensions; + const bool objcExt = m_projectPart.languageExtensions + & ProjectExplorer::LanguageExtension::ObjectiveC; const QStringList options = createLanguageOptionGcc(fileKind, objcExt); if (options.isEmpty()) return; @@ -394,48 +395,51 @@ void CompilerOptionsBuilder::updateLanguageOption(ProjectFile::Kind fileKind) void CompilerOptionsBuilder::addOptionsForLanguage(bool checkForBorlandExtensions) { + using ProjectExplorer::LanguageExtension; + using ProjectExplorer::LanguageVersion; + QStringList opts; - const ProjectPart::LanguageExtensions languageExtensions = m_projectPart.languageExtensions; - const bool gnuExtensions = languageExtensions & ProjectPart::GnuExtensions; + const ProjectExplorer::LanguageExtensions languageExtensions = m_projectPart.languageExtensions; + const bool gnuExtensions = languageExtensions & LanguageExtension::Gnu; switch (m_projectPart.languageVersion) { - case ProjectPart::C89: + case LanguageVersion::C89: opts << (gnuExtensions ? QLatin1String("-std=gnu89") : QLatin1String("-std=c89")); break; - case ProjectPart::C99: + case LanguageVersion::C99: opts << (gnuExtensions ? QLatin1String("-std=gnu99") : QLatin1String("-std=c99")); break; - case ProjectPart::C11: + case LanguageVersion::C11: opts << (gnuExtensions ? QLatin1String("-std=gnu11") : QLatin1String("-std=c11")); break; - case ProjectPart::C18: + case LanguageVersion::C18: // Clang 6, 7 and current trunk do not accept "gnu18"/"c18", so use the "*17" variants. opts << (gnuExtensions ? QLatin1String("-std=gnu17") : QLatin1String("-std=c17")); break; - case ProjectPart::CXX11: + case LanguageVersion::CXX11: opts << (gnuExtensions ? QLatin1String("-std=gnu++11") : QLatin1String("-std=c++11")); break; - case ProjectPart::CXX98: + case LanguageVersion::CXX98: opts << (gnuExtensions ? QLatin1String("-std=gnu++98") : QLatin1String("-std=c++98")); break; - case ProjectPart::CXX03: + case LanguageVersion::CXX03: opts << (gnuExtensions ? QLatin1String("-std=gnu++03") : QLatin1String("-std=c++03")); break; - case ProjectPart::CXX14: + case LanguageVersion::CXX14: opts << (gnuExtensions ? QLatin1String("-std=gnu++14") : QLatin1String("-std=c++14")); break; - case ProjectPart::CXX17: + case LanguageVersion::CXX17: opts << (gnuExtensions ? QLatin1String("-std=gnu++17") : QLatin1String("-std=c++17")); break; - case ProjectPart::CXX2a: + case LanguageVersion::CXX2a: opts << (gnuExtensions ? QLatin1String("-std=gnu++2a") : QLatin1String("-std=c++2a")); break; } - if (languageExtensions & ProjectPart::MicrosoftExtensions) + if (languageExtensions & LanguageExtension::Microsoft) opts << QLatin1String("-fms-extensions"); - if (checkForBorlandExtensions && (languageExtensions & ProjectPart::BorlandExtensions)) + if (checkForBorlandExtensions && (languageExtensions & LanguageExtension::Borland)) opts << QLatin1String("-fborland-extensions"); m_options.append(opts); diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp index 540ac99104..e359f71a05 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp @@ -103,9 +103,9 @@ QString Utils::toString(ProjectExplorer::HeaderPathType type) return QString(); } -QString Utils::toString(ProjectPart::LanguageVersion languageVersion) +QString Utils::toString(ProjectExplorer::LanguageVersion languageVersion) { -#define CASE_LANGUAGEVERSION(x) case ProjectPart::x: return QLatin1String(#x) +#define CASE_LANGUAGEVERSION(x) case ProjectExplorer::LanguageVersion::x: return QLatin1String(#x) switch (languageVersion) { CASE_LANGUAGEVERSION(C89); CASE_LANGUAGEVERSION(C99); @@ -123,19 +123,19 @@ QString Utils::toString(ProjectPart::LanguageVersion languageVersion) return QString(); } -QString Utils::toString(ProjectPart::LanguageExtensions languageExtension) +QString Utils::toString(ProjectExplorer::LanguageExtensions languageExtension) { QString result; -#define CASE_LANGUAGE_EXTENSION(ext) if (languageExtension & ProjectPart::ext) \ +#define CASE_LANGUAGE_EXTENSION(ext) if (languageExtension & ProjectExplorer::LanguageExtension::ext) \ result += QLatin1String(#ext ", "); - CASE_LANGUAGE_EXTENSION(NoExtensions); - CASE_LANGUAGE_EXTENSION(GnuExtensions); - CASE_LANGUAGE_EXTENSION(MicrosoftExtensions); - CASE_LANGUAGE_EXTENSION(BorlandExtensions); - CASE_LANGUAGE_EXTENSION(OpenMPExtensions); - CASE_LANGUAGE_EXTENSION(ObjectiveCExtensions); + CASE_LANGUAGE_EXTENSION(None); + CASE_LANGUAGE_EXTENSION(Gnu); + CASE_LANGUAGE_EXTENSION(Microsoft); + CASE_LANGUAGE_EXTENSION(Borland); + CASE_LANGUAGE_EXTENSION(OpenMP); + CASE_LANGUAGE_EXTENSION(ObjectiveC); #undef CASE_LANGUAGE_EXTENSION if (result.endsWith(QLatin1String(", "))) result.chop(2); diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.h b/src/plugins/cpptools/cppcodemodelinspectordumper.h index d460acf496..b0f7a18a01 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.h +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.h @@ -47,8 +47,8 @@ struct CPPTOOLS_EXPORT Utils static QString toString(CPlusPlus::Document::CheckMode checkMode); static QString toString(CPlusPlus::Document::DiagnosticMessage::Level level); static QString toString(ProjectExplorer::HeaderPathType type); - static QString toString(CppTools::ProjectPart::LanguageVersion languageVersion); - static QString toString(CppTools::ProjectPart::LanguageExtensions languageExtension); + static QString toString(ProjectExplorer::LanguageVersion languageVersion); + static QString toString(ProjectExplorer::LanguageExtensions languageExtension); static QString toString(CppTools::ProjectPart::QtVersion qtVersion); static QString toString(CppTools::ProjectPart::BuildTargetType buildTargetType); static QString toString(const QVector<CppTools::ProjectFile> &projectFiles); diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 9303d66338..5db9dd601d 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -1170,8 +1170,9 @@ ProjectPart::Ptr CppModelManager::fallbackProjectPart() // Do not activate ObjectiveCExtensions since this will lead to the // "objective-c++" language option for a project-less *.cpp file. - part->languageExtensions = ProjectPart::AllExtensions; - part->languageExtensions &= ~ProjectPart::ObjectiveCExtensions; + part->languageExtensions = ProjectExplorer::LanguageExtension::All; + part->languageExtensions &= ~ProjectExplorer::LanguageExtensions( + ProjectExplorer::LanguageExtension::ObjectiveC); part->qtVersion = ProjectPart::Qt5; part->updateLanguageFeatures(); diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index 8d04f2429e..0e2d8bc366 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -68,16 +68,16 @@ public: if (m_tcInfo.macroInspectionRunner) { auto macroInspectionReport = m_tcInfo.macroInspectionRunner(m_flags.commandLineFlags); m_projectPart.toolChainMacros = macroInspectionReport.macros; - m_projectPart.languageVersion = static_cast<ProjectPart::LanguageVersion>( - macroInspectionReport.languageVersion); + m_projectPart.languageVersion = macroInspectionReport.languageVersion; } else { // No compiler set in kit. if (m_language == Language::C) - m_projectPart.languageVersion = ProjectPart::LanguageVersion::LatestCVersion; + m_projectPart.languageVersion = ProjectExplorer::LanguageVersion::LatestC; if (m_language == Language::CXX) - m_projectPart.languageVersion = ProjectPart::LanguageVersion::LatestCxxVersion; + m_projectPart.languageVersion = ProjectExplorer::LanguageVersion::LatestCxx; } - mapLanguageExtensions(); + m_projectPart.languageExtensions = m_flags.languageExtensions; + addHeaderPaths(); } @@ -89,25 +89,6 @@ private: : ProjectPart::WordWidth32Bit; } - void mapLanguageExtensions() - { - using namespace ProjectExplorer; - - const ToolChain::CompilerFlags &compilerFlags = m_flags.compilerFlags; - ProjectPart::LanguageExtensions &languageExtensions = m_projectPart.languageExtensions; - - if (compilerFlags & ToolChain::BorlandExtensions) - languageExtensions |= ProjectPart::BorlandExtensions; - if (compilerFlags & ToolChain::GnuExtensions) - languageExtensions |= ProjectPart::GnuExtensions; - if (compilerFlags & ToolChain::MicrosoftExtensions) - languageExtensions |= ProjectPart::MicrosoftExtensions; - if (compilerFlags & ToolChain::OpenMP) - languageExtensions |= ProjectPart::OpenMPExtensions; - if (compilerFlags & ToolChain::ObjectiveC) - languageExtensions |= ProjectPart::ObjectiveCExtensions; - } - void addHeaderPaths() { if (!m_tcInfo.headerPathsRunner) @@ -181,6 +162,8 @@ static ProjectPart::Ptr projectPartFromRawProjectPart(const RawProjectPart &rawP QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProjectPart &rawProjectPart) { + using ProjectExplorer::LanguageExtension; + QVector<ProjectPart::Ptr> result; ProjectFileCategorizer cat(rawProjectPart.displayName, rawProjectPart.files, @@ -196,7 +179,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj cat.cxxSources(), cat.partName("C++"), Language::CXX, - ProjectPart::NoExtensions); + LanguageExtension::None); } if (cat.hasObjcxxSources()) { @@ -205,7 +188,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj cat.objcxxSources(), cat.partName("Obj-C++"), Language::CXX, - ProjectPart::ObjectiveCExtensions); + LanguageExtension::ObjectiveC); } if (cat.hasCSources()) { @@ -214,7 +197,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj cat.cSources(), cat.partName("C"), Language::C, - ProjectPart::NoExtensions); + LanguageExtension::None); } if (cat.hasObjcSources()) { @@ -223,18 +206,19 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj cat.objcSources(), cat.partName("Obj-C"), Language::C, - ProjectPart::ObjectiveCExtensions); + LanguageExtension::ObjectiveC); } } return result; } -ProjectPart::Ptr ProjectInfoGenerator::createProjectPart(const RawProjectPart &rawProjectPart, - const ProjectPart::Ptr &templateProjectPart, - const ProjectFiles &projectFiles, - const QString &partName, - Language language, - ProjectPart::LanguageExtensions languageExtensions) +ProjectPart::Ptr ProjectInfoGenerator::createProjectPart( + const RawProjectPart &rawProjectPart, + const ProjectPart::Ptr &templateProjectPart, + const ProjectFiles &projectFiles, + const QString &partName, + Language language, + ProjectExplorer::LanguageExtensions languageExtensions) { ProjectPart::Ptr part(templateProjectPart->copy()); part->displayName = partName; diff --git a/src/plugins/cpptools/cppprojectinfogenerator.h b/src/plugins/cpptools/cppprojectinfogenerator.h index 963c9a748b..752c648fd1 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.h +++ b/src/plugins/cpptools/cppprojectinfogenerator.h @@ -49,7 +49,7 @@ private: const ProjectFiles &projectFiles, const QString &partName, Language language, - ProjectPart::LanguageExtensions languageExtensions); + ProjectExplorer::LanguageExtensions languageExtensions); private: const QFutureInterface<void> m_futureInterface; diff --git a/src/plugins/cpptools/cppprojectpartchooser.cpp b/src/plugins/cpptools/cppprojectpartchooser.cpp index bbf9ca3559..a7bb56beb0 100644 --- a/src/plugins/cpptools/cppprojectpartchooser.cpp +++ b/src/plugins/cpptools/cppprojectpartchooser.cpp @@ -116,7 +116,8 @@ private: bool isPreferredLanguage(const ProjectPart &projectPart) const { - const bool isCProjectPart = projectPart.languageVersion <= ProjectPart::LatestCVersion; + const bool isCProjectPart = projectPart.languageVersion + <= ProjectExplorer::LanguageVersion::LatestC; return (m_languagePreference == Language::C && isCProjectPart) || (m_languagePreference == Language::Cxx && !isCProjectPart); } diff --git a/src/plugins/cpptools/cpprawprojectpart.cpp b/src/plugins/cpptools/cpprawprojectpart.cpp index 6f60d9cf46..9675be5291 100644 --- a/src/plugins/cpptools/cpprawprojectpart.cpp +++ b/src/plugins/cpptools/cpprawprojectpart.cpp @@ -39,7 +39,7 @@ RawProjectPartFlags::RawProjectPartFlags(const ProjectExplorer::ToolChain *toolC if (toolChain) { this->commandLineFlags = commandLineFlags; warningFlags = toolChain->warningFlags(commandLineFlags); - compilerFlags = toolChain->compilerFlags(commandLineFlags); + languageExtensions = toolChain->languageExtensions(commandLineFlags); } } diff --git a/src/plugins/cpptools/cpprawprojectpart.h b/src/plugins/cpptools/cpprawprojectpart.h index 4aa17a3a47..e238fa1d81 100644 --- a/src/plugins/cpptools/cpprawprojectpart.h +++ b/src/plugins/cpptools/cpprawprojectpart.h @@ -28,6 +28,7 @@ #include "cpptools_global.h" #include "projectpart.h" +#include <projectexplorer/language.h> #include <projectexplorer/toolchain.h> #include <functional> @@ -45,8 +46,7 @@ public: QStringList commandLineFlags; // The following are deduced from commandLineFlags. ProjectExplorer::WarningFlags warningFlags = ProjectExplorer::WarningFlags::Default; - ProjectExplorer::ToolChain::CompilerFlags compilerFlags - = ProjectExplorer::ToolChain::CompilerFlag::NoFlags; + ProjectExplorer::LanguageExtensions languageExtensions = ProjectExplorer::LanguageExtension::None; }; class CPPTOOLS_EXPORT RawProjectPart diff --git a/src/plugins/cpptools/projectpart.cpp b/src/plugins/cpptools/projectpart.cpp index 4dc871e87e..bcfe4b3e52 100644 --- a/src/plugins/cpptools/projectpart.cpp +++ b/src/plugins/cpptools/projectpart.cpp @@ -35,12 +35,13 @@ namespace CppTools { void ProjectPart::updateLanguageFeatures() { - const bool hasCxx = languageVersion >= CXX98; + const bool hasCxx = languageVersion >= ProjectExplorer::LanguageVersion::CXX98; const bool hasQt = hasCxx && qtVersion != NoQt; - languageFeatures.cxx11Enabled = languageVersion >= CXX11; + languageFeatures.cxx11Enabled = languageVersion >= ProjectExplorer::LanguageVersion::CXX11; languageFeatures.cxxEnabled = hasCxx; - languageFeatures.c99Enabled = languageVersion >= C99; - languageFeatures.objCEnabled = languageExtensions.testFlag(ObjectiveCExtensions); + languageFeatures.c99Enabled = languageVersion >= ProjectExplorer::LanguageVersion::C99; + languageFeatures.objCEnabled = languageExtensions.testFlag( + ProjectExplorer::LanguageExtension::ObjectiveC); languageFeatures.qtEnabled = hasQt; languageFeatures.qtMocRunEnabled = hasQt; if (!hasQt) { diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h index 8d04e71ff3..77a08128bf 100644 --- a/src/plugins/cpptools/projectpart.h +++ b/src/plugins/cpptools/projectpart.h @@ -30,6 +30,7 @@ #include "cppprojectfile.h" #include <projectexplorer/headerpath.h> +#include <projectexplorer/language.h> #include <projectexplorer/projectexplorer_global.h> #include <projectexplorer/projectmacro.h> @@ -49,38 +50,6 @@ namespace CppTools { class CPPTOOLS_EXPORT ProjectPart { public: - // Keep in sync with Toolchain::LanguageVersion! - enum LanguageVersion { - C89, - C99, - C11, - C18, - LatestCVersion = C18, - CXX98, - CXX03, - CXX11, - CXX14, - CXX17, - CXX2a, - LatestCxxVersion = CXX2a, - }; - - enum LanguageExtension { - NoExtensions = 0, - GnuExtensions = 1 << 0, - MicrosoftExtensions = 1 << 1, - BorlandExtensions = 1 << 2, - OpenMPExtensions = 1 << 3, - ObjectiveCExtensions = 1 << 4, - - AllExtensions = GnuExtensions - | MicrosoftExtensions - | BorlandExtensions - | OpenMPExtensions - | ObjectiveCExtensions - }; - Q_DECLARE_FLAGS(LanguageExtensions, LanguageExtension) - enum QtVersion { UnknownQt = -1, NoQt, @@ -129,8 +98,8 @@ public: ProjectExplorer::Macros projectMacros; - LanguageVersion languageVersion = LatestCxxVersion; - LanguageExtensions languageExtensions = NoExtensions; + ProjectExplorer::LanguageVersion languageVersion = ProjectExplorer::LanguageVersion::LatestCxx; + ProjectExplorer::LanguageExtensions languageExtensions = ProjectExplorer::LanguageExtension::None; ProjectExplorer::WarningFlags warningFlags = ProjectExplorer::WarningFlags::Default; QtVersion qtVersion = UnknownQt; CPlusPlus::LanguageFeatures languageFeatures; |