forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user