CppTools: improved languages support in ProjectPart

Please, read blueprint here:
http://qt-project.org/wiki/Blueprint-for-language-specs-system

Removed feature from QbsProjectManager: it not longer splits project on
separate C and C++ parts, because Qt version used only by clang parser
(not native) and can be ignored for pure C and Objective-C without C++.

Change-Id: I1c561f7f9f915cc6cb8579d19db74e8352f54c1e
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Sergey Shambir
2013-03-04 01:30:46 +04:00
parent 0c417bbb8e
commit 63fe568b9b
14 changed files with 375 additions and 206 deletions

View File

@@ -430,13 +430,13 @@ void QbsProject::updateCppCodeModel(const qbs::ProjectData *prj)
CPlusPlus::CppModelManagerInterface::ProjectInfo pinfo = modelmanager->projectInfo(this);
pinfo.clearProjectParts();
CPlusPlus::CppModelManagerInterface::ProjectPart::QtVersion qtVersionForPart
= CPlusPlus::CppModelManagerInterface::ProjectPart::NoQt;
CPlusPlus::ProjectPart::QtVersion qtVersionForPart
= CPlusPlus::ProjectPart::NoQt;
if (qtVersion) {
if (qtVersion->qtVersion() < QtSupport::QtVersionNumber(5,0,0))
qtVersionForPart = CPlusPlus::CppModelManagerInterface::ProjectPart::Qt4;
qtVersionForPart = CPlusPlus::ProjectPart::Qt4;
else
qtVersionForPart = CPlusPlus::CppModelManagerInterface::ProjectPart::Qt5;
qtVersionForPart = CPlusPlus::ProjectPart::Qt5;
}
QStringList allFiles;
@@ -490,62 +490,24 @@ void QbsProject::updateCppCodeModel(const qbs::ProjectData *prj)
const QString pch = props.getModuleProperty(QLatin1String(CONFIG_CPP_MODULE),
QLatin1String(CONFIG_PRECOMPILEDHEADER)).toString();
QStringList cxxSources;
QStringList cSources;
QStringList headers;
QStringList objcSources;
cxxSources << QLatin1String(CONFIGURATION_PATH);
cSources << QLatin1String(CONFIGURATION_PATH);
objcSources << QLatin1String(CONFIGURATION_PATH);
CPlusPlus::ProjectPart::Ptr part(new CPlusPlus::ProjectPart);
CPlusPlus::ProjectFileAdder adder(part->files);
foreach (const QString &file, grp.allFilePaths())
if (adder.maybeAdd(file))
allFiles.append(file);
part->files << CPlusPlus::ProjectFile(QLatin1String(CONFIGURATION_PATH),
CPlusPlus::ProjectFile::CXXHeader);
foreach (const QString &file, grp.allFilePaths()) {
QFileInfo fi = QFileInfo(file);
if (!fi.exists())
continue;
Core::MimeType t = Core::ICore::mimeDatabase()->findByFile(fi);
if (t.isNull())
continue;
if (t.matchesType(QLatin1String("text/x-chdr")))
headers << file;
else if (t.matchesType(QLatin1String("text/x-c++src")))
cxxSources << file;
else if (t.matchesType(QLatin1String("text/x-objcsrc")))
objcSources << file;
else if (t.matchesType(QLatin1String("text/x-csrc")))
cxxSources << file;
}
allFiles.append(headers);
allFiles.append(cSources);
allFiles.append(cxxSources);
allFiles.append(objcSources);
if (cxxSources.count() > 1) {
CPlusPlus::CppModelManagerInterface::ProjectPart::Ptr part(new CPlusPlus::CppModelManagerInterface::ProjectPart);
part->qtVersion = qtVersionForPart;
part->language = isCxx11 ? CPlusPlus::CppModelManagerInterface::ProjectPart::CXX11
: CPlusPlus::CppModelManagerInterface::ProjectPart::CXX;
part->sourceFiles = cxxSources;
part->objcSourceFiles = objcSources;
part->headerFiles = headers;
part->includePaths = grpIncludePaths;
part->frameworkPaths = grpFrameworkPaths;
part->precompiledHeaders = QStringList(pch);
part->defines = grpDefines;
pinfo.appendProjectPart(part);
}
if (cSources.count() > 1) {
CPlusPlus::CppModelManagerInterface::ProjectPart::Ptr part(new CPlusPlus::CppModelManagerInterface::ProjectPart);
part->qtVersion = CPlusPlus::CppModelManagerInterface::ProjectPart::NoQt;
part->language = CPlusPlus::CppModelManagerInterface::ProjectPart::C99; // FIXME: Can we find the exact c version from tc?
part->sourceFiles = cxxSources;
part->headerFiles = headers;
part->includePaths = grpIncludePaths;
part->frameworkPaths = grpFrameworkPaths;
part->precompiledHeaders = QStringList(pch);
part->defines = grpDefines;
pinfo.appendProjectPart(part);
}
part->qtVersion = qtVersionForPart;
// TODO: qbs has separate variable for CFLAGS
part->cVersion = CPlusPlus::ProjectPart::C99;
part->cxxVersion = isCxx11 ? CPlusPlus::ProjectPart::CXX11 : CPlusPlus::ProjectPart::CXX98;
// TODO: get the exact cxxExtensions from toolchain
part->includePaths = grpIncludePaths;
part->frameworkPaths = grpFrameworkPaths;
part->precompiledHeaders = QStringList(pch);
part->defines = grpDefines;
pinfo.appendProjectPart(part);
}
}