aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp29
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h10
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp97
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h16
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildinfo.h72
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp21
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectimporter.h4
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro1
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs1
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.cpp26
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.h10
-rw-r--r--src/plugins/nim/project/nimbuildconfiguration.cpp32
-rw-r--r--src/plugins/nim/project/nimbuildconfiguration.h12
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp33
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h19
-rw-r--r--src/plugins/projectexplorer/buildinfo.cpp3
-rw-r--r--src/plugins/projectexplorer/buildinfo.h23
-rw-r--r--src/plugins/projectexplorer/buildsettingspropertiespage.cpp22
-rw-r--r--src/plugins/projectexplorer/buildsettingspropertiespage.h3
-rw-r--r--src/plugins/projectexplorer/project.cpp14
-rw-r--r--src/plugins/projectexplorer/project.h2
-rw-r--r--src/plugins/projectexplorer/projectimporter.cpp10
-rw-r--r--src/plugins/projectexplorer/projectimporter.h4
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp11
-rw-r--r--src/plugins/projectexplorer/target.cpp10
-rw-r--r--src/plugins/projectexplorer/targetsetuppage.cpp15
-rw-r--r--src/plugins/projectexplorer/targetsetupwidget.cpp45
-rw-r--r--src/plugins/projectexplorer/targetsetupwidget.h10
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp64
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.h10
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildinfo.cpp48
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildinfo.h48
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp12
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectimporter.cpp24
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectimporter.h4
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.pro2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.qbs2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp91
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h13
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildinfo.h54
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.cpp12
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp35
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectimporter.h4
-rw-r--r--src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp11
-rw-r--r--src/plugins/qtsupport/qtprojectimporter.cpp26
45 files changed, 419 insertions, 596 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
index 93f62323a1..33ebf0f188 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
@@ -64,7 +64,7 @@ AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::I
setBuildDirectory(Utils::FileName::fromString("/<foobar>"));
}
-void AutotoolsBuildConfiguration::initialize(const BuildInfo *info)
+void AutotoolsBuildConfiguration::initialize(const BuildInfo &info)
{
BuildConfiguration::initialize(info);
@@ -114,30 +114,27 @@ AutotoolsBuildConfigurationFactory::AutotoolsBuildConfigurationFactory()
setSupportedProjectMimeTypeName(Constants::MAKEFILE_MIMETYPE);
}
-QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableBuilds(const Target *parent) const
+QList<BuildInfo> AutotoolsBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
return {createBuildInfo(parent->kit(), parent->project()->projectDirectory())};
}
-QList<BuildInfo *> AutotoolsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
+QList<BuildInfo> AutotoolsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
- QList<BuildInfo *> result;
- BuildInfo *info = createBuildInfo(k,
- Utils::FileName::fromString(AutotoolsProject::defaultBuildDirectory(projectPath)));
+ BuildInfo info = createBuildInfo(k,
+ Utils::FileName::fromString(AutotoolsProject::defaultBuildDirectory(projectPath)));
//: The name of the build configuration created by default for a autotools project.
- info->displayName = tr("Default");
- result << info;
- return result;
+ info.displayName = tr("Default");
+ return {info};
}
-BuildInfo *AutotoolsBuildConfigurationFactory::createBuildInfo(const Kit *k,
- const Utils::FileName &buildDir) const
+BuildInfo AutotoolsBuildConfigurationFactory::createBuildInfo(const Kit *k,
+ const Utils::FileName &buildDir) const
{
- auto info = new BuildInfo(this);
- info->typeName = tr("Build");
- info->buildDirectory = buildDir;
- info->kitId = k->id();
-
+ BuildInfo info(this);
+ info.typeName = tr("Build");
+ info.buildDirectory = buildDir;
+ info.kitId = k->id();
return info;
}
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
index 2c88c26b71..2cd784c235 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
@@ -41,7 +41,7 @@ class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
- void initialize(const ProjectExplorer::BuildInfo *info) override;
+ void initialize(const ProjectExplorer::BuildInfo &info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
BuildType buildType() const override;
};
@@ -54,11 +54,11 @@ public:
AutotoolsBuildConfigurationFactory();
private:
- 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;
- ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const;
+ ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const;
};
} // namespace Internal
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 66d3ba5fbe..565b6b80c3 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -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>
@@ -55,6 +56,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 {
const char INITIAL_ARGUMENTS[] = "CMakeProjectManager.CMakeBuildConfiguration.InitialArgument"; // Obsolete since QtC 3.7
@@ -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;
}
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index d093d4474e..587666b0bf 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -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;
};
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildinfo.h b/src/plugins/cmakeprojectmanager/cmakebuildinfo.h
deleted file mode 100644
index fed92439d5..0000000000
--- a/src/plugins/cmakeprojectmanager/cmakebuildinfo.h
+++ /dev/null
@@ -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
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp
index 68836b6b56..7a83f082f8 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp
@@ -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.";
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h
index f2cfa620e0..c86fe77041 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h
@@ -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;
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro
index c242998441..641c53bb25 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro
@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri)
HEADERS = builddirmanager.h \
builddirparameters.h \
builddirreader.h \
- cmakebuildinfo.h \
cmakebuildstep.h \
cmakebuildtarget.h \
cmakeconfigitem.h \
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs
index d0ce6bebe2..cfa9b36e30 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs
@@ -28,7 +28,6 @@ QtcPlugin {
"cmake_global.h",
"cmakebuildconfiguration.cpp",
"cmakebuildconfiguration.h",
- "cmakebuildinfo.h",
"cmakebuildsettingswidget.cpp",
"cmakebuildsettingswidget.h",
"cmakebuildstep.cpp",
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
index f6b9ea99f5..28dfdc86bb 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
@@ -58,7 +58,7 @@ GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, Core::Id id
updateCacheAndEmitEnvironmentChanged();
}
-void GenericBuildConfiguration::initialize(const BuildInfo *info)
+void GenericBuildConfiguration::initialize(const BuildInfo &info)
{
BuildConfiguration::initialize(info);
@@ -91,28 +91,26 @@ GenericBuildConfigurationFactory::GenericBuildConfigurationFactory()
GenericBuildConfigurationFactory::~GenericBuildConfigurationFactory() = default;
-QList<BuildInfo *> GenericBuildConfigurationFactory::availableBuilds(const Target *parent) const
+QList<BuildInfo> GenericBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
return {createBuildInfo(parent->kit(), parent->project()->projectDirectory())};
}
-QList<BuildInfo *> GenericBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
+QList<BuildInfo> GenericBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
- QList<BuildInfo *> result;
- BuildInfo *info = createBuildInfo(k, Project::projectDirectory(Utils::FileName::fromString(projectPath)));
+ BuildInfo info = createBuildInfo(k, Project::projectDirectory(Utils::FileName::fromString(projectPath)));
//: The name of the build configuration created by default for a generic project.
- info->displayName = tr("Default");
- result << info;
- return result;
+ info.displayName = tr("Default");
+ return {info};
}
-BuildInfo *GenericBuildConfigurationFactory::createBuildInfo(const Kit *k,
- const Utils::FileName &buildDir) const
+BuildInfo GenericBuildConfigurationFactory::createBuildInfo(const Kit *k,
+ const Utils::FileName &buildDir) const
{
- auto info = new BuildInfo(this);
- info->typeName = tr("Build");
- info->buildDirectory = buildDir;
- info->kitId = k->id();
+ BuildInfo info(this);
+ info.typeName = tr("Build");
+ info.buildDirectory = buildDir;
+ info.kitId = k->id();
return info;
}
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
index f0ff7a0d35..e4d2e3e65a 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
@@ -43,7 +43,7 @@ class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
GenericBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
- void initialize(const ProjectExplorer::BuildInfo *info) override;
+ void initialize(const ProjectExplorer::BuildInfo &info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
BuildType buildType() const override;
void addToEnvironment(Utils::Environment &env) const final;
@@ -58,11 +58,11 @@ public:
~GenericBuildConfigurationFactory() override;
private:
- 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;
- ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const;
+ ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, const Utils::FileName &buildDir) const;
};
class GenericBuildSettingsWidget : public ProjectExplorer::NamedWidget
diff --git a/src/plugins/nim/project/nimbuildconfiguration.cpp b/src/plugins/nim/project/nimbuildconfiguration.cpp
index 3aa94c6b17..46acf4881b 100644
--- a/src/plugins/nim/project/nimbuildconfiguration.cpp
+++ b/src/plugins/nim/project/nimbuildconfiguration.cpp
@@ -75,7 +75,7 @@ NimBuildConfiguration::NimBuildConfiguration(Target *target, Core::Id id)
{
}
-void NimBuildConfiguration::initialize(const BuildInfo *info)
+void NimBuildConfiguration::initialize(const BuildInfo &info)
{
BuildConfiguration::initialize(info);
@@ -85,15 +85,15 @@ void NimBuildConfiguration::initialize(const BuildInfo *info)
// Create the build configuration and initialize it from build info
setBuildDirectory(defaultBuildDirectory(target()->kit(),
project->projectFilePath().toString(),
- info->displayName,
- info->buildType));
+ info.displayName,
+ info.buildType));
// Add nim compiler build step
{
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps);
NimCompilerBuildStep::DefaultBuildOptions defaultOption;
- switch (info->buildType) {
+ switch (info.buildType) {
case BuildConfiguration::Release:
defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release;
break;
@@ -181,32 +181,32 @@ NimBuildConfigurationFactory::NimBuildConfigurationFactory()
setSupportedProjectMimeTypeName(Constants::C_NIM_PROJECT_MIMETYPE);
}
-QList<BuildInfo *> NimBuildConfigurationFactory::availableBuilds(const Target *parent) const
+QList<BuildInfo> NimBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
for (auto buildType : {BuildConfiguration::Debug, BuildConfiguration::Release})
result.push_back(createBuildInfo(parent->kit(), buildType));
return result;
}
-QList<BuildInfo *> NimBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
+QList<BuildInfo> NimBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
for (auto buildType : {BuildConfiguration::Debug, BuildConfiguration::Release}) {
- BuildInfo *info = createBuildInfo(k, buildType);
- info->displayName = info->typeName;
- info->buildDirectory = defaultBuildDirectory(k, projectPath, info->typeName, buildType);
+ BuildInfo info = createBuildInfo(k, buildType);
+ info.displayName = info.typeName;
+ info.buildDirectory = defaultBuildDirectory(k, projectPath, info.typeName, buildType);
result.push_back(info);
}
return result;
}
-BuildInfo *NimBuildConfigurationFactory::createBuildInfo(const Kit *k, BuildConfiguration::BuildType buildType) const
+BuildInfo NimBuildConfigurationFactory::createBuildInfo(const Kit *k, BuildConfiguration::BuildType buildType) const
{
- auto info = new BuildInfo(this);
- info->buildType = buildType;
- info->kitId = k->id();
- info->typeName = displayName(buildType);
+ BuildInfo info(this);
+ info.buildType = buildType;
+ info.kitId = k->id();
+ info.typeName = displayName(buildType);
return info;
}
diff --git a/src/plugins/nim/project/nimbuildconfiguration.h b/src/plugins/nim/project/nimbuildconfiguration.h
index ef90c69839..90175647ea 100644
--- a/src/plugins/nim/project/nimbuildconfiguration.h
+++ b/src/plugins/nim/project/nimbuildconfiguration.h
@@ -39,7 +39,7 @@ class NimBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
NimBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
- void initialize(const ProjectExplorer::BuildInfo *info) override;
+ void initialize(const ProjectExplorer::BuildInfo &info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
ProjectExplorer::BuildConfiguration::BuildType buildType() const override;
@@ -67,13 +67,13 @@ public:
NimBuildConfigurationFactory();
private:
- QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *parent) 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;
+ QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *k,
+ const QString &projectPath) const override;
- ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k,
- ProjectExplorer::BuildConfiguration::BuildType buildType) const;
+ ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k,
+ ProjectExplorer::BuildConfiguration::BuildType buildType) const;
QString displayName(ProjectExplorer::BuildConfiguration::BuildType buildType) const;
};
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index d44c92bb0f..8828f36f64 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -103,11 +103,11 @@ void BuildConfiguration::setBuildDirectory(const Utils::FileName &dir)
emitBuildDirectoryChanged();
}
-void BuildConfiguration::initialize(const BuildInfo *info)
+void BuildConfiguration::initialize(const BuildInfo &info)
{
- setDisplayName(info->displayName);
- setDefaultDisplayName(info->displayName);
- setBuildDirectory(info->buildDirectory);
+ setDisplayName(info.displayName);
+ setDefaultDisplayName(info.displayName);
+ setBuildDirectory(info.buildDirectory);
m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_BUILD));
m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_CLEAN));
@@ -338,6 +338,24 @@ int BuildConfigurationFactory::priority(const Target *parent) const
return canHandle(parent) ? m_basePriority : -1;
}
+const QList<Task> BuildConfigurationFactory::reportIssues(ProjectExplorer::Kit *kit, const QString &projectPath,
+ const QString &buildDir) const
+{
+ if (m_issueReporter)
+ return m_issueReporter(kit, projectPath, buildDir);
+ return {};
+}
+
+const QList<BuildInfo> BuildConfigurationFactory::allAvailableBuilds(const Target *parent) const
+{
+ return availableBuilds(parent);
+}
+
+const QList<BuildInfo> BuildConfigurationFactory::allAvailableSetups(const Kit *k, const QString &projectPath) const
+{
+ return availableSetups(k, projectPath);
+}
+
bool BuildConfigurationFactory::supportsTargetDeviceType(Core::Id id) const
{
if (m_supportedTargetDeviceTypes.isEmpty())
@@ -419,7 +437,12 @@ bool BuildConfigurationFactory::canHandle(const Target *target) const
return true;
}
-BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
+void BuildConfigurationFactory::setIssueReporter(const IssueReporter &issueReporter)
+{
+ m_issueReporter = issueReporter;
+}
+
+BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const BuildInfo &info) const
{
if (!canHandle(parent))
return nullptr;
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 1c2961c773..f71e895a23 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -39,6 +39,7 @@ class BuildStepList;
class Node;
class Kit;
class Target;
+class Task;
class IOutputParser;
class PROJECTEXPLORER_EXPORT BuildConfiguration : public ProjectConfiguration
@@ -105,7 +106,7 @@ signals:
void buildTypeChanged();
protected:
- virtual void initialize(const BuildInfo *info);
+ virtual void initialize(const BuildInfo &info);
private:
void emitBuildDirectoryChanged();
@@ -133,13 +134,13 @@ public:
virtual int priority(const Target *parent) const;
// List of build information that can be used to create a new build configuration via
// "Add Build Configuration" button.
- virtual QList<BuildInfo *> availableBuilds(const Target *parent) const = 0;
+ const QList<BuildInfo> allAvailableBuilds(const Target *parent) const;
virtual int priority(const Kit *k, const QString &projectPath) const;
// List of build information that can be used to initially set up a new build configuration.
- virtual QList<BuildInfo *> availableSetups(const Kit *k, const QString &projectPath) const = 0;
+ const QList<BuildInfo> allAvailableSetups(const Kit *k, const QString &projectPath) const;
- BuildConfiguration *create(Target *parent, const BuildInfo *info) const;
+ BuildConfiguration *create(Target *parent, const BuildInfo &info) const;
static BuildConfiguration *restore(Target *parent, const QVariantMap &map);
static BuildConfiguration *clone(Target *parent, const BuildConfiguration *source);
@@ -147,7 +148,15 @@ public:
static BuildConfigurationFactory *find(const Kit *k, const QString &projectPath);
static BuildConfigurationFactory *find(Target *parent);
+ using IssueReporter = std::function<QList<ProjectExplorer::Task>(Kit *, const QString &, const QString &)>;
+ void setIssueReporter(const IssueReporter &issueReporter);
+ const QList<Task> reportIssues(ProjectExplorer::Kit *kit,
+ const QString &projectPath, const QString &buildDir) const;
+
protected:
+ virtual QList<BuildInfo> availableBuilds(const Target *parent) const = 0;
+ virtual QList<BuildInfo> availableSetups(const Kit *k, const QString &projectPath) const = 0;
+
bool supportsTargetDeviceType(Core::Id id) const;
void setSupportedProjectType(Core::Id id);
void setSupportedProjectMimeTypeName(const QString &mimeTypeName);
@@ -173,6 +182,8 @@ private:
Core::Id m_supportedProjectType;
QList<Core::Id> m_supportedTargetDeviceTypes;
QString m_supportedProjectMimeTypeName;
+ IssueReporter m_issueReporter;
+
int m_basePriority = 0; // Use higher numbers (1, 2, ...) for higher priorities.
};
diff --git a/src/plugins/projectexplorer/buildinfo.cpp b/src/plugins/projectexplorer/buildinfo.cpp
index 67dca0e280..5afaf27791 100644
--- a/src/plugins/projectexplorer/buildinfo.cpp
+++ b/src/plugins/projectexplorer/buildinfo.cpp
@@ -27,4 +27,5 @@
using namespace ProjectExplorer;
-BuildInfo::~BuildInfo() = default;
+
+
diff --git a/src/plugins/projectexplorer/buildinfo.h b/src/plugins/projectexplorer/buildinfo.h
index 6eed9c2277..e135959352 100644
--- a/src/plugins/projectexplorer/buildinfo.h
+++ b/src/plugins/projectexplorer/buildinfo.h
@@ -37,11 +37,10 @@ namespace ProjectExplorer {
class BuildConfigurationFactory;
-class PROJECTEXPLORER_EXPORT BuildInfo
+class PROJECTEXPLORER_EXPORT BuildInfo final
{
public:
- BuildInfo(const BuildConfigurationFactory *f) : m_factory(f) { }
- virtual ~BuildInfo();
+ BuildInfo(const BuildConfigurationFactory *f = nullptr) : m_factory(f) { }
const BuildConfigurationFactory *factory() const { return m_factory; }
@@ -51,26 +50,16 @@ public:
Core::Id kitId;
BuildConfiguration::BuildType buildType = BuildConfiguration::Unknown;
- virtual bool operator==(const BuildInfo &o) const
+ QVariant extraInfo;
+ const BuildConfigurationFactory *m_factory = nullptr;
+
+ bool operator==(const BuildInfo &o) const
{
return m_factory == o.m_factory
&& displayName == o.displayName && typeName == o.typeName
&& buildDirectory == o.buildDirectory && kitId == o.kitId
&& buildType == o.buildType;
}
-
- virtual QList<Task> reportIssues(const QString &projectPath,
- const QString &buildDir) const
- {
- Q_UNUSED(projectPath);
- Q_UNUSED(buildDir);
- return QList<Task>();
- }
-
-private:
- const BuildConfigurationFactory *m_factory;
-
- friend class BuildConfigurationFactory;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 715ae977d7..772740abd2 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -57,7 +57,6 @@ using namespace ProjectExplorer::Internal;
BuildSettingsWidget::~BuildSettingsWidget()
{
clearWidgets();
- qDeleteAll(m_buildInfoList);
}
BuildSettingsWidget::BuildSettingsWidget(Target *target) :
@@ -176,16 +175,13 @@ QList<NamedWidget *> BuildSettingsWidget::subWidgets() const
void BuildSettingsWidget::updateAddButtonMenu()
{
m_addButtonMenu->clear();
- qDeleteAll(m_buildInfoList);
- m_buildInfoList.clear();
if (m_target) {
BuildConfigurationFactory *factory = BuildConfigurationFactory::find(m_target);
if (!factory)
return;
- m_buildInfoList = factory->availableBuilds(m_target);
- foreach (BuildInfo *info, m_buildInfoList) {
- QAction *action = m_addButtonMenu->addAction(info->typeName);
+ for (const BuildInfo &info : factory->allAvailableBuilds(m_target)) {
+ QAction *action = m_addButtonMenu->addAction(info.typeName);
connect(action, &QAction::triggered, this, [this, info] {
createConfiguration(info);
});
@@ -239,28 +235,26 @@ void BuildSettingsWidget::updateActiveConfiguration()
updateBuildSettings();
}
-void BuildSettingsWidget::createConfiguration(BuildInfo *info)
+void BuildSettingsWidget::createConfiguration(const BuildInfo &info_)
{
- QString originalDisplayName = info->displayName;
-
- if (info->displayName.isEmpty()) {
+ BuildInfo info = info_;
+ if (info.displayName.isEmpty()) {
bool ok = false;
- info->displayName = QInputDialog::getText(Core::ICore::mainWindow(),
+ info.displayName = QInputDialog::getText(Core::ICore::mainWindow(),
tr("New Configuration"),
tr("New configuration name:"),
QLineEdit::Normal,
QString(), &ok).trimmed();
- if (!ok || info->displayName.isEmpty())
+ if (!ok || info.displayName.isEmpty())
return;
}
- BuildConfiguration *bc = info->factory()->create(m_target, info);
+ BuildConfiguration *bc = info.factory()->create(m_target, info);
if (!bc)
return;
m_target->addBuildConfiguration(bc);
SessionManager::setActiveBuildConfiguration(m_target, bc, SetActive::Cascade);
- info->displayName = originalDisplayName;
}
QString BuildSettingsWidget::uniqueName(const QString & name)
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h
index 0686d2d341..990b43c69c 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h
@@ -63,7 +63,7 @@ private:
void updateActiveConfiguration();
- void createConfiguration(BuildInfo *info);
+ void createConfiguration(const BuildInfo &info);
void cloneConfiguration();
void deleteConfiguration(BuildConfiguration *toDelete);
QString uniqueName(const QString &name);
@@ -81,7 +81,6 @@ private:
QList<NamedWidget *> m_subWidgets;
QList<QLabel *> m_labels;
- QList<BuildInfo *> m_buildInfoList;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 1be86777d9..50cd304c9f 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -824,11 +824,11 @@ bool Project::knowsAllBuildExecutables() const
return true;
}
-void Project::setup(const QList<const BuildInfo *> &infoList)
+void Project::setup(const QList<BuildInfo> &infoList)
{
std::vector<std::unique_ptr<Target>> toRegister;
- for (const BuildInfo *info : infoList) {
- Kit *k = KitManager::kit(info->kitId);
+ for (const BuildInfo &info : infoList) {
+ Kit *k = KitManager::kit(info.kitId);
if (!k)
continue;
Target *t = target(k);
@@ -840,13 +840,11 @@ void Project::setup(const QList<const BuildInfo *> &infoList)
toRegister.emplace_back(std::move(newTarget));
}
- if (!info->factory())
+ if (!info.factory())
continue;
- BuildConfiguration *bc = info->factory()->create(t, info);
- if (!bc)
- continue;
- t->addBuildConfiguration(bc);
+ if (BuildConfiguration *bc = info.factory()->create(t, info))
+ t->addBuildConfiguration(bc);
}
for (std::unique_ptr<Target> &t : toRegister) {
t->updateDefaultDeployConfigurations();
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 3a7a010933..cf9590ad68 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -162,7 +162,7 @@ public:
// of configuration.
virtual bool knowsAllBuildExecutables() const;
- void setup(const QList<const BuildInfo *> &infoList);
+ void setup(const QList<BuildInfo> &infoList);
Utils::MacroExpander *macroExpander() const;
virtual QVariant additionalData(Core::Id id, const Target *target) const;
diff --git a/src/plugins/projectexplorer/projectimporter.cpp b/src/plugins/projectexplorer/projectimporter.cpp
index 2d4489c225..174f6a7472 100644
--- a/src/plugins/projectexplorer/projectimporter.cpp
+++ b/src/plugins/projectexplorer/projectimporter.cpp
@@ -84,9 +84,9 @@ ProjectImporter::~ProjectImporter()
removeProject(k);
}
-QList<BuildInfo *> ProjectImporter::import(const Utils::FileName &importPath, bool silent)
+const QList<BuildInfo> ProjectImporter::import(const Utils::FileName &importPath, bool silent)
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
const QLoggingCategory log("qtc.projectexplorer.import", QtWarningMsg);
qCDebug(log) << "ProjectImporter::import" << importPath << silent;
@@ -124,14 +124,14 @@ QList<BuildInfo *> ProjectImporter::import(const Utils::FileName &importPath, bo
foreach (Kit *k, kitList) {
qCDebug(log) << "Creating buildinfos for kit" << k->displayName();
- QList<BuildInfo *> infoList = buildInfoListForKit(k, data);
+ const QList<BuildInfo> infoList = buildInfoListForKit(k, data);
if (infoList.isEmpty()) {
qCDebug(log) << "No build infos for kit" << k->displayName();
continue;
}
- foreach (BuildInfo *i, infoList) {
- if (!Utils::contains(result, [i](const BuildInfo *o) { return (*i) == (*o); }))
+ for (const BuildInfo &i : infoList) {
+ if (!result.contains(i))
result += i;
}
}
diff --git a/src/plugins/projectexplorer/projectimporter.h b/src/plugins/projectexplorer/projectimporter.h
index 66f6d77831..c7df542a7a 100644
--- a/src/plugins/projectexplorer/projectimporter.h
+++ b/src/plugins/projectexplorer/projectimporter.h
@@ -56,7 +56,7 @@ public:
const Utils::FileName projectFilePath() const { return m_projectPath; }
const Utils::FileName projectDirectory() const { return m_projectPath.parentDir(); }
- virtual QList<BuildInfo *> import(const Utils::FileName &importPath, bool silent = false);
+ virtual const QList<BuildInfo> import(const Utils::FileName &importPath, bool silent = false);
virtual QStringList importCandidates() = 0;
virtual Target *preferredTarget(const QList<Target *> &possibleTargets);
@@ -93,7 +93,7 @@ protected:
// will get one of the results from examineDirectory
virtual Kit *createKit(void *directoryData) const = 0;
// will get one of the results from examineDirectory
- virtual QList<BuildInfo *> buildInfoListForKit(const Kit *k, void *directoryData) const = 0;
+ virtual const QList<BuildInfo> buildInfoListForKit(const Kit *k, void *directoryData) const = 0;
virtual void deleteDirectoryData(void *directoryData) const = 0;
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index 85917bcdda..434249bee1 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -550,18 +550,17 @@ public:
Target *lastTarget = nullptr;
BuildConfiguration *lastBc = nullptr;
- const QList<BuildInfo *> toImport = projectImporter->import(path, false);
- for (BuildInfo *info : toImport) {
- Target *target = project->target(info->kitId);
+ for (const BuildInfo &info : projectImporter->import(path, false)) {
+ Target *target = project->target(info.kitId);
if (!target) {
- std::unique_ptr<Target> newTarget = project->createTarget(KitManager::kit(info->kitId));
+ std::unique_ptr<Target> newTarget = project->createTarget(KitManager::kit(info.kitId));
target = newTarget.get();
if (newTarget)
project->addTarget(std::move(newTarget));
}
if (target) {
projectImporter->makePersistent(target->kit());
- BuildConfiguration *bc = info->factory()->create(target, info);
+ BuildConfiguration *bc = info.factory()->create(target, info);
QTC_ASSERT(bc, continue);
target->addBuildConfiguration(bc);
@@ -573,8 +572,6 @@ public:
SessionManager::setActiveBuildConfiguration(lastTarget, lastBc, SetActive::Cascade);
SessionManager::setActiveTarget(project, lastTarget, SetActive::Cascade);
}
-
- qDeleteAll(toImport);
}
void setPanel(QWidget *panel)
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index f8a3efaca9..70d742e34e 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -493,14 +493,10 @@ void Target::updateDefaultBuildConfigurations()
qWarning("No build configuration factory found for target id '%s'.", qPrintable(id().toString()));
return;
}
- QList<BuildInfo *> infoList = bcFactory->availableSetups(this->kit(), project()->projectFilePath().toString());
- foreach (BuildInfo *info, infoList) {
- BuildConfiguration *bc = bcFactory->create(this, info);
- if (!bc)
- continue;
- addBuildConfiguration(bc);
+ for (const BuildInfo &info : bcFactory->allAvailableSetups(kit(), project()->projectFilePath().toString())) {
+ if (BuildConfiguration *bc = bcFactory->create(this, info))
+ addBuildConfiguration(bc);
}
- qDeleteAll(infoList);
}
void Target::updateDefaultDeployConfigurations()
diff --git a/src/plugins/projectexplorer/targetsetuppage.cpp b/src/plugins/projectexplorer/targetsetuppage.cpp
index 6a6006c360..aea75ad993 100644
--- a/src/plugins/projectexplorer/targetsetuppage.cpp
+++ b/src/plugins/projectexplorer/targetsetuppage.cpp
@@ -485,19 +485,16 @@ void TargetSetupPage::import(const Utils::FileName &path, bool silent)
if (!m_importer)
return;
- QList<BuildInfo *> toImport = m_importer->import(path, silent);
- foreach (BuildInfo *info, toImport) {
- TargetSetupWidget *w = widget(info->kitId);
+ for (const BuildInfo &info : m_importer->import(path, silent)) {
+ TargetSetupWidget *w = widget(info.kitId);
if (!w) {
- Kit *k = KitManager::kit(info->kitId);
+ Kit *k = KitManager::kit(info.kitId);
Q_ASSERT(k);
addWidget(k);
}
- w = widget(info->kitId);
- if (!w) {
- delete info;
+ w = widget(info.kitId);
+ if (!w)
continue;
- }
w->addBuildInfo(info, true);
w->setKitSelected(true);
@@ -552,7 +549,7 @@ TargetSetupWidget *TargetSetupPage::addWidget(Kit *k)
bool TargetSetupPage::setupProject(Project *project)
{
- QList<const BuildInfo *> toSetUp; // Pointers are managed by the widgets!
+ QList<BuildInfo> toSetUp;
for (TargetSetupWidget *widget : m_widgets) {
if (!widget->isKitSelected())
continue;
diff --git a/src/plugins/projectexplorer/targetsetupwidget.cpp b/src/plugins/projectexplorer/targetsetupwidget.cpp
index e51ee45d0e..88e5b4ab06 100644
--- a/src/plugins/projectexplorer/targetsetupwidget.cpp
+++ b/src/plugins/projectexplorer/targetsetupwidget.cpp
@@ -134,9 +134,9 @@ void TargetSetupWidget::setKitSelected(bool b)
m_ignoreChange = false;
}
-void TargetSetupWidget::addBuildInfo(BuildInfo *info, bool isImport)
+void TargetSetupWidget::addBuildInfo(const BuildInfo &info, bool isImport)
{
- QTC_ASSERT(info && info->kitId == m_kit->id(), return);
+ QTC_ASSERT(info.kitId == m_kit->id(), return);
if (isImport && !m_haveImported) {
// disable everything on first import
@@ -156,16 +156,16 @@ void TargetSetupWidget::addBuildInfo(BuildInfo *info, bool isImport)
store.isEnabled = true;
++m_selected;
- if (info->factory()) {
+ if (info.factory()) {
store.checkbox = new QCheckBox;
- store.checkbox->setText(info->displayName);
+ store.checkbox->setText(info.displayName);
store.checkbox->setChecked(store.isEnabled);
store.checkbox->setAttribute(Qt::WA_LayoutUsesWidgetRect);
m_newBuildsLayout->addWidget(store.checkbox, pos * 2, 0);
store.pathChooser = new Utils::PathChooser();
store.pathChooser->setExpectedKind(Utils::PathChooser::Directory);
- store.pathChooser->setFileName(info->buildDirectory);
+ store.pathChooser->setFileName(info.buildDirectory);
store.pathChooser->setHistoryCompleter(QLatin1String("TargetSetup.BuildDir.History"));
store.pathChooser->setReadOnly(isImport);
m_newBuildsLayout->addWidget(store.pathChooser, pos * 2, 1);
@@ -217,7 +217,7 @@ void TargetSetupWidget::setProjectPath(const QString &projectPath)
m_projectPath = projectPath;
clear();
- for (BuildInfo *info : buildInfoList(m_kit, projectPath))
+ for (const BuildInfo &info : buildInfoList(m_kit, projectPath))
addBuildInfo(info, false);
}
@@ -226,16 +226,14 @@ void TargetSetupWidget::expandWidget()
m_detailsWidget->setState(Utils::DetailsWidget::Expanded);
}
-QList<BuildInfo *> TargetSetupWidget::buildInfoList(const Kit *k, const QString &projectPath)
+const QList<BuildInfo> TargetSetupWidget::buildInfoList(const Kit *k, const QString &projectPath)
{
- const BuildConfigurationFactory *const factory
- = BuildConfigurationFactory::find(k, projectPath);
- if (factory)
- return factory->availableSetups(k, projectPath);
-
- auto *info = new BuildInfo(nullptr);
- info->kitId = k->id();
- return QList<BuildInfo *>({info});
+ if (auto factory = BuildConfigurationFactory::find(k, projectPath))
+ return factory->allAvailableSetups(k, projectPath);
+
+ BuildInfo info(nullptr);
+ info.kitId = k->id();
+ return {info};
}
void TargetSetupWidget::handleKitUpdate(Kit *k)
@@ -247,9 +245,9 @@ void TargetSetupWidget::handleKitUpdate(Kit *k)
m_detailsWidget->setSummaryText(k->displayName());
}
-QList<const BuildInfo *> TargetSetupWidget::selectedBuildInfoList() const
+const QList<BuildInfo> TargetSetupWidget::selectedBuildInfoList() const
{
- QList<const BuildInfo *> result;
+ QList<BuildInfo> result;
for (const BuildInfoStore &store : m_infoStore) {
if (store.isEnabled)
result.append(store.buildInfo);
@@ -297,7 +295,7 @@ void TargetSetupWidget::pathChanged()
return store.pathChooser == pathChooser;
});
QTC_ASSERT(it != m_infoStore.end(), return);
- it->buildInfo->buildDirectory = pathChooser->fileName();
+ it->buildInfo.buildDirectory = pathChooser->fileName();
reportIssues(static_cast<int>(std::distance(m_infoStore.begin(), it)));
}
@@ -315,13 +313,15 @@ void TargetSetupWidget::reportIssues(int index)
}
}
-QPair<Task::TaskType, QString> TargetSetupWidget::findIssues(const BuildInfo *info)
+QPair<Task::TaskType, QString> TargetSetupWidget::findIssues(const BuildInfo &info)
{
- if (m_projectPath.isEmpty() || !info->factory())
+ if (m_projectPath.isEmpty() || !info.factory())
return qMakePair(Task::Unknown, QString());
- QString buildDir = info->buildDirectory.toString();
- QList<Task> issues = info->reportIssues(m_projectPath, buildDir);
+ QString buildDir = info.buildDirectory.toString();
+ QList<Task> issues;
+ if (info.factory())
+ issues = info.factory()->reportIssues(m_kit, m_projectPath, buildDir);
QString text;
Task::TaskType highestType = Task::Unknown;
@@ -347,7 +347,6 @@ QPair<Task::TaskType, QString> TargetSetupWidget::findIssues(const BuildInfo *in
TargetSetupWidget::BuildInfoStore::~BuildInfoStore()
{
- delete buildInfo;
delete checkbox;
delete label;
delete issuesLabel;
diff --git a/src/plugins/projectexplorer/targetsetupwidget.h b/src/plugins/projectexplorer/targetsetupwidget.h
index 37663343f9..62dca1af52 100644
--- a/src/plugins/projectexplorer/targetsetupwidget.h
+++ b/src/plugins/projectexplorer/targetsetupwidget.h
@@ -66,9 +66,9 @@ public:
bool isKitSelected() const;
void setKitSelected(bool b);
- void addBuildInfo(BuildInfo *info, bool isImport);
+ void addBuildInfo(const BuildInfo &info, bool isImport);
- QList<const BuildInfo *> selectedBuildInfoList() const;
+ const QList<BuildInfo> selectedBuildInfoList() const;
void setProjectPath(const QString &projectPath);
void expandWidget();
@@ -76,7 +76,7 @@ signals:
void selectedToggled() const;
private:
- static QList<BuildInfo *> buildInfoList(const Kit *k, const QString &projectPath);
+ static const QList<BuildInfo> buildInfoList(const Kit *k, const QString &projectPath);
void handleKitUpdate(ProjectExplorer::Kit *k);
@@ -86,7 +86,7 @@ private:
void manageKit();
void reportIssues(int index);
- QPair<Task::TaskType, QString> findIssues(const BuildInfo *info);
+ QPair<Task::TaskType, QString> findIssues(const BuildInfo &info);
void clear();
Kit *m_kit;
@@ -104,7 +104,7 @@ private:
BuildInfoStore &operator=(const BuildInfoStore &other) = delete;
BuildInfoStore &operator=(BuildInfoStore &&other) = delete;
- BuildInfo *buildInfo = nullptr;
+ BuildInfo buildInfo;
QCheckBox *checkbox = nullptr;
QLabel *label = nullptr;
QLabel *issuesLabel = nullptr;
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index e7874737d8..1d464039f5 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -26,7 +26,6 @@
#include "qbsbuildconfiguration.h"
#include "qbsbuildconfigurationwidget.h"
-#include "qbsbuildinfo.h"
#include "qbsbuildstep.h"
#include "qbscleanstep.h"
#include "qbsinstallstep.h"
@@ -36,7 +35,8 @@
#include <coreplugin/documentmanager.h>
#include <coreplugin/icore.h>
-#include <utils/qtcassert.h>
+
+#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/deployconfiguration.h>
#include <projectexplorer/kit.h>
@@ -46,7 +46,11 @@
#include <projectexplorer/projectmacroexpander.h>
#include <projectexplorer/target.h>
#include <projectexplorer/toolchain.h>
+
+#include <qtsupport/qtkitinformation.h>
+
#include <utils/mimetypes/mimedatabase.h>
+#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <QCoreApplication>
@@ -82,21 +86,20 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
connect(project(), &Project::parsingFinished, this, &BuildConfiguration::enabledChanged);
}
-void QbsBuildConfiguration::initialize(const BuildInfo *info)
+void QbsBuildConfiguration::initialize(const BuildInfo &info)
{
BuildConfiguration::initialize(info);
- const auto * const bi = static_cast<const QbsBuildInfo *>(info);
- QVariantMap configData = bi->config;
+ QVariantMap configData = info.extraInfo.value<QVariantMap>();
configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
- (info->buildType == BuildConfiguration::Debug)
+ (info.buildType == BuildConfiguration::Debug)
? QLatin1String(Constants::QBS_VARIANT_DEBUG)
: QLatin1String(Constants::QBS_VARIANT_RELEASE));
- Utils::FileName buildDir = info->buildDirectory;
+ Utils::FileName buildDir = info.buildDirectory;
if (buildDir.isEmpty())
buildDir = defaultBuildDirectory(target()->project()->projectFilePath().toString(),
- target()->kit(), info->displayName, info->buildType);
+ target()->kit(), info.displayName, info.buildType);
setBuildDirectory(buildDir);
// Add the build configuration.
@@ -104,13 +107,13 @@ void QbsBuildConfiguration::initialize(const BuildInfo *info)
QString configName = bd.take("configName").toString();
if (configName.isEmpty()) {
configName = "qtc_" + target()->kit()->fileSystemFriendlyName() + '_'
- + Utils::FileUtils::fileSystemFriendlyName(info->displayName);
+ + Utils::FileUtils::fileSystemFriendlyName(info.displayName);
}
setConfigurationName(configName);
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto bs = new QbsBuildStep(buildSteps);
- if (info->buildType == Release)
+ if (info.buildType == Release)
bs->setQmlDebuggingEnabled(false);
bs->setQbsConfiguration(bd);
buildSteps->appendStep(bs);
@@ -401,44 +404,51 @@ QbsBuildConfigurationFactory::QbsBuildConfigurationFactory()
registerBuildConfiguration<QbsBuildConfiguration>(Constants::QBS_BC_ID);
setSupportedProjectType(Constants::PROJECT_ID);
setSupportedProjectMimeTypeName(Constants::MIME_TYPE);
+ setIssueReporter([](Kit *k, const QString &projectPath, const QString &buildDir) -> QList<Task> {
+ const QtSupport::BaseQtVersion * const version = QtSupport::QtKitInformation::qtVersion(k);
+ return version ? version->reportIssues(projectPath, buildDir)
+ : QList<ProjectExplorer::Task>();
+ });
}
-BuildInfo *QbsBuildConfigurationFactory::createBuildInfo(const Kit *k,
- BuildConfiguration::BuildType type) const
+BuildInfo QbsBuildConfigurationFactory::createBuildInfo(const Kit *k,
+ BuildConfiguration::BuildType type) const
{
- auto info = new QbsBuildInfo(this);
- info->typeName = tr("Build");
- info->kitId = k->id();
- info->buildType = type;
- info->config.insert("configName", type == BuildConfiguration::Debug ? "Debug" : "Release");
+ BuildInfo info(this);
+ info.kitId = k->id();
+ info.buildType = type;
+ info.typeName = tr("Build");
+ QVariantMap config;
+ config.insert("configName", type == BuildConfiguration::Debug ? "Debug" : "Release");
+ info.extraInfo = config;
return info;
}
-QList<BuildInfo *> QbsBuildConfigurationFactory::availableBuilds(const Target *parent) const
+QList<BuildInfo> QbsBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
return {createBuildInfo(parent->kit(), BuildConfiguration::Debug)};
}
-QList<BuildInfo *> QbsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
+QList<BuildInfo> QbsBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
- BuildInfo *info = createBuildInfo(k, BuildConfiguration::Debug);
+ BuildInfo info = createBuildInfo(k, BuildConfiguration::Debug);
//: The name of the debug build configuration created by default for a qbs project.
- info->displayName = tr("Debug");
+ info.displayName = tr("Debug");
//: Non-ASCII characters in directory suffix may cause build issues.
- info->buildDirectory
+ info.buildDirectory
= defaultBuildDirectory(projectPath, k, tr("Debug", "Shadow build directory suffix"),
- info->buildType);
+ info.buildType);
result << info;
info = createBuildInfo(k, BuildConfiguration::Release);
//: The name of the release build configuration created by default for a qbs project.
- info->displayName = tr("Release");
+ info.displayName = tr("Release");
//: Non-ASCII characters in directory suffix may cause build issues.
- info->buildDirectory
+ info.buildDirectory
= defaultBuildDirectory(projectPath, k, tr("Release", "Shadow build directory suffix"),
- info->buildType);
+ info.buildType);
result << info;
return result;
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
index f5a48d3b05..19c29ac33f 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
@@ -49,7 +49,7 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration
QbsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
public:
- void initialize(const ProjectExplorer::BuildInfo *info) override;
+ void initialize(const ProjectExplorer::BuildInfo &info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
QbsBuildStep *qbsStep() const;
@@ -104,12 +104,12 @@ class QbsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationF
public:
QbsBuildConfigurationFactory();
- 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:
- ProjectExplorer::BuildInfo *createBuildInfo(const ProjectExplorer::Kit *k,
+ ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k,
ProjectExplorer::BuildConfiguration::BuildType type) const;
};
diff --git a/src/plugins/qbsprojectmanager/qbsbuildinfo.cpp b/src/plugins/qbsprojectmanager/qbsbuildinfo.cpp
deleted file mode 100644
index fec26589a3..0000000000
--- a/src/plugins/qbsprojectmanager/qbsbuildinfo.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 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.
-**
-****************************************************************************/
-
-#include "qbsbuildinfo.h"
-
-#include <qtsupport/qtkitinformation.h>
-
-namespace QbsProjectManager {
-namespace Internal {
-
-QbsBuildInfo::QbsBuildInfo(const ProjectExplorer::BuildConfigurationFactory *f)
- : ProjectExplorer::BuildInfo(f)
-{
-}
-
-QList<ProjectExplorer::Task> QbsBuildInfo::reportIssues(const QString &projectPath,
- const QString &buildDir) const
-{
- const ProjectExplorer::Kit * const k = ProjectExplorer::KitManager::kit(kitId);
- const QtSupport::BaseQtVersion * const version = QtSupport::QtKitInformation::qtVersion(k);
- return version ? version->reportIssues(projectPath, buildDir)
- : QList<ProjectExplorer::Task>();
-}
-
-} // namespace Internal
-} // namespace QbsProjectManager
diff --git a/src/plugins/qbsprojectmanager/qbsbuildinfo.h b/src/plugins/qbsprojectmanager/qbsbuildinfo.h
deleted file mode 100644
index 9e1c9cd521..0000000000
--- a/src/plugins/qbsprojectmanager/qbsbuildinfo.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 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 <projectexplorer/buildinfo.h>
-
-#include <QVariantMap>
-
-namespace QbsProjectManager {
-namespace Internal {
-
-class QbsBuildInfo final : public ProjectExplorer::BuildInfo
-{
-public:
- QbsBuildInfo(const ProjectExplorer::BuildConfigurationFactory *f);
-
- QVariantMap config;
-
-private:
- QList<ProjectExplorer::Task> reportIssues(const QString &projectPath,
- const QString &buildDir) const override;
-};
-
-} // namespace Internal
-} // namespace QbsProjectManager
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 9321403013..0ea82d6f40 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -686,7 +686,7 @@ QString QbsProject::uniqueProductName(const qbs::ProductData &product)
void QbsProject::configureAsExampleProject(const QSet<Id> &platforms)
{
- QList<const BuildInfo *> infoList;
+ QList<BuildInfo> infoList;
QList<Kit *> kits = KitManager::kits();
const auto qtVersionMatchesPlatform = [platforms](const QtSupport::BaseQtVersion *version) {
return platforms.isEmpty() || platforms.intersects(version->targetDeviceTypes());
@@ -696,16 +696,10 @@ void QbsProject::configureAsExampleProject(const QSet<Id> &platforms)
= QtSupport::QtKitInformation::qtVersion(k);
if (!qtVersion || !qtVersionMatchesPlatform(qtVersion))
continue;
- const BuildConfigurationFactory * const factory
- = BuildConfigurationFactory::find(k, projectFilePath().toString());
- if (!factory)
- continue;
- const auto &buildInfos = factory->availableSetups(k, projectFilePath().toString());
- for (BuildInfo * const info : buildInfos)
- infoList << info;
+ if (auto factory = BuildConfigurationFactory::find(k, projectFilePath().toString()))
+ infoList << factory->allAvailableSetups(k, projectFilePath().toString());
}
setup(infoList);
- qDeleteAll(infoList);
prepareForParsing();
}
diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
index 77676c9405..7e3f37d0a8 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
@@ -26,11 +26,11 @@
#include "qbsprojectimporter.h"
#include "qbsbuildconfiguration.h"
-#include "qbsbuildinfo.h"
#include "qbspmlogging.h"
#include <coreplugin/documentmanager.h>
#include <projectexplorer/buildconfiguration.h>
+#include <projectexplorer/buildinfo.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/project.h>
@@ -221,26 +221,26 @@ Kit *QbsProjectImporter::createKit(void *directoryData) const
});
}
-QList<BuildInfo *> QbsProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
+const QList<BuildInfo> QbsProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
{
qCDebug(qbsPmLog) << "creating build info for kit" << k->displayName();
- QList<BuildInfo *> result;
const auto factory = qobject_cast<QbsBuildConfigurationFactory *>(
BuildConfigurationFactory::find(k, projectFilePath().toString()));
if (!factory) {
qCDebug(qbsPmLog) << "no build config factory found";
- return result;
+ return {};
}
const auto * const bgData = static_cast<BuildGraphData *>(directoryData);
- auto * const buildInfo = new QbsBuildInfo(factory);
- buildInfo->displayName = bgData->bgFilePath.toFileInfo().completeBaseName();
- buildInfo->buildType = bgData->buildVariant == "debug"
+ BuildInfo info(factory);
+ info.displayName = bgData->bgFilePath.toFileInfo().completeBaseName();
+ info.buildType = bgData->buildVariant == "debug"
? BuildConfiguration::Debug : BuildConfiguration::Release;
- buildInfo->kitId = k->id();
- buildInfo->buildDirectory = bgData->bgFilePath.parentDir().parentDir();
- buildInfo->config = bgData->overriddenProperties;
- buildInfo->config.insert("configName", buildInfo->displayName);
- return result << buildInfo;
+ info.kitId = k->id();
+ info.buildDirectory = bgData->bgFilePath.parentDir().parentDir();
+ QVariantMap config = bgData->overriddenProperties;
+ config.insert("configName", info.displayName);
+ info.extraInfo = config;
+ return {info};
}
void QbsProjectImporter::deleteDirectoryData(void *directoryData) const
diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.h b/src/plugins/qbsprojectmanager/qbsprojectimporter.h
index 2980a70834..4aa3682a38 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectimporter.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.h
@@ -42,8 +42,8 @@ private:
QList<void *> examineDirectory(const Utils::FileName &importPath) const override;
bool matchKit(void *directoryData, const ProjectExplorer::Kit *k) const override;
ProjectExplorer::Kit *createKit(void *directoryData) const override;
- QList<ProjectExplorer::BuildInfo *> buildInfoListForKit(const ProjectExplorer::Kit *k,
- void *directoryData) const override;
+ const QList<ProjectExplorer::BuildInfo> buildInfoListForKit(const ProjectExplorer::Kit *k,
+ void *directoryData) const override;
void deleteDirectoryData(void *directoryData) const override;
};
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
index dcd01e32ad..d5d0b1b79a 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
@@ -23,7 +23,6 @@ HEADERS = \
propertyprovider.h \
qbsbuildconfiguration.h \
qbsbuildconfigurationwidget.h \
- qbsbuildinfo.h \
qbsbuildstep.h \
qbscleanstep.h \
qbskitinformation.h \
@@ -49,7 +48,6 @@ SOURCES = \
defaultpropertyprovider.cpp \
qbsbuildconfiguration.cpp \
qbsbuildconfigurationwidget.cpp \
- qbsbuildinfo.cpp \
qbsbuildstep.cpp \
qbscleanstep.cpp \
qbsinstallstep.cpp \
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
index 4182fc1252..6c7793db55 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
@@ -72,8 +72,6 @@ QtcPlugin {
"qbsbuildconfiguration.h",
"qbsbuildconfigurationwidget.cpp",
"qbsbuildconfigurationwidget.h",
- "qbsbuildinfo.cpp",
- "qbsbuildinfo.h",
"qbsbuildstep.cpp",
"qbsbuildstep.h",
"qbsbuildstepconfigwidget.ui",
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index 25e1f8486c..9435155b44 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -41,6 +41,7 @@
#include <coreplugin/documentmanager.h>
#include <coreplugin/icore.h>
+#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/kit.h>
@@ -126,7 +127,7 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
this, &QmakeBuildConfiguration::qtVersionsChanged);
}
-void QmakeBuildConfiguration::initialize(const BuildInfo *info)
+void QmakeBuildConfiguration::initialize(const BuildInfo &info)
{
BuildConfiguration::initialize(info);
@@ -138,28 +139,28 @@ void QmakeBuildConfiguration::initialize(const BuildInfo *info)
BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
cleanSteps->appendStep(new QmakeMakeStep(cleanSteps));
- const auto *qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
+ const QmakeExtraBuildInfo qmakeExtra = info.extraInfo.value<QmakeExtraBuildInfo>();
BaseQtVersion *version = QtKitInformation::qtVersion(target()->kit());
BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
- if (qmakeInfo->buildType == BuildConfiguration::Debug)
+ if (info.buildType == BuildConfiguration::Debug)
config |= BaseQtVersion::DebugBuild;
else
config &= ~BaseQtVersion::DebugBuild;
- QString additionalArguments = qmakeInfo->additionalArguments;
+ QString additionalArguments = qmakeExtra.additionalArguments;
if (!additionalArguments.isEmpty())
qmakeStep->setUserArguments(additionalArguments);
- qmakeStep->setLinkQmlDebuggingLibrary(qmakeInfo->config.linkQmlDebuggingQQ2);
- qmakeStep->setSeparateDebugInfo(qmakeInfo->config.separateDebugInfo);
- qmakeStep->setUseQtQuickCompiler(qmakeInfo->config.useQtQuickCompiler);
+ qmakeStep->setLinkQmlDebuggingLibrary(qmakeExtra.config.linkQmlDebuggingQQ2);
+ qmakeStep->setSeparateDebugInfo(qmakeExtra.config.separateDebugInfo);
+ qmakeStep->setUseQtQuickCompiler(qmakeExtra.config.useQtQuickCompiler);
setQMakeBuildConfiguration(config);
- FileName directory = qmakeInfo->buildDirectory;
+ FileName directory = info.buildDirectory;
if (directory.isEmpty()) {
directory = defaultBuildDirectory(target()->project()->projectFilePath().toString(),
- target()->kit(), qmakeInfo->displayName, buildType());
+ target()->kit(), info.displayName, buildType());
}
setBuildDirectory(directory);
@@ -565,43 +566,66 @@ QmakeBuildConfigurationFactory::QmakeBuildConfigurationFactory()
registerBuildConfiguration<QmakeBuildConfiguration>(Constants::QMAKE_BC_ID);
setSupportedProjectType(Constants::QMAKEPROJECT_ID);
setSupportedProjectMimeTypeName(Constants::PROFILE_MIMETYPE);
+ setIssueReporter([](Kit *k, const QString &projectPath, const QString &buildDir) {
+ QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k);
+ QList<Task> issues;
+ if (version)
+ issues << version->reportIssues(projectPath, buildDir);
+
+ QString tmpBuildDir = QDir(buildDir).absolutePath();
+ const QChar slash = QLatin1Char('/');
+ if (!tmpBuildDir.endsWith(slash))
+ tmpBuildDir.append(slash);
+ QString sourcePath = QFileInfo(projectPath).absolutePath();
+ if (!sourcePath.endsWith(slash))
+ sourcePath.append(slash);
+ if (tmpBuildDir.count(slash) != sourcePath.count(slash)) {
+ const QString msg = QCoreApplication::translate("QmakeProjectManager::QtVersion",
+ "The build directory needs to be at the same level as the source directory.");
+
+ issues.append(Task(Task::Warning, msg, Utils::FileName(), -1,
+ ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
+ }
+ return issues;
+ });
}
-QmakeBuildInfo *QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
- const QString &projectPath,
- BuildConfiguration::BuildType type) const
+BuildInfo QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
+ const QString &projectPath,
+ BuildConfiguration::BuildType type) const
{
BaseQtVersion *version = QtKitInformation::qtVersion(k);
- auto *info = new QmakeBuildInfo(this);
+ QmakeExtraBuildInfo extraInfo;
+ BuildInfo info(this);
QString suffix;
if (type == BuildConfiguration::Release) {
//: The name of the release build configuration created by default for a qmake project.
- info->displayName = tr("Release");
+ info.displayName = tr("Release");
//: Non-ASCII characters in directory suffix may cause build issues.
suffix = tr("Release", "Shadow build directory suffix");
if (version && version->isQtQuickCompilerSupported())
- info->config.useQtQuickCompiler = true;
+ extraInfo.config.useQtQuickCompiler = true;
} else {
if (type == BuildConfiguration::Debug) {
//: The name of the debug build configuration created by default for a qmake project.
- info->displayName = tr("Debug");
+ info.displayName = tr("Debug");
//: Non-ASCII characters in directory suffix may cause build issues.
suffix = tr("Debug", "Shadow build directory suffix");
} else if (type == BuildConfiguration::Profile) {
//: The name of the profile build configuration created by default for a qmake project.
- info->displayName = tr("Profile");
+ info.displayName = tr("Profile");
//: Non-ASCII characters in directory suffix may cause build issues.
suffix = tr("Profile", "Shadow build directory suffix");
- info->config.separateDebugInfo = true;
+ extraInfo.config.separateDebugInfo = true;
if (version && version->isQtQuickCompilerSupported())
- info->config.useQtQuickCompiler = true;
+ extraInfo.config.useQtQuickCompiler = true;
}
if (version && version->isQmlDebuggingSupported())
- info->config.linkQmlDebuggingQQ2 = true;
+ extraInfo.config.linkQmlDebuggingQQ2 = true;
}
- info->typeName = info->displayName;
- // Leave info->buildDirectory unset;
- info->kitId = k->id();
+ info.typeName = info.displayName;
+ // Leave info.buildDirectory unset;
+ info.kitId = k->id();
// check if this project is in the source directory:
FileName projectFilePath = FileName::fromString(projectPath);
@@ -613,11 +637,12 @@ QmakeBuildInfo *QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
QString qtBuildDir = version->qmakeProperty("QT_INSTALL_PREFIX");
QString absoluteBuildPath = QDir::cleanPath(qtBuildDir + QLatin1Char('/') + relativeProjectPath);
- info->buildDirectory = FileName::fromString(absoluteBuildPath);
+ info.buildDirectory = FileName::fromString(absoluteBuildPath);
} else {
- info->buildDirectory = defaultBuildDirectory(projectPath, k, suffix, type);
+ info.buildDirectory = defaultBuildDirectory(projectPath, k, suffix, type);
}
- info->buildType = type;
+ info.buildType = type;
+ info.extraInfo = QVariant::fromValue(extraInfo);
return info;
}
@@ -630,26 +655,26 @@ static QList<BuildConfiguration::BuildType> availableBuildTypes(const BaseQtVers
return types;
}
-QList<BuildInfo *> QmakeBuildConfigurationFactory::availableBuilds(const Target *parent) const
+QList<BuildInfo> QmakeBuildConfigurationFactory::availableBuilds(const Target *parent) const
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
const QString projectFilePath = parent->project()->projectFilePath().toString();
foreach (BuildConfiguration::BuildType buildType,
availableBuildTypes(QtKitInformation::qtVersion(parent->kit()))) {
- QmakeBuildInfo *info = createBuildInfo(parent->kit(), projectFilePath, buildType);
- info->displayName.clear(); // ask for a name
- info->buildDirectory.clear(); // This depends on the displayName
+ BuildInfo info = createBuildInfo(parent->kit(), projectFilePath, buildType);
+ info.displayName.clear(); // ask for a name
+ info.buildDirectory.clear(); // This depends on the displayName
result << info;
}
return result;
}
-QList<BuildInfo *> QmakeBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
+QList<BuildInfo> QmakeBuildConfigurationFactory::availableSetups(const Kit *k, const QString &projectPath) const
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
BaseQtVersion *qtVersion = QtKitInformation::qtVersion(k);
if (!qtVersion || !qtVersion->isValid())
return result;
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
index 48485c0cfe..fe4bdeb21e 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
@@ -34,7 +34,6 @@ namespace ProjectExplorer { class FileNode; }
namespace QmakeProjectManager {
-class QmakeBuildInfo;
class QMakeStep;
class QmakeMakeStep;
class QmakeBuildConfigurationFactory;
@@ -50,7 +49,7 @@ public:
QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
~QmakeBuildConfiguration() override;
- void initialize(const ProjectExplorer::BuildInfo *info) override;
+ void initialize(const ProjectExplorer::BuildInfo &info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
bool isShadowBuild() const;
@@ -152,12 +151,12 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeBuildConfigurationFactory : public Project
public:
QmakeBuildConfigurationFactory();
- 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:
- QmakeBuildInfo *createBuildInfo(const ProjectExplorer::Kit *k, const QString &projectPath,
- ProjectExplorer::BuildConfiguration::BuildType type) const;
+ ProjectExplorer::BuildInfo createBuildInfo(const ProjectExplorer::Kit *k, const QString &projectPath,
+ ProjectExplorer::BuildConfiguration::BuildType type) const;
};
} // namespace QmakeProjectManager
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildinfo.h b/src/plugins/qmakeprojectmanager/qmakebuildinfo.h
index 57a001c9cc..1d513f3271 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildinfo.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildinfo.h
@@ -25,66 +25,18 @@
#pragma once
-#include "qmakebuildconfiguration.h"
#include "qmakestep.h"
-#include <projectexplorer/buildinfo.h>
-#include <projectexplorer/kitmanager.h>
-#include <projectexplorer/projectexplorerconstants.h>
-#include <qtsupport/baseqtversion.h>
-#include <qtsupport/qtkitinformation.h>
-
-#include <QDir>
-#include <QFileInfo>
-
namespace QmakeProjectManager {
-using ProjectExplorer::Task;
-
-class QmakeBuildInfo : public ProjectExplorer::BuildInfo
+class QmakeExtraBuildInfo final
{
public:
- QmakeBuildInfo(const QmakeBuildConfigurationFactory *f) : ProjectExplorer::BuildInfo(f) { }
-
QString additionalArguments;
QString makefile;
QMakeStepConfig config;
-
- bool operator==(const BuildInfo &o) const final
- {
- if (!ProjectExplorer::BuildInfo::operator==(o))
- return false;
-
- auto other = static_cast<const QmakeBuildInfo *>(&o);
- return additionalArguments == other->additionalArguments
- && makefile == other->makefile
- && config == other->config;
- }
-
- QList<Task> reportIssues(const QString &projectPath, const QString &buildDir) const override
- {
- ProjectExplorer::Kit *k = ProjectExplorer::KitManager::kit(kitId);
- QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k);
- QList<Task> issues;
- if (version)
- issues << version->reportIssues(projectPath, buildDir);
-
- QString tmpBuildDir = QDir(buildDir).absolutePath();
- const QChar slash = QLatin1Char('/');
- if (!tmpBuildDir.endsWith(slash))
- tmpBuildDir.append(slash);
- QString sourcePath = QFileInfo(projectPath).absolutePath();
- if (!sourcePath.endsWith(slash))
- sourcePath.append(slash);
- if (tmpBuildDir.count(slash) != sourcePath.count(slash)) {
- const QString msg = QCoreApplication::translate("QmakeProjectManager::QtVersion",
- "The build directory needs to be at the same level as the source directory.");
-
- issues.append(Task(Task::Warning, msg, Utils::FileName(), -1,
- ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
- }
- return issues;
- }
};
} // namespace QmakeProjectManager
+
+Q_DECLARE_METATYPE(QmakeProjectManager::QmakeExtraBuildInfo)
diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
index dd26db82e0..894163ab47 100644
--- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
@@ -45,6 +45,8 @@
#include <cpptools/cppprojectupdater.h>
#include <cpptools/cppmodelmanager.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
+
+#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/buildtargetinfo.h>
#include <projectexplorer/deploymentdata.h>
@@ -957,7 +959,7 @@ void CentralizedFolderWatcher::delayedFolderChanged(const QString &folder)
void QmakeProject::configureAsExampleProject(const QSet<Core::Id> &platforms)
{
- QList<const BuildInfo *> infoList;
+ QList<BuildInfo> infoList;
QList<Kit *> kits = KitManager::kits();
foreach (Kit *k, kits) {
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k);
@@ -966,14 +968,10 @@ void QmakeProject::configureAsExampleProject(const QSet<Core::Id> &platforms)
&& !Utils::contains(version->targetDeviceTypes(), [platforms](Core::Id i) { return platforms.contains(i); })))
continue;
- BuildConfigurationFactory *factory = BuildConfigurationFactory::find(k, projectFilePath().toString());
- if (!factory)
- continue;
- foreach (BuildInfo *info, factory->availableSetups(k, projectFilePath().toString()))
- infoList << info;
+ if (auto factory = BuildConfigurationFactory::find(k, projectFilePath().toString()))
+ infoList << factory->allAvailableSetups(k, projectFilePath().toString());
}
setup(infoList);
- qDeleteAll(infoList);
}
void QmakeProject::updateBuildSystemData()
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp
index 46129ee909..f6d4aad459 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp
@@ -32,10 +32,12 @@
#include "makefileparse.h"
#include "qmakestep.h"
+#include <projectexplorer/buildinfo.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/toolchainmanager.h>
+
#include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtsupportconstants.h>
#include <qtsupport/qtversionfactory.h>
@@ -229,9 +231,9 @@ Kit *QmakeProjectImporter::createKit(void *directoryData) const
return createTemporaryKit(data->qtVersionData, data->parsedSpec, data->archConfig, data->osType);
}
-QList<BuildInfo *> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
+const QList<BuildInfo> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
{
- QList<BuildInfo *> result;
+ QList<BuildInfo> result;
auto *data = static_cast<DirectoryData *>(directoryData);
auto factory = qobject_cast<QmakeBuildConfigurationFactory *>(
BuildConfigurationFactory::find(k, projectFilePath().toString()));
@@ -239,29 +241,32 @@ QList<BuildInfo *> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void
return result;
// create info:
- std::unique_ptr<QmakeBuildInfo> info(new QmakeBuildInfo(factory));
+ BuildInfo info(factory);
if (data->buildConfig & BaseQtVersion::DebugBuild) {
- info->buildType = BuildConfiguration::Debug;
- info->displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Debug");
+ info.buildType = BuildConfiguration::Debug;
+ info.displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Debug");
} else {
- info->buildType = BuildConfiguration::Release;
- info->displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Release");
+ info.buildType = BuildConfiguration::Release;
+ info.displayName = QCoreApplication::translate("QmakeProjectManager::Internal::QmakeProjectImporter", "Release");
}
- info->kitId = k->id();
- info->buildDirectory = data->buildDirectory;
- info->additionalArguments = data->additionalArguments;
- info->config = data->config;
- info->makefile = data->makefile;
+ info.kitId = k->id();
+ info.buildDirectory = data->buildDirectory;
+
+ QmakeExtraBuildInfo extra;
+ extra.additionalArguments = data->additionalArguments;
+ extra.config = data->config;
+ extra.makefile = data->makefile;
+ info.extraInfo = QVariant::fromValue(extra);
bool found = false;
- foreach (BuildInfo *bInfo, result) {
- if (*static_cast<QmakeBuildInfo *>(bInfo) == *info) {
+ foreach (const BuildInfo &bInfo, result) {
+ if (bInfo == info) {
found = true;
break;
}
}
if (!found)
- result << info.release();
+ result << info;
return result;
}
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h
index adb5a4c9c6..13dad12de5 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h
@@ -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;
void deleteDirectoryData(void *directoryData) const final;
diff --git a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp
index 0a65ec24bf..927c397aa8 100644
--- a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp
+++ b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp
@@ -25,6 +25,7 @@
#include "qmlprofilerdetailsrewriter_test.h"
+#include <projectexplorer/buildinfo.h>
#include <projectexplorer/customexecutablerunconfiguration.h>
#include <projectexplorer/project.h>
#include <projectexplorer/target.h>
@@ -74,15 +75,15 @@ public:
class DummyBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory
{
public:
- QList<ProjectExplorer::BuildInfo *> availableBuilds(const ProjectExplorer::Target *) const final
+ QList<ProjectExplorer::BuildInfo> availableBuilds(const ProjectExplorer::Target *) const final
{
- return QList<ProjectExplorer::BuildInfo *>();
+ return {};
}
- QList<ProjectExplorer::BuildInfo *> availableSetups(const ProjectExplorer::Kit *,
- const QString &) const final
+ QList<ProjectExplorer::BuildInfo> availableSetups(const ProjectExplorer::Kit *,
+ const QString &) const final
{
- return QList<ProjectExplorer::BuildInfo *>();
+ return {};
}
int priority(const ProjectExplorer::Kit *, const QString &) const final
diff --git a/src/plugins/qtsupport/qtprojectimporter.cpp b/src/plugins/qtsupport/qtprojectimporter.cpp
index af32e4a459..b9e50017d4 100644
--- a/src/plugins/qtsupport/qtprojectimporter.cpp
+++ b/src/plugins/qtsupport/qtprojectimporter.cpp
@@ -181,7 +181,7 @@ protected:
QList<void *> examineDirectory(const Utils::FileName &importPath) const override;
bool matchKit(void *directoryData, const Kit *k) const override;
Kit *createKit(void *directoryData) const override;
- QList<BuildInfo *> buildInfoListForKit(const Kit *k, void *directoryData) const override;
+ const QList<BuildInfo> buildInfoListForKit(const Kit *k, void *directoryData) const override;
void deleteDirectoryData(void *directoryData) const override;
private:
@@ -241,20 +241,19 @@ Kit *TestQtProjectImporter::createKit(void *directoryData) const
});
}
-QList<BuildInfo *> TestQtProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
+const QList<BuildInfo> TestQtProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
{
Q_UNUSED(directoryData);
assert(m_testData.contains(directoryData));
assert(!m_deletedTestData.contains(directoryData));
assert(static_cast<const DirectoryData *>(directoryData)->importPath == m_path);
- BuildInfo *info = new BuildInfo(nullptr);
- info->displayName = "Test Build info";
- info->typeName = "Debug";
- info->buildDirectory = m_path;
- info->kitId = k->id();
- info->buildType = BuildConfiguration::Debug;
-
+ BuildInfo info;
+ info.displayName = "Test Build info";
+ info.typeName = "Debug";
+ info.buildDirectory = m_path;
+ info.kitId = k->id();
+ info.buildType = BuildConfiguration::Debug;
return {info};
}
@@ -422,7 +421,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
// --------------------------------------------------------------------
// choose an existing directory to "import"
- const QList<BuildInfo *> buildInfo = importer.import(Utils::FileName::fromString(appDir), true);
+ const QList<BuildInfo> buildInfo = importer.import(Utils::FileName::fromString(appDir), true);
// VALIDATE: Basic TestImporter state:
QCOMPARE(importer.projectFilePath().toString(), tempDir1.path());
@@ -436,14 +435,14 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
// VALIDATE: Validate result:
for (int i = 0; i < buildInfo.count(); ++i) {
const DirectoryData *dd = testData.at(i);
- const BuildInfo *bi = buildInfo.at(i);
+ const BuildInfo &bi = buildInfo.at(i);
// VALIDATE: Kit id is unchanged (unless it is a new kit)
if (!dd->isNewKit)
- QCOMPARE(bi->kitId, defaultKit->id());
+ QCOMPARE(bi.kitId, defaultKit->id());
// VALIDATE: Kit is registered with the KitManager
- Kit *newKit = KitManager::kit(bi->kitId);
+ Kit *newKit = KitManager::kit(bi.kitId);
QVERIFY(newKit);
const int newQtId = QtKitInformation::qtVersionId(newKit);
@@ -596,7 +595,6 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
// Teardown:
// --------------------------------------------------------------------
- qDeleteAll(buildInfo);
qDeleteAll(testData);
foreach (Kit *k, toUnregisterLater)