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