diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-08-21 16:26:06 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-09-16 17:01:35 +0200 |
commit | 990cedeb1b5e3c492c7ca9316ec81cf5eb2f7ac1 (patch) | |
tree | f8bd0940f38d4f96531a940d77073dd4a4fc9ef1 /src/plugins/clangcodemodel/clangutils.cpp | |
parent | 193cb3b9a5acb304a091971440b37c0aac891268 (diff) | |
download | qt-creator-990cedeb1b5e3c492c7ca9316ec81cf5eb2f7ac1.tar.gz |
C++: remove C/C++ distinction from ProjectPart fields.
.. because they now hold only files for a single language+extensions
combination.
Task-number: QTCREATORBUG-11709
Task-number: QTCREATORBUG-12818
Change-Id: If294f6de07d60126be733d98de12b89b8af3efce
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/plugins/clangcodemodel/clangutils.cpp')
-rw-r--r-- | src/plugins/clangcodemodel/clangutils.cpp | 122 |
1 files changed, 53 insertions, 69 deletions
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 5f2a27ca68..f1f5689202 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -164,27 +164,11 @@ static QString getResourceDir() */ QStringList createClangOptions(const ProjectPart::Ptr &pPart, ProjectFile::Kind fileKind) { - QStringList result = clangLanguageOption(fileKind); - switch (fileKind) { - default: - case CppTools::ProjectFile::CXXHeader: - case CppTools::ProjectFile::CXXSource: - case CppTools::ProjectFile::ObjCXXHeader: - case CppTools::ProjectFile::ObjCXXSource: - case CppTools::ProjectFile::CudaSource: - case CppTools::ProjectFile::OpenCLSource: - result << clangOptionsForCxx(pPart->qtVersion, - pPart->cxxVersion, - pPart->cxxExtensions); - break; - case CppTools::ProjectFile::CHeader: - case CppTools::ProjectFile::CSource: - case CppTools::ProjectFile::ObjCHeader: - case CppTools::ProjectFile::ObjCSource: - result << clangOptionsForC(pPart->cVersion, - pPart->cxxExtensions); - break; - } + const bool objcExt = pPart->languageExtensions & ProjectPart::ObjectiveCExtensions; + QStringList result = clangLanguageOption(fileKind, objcExt); + result << clangOptionsForLanguage(pPart->qtVersion, + pPart->languageVersion, + pPart->languageExtensions); if (pPart.isNull()) return result; @@ -204,6 +188,7 @@ QStringList createClangOptions(const ProjectPart::Ptr &pPart, ProjectFile::Kind result << QLatin1String("-fdiagnostics-show-note-include-stack"); result << QLatin1String("-fmacro-backtrace-limit=0"); result << QLatin1String("-fretain-comments-from-system-headers"); + // TODO: -Xclang -ferror-limit -Xclang 0 ? if (!pPart->projectConfigFile.isEmpty()) result << QLatin1String("-include") << pPart->projectConfigFile; @@ -263,57 +248,45 @@ QStringList createPCHInclusionOptions(const QString &pchFile) } /// @return "-std" flag to select standard, flags for C extensions -QStringList clangOptionsForC(ProjectPart::CVersion cVersion, ProjectPart::CXXExtensions cxxExtensions) +/// @return "-std" flag to select standard, flags for C++ extensions, Qt injections +QStringList clangOptionsForLanguage(CppTools::ProjectPart::QtVersion qtVersion, + CppTools::ProjectPart::LanguageVersion languageVersion, + ProjectPart::LanguageExtensions languageExtensions) { QStringList opts; - bool gnuExpensions = cxxExtensions & ProjectPart::GnuExtensions; - switch (cVersion) { + bool gnuExtensions = languageExtensions & ProjectPart::GnuExtensions; + switch (languageVersion) { case ProjectPart::C89: - opts << (gnuExpensions ? QLatin1String("-std=gnu89") : QLatin1String("-std=c89")); + opts << (gnuExtensions ? QLatin1String("-std=gnu89") : QLatin1String("-std=c89")); break; case ProjectPart::C99: - opts << (gnuExpensions ? QLatin1String("-std=gnu99") : QLatin1String("-std=c99")); + opts << (gnuExtensions ? QLatin1String("-std=gnu99") : QLatin1String("-std=c99")); break; case ProjectPart::C11: - opts << (gnuExpensions ? QLatin1String("-std=gnu11") : QLatin1String("-std=c11")); + opts << (gnuExtensions ? QLatin1String("-std=gnu11") : QLatin1String("-std=c11")); break; - } - - if (cxxExtensions & ProjectPart::MicrosoftExtensions) { - opts << QLatin1String("-fms-extensions"); - } - -#if defined(CINDEX_VERSION) // clang 3.2 or higher - if (cxxExtensions & ProjectPart::BorlandExtensions) - opts << QLatin1String("-fborland-extensions"); -#endif - - return opts; -} - -/// @return "-std" flag to select standard, flags for C++ extensions, Qt injections -QStringList clangOptionsForCxx(ProjectPart::QtVersion qtVersion, - ProjectPart::CXXVersion cxxVersion, - ProjectPart::CXXExtensions cxxExtensions) -{ - QStringList opts; - bool gnuExpensions = cxxExtensions & ProjectPart::GnuExtensions; - switch (cxxVersion) { case ProjectPart::CXX11: - opts << (gnuExpensions ? QLatin1String("-std=gnu++11") : QLatin1String("-std=c++11")); + opts << (gnuExtensions ? QLatin1String("-std=gnu++11") : QLatin1String("-std=c++11")); break; case ProjectPart::CXX98: - opts << (gnuExpensions ? QLatin1String("-std=gnu++98") : QLatin1String("-std=c++98")); + opts << (gnuExtensions ? QLatin1String("-std=gnu++98") : QLatin1String("-std=c++98")); + break; + case ProjectPart::CXX03: + opts << QLatin1String("-std=c++03"); + break; + case ProjectPart::CXX14: + opts << QLatin1String("-std=c++1y"); // TODO: change to c++14 after 3.5 + break; + case ProjectPart::CXX17: + opts << QLatin1String("-std=c++1z"); // TODO: change to c++17 at some point in the future break; } - if (cxxExtensions & ProjectPart::MicrosoftExtensions) { - opts << QLatin1String("-fms-extensions") - << QLatin1String("-fdelayed-template-parsing"); - } + if (languageExtensions & ProjectPart::MicrosoftExtensions) + opts << QLatin1String("-fms-extensions"); #if defined(CINDEX_VERSION) // clang 3.2 or higher - if (cxxExtensions & ProjectPart::BorlandExtensions) + if (languageExtensions & ProjectPart::BorlandExtensions) opts << QLatin1String("-fborland-extensions"); #endif @@ -327,37 +300,48 @@ QStringList clangOptionsForCxx(ProjectPart::QtVersion qtVersion, } /// @return "-x language-code" -QStringList clangLanguageOption(ProjectFile::Kind fileKind) +QStringList clangLanguageOption(ProjectFile::Kind fileKind, bool objcExt) { QStringList opts; opts += QLatin1String("-x"); switch (fileKind) { case ProjectFile::CHeader: -// opts += QLatin1String("c-header"); -// break; + if (objcExt) + opts += QLatin1String("objective-c-header"); + else + opts += QLatin1String("c-header"); + break; + case ProjectFile::CXXHeader: default: - opts += QLatin1String("c++-header"); - break; - case ProjectFile::CXXSource: - opts += QLatin1String("c++"); - break; - case ProjectFile::CSource: - opts += QLatin1String("c"); - break; + if (!objcExt) { + opts += QLatin1String("c++-header"); + break; + } // else: fall-through! case ProjectFile::ObjCHeader: -// opts += QLatin1String("objective-c-header"); -// break; case ProjectFile::ObjCXXHeader: opts += QLatin1String("objective-c++-header"); break; + + case ProjectFile::CSource: + if (!objcExt) { + opts += QLatin1String("c"); + break; + } // else: fall-through! case ProjectFile::ObjCSource: opts += QLatin1String("objective-c"); break; + + case ProjectFile::CXXSource: + if (!objcExt) { + opts += QLatin1String("c++"); + break; + } // else: fall-through! case ProjectFile::ObjCXXSource: opts += QLatin1String("objective-c++"); break; + case ProjectFile::OpenCLSource: opts += QLatin1String("cl"); break; |