Profile introduction

Introduce Profiles to store sets of values that describe a system/device.

These profiles are held by a target, getting rid of much of the information
stored in the Build-/Run-/DeployConfigurations, greatly simplifying those.

This is a squash of the wip/profile branch which has been on gerrit for a
while, rebased to current master.

Change-Id: I25956c8dd4d1962b2134bfaa8a8076ae3909460f
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
This commit is contained in:
Tobias Hunger
2012-04-24 15:49:09 +02:00
parent 8c77b8c9d7
commit 2431456216
379 changed files with 12690 additions and 14437 deletions

View File

@@ -34,12 +34,11 @@
#include "cmakeopenprojectwizard.h"
#include "cmakeproject.h"
#include "cmaketarget.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/toolchainmanager.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/profileinformation.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <utils/qtcassert.h>
#include <QInputDialog>
@@ -49,17 +48,19 @@ using namespace Internal;
namespace {
const char CMAKE_BC_ID[] = "CMakeProjectManager.CMakeBuildConfiguration";
const char TOOLCHAIN_KEY[] = "CMakeProjectManager.CMakeBuildConfiguration.ToolChain";
const char BUILD_DIRECTORY_KEY[] = "CMakeProjectManager.CMakeBuildConfiguration.BuildDirectory";
} // namespace
CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeTarget *parent) :
CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent) :
BuildConfiguration(parent, Core::Id(CMAKE_BC_ID))
{
m_buildDirectory = cmakeTarget()->defaultBuildDirectory();
CMakeProject *project = qobject_cast<CMakeProject *>(parent->project());
if (project)
m_buildDirectory = project->defaultBuildDirectory();
}
CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeTarget *parent, CMakeBuildConfiguration *source) :
CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent,
CMakeBuildConfiguration *source) :
BuildConfiguration(parent, source),
m_buildDirectory(source->m_buildDirectory),
m_msvcVersion(source->m_msvcVersion)
@@ -71,7 +72,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeTarget *parent, CMakeBuild
QVariantMap CMakeBuildConfiguration::toMap() const
{
QVariantMap map(ProjectExplorer::BuildConfiguration::toMap());
map.insert(QLatin1String(TOOLCHAIN_KEY), toolChain() ? toolChain()->id() : QString());
map.insert(QLatin1String(BUILD_DIRECTORY_KEY), m_buildDirectory);
return map;
}
@@ -81,46 +81,17 @@ bool CMakeBuildConfiguration::fromMap(const QVariantMap &map)
if (!BuildConfiguration::fromMap(map))
return false;
setToolChain(ProjectExplorer::ToolChainManager::instance()->
findToolChain(map.value(QLatin1String(TOOLCHAIN_KEY)).toString()));
if (!toolChain()) {
// restoring from older versions?
QList<ProjectExplorer::ToolChain *> list = ProjectExplorer::ToolChainManager::instance()->toolChains();
if (!map.value("CMakeProjectManager.CMakeBuildConfiguration.MsvcVersion").toString().isEmpty()) {
foreach (ProjectExplorer::ToolChain *tc, list) {
if (tc->id().startsWith(ProjectExplorer::Constants::MSVC_TOOLCHAIN_ID)) {
setToolChain(tc);
break;
}
}
} else {
#ifdef Q_OS_WIN
QString toolChainId = ProjectExplorer::Constants::MINGW_TOOLCHAIN_ID;
#else
QString toolChainId = ProjectExplorer::Constants::GCC_TOOLCHAIN_ID;
#endif
foreach (ProjectExplorer::ToolChain *tc, list) {
if (tc->id().startsWith(toolChainId)) {
setToolChain(tc);
break;
}
}
}
}
m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), cmakeTarget()->defaultBuildDirectory()).toString();
m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY)).toString();
return true;
}
CMakeBuildConfiguration::~CMakeBuildConfiguration()
{
}
{ }
CMakeTarget *CMakeBuildConfiguration::cmakeTarget() const
ProjectExplorer::BuildConfigWidget *CMakeBuildConfiguration::createConfigWidget()
{
return static_cast<CMakeTarget *>(target());
return new CMakeBuildSettingsWidget;
}
QString CMakeBuildConfiguration::buildDirectory() const
@@ -139,16 +110,16 @@ void CMakeBuildConfiguration::setBuildDirectory(const QString &buildDirectory)
ProjectExplorer::IOutputParser *CMakeBuildConfiguration::createOutputParser() const
{
if (toolChain())
return toolChain()->outputParser();
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(target()->profile());
if (tc)
return tc->outputParser();
return 0;
}
Utils::Environment CMakeBuildConfiguration::baseEnvironment() const
{
Utils::Environment env = BuildConfiguration::baseEnvironment();
if (toolChain())
toolChain()->addToEnvironment(env);
target()->profile()->addToEnvironment(env);
return env;
}
@@ -165,9 +136,9 @@ CMakeBuildConfigurationFactory::~CMakeBuildConfigurationFactory()
{
}
QList<Core::Id> CMakeBuildConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const
QList<Core::Id> CMakeBuildConfigurationFactory::availableCreationIds(const ProjectExplorer::Target *parent) const
{
if (!qobject_cast<CMakeTarget *>(parent))
if (!canHandle(parent))
return QList<Core::Id>();
return QList<Core::Id>() << Core::Id(CMAKE_BC_ID);
}
@@ -179,34 +150,37 @@ QString CMakeBuildConfigurationFactory::displayNameForId(const Core::Id id) cons
return QString();
}
bool CMakeBuildConfigurationFactory::canCreate(ProjectExplorer::Target *parent, const Core::Id id) const
bool CMakeBuildConfigurationFactory::canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const
{
if (!qobject_cast<CMakeTarget *>(parent))
if (!canHandle(parent))
return false;
if (id == Core::Id(CMAKE_BC_ID))
return true;
return false;
}
CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id)
CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name)
{
if (!canCreate(parent, id))
return 0;
CMakeTarget *cmtarget = static_cast<CMakeTarget *>(parent);
Q_ASSERT(cmtarget);
CMakeProject *project = qobject_cast<CMakeProject *>(parent->project());
if (!project)
return 0;
//TODO configuration name should be part of the cmakeopenprojectwizard
bool ok;
QString buildConfigurationName = QInputDialog::getText(0,
tr("New Configuration"),
tr("New configuration name:"),
QLineEdit::Normal,
QString(),
&ok);
bool ok = true;
QString buildConfigurationName = name;
if (buildConfigurationName.isEmpty())
buildConfigurationName = QInputDialog::getText(0,
tr("New Configuration"),
tr("New configuration name:"),
QLineEdit::Normal,
QString(), &ok);
buildConfigurationName = buildConfigurationName.trimmed();
if (!ok || buildConfigurationName.isEmpty())
return 0;
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(cmtarget);
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(parent);
bc->setDisplayName(buildConfigurationName);
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
@@ -220,28 +194,25 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer:
cleanMakeStep->setAdditionalArguments("clean");
cleanMakeStep->setClean(true);
CMakeOpenProjectWizard copw(cmtarget->cmakeProject()->projectManager(),
cmtarget->project()->projectDirectory(),
CMakeOpenProjectWizard copw(project->projectManager(),
project->projectDirectory(),
bc->buildDirectory(),
bc->environment());
if (copw.exec() != QDialog::Accepted) {
delete bc;
return 0;
}
bc->setToolChain(copw.toolChain());
cmtarget->addBuildConfiguration(bc); // this also makes the name unique
bc->setBuildDirectory(copw.buildDirectory());
cmtarget->cmakeProject()->parseCMakeLists();
// Default to all
if (cmtarget->cmakeProject()->hasBuildTarget("all"))
if (project->hasBuildTarget("all"))
makeStep->setBuildTarget("all", true);
return bc;
}
bool CMakeBuildConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const
bool CMakeBuildConfigurationFactory::canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const
{
return canCreate(parent, source->id());
}
@@ -251,11 +222,10 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::clone(ProjectExplorer::
if (!canClone(parent, source))
return 0;
CMakeBuildConfiguration *old = static_cast<CMakeBuildConfiguration *>(source);
CMakeTarget *cmtarget(static_cast<CMakeTarget *>(parent));
return new CMakeBuildConfiguration(cmtarget, old);
return new CMakeBuildConfiguration(parent, old);
}
bool CMakeBuildConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const
bool CMakeBuildConfigurationFactory::canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const
{
return canCreate(parent, ProjectExplorer::idFromMap(map));
}
@@ -264,14 +234,20 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::restore(ProjectExplorer
{
if (!canRestore(parent, map))
return 0;
CMakeTarget *cmtarget(static_cast<CMakeTarget *>(parent));
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(cmtarget);
CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(parent);
if (bc->fromMap(map))
return bc;
delete bc;
return 0;
}
bool CMakeBuildConfigurationFactory::canHandle(const ProjectExplorer::Target *t) const
{
if (!t->project()->supportsProfile(t->profile()))
return false;
return qobject_cast<CMakeProject *>(t->project());
}
ProjectExplorer::BuildConfiguration::BuildType CMakeBuildConfiguration::buildType() const
{
QString cmakeBuildType;
@@ -303,4 +279,3 @@ ProjectExplorer::BuildConfiguration::BuildType CMakeBuildConfiguration::buildTyp
return Unknown;
}