Less magic in BuildStep::buildConfiguration() and deployConfiguration()

Where the deploy stuff depends on the activeBuildConfiguration it's
likely to be wrong or worse could be used to crash creator. So make
those places stand out.
Also if we ever move towards supporting meta-builds of multiple
buildconfigurations at once, then using the active build configuration
is wrong.

Change-Id: I754a77a4a8b352e79e8a6703c26ed41a189cf74e
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
This commit is contained in:
Daniel Teske
2011-10-21 13:06:26 +00:00
parent eb03e96624
commit 3cc1a2a914
10 changed files with 36 additions and 37 deletions

View File

@@ -156,22 +156,22 @@ void AbstractMaemoPackageCreationStep::handleBuildOutput()
const Qt4BuildConfiguration *AbstractMaemoPackageCreationStep::qt4BuildConfiguration() const const Qt4BuildConfiguration *AbstractMaemoPackageCreationStep::qt4BuildConfiguration() const
{ {
return static_cast<Qt4BuildConfiguration *>(buildConfiguration()); return static_cast<Qt4BuildConfiguration *>(target()->activeBuildConfiguration());
} }
AbstractQt4MaemoTarget *AbstractMaemoPackageCreationStep::maemoTarget() const AbstractQt4MaemoTarget *AbstractMaemoPackageCreationStep::maemoTarget() const
{ {
return qobject_cast<AbstractQt4MaemoTarget *>(buildConfiguration()->target()); return qobject_cast<AbstractQt4MaemoTarget *>(target());
} }
AbstractDebBasedQt4MaemoTarget *AbstractMaemoPackageCreationStep::debBasedMaemoTarget() const AbstractDebBasedQt4MaemoTarget *AbstractMaemoPackageCreationStep::debBasedMaemoTarget() const
{ {
return qobject_cast<AbstractDebBasedQt4MaemoTarget*>(buildConfiguration()->target()); return qobject_cast<AbstractDebBasedQt4MaemoTarget*>(target());
} }
AbstractRpmBasedQt4MaemoTarget *AbstractMaemoPackageCreationStep::rpmBasedMaemoTarget() const AbstractRpmBasedQt4MaemoTarget *AbstractMaemoPackageCreationStep::rpmBasedMaemoTarget() const
{ {
return qobject_cast<AbstractRpmBasedQt4MaemoTarget*>(buildConfiguration()->target()); return qobject_cast<AbstractRpmBasedQt4MaemoTarget*>(target());
} }
bool AbstractMaemoPackageCreationStep::isPackagingNeeded() const bool AbstractMaemoPackageCreationStep::isPackagingNeeded() const
@@ -293,7 +293,7 @@ bool MaemoDebianPackageCreationStep::init()
if (!AbstractMaemoPackageCreationStep::init()) if (!AbstractMaemoPackageCreationStep::init())
return false; return false;
m_maddeRoot = MaemoGlobal::maddeRoot(qt4BuildConfiguration()->qtVersion()->qmakeCommand()); m_maddeRoot = MaemoGlobal::maddeRoot(qt4BuildConfiguration()->qtVersion()->qmakeCommand());
m_projectDirectory = buildConfiguration()->target()->project()->projectDirectory(); m_projectDirectory = project()->projectDirectory();
m_pkgFileName = maemoTarget()->packageFileName(); m_pkgFileName = maemoTarget()->packageFileName();
m_packageName = maemoTarget()->packageName(); m_packageName = maemoTarget()->packageName();
m_templatesDirPath = debBasedMaemoTarget()->debianDirPath(); m_templatesDirPath = debBasedMaemoTarget()->debianDirPath();
@@ -364,7 +364,7 @@ bool MaemoDebianPackageCreationStep::isMetaDataNewerThan(const QDateTime &packag
void MaemoDebianPackageCreationStep::checkProjectName() void MaemoDebianPackageCreationStep::checkProjectName()
{ {
const QRegExp legalName(QLatin1String("[0-9-+a-z\\.]+")); const QRegExp legalName(QLatin1String("[0-9-+a-z\\.]+"));
if (!legalName.exactMatch(buildConfiguration()->target()->project()->displayName())) { if (!legalName.exactMatch(project()->displayName())) {
emit addTask(Task(Task::Warning, emit addTask(Task(Task::Warning,
tr("Your project name contains characters not allowed in " tr("Your project name contains characters not allowed in "
"Debian packages.\nThey must only use lower-case letters, " "Debian packages.\nThey must only use lower-case letters, "

View File

@@ -381,7 +381,7 @@ void AbstractProcessStep::taskAdded(const ProjectExplorer::Task &task)
QList<QFileInfo> possibleFiles; QList<QFileInfo> possibleFiles;
QString fileName = QFileInfo(filePath).fileName(); QString fileName = QFileInfo(filePath).fileName();
foreach (const QString &file, buildConfiguration()->target()->project()->files(ProjectExplorer::Project::AllFiles)) { foreach (const QString &file, project()->files(ProjectExplorer::Project::AllFiles)) {
QFileInfo candidate(file); QFileInfo candidate(file);
if (candidate.fileName() == fileName) if (candidate.fileName() == fileName)
possibleFiles << candidate; possibleFiles << candidate;

View File

@@ -42,7 +42,6 @@
#include "target.h" #include "target.h"
#include "taskwindow.h" #include "taskwindow.h"
#include "taskhub.h" #include "taskhub.h"
#include "buildconfiguration.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/progressmanager/progressmanager.h>
@@ -221,7 +220,7 @@ void BuildManager::cancel()
QTimer::singleShot(0, this, SLOT(emitCancelMessage())); QTimer::singleShot(0, this, SLOT(emitCancelMessage()));
disconnectOutput(d->m_currentBuildStep); disconnectOutput(d->m_currentBuildStep);
decrementActiveBuildSteps(d->m_currentBuildStep->buildConfiguration()->target()->project()); decrementActiveBuildSteps(d->m_currentBuildStep->project());
d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, tr("Build canceled")); //TODO NBS fix in qtconcurrent d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, tr("Build canceled")); //TODO NBS fix in qtconcurrent
clearBuildQueue(); clearBuildQueue();
@@ -256,7 +255,7 @@ void BuildManager::emitCancelMessage()
void BuildManager::clearBuildQueue() void BuildManager::clearBuildQueue()
{ {
foreach (BuildStep *bs, d->m_buildQueue) { foreach (BuildStep *bs, d->m_buildQueue) {
decrementActiveBuildSteps(bs->buildConfiguration()->target()->project()); decrementActiveBuildSteps(bs->project());
disconnectOutput(bs); disconnectOutput(bs);
} }
@@ -382,13 +381,13 @@ void BuildManager::nextBuildQueue()
disconnectOutput(d->m_currentBuildStep); disconnectOutput(d->m_currentBuildStep);
++d->m_progress; ++d->m_progress;
d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, msgProgress(d->m_progress, d->m_maxProgress)); d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, msgProgress(d->m_progress, d->m_maxProgress));
decrementActiveBuildSteps(d->m_currentBuildStep->buildConfiguration()->target()->project()); decrementActiveBuildSteps(d->m_currentBuildStep->project());
bool result = d->m_watcher.result(); bool result = d->m_watcher.result();
if (!result) { if (!result) {
// Build Failure // Build Failure
const QString projectName = d->m_currentBuildStep->buildConfiguration()->target()->project()->displayName(); const QString projectName = d->m_currentBuildStep->project()->displayName();
const QString targetName = d->m_currentBuildStep->buildConfiguration()->target()->displayName(); const QString targetName = d->m_currentBuildStep->target()->displayName();
addToOutputWindow(tr("Error while building project %1 (target: %2)").arg(projectName, targetName), BuildStep::ErrorOutput); addToOutputWindow(tr("Error while building project %1 (target: %2)").arg(projectName, targetName), BuildStep::ErrorOutput);
addToOutputWindow(tr("When executing build step '%1'").arg(d->m_currentBuildStep->displayName()), BuildStep::ErrorOutput); addToOutputWindow(tr("When executing build step '%1'").arg(d->m_currentBuildStep->displayName()), BuildStep::ErrorOutput);
// NBS TODO fix in qtconcurrent // NBS TODO fix in qtconcurrent
@@ -429,11 +428,11 @@ void BuildManager::nextStep()
d->m_currentBuildStep = d->m_buildQueue.front(); d->m_currentBuildStep = d->m_buildQueue.front();
d->m_buildQueue.pop_front(); d->m_buildQueue.pop_front();
if (d->m_currentBuildStep->buildConfiguration()->target()->project() != d->m_previousBuildStepProject) { if (d->m_currentBuildStep->project() != d->m_previousBuildStepProject) {
const QString projectName = d->m_currentBuildStep->buildConfiguration()->target()->project()->displayName(); const QString projectName = d->m_currentBuildStep->project()->displayName();
addToOutputWindow(tr("Running build steps for project %1...") addToOutputWindow(tr("Running build steps for project %1...")
.arg(projectName), BuildStep::MessageOutput); .arg(projectName), BuildStep::MessageOutput);
d->m_previousBuildStepProject = d->m_currentBuildStep->buildConfiguration()->target()->project(); d->m_previousBuildStepProject = d->m_currentBuildStep->project();
} }
if (d->m_currentBuildStep->runInGuiThread()) { if (d->m_currentBuildStep->runInGuiThread()) {
connect (d->m_currentBuildStep, SIGNAL(finished()), connect (d->m_currentBuildStep, SIGNAL(finished()),
@@ -476,8 +475,8 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
// cleaning up // cleaning up
// print something for the user // print something for the user
const QString projectName = bs->buildConfiguration()->target()->project()->displayName(); const QString projectName = bs->project()->displayName();
const QString targetName = bs->buildConfiguration()->target()->displayName(); const QString targetName = bs->project()->displayName();
addToOutputWindow(tr("Error while building project %1 (target: %2)").arg(projectName, targetName), BuildStep::ErrorOutput); addToOutputWindow(tr("Error while building project %1 (target: %2)").arg(projectName, targetName), BuildStep::ErrorOutput);
addToOutputWindow(tr("When executing build step '%1'").arg(bs->displayName()), BuildStep::ErrorOutput); addToOutputWindow(tr("When executing build step '%1'").arg(bs->displayName()), BuildStep::ErrorOutput);
@@ -491,7 +490,7 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
for (i = 0; i < count; ++i) { for (i = 0; i < count; ++i) {
++d->m_maxProgress; ++d->m_maxProgress;
d->m_buildQueue.append(steps.at(i)); d->m_buildQueue.append(steps.at(i));
incrementActiveBuildSteps(steps.at(i)->buildConfiguration()->target()->project()); incrementActiveBuildSteps(steps.at(i)->target()->project());
} }
return true; return true;
} }

View File

@@ -142,18 +142,12 @@ BuildStep::~BuildStep()
BuildConfiguration *BuildStep::buildConfiguration() const BuildConfiguration *BuildStep::buildConfiguration() const
{ {
BuildConfiguration *bc = qobject_cast<BuildConfiguration *>(parent()->parent()); return qobject_cast<BuildConfiguration *>(parent()->parent());
if (!bc)
bc = target()->activeBuildConfiguration();
return bc;
} }
DeployConfiguration *BuildStep::deployConfiguration() const DeployConfiguration *BuildStep::deployConfiguration() const
{ {
DeployConfiguration *dc = qobject_cast<DeployConfiguration *>(parent()->parent()); return qobject_cast<DeployConfiguration *>(parent()->parent());
if (!dc)
dc = target()->activeDeployConfiguration();
return dc;
} }
Target *BuildStep::target() const Target *BuildStep::target() const
@@ -161,6 +155,11 @@ Target *BuildStep::target() const
return qobject_cast<Target *>(parent()->parent()->parent()); return qobject_cast<Target *>(parent()->parent()->parent());
} }
Project *BuildStep::project() const
{
return target()->project();
}
bool BuildStep::immutable() const bool BuildStep::immutable() const
{ {
return false; return false;

View File

@@ -77,6 +77,7 @@ public:
enum OutputFormat { NormalOutput, ErrorOutput, MessageOutput, ErrorMessageOutput }; enum OutputFormat { NormalOutput, ErrorOutput, MessageOutput, ErrorMessageOutput };
enum OutputNewlineSetting { DoAppendNewline, DontAppendNewline }; enum OutputNewlineSetting { DoAppendNewline, DontAppendNewline };
Project *project() const;
signals: signals:
void addTask(const ProjectExplorer::Task &task); void addTask(const ProjectExplorer::Task &task);

View File

@@ -132,10 +132,9 @@ QString QMakeStep::allArguments(bool shorted)
if (bc->subNodeBuild()) if (bc->subNodeBuild())
arguments << QDir::toNativeSeparators(bc->subNodeBuild()->path()); arguments << QDir::toNativeSeparators(bc->subNodeBuild()->path());
else if (shorted) else if (shorted)
arguments << QDir::toNativeSeparators(QFileInfo( arguments << QDir::toNativeSeparators(QFileInfo(project()->file()->fileName()).fileName());
buildConfiguration()->target()->project()->file()->fileName()).fileName());
else else
arguments << QDir::toNativeSeparators(buildConfiguration()->target()->project()->file()->fileName()); arguments << QDir::toNativeSeparators(project()->file()->fileName());
arguments << "-r"; arguments << "-r";
bool userProvidedMkspec = false; bool userProvidedMkspec = false;

View File

@@ -175,12 +175,12 @@ bool S60CreatePackageStep::fromMap(const QVariantMap &map)
Qt4BuildConfiguration *S60CreatePackageStep::qt4BuildConfiguration() const Qt4BuildConfiguration *S60CreatePackageStep::qt4BuildConfiguration() const
{ {
return static_cast<Qt4BuildConfiguration *>(buildConfiguration()); return static_cast<Qt4BuildConfiguration *>(target()->activeBuildConfiguration());
} }
bool S60CreatePackageStep::init() bool S60CreatePackageStep::init()
{ {
Qt4Project *pro = qobject_cast<Qt4Project *>(buildConfiguration()->target()->project()); Qt4Project *pro = qobject_cast<Qt4Project *>(project());
QList<Qt4ProFileNode *> nodes = pro->allProFiles(); QList<Qt4ProFileNode *> nodes = pro->allProFiles();
@@ -200,7 +200,7 @@ bool S60CreatePackageStep::init()
m_makeCmd = qt4BuildConfiguration()->makeCommand(); m_makeCmd = qt4BuildConfiguration()->makeCommand();
if (!QFileInfo(m_makeCmd).isAbsolute()) { if (!QFileInfo(m_makeCmd).isAbsolute()) {
// Try to detect command in environment // Try to detect command in environment
const QString tmp = buildConfiguration()->environment().searchInPath(m_makeCmd); const QString tmp = qt4BuildConfiguration()->environment().searchInPath(m_makeCmd);
if (tmp.isEmpty()) { if (tmp.isEmpty()) {
emit addOutput(tr("Could not find make command '%1' in the build environment").arg(m_makeCmd), BuildStep::ErrorOutput); emit addOutput(tr("Could not find make command '%1' in the build environment").arg(m_makeCmd), BuildStep::ErrorOutput);
return false; return false;
@@ -711,7 +711,7 @@ bool S60CreatePackageStep::createsSmartInstaller() const
void S60CreatePackageStep::setCreatesSmartInstaller(bool value) void S60CreatePackageStep::setCreatesSmartInstaller(bool value)
{ {
m_createSmartInstaller = value; m_createSmartInstaller = value;
static_cast<Qt4BuildConfiguration *>(buildConfiguration())->emitS60CreatesSmartInstallerChanged(); qt4BuildConfiguration()->emitS60CreatesSmartInstallerChanged();
} }
void S60CreatePackageStep::resetPassphrases() void S60CreatePackageStep::resetPassphrases()

View File

@@ -150,7 +150,7 @@ S60DeployStep::~S60DeployStep()
bool S60DeployStep::init() bool S60DeployStep::init()
{ {
Qt4BuildConfiguration *bc = static_cast<Qt4BuildConfiguration *>(buildConfiguration()); Qt4BuildConfiguration *bc = static_cast<Qt4BuildConfiguration *>(target()->activeBuildConfiguration());
S60DeployConfiguration *deployConfiguration = static_cast<S60DeployConfiguration *>(bc->target()->activeDeployConfiguration()); S60DeployConfiguration *deployConfiguration = static_cast<S60DeployConfiguration *>(bc->target()->activeDeployConfiguration());
if (!deployConfiguration) if (!deployConfiguration)
return false; return false;

View File

@@ -36,6 +36,7 @@
#include "remotelinuxdeploystepwidget.h" #include "remotelinuxdeploystepwidget.h"
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <qt4projectmanager/qt4buildconfiguration.h> #include <qt4projectmanager/qt4buildconfiguration.h>
using namespace ProjectExplorer; using namespace ProjectExplorer;
@@ -88,7 +89,7 @@ bool AbstractRemoteLinuxDeployStep::init()
bool AbstractRemoteLinuxDeployStep::isDeploymentPossible(QString *whyNot) const bool AbstractRemoteLinuxDeployStep::isDeploymentPossible(QString *whyNot) const
{ {
deployService()->setDeviceConfiguration(deployConfiguration()->deviceConfiguration()); deployService()->setDeviceConfiguration(deployConfiguration()->deviceConfiguration());
deployService()->setBuildConfiguration(qobject_cast<Qt4ProjectManager::Qt4BuildConfiguration *>(buildConfiguration())); deployService()->setBuildConfiguration(qobject_cast<Qt4ProjectManager::Qt4BuildConfiguration *>(target()->activeBuildConfiguration()));
return deployService()->isDeploymentPossible(whyNot); return deployService()->isDeploymentPossible(whyNot);
} }

View File

@@ -297,7 +297,7 @@ bool TarPackageCreationStep::writeHeader(QFile &tarFile, const QFileInfo &fileIn
QString TarPackageCreationStep::packageFileName() const QString TarPackageCreationStep::packageFileName() const
{ {
return target()->project()->displayName() + QLatin1String(".tar"); return project()->displayName() + QLatin1String(".tar");
} }
BuildStepConfigWidget *TarPackageCreationStep::createConfigWidget() BuildStepConfigWidget *TarPackageCreationStep::createConfigWidget()