forked from qt-creator/qt-creator
CMakeProjectManager: Use "cooked types" in DirectoryData
Less conversions cycles at the price of a few more temporary bytes. Change-Id: Ibda82e02d7b83944f5db38ac7cf75c4bae4f55ec Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
@@ -1359,9 +1359,8 @@ QString CMakeBuildConfiguration::cmakeBuildType() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!config.isEmpty() && !isMultiConfig()) {
|
if (!config.isEmpty() && !isMultiConfig()) {
|
||||||
cmakeBuildType = QString::fromUtf8(CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config));
|
cmakeBuildType = CMakeConfigItem::stringValueOf("CMAKE_BUILD_TYPE", config);
|
||||||
const_cast<CMakeBuildConfiguration*>(this)
|
const_cast<CMakeBuildConfiguration*>(this)->setCMakeBuildType(cmakeBuildType);
|
||||||
->setCMakeBuildType(cmakeBuildType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return cmakeBuildType;
|
return cmakeBuildType;
|
||||||
|
|||||||
@@ -838,8 +838,8 @@ void CMakeBuildSystem::wireUpConnections()
|
|||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
const CMakeConfig config = CMakeBuildSystem::parseCMakeCacheDotTxt(cmakeCacheTxt, &errorMessage);
|
const CMakeConfig config = CMakeBuildSystem::parseCMakeCacheDotTxt(cmakeCacheTxt, &errorMessage);
|
||||||
if (!config.isEmpty() && errorMessage.isEmpty()) {
|
if (!config.isEmpty() && errorMessage.isEmpty()) {
|
||||||
QByteArray cmakeBuildTypeName = CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config);
|
QString cmakeBuildTypeName = CMakeConfigItem::stringValueOf("CMAKE_BUILD_TYPE", config);
|
||||||
cmakeBuildConfiguration()->setCMakeBuildType(QString::fromUtf8(cmakeBuildTypeName), true);
|
cmakeBuildConfiguration()->setCMakeBuildType(cmakeBuildTypeName, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), options);
|
setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), options);
|
||||||
@@ -1210,8 +1210,7 @@ void CMakeBuildSystem::updateQmlJSCodeModel(const QStringList &extraHeaderPaths,
|
|||||||
};
|
};
|
||||||
|
|
||||||
const CMakeConfig &cm = cmakeBuildConfiguration()->configurationFromCMake();
|
const CMakeConfig &cm = cmakeBuildConfiguration()->configurationFromCMake();
|
||||||
const QString cmakeImports = QString::fromUtf8(CMakeConfigItem::valueOf("QML_IMPORT_PATH", cm));
|
addImports(CMakeConfigItem::stringValueOf("QML_IMPORT_PATH", cm));
|
||||||
addImports(cmakeImports);
|
|
||||||
addImports(kit()->value(QtSupport::KitQmlImportPath::id()).toString());
|
addImports(kit()->value(QtSupport::KitQmlImportPath::id()).toString());
|
||||||
|
|
||||||
for (const QString &extraHeaderPath : extraHeaderPaths)
|
for (const QString &extraHeaderPath : extraHeaderPaths)
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QIODevice>
|
#include <QIODevice>
|
||||||
|
|
||||||
|
using namespace Utils;
|
||||||
|
|
||||||
namespace CMakeProjectManager {
|
namespace CMakeProjectManager {
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
@@ -62,6 +64,16 @@ QByteArray CMakeConfigItem::valueOf(const QByteArray &key, const QList<CMakeConf
|
|||||||
return QByteArray();
|
return QByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CMakeConfigItem::stringValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input)
|
||||||
|
{
|
||||||
|
return QString::fromUtf8(valueOf(key, input));
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePath CMakeConfigItem::filePathValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input)
|
||||||
|
{
|
||||||
|
return FilePath::fromUtf8(valueOf(key, input));
|
||||||
|
}
|
||||||
|
|
||||||
QString CMakeConfigItem::expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
|
QString CMakeConfigItem::expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
|
||||||
const QList<CMakeConfigItem> &input)
|
const QList<CMakeConfigItem> &input)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ public:
|
|||||||
CMakeConfigItem(const QByteArray &k, const QByteArray &v);
|
CMakeConfigItem(const QByteArray &k, const QByteArray &v);
|
||||||
|
|
||||||
static QByteArray valueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
|
static QByteArray valueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
|
||||||
|
static QString stringValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
|
||||||
|
static Utils::FilePath filePathValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
|
||||||
static QString expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
|
static QString expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
|
||||||
const QList<CMakeConfigItem> &input);
|
const QList<CMakeConfigItem> &input);
|
||||||
static QStringList cmakeSplitValue(const QString &in, bool keepEmpty = false);
|
static QStringList cmakeSplitValue(const QString &in, bool keepEmpty = false);
|
||||||
|
|||||||
@@ -65,11 +65,11 @@ struct DirectoryData
|
|||||||
|
|
||||||
// Kit Stuff
|
// Kit Stuff
|
||||||
FilePath cmakeBinary;
|
FilePath cmakeBinary;
|
||||||
QByteArray generator;
|
QString generator;
|
||||||
QByteArray extraGenerator;
|
QString extraGenerator;
|
||||||
QByteArray platform;
|
QString platform;
|
||||||
QByteArray toolset;
|
QString toolset;
|
||||||
QByteArray sysroot;
|
FilePath sysroot;
|
||||||
QtProjectImporter::QtVersionData qt;
|
QtProjectImporter::QtVersionData qt;
|
||||||
QVector<ToolChainDescription> toolChains;
|
QVector<ToolChainDescription> toolChains;
|
||||||
};
|
};
|
||||||
@@ -206,16 +206,11 @@ static FilePath qmakeFromCMakeCache(const CMakeConfig &config)
|
|||||||
cmake.setEnvironment(env);
|
cmake.setEnvironment(env);
|
||||||
cmake.setTimeOutMessageBoxEnabled(false);
|
cmake.setTimeOutMessageBoxEnabled(false);
|
||||||
|
|
||||||
QString cmakeGenerator
|
QString cmakeGenerator = CMakeConfigItem::stringValueOf(QByteArray("CMAKE_GENERATOR"), config);
|
||||||
= QString::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_GENERATOR"), config));
|
FilePath cmakeExecutable = CMakeConfigItem::filePathValueOf(QByteArray("CMAKE_COMMAND"), config);
|
||||||
FilePath cmakeExecutable
|
FilePath cmakeMakeProgram =CMakeConfigItem::filePathValueOf(QByteArray("CMAKE_MAKE_PROGRAM"), config);
|
||||||
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_COMMAND"), config));
|
FilePath toolchainFile = CMakeConfigItem::filePathValueOf(QByteArray("CMAKE_TOOLCHAIN_FILE"), config);
|
||||||
FilePath cmakeMakeProgram
|
FilePath hostPath = CMakeConfigItem::filePathValueOf(QByteArray("QT_HOST_PATH"), config);
|
||||||
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_MAKE_PROGRAM"), config));
|
|
||||||
FilePath toolchainFile
|
|
||||||
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_TOOLCHAIN_FILE"), config));
|
|
||||||
FilePath hostPath
|
|
||||||
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("QT_HOST_PATH"), config));
|
|
||||||
|
|
||||||
QStringList args;
|
QStringList args;
|
||||||
args.push_back("-S");
|
args.push_back("-S");
|
||||||
@@ -333,10 +328,9 @@ QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
|
|||||||
for (auto const &buildType: qAsConst(buildConfigurationTypes)) {
|
for (auto const &buildType: qAsConst(buildConfigurationTypes)) {
|
||||||
auto data = std::make_unique<DirectoryData>();
|
auto data = std::make_unique<DirectoryData>();
|
||||||
|
|
||||||
data->cmakeHomeDirectory = FilePath::fromUserInput(
|
data->cmakeHomeDirectory =
|
||||||
QString::fromUtf8(
|
FilePath::fromUserInput(CMakeConfigItem::stringValueOf("CMAKE_HOME_DIRECTORY", config))
|
||||||
CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", config)))
|
.canonicalPath();
|
||||||
.canonicalPath();
|
|
||||||
const FilePath canonicalProjectDirectory = projectDirectory().canonicalPath();
|
const FilePath canonicalProjectDirectory = projectDirectory().canonicalPath();
|
||||||
if (data->cmakeHomeDirectory != canonicalProjectDirectory) {
|
if (data->cmakeHomeDirectory != canonicalProjectDirectory) {
|
||||||
*warningMessage = tr("Unexpected source directory \"%1\", expected \"%2\". "
|
*warningMessage = tr("Unexpected source directory \"%1\", expected \"%2\". "
|
||||||
@@ -350,13 +344,12 @@ QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
|
|||||||
data->buildDirectory = importPath;
|
data->buildDirectory = importPath;
|
||||||
data->cmakeBuildType = buildType;
|
data->cmakeBuildType = buildType;
|
||||||
|
|
||||||
data->cmakeBinary = FilePath::fromUtf8(CMakeConfigItem::valueOf("CMAKE_COMMAND", config));
|
data->cmakeBinary = CMakeConfigItem::filePathValueOf("CMAKE_COMMAND", config);
|
||||||
data->generator = CMakeConfigItem::valueOf("CMAKE_GENERATOR", config);
|
data->generator = CMakeConfigItem::stringValueOf("CMAKE_GENERATOR", config);
|
||||||
data->extraGenerator = CMakeConfigItem::valueOf("CMAKE_EXTRA_GENERATOR", config);
|
data->extraGenerator = CMakeConfigItem::stringValueOf("CMAKE_EXTRA_GENERATOR", config);
|
||||||
data->platform = CMakeConfigItem::valueOf("CMAKE_GENERATOR_PLATFORM", config);
|
data->platform = CMakeConfigItem::stringValueOf("CMAKE_GENERATOR_PLATFORM", config);
|
||||||
data->toolset = CMakeConfigItem::valueOf("CMAKE_GENERATOR_TOOLSET", config);
|
data->toolset = CMakeConfigItem::stringValueOf("CMAKE_GENERATOR_TOOLSET", config);
|
||||||
|
data->sysroot = CMakeConfigItem::filePathValueOf("CMAKE_SYSROOT", config);
|
||||||
data->sysroot = CMakeConfigItem::valueOf("CMAKE_SYSROOT", config);
|
|
||||||
|
|
||||||
// Qt:
|
// Qt:
|
||||||
const FilePath qmake = qmakeFromCMakeCache(config);
|
const FilePath qmake = qmakeFromCMakeCache(config);
|
||||||
@@ -380,13 +373,13 @@ bool CMakeProjectImporter::matchKit(void *directoryData, const Kit *k) const
|
|||||||
if (!cm || cm->cmakeExecutable() != data->cmakeBinary)
|
if (!cm || cm->cmakeExecutable() != data->cmakeBinary)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (CMakeGeneratorKitAspect::generator(k) != QString::fromUtf8(data->generator)
|
if (CMakeGeneratorKitAspect::generator(k) != data->generator
|
||||||
|| CMakeGeneratorKitAspect::extraGenerator(k) != QString::fromUtf8(data->extraGenerator)
|
|| CMakeGeneratorKitAspect::extraGenerator(k) != data->extraGenerator
|
||||||
|| CMakeGeneratorKitAspect::platform(k) != QString::fromUtf8(data->platform)
|
|| CMakeGeneratorKitAspect::platform(k) != data->platform
|
||||||
|| CMakeGeneratorKitAspect::toolset(k) != QString::fromUtf8(data->toolset))
|
|| CMakeGeneratorKitAspect::toolset(k) != data->toolset)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (SysRootKitAspect::sysRoot(k) != FilePath::fromUtf8(data->sysroot))
|
if (SysRootKitAspect::sysRoot(k) != data->sysroot)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId())
|
if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId())
|
||||||
@@ -421,12 +414,12 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const
|
|||||||
addTemporaryData(CMakeKitAspect::id(), cmtd.cmakeTool->id().toSetting(), k);
|
addTemporaryData(CMakeKitAspect::id(), cmtd.cmakeTool->id().toSetting(), k);
|
||||||
CMakeKitAspect::setCMakeTool(k, cmtd.cmakeTool->id());
|
CMakeKitAspect::setCMakeTool(k, cmtd.cmakeTool->id());
|
||||||
|
|
||||||
CMakeGeneratorKitAspect::setGenerator(k, QString::fromUtf8(data->generator));
|
CMakeGeneratorKitAspect::setGenerator(k, data->generator);
|
||||||
CMakeGeneratorKitAspect::setExtraGenerator(k, QString::fromUtf8(data->extraGenerator));
|
CMakeGeneratorKitAspect::setExtraGenerator(k, data->extraGenerator);
|
||||||
CMakeGeneratorKitAspect::setPlatform(k, QString::fromUtf8(data->platform));
|
CMakeGeneratorKitAspect::setPlatform(k, data->platform);
|
||||||
CMakeGeneratorKitAspect::setToolset(k, QString::fromUtf8(data->toolset));
|
CMakeGeneratorKitAspect::setToolset(k, data->toolset);
|
||||||
|
|
||||||
SysRootKitAspect::setSysRoot(k, FilePath::fromUtf8(data->sysroot));
|
SysRootKitAspect::setSysRoot(k, data->sysroot);
|
||||||
|
|
||||||
for (const ToolChainDescription &cmtcd : data->toolChains) {
|
for (const ToolChainDescription &cmtcd : data->toolChains) {
|
||||||
const ToolChainData tcd = findOrCreateToolChains(cmtcd);
|
const ToolChainData tcd = findOrCreateToolChains(cmtcd);
|
||||||
|
|||||||
Reference in New Issue
Block a user