forked from qt-creator/qt-creator
ProjectExplorer: Collapse BuildInfo hierarchy
... to pass it around as real values, avoiding, among others, the need of occasional explicit deletion. The formerly extra members of the derived stuff are handled via an extra variant (for data) and via a functor in the build configuration factory. The change is mechanical. Change-Id: I19ca4e0c5f0a5b196fc16dfb98bb005dc679f855 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -26,8 +26,8 @@
|
||||
#include "cmakebuildconfiguration.h"
|
||||
|
||||
#include "builddirmanager.h"
|
||||
#include "cmakebuildinfo.h"
|
||||
#include "cmakebuildstep.h"
|
||||
#include "cmakeconfigitem.h"
|
||||
#include "cmakekitinformation.h"
|
||||
#include "cmakeproject.h"
|
||||
#include "cmakeprojectconstants.h"
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
|
||||
#include <projectexplorer/buildinfo.h>
|
||||
#include <projectexplorer/buildmanager.h>
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/kit.h>
|
||||
@@ -54,6 +55,20 @@
|
||||
using namespace ProjectExplorer;
|
||||
using namespace Utils;
|
||||
|
||||
namespace CMakeProjectManager {
|
||||
|
||||
class CMakeExtraBuildInfo
|
||||
{
|
||||
public:
|
||||
QString sourceDirectory;
|
||||
CMakeConfig configuration;
|
||||
};
|
||||
|
||||
} // namespace CMakeProjectManager
|
||||
|
||||
Q_DECLARE_METATYPE(CMakeProjectManager::CMakeExtraBuildInfo)
|
||||
|
||||
|
||||
namespace CMakeProjectManager {
|
||||
namespace Internal {
|
||||
|
||||
@@ -70,7 +85,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *parent, Core::Id id)
|
||||
connect(project, &Project::parsingFinished, this, &BuildConfiguration::enabledChanged);
|
||||
}
|
||||
|
||||
void CMakeBuildConfiguration::initialize(const BuildInfo *info)
|
||||
void CMakeBuildConfiguration::initialize(const BuildInfo &info)
|
||||
{
|
||||
BuildConfiguration::initialize(info);
|
||||
|
||||
@@ -80,13 +95,14 @@ void CMakeBuildConfiguration::initialize(const BuildInfo *info)
|
||||
BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
|
||||
cleanSteps->appendStep(new CMakeBuildStep(cleanSteps));
|
||||
|
||||
if (info->buildDirectory.isEmpty()) {
|
||||
if (info.buildDirectory.isEmpty()) {
|
||||
auto project = static_cast<const CMakeProject *>(target()->project());
|
||||
setBuildDirectory(CMakeBuildConfiguration::shadowBuildDirectory(project->projectFilePath(),
|
||||
target()->kit(),
|
||||
info->displayName, info->buildType));
|
||||
info.displayName, info.buildType));
|
||||
}
|
||||
setConfigurationForCMake(static_cast<const CMakeBuildInfo *>(info)->configuration);
|
||||
auto extraInfo = info.extraInfo.value<CMakeExtraBuildInfo>();
|
||||
setConfigurationForCMake(extraInfo.configuration);
|
||||
}
|
||||
|
||||
bool CMakeBuildConfiguration::isEnabled() const
|
||||
@@ -424,74 +440,74 @@ BuildConfiguration::BuildType CMakeBuildConfigurationFactory::cmakeBuildTypeToBu
|
||||
return BuildConfiguration::Unknown;
|
||||
}
|
||||
|
||||
QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableBuilds(const ProjectExplorer::Target *parent) const
|
||||
QList<BuildInfo> CMakeBuildConfigurationFactory::availableBuilds(const Target *parent) const
|
||||
{
|
||||
QList<ProjectExplorer::BuildInfo *> result;
|
||||
QList<BuildInfo> result;
|
||||
|
||||
for (int type = BuildTypeNone; type != BuildTypeLast; ++type) {
|
||||
CMakeBuildInfo *info = createBuildInfo(parent->kit(),
|
||||
parent->project()->projectDirectory().toString(),
|
||||
BuildType(type));
|
||||
result << info;
|
||||
result << createBuildInfo(parent->kit(),
|
||||
parent->project()->projectDirectory().toString(),
|
||||
BuildType(type));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<ProjectExplorer::BuildInfo *> CMakeBuildConfigurationFactory::availableSetups(const ProjectExplorer::Kit *k,
|
||||
const QString &projectPath) const
|
||||
QList<BuildInfo> CMakeBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
|
||||
{
|
||||
QList<ProjectExplorer::BuildInfo *> result;
|
||||
QList<BuildInfo> result;
|
||||
const FileName projectPathName = FileName::fromString(projectPath);
|
||||
for (int type = BuildTypeNone; type != BuildTypeLast; ++type) {
|
||||
CMakeBuildInfo *info = createBuildInfo(k,
|
||||
ProjectExplorer::Project::projectDirectory(projectPathName).toString(),
|
||||
BuildType(type));
|
||||
BuildInfo info = createBuildInfo(k,
|
||||
ProjectExplorer::Project::projectDirectory(projectPathName).toString(),
|
||||
BuildType(type));
|
||||
if (type == BuildTypeNone) {
|
||||
//: The name of the build configuration created by default for a cmake project.
|
||||
info->displayName = tr("Default");
|
||||
info.displayName = tr("Default");
|
||||
} else {
|
||||
info->displayName = info->typeName;
|
||||
info.displayName = info.typeName;
|
||||
}
|
||||
info->buildDirectory
|
||||
info.buildDirectory
|
||||
= CMakeBuildConfiguration::shadowBuildDirectory(projectPathName, k,
|
||||
info->displayName, info->buildType);
|
||||
info.displayName, info.buildType);
|
||||
result << info;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
CMakeBuildInfo *CMakeBuildConfigurationFactory::createBuildInfo(const ProjectExplorer::Kit *k,
|
||||
const QString &sourceDir,
|
||||
BuildType buildType) const
|
||||
BuildInfo CMakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
|
||||
const QString &sourceDir,
|
||||
BuildType buildType) const
|
||||
{
|
||||
auto info = new CMakeBuildInfo(this);
|
||||
info->kitId = k->id();
|
||||
info->sourceDirectory = sourceDir;
|
||||
BuildInfo info(this);
|
||||
info.kitId = k->id();
|
||||
|
||||
CMakeExtraBuildInfo extra;
|
||||
extra.sourceDirectory = sourceDir;
|
||||
|
||||
CMakeConfigItem buildTypeItem;
|
||||
switch (buildType) {
|
||||
case BuildTypeNone:
|
||||
info->typeName = tr("Build");
|
||||
info.typeName = tr("Build");
|
||||
break;
|
||||
case BuildTypeDebug:
|
||||
buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "Debug")};
|
||||
info->typeName = tr("Debug");
|
||||
info->buildType = BuildConfiguration::Debug;
|
||||
info.typeName = tr("Debug");
|
||||
info.buildType = BuildConfiguration::Debug;
|
||||
break;
|
||||
case BuildTypeRelease:
|
||||
buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "Release")};
|
||||
info->typeName = tr("Release");
|
||||
info->buildType = BuildConfiguration::Release;
|
||||
info.typeName = tr("Release");
|
||||
info.buildType = BuildConfiguration::Release;
|
||||
break;
|
||||
case BuildTypeMinSizeRel:
|
||||
buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "MinSizeRel")};
|
||||
info->typeName = tr("Minimum Size Release");
|
||||
info->buildType = BuildConfiguration::Release;
|
||||
info.typeName = tr("Minimum Size Release");
|
||||
info.buildType = BuildConfiguration::Release;
|
||||
break;
|
||||
case BuildTypeRelWithDebInfo:
|
||||
buildTypeItem = {CMakeConfigItem("CMAKE_BUILD_TYPE", "RelWithDebInfo")};
|
||||
info->typeName = tr("Release with Debug Information");
|
||||
info->buildType = BuildConfiguration::Profile;
|
||||
info.typeName = tr("Release with Debug Information");
|
||||
info.buildType = BuildConfiguration::Profile;
|
||||
break;
|
||||
default:
|
||||
QTC_CHECK(false);
|
||||
@@ -499,19 +515,20 @@ CMakeBuildInfo *CMakeBuildConfigurationFactory::createBuildInfo(const ProjectExp
|
||||
}
|
||||
|
||||
if (!buildTypeItem.isNull())
|
||||
info->configuration.append(buildTypeItem);
|
||||
extra.configuration.append(buildTypeItem);
|
||||
|
||||
const QString sysRoot = SysRootKitInformation::sysRoot(k).toString();
|
||||
if (!sysRoot.isEmpty()) {
|
||||
info->configuration.append(CMakeConfigItem("CMAKE_SYSROOT", sysRoot.toUtf8()));
|
||||
extra.configuration.append(CMakeConfigItem("CMAKE_SYSROOT", sysRoot.toUtf8()));
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(
|
||||
k, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
||||
if (tc) {
|
||||
const QByteArray targetTriple = tc->originalTargetTriple().toUtf8();
|
||||
info->configuration.append(CMakeConfigItem("CMAKE_C_COMPILER_TARGET", targetTriple));
|
||||
info->configuration.append(CMakeConfigItem("CMAKE_CXX_COMPILER_TARGET ", targetTriple));
|
||||
extra.configuration.append(CMakeConfigItem("CMAKE_C_COMPILER_TARGET", targetTriple));
|
||||
extra.configuration.append(CMakeConfigItem("CMAKE_CXX_COMPILER_TARGET ", targetTriple));
|
||||
}
|
||||
}
|
||||
info.extraInfo = QVariant::fromValue(extra);
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include <projectexplorer/deploymentdata.h>
|
||||
|
||||
namespace CMakeProjectManager {
|
||||
class CMakeBuildInfo;
|
||||
class CMakeExtraBuildInfo;
|
||||
class CMakeProject;
|
||||
|
||||
namespace Internal {
|
||||
@@ -83,7 +83,7 @@ private:
|
||||
QVariantMap toMap() const override;
|
||||
BuildType buildType() const override;
|
||||
|
||||
void initialize(const ProjectExplorer::BuildInfo *info) override;
|
||||
void initialize(const ProjectExplorer::BuildInfo &info) override;
|
||||
QString disabledReason() const override;
|
||||
|
||||
ProjectExplorer::NamedWidget *createConfigWidget() override;
|
||||
@@ -133,14 +133,14 @@ public:
|
||||
static BuildType buildTypeFromByteArray(const QByteArray &in);
|
||||
static ProjectExplorer::BuildConfiguration::BuildType cmakeBuildTypeToBuildType(const BuildType &in);
|
||||
|
||||
QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) const override;
|
||||
QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *k,
|
||||
const QString &projectPath) const override;
|
||||
QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *parent) const override;
|
||||
QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k,
|
||||
const QString &projectPath) const override;
|
||||
|
||||
private:
|
||||
CMakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k,
|
||||
const QString &sourceDir,
|
||||
BuildType buildType) const;
|
||||
ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k,
|
||||
const QString &sourceDir,
|
||||
BuildType buildType) const;
|
||||
|
||||
friend class CMakeProjectImporter;
|
||||
};
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cmakebuildconfiguration.h"
|
||||
#include "cmakeconfigitem.h"
|
||||
|
||||
#include <projectexplorer/buildinfo.h>
|
||||
#include <projectexplorer/kit.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <projectexplorer/project.h>
|
||||
#include <utils/environment.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
namespace CMakeProjectManager {
|
||||
|
||||
class CMakeBuildInfo : public ProjectExplorer::BuildInfo
|
||||
{
|
||||
public:
|
||||
CMakeBuildInfo(const ProjectExplorer::BuildConfigurationFactory *f) : ProjectExplorer::BuildInfo(f)
|
||||
{ }
|
||||
|
||||
CMakeBuildInfo(const Internal::CMakeBuildConfiguration *bc) :
|
||||
ProjectExplorer::BuildInfo(ProjectExplorer::BuildConfigurationFactory::find(bc->target()))
|
||||
{
|
||||
displayName = bc->displayName();
|
||||
buildDirectory = bc->buildDirectory();
|
||||
kitId = bc->target()->kit()->id();
|
||||
|
||||
QTC_ASSERT(bc->target()->project(), return);
|
||||
sourceDirectory = bc->target()->project()->projectDirectory().toString();
|
||||
configuration = bc->configurationForCMake();
|
||||
}
|
||||
|
||||
bool operator==(const BuildInfo &o) const final
|
||||
{
|
||||
if (!ProjectExplorer::BuildInfo::operator==(o))
|
||||
return false;
|
||||
|
||||
auto other = static_cast<const CMakeBuildInfo *>(&o);
|
||||
return sourceDirectory == other->sourceDirectory
|
||||
&& configuration == other->configuration;
|
||||
}
|
||||
|
||||
QString sourceDirectory;
|
||||
CMakeConfig configuration;
|
||||
};
|
||||
|
||||
} // namespace CMakeProjectManager
|
||||
@@ -27,10 +27,10 @@
|
||||
|
||||
#include "builddirmanager.h"
|
||||
#include "cmakebuildconfiguration.h"
|
||||
#include "cmakebuildinfo.h"
|
||||
#include "cmakekitinformation.h"
|
||||
#include "cmaketoolmanager.h"
|
||||
|
||||
#include <projectexplorer/buildinfo.h>
|
||||
#include <projectexplorer/kit.h>
|
||||
#include <projectexplorer/kitmanager.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
@@ -347,9 +347,9 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const
|
||||
});
|
||||
}
|
||||
|
||||
QList<BuildInfo *> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
|
||||
const QList<BuildInfo> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
|
||||
{
|
||||
QList<BuildInfo *> result;
|
||||
QList<BuildInfo> result;
|
||||
auto data = static_cast<const DirectoryData *>(directoryData);
|
||||
auto factory = qobject_cast<CMakeBuildConfigurationFactory *>(
|
||||
BuildConfigurationFactory::find(k, projectFilePath().toString()));
|
||||
@@ -357,21 +357,20 @@ QList<BuildInfo *> CMakeProjectImporter::buildInfoListForKit(const Kit *k, void
|
||||
return result;
|
||||
|
||||
// create info:
|
||||
std::unique_ptr<CMakeBuildInfo>
|
||||
info(factory->createBuildInfo(k, projectDirectory().toString(),
|
||||
CMakeBuildConfigurationFactory::buildTypeFromByteArray(data->cmakeBuildType)));
|
||||
info->buildDirectory = data->buildDirectory;
|
||||
info->displayName = info->typeName;
|
||||
BuildInfo info = factory->createBuildInfo(k, projectDirectory().toString(),
|
||||
CMakeBuildConfigurationFactory::buildTypeFromByteArray(data->cmakeBuildType));
|
||||
info.buildDirectory = data->buildDirectory;
|
||||
info.displayName = info.typeName;
|
||||
|
||||
bool found = false;
|
||||
foreach (BuildInfo *bInfo, result) {
|
||||
if (*static_cast<CMakeBuildInfo *>(bInfo) == *info) {
|
||||
foreach (BuildInfo bInfo, result) {
|
||||
if (bInfo == info) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
result << info.release();
|
||||
result << info;
|
||||
|
||||
qCDebug(cmInputLog()) << "BuildInfo configured.";
|
||||
|
||||
|
||||
@@ -44,8 +44,8 @@ private:
|
||||
QList<void *> examineDirectory(const Utils::FileName &importPath) const final;
|
||||
bool matchKit(void *directoryData, const ProjectExplorer::Kit *k) const final;
|
||||
ProjectExplorer::Kit *createKit(void *directoryData) const final;
|
||||
QList<ProjectExplorer::BuildInfo *> buildInfoListForKit(const ProjectExplorer::Kit *k,
|
||||
void *directoryData) const final;
|
||||
const QList<ProjectExplorer::BuildInfo> buildInfoListForKit(const ProjectExplorer::Kit *k,
|
||||
void *directoryData) const final;
|
||||
|
||||
struct CMakeToolData {
|
||||
bool isTemporary = false;
|
||||
|
||||
@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri)
|
||||
HEADERS = builddirmanager.h \
|
||||
builddirparameters.h \
|
||||
builddirreader.h \
|
||||
cmakebuildinfo.h \
|
||||
cmakebuildstep.h \
|
||||
cmakebuildtarget.h \
|
||||
cmakeconfigitem.h \
|
||||
|
||||
@@ -28,7 +28,6 @@ QtcPlugin {
|
||||
"cmake_global.h",
|
||||
"cmakebuildconfiguration.cpp",
|
||||
"cmakebuildconfiguration.h",
|
||||
"cmakebuildinfo.h",
|
||||
"cmakebuildsettingswidget.cpp",
|
||||
"cmakebuildsettingswidget.h",
|
||||
"cmakebuildstep.cpp",
|
||||
|
||||
Reference in New Issue
Block a user