BC: Move builddirectory handling into BC itself

Use setBuildDirectory() in the different BuildConfigurations instead
of reimplementing that over and over again.

Change-Id: Ic355fdb4624c71667ce470b3e2865c9a8722ef09
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Tobias Hunger
2013-08-16 17:45:16 +02:00
parent 52a41ecb0c
commit a7bb77288d
43 changed files with 212 additions and 268 deletions

View File

@@ -38,6 +38,7 @@
#include "buildconfigurationinfo.h"
#include <utils/qtcprocess.h>
#include <utils/qtcassert.h>
#include <limits>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
@@ -60,7 +61,6 @@ using namespace Utils;
const char QT4_BC_ID[] = "Qt4ProjectManager.Qt4BuildConfiguration";
const char USE_SHADOW_BUILD_KEY[] = "Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild";
const char BUILD_DIRECTORY_KEY[] = "Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory";
const char BUILD_CONFIGURATION_KEY[] = "Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration";
enum { debug = 0 };
@@ -91,7 +91,6 @@ Qt4BuildConfiguration::Qt4BuildConfiguration(Target *target, Qt4BuildConfigurati
BuildConfiguration(target, source),
m_shadowBuild(source->m_shadowBuild),
m_isEnabled(false),
m_buildDirectory(source->m_buildDirectory),
m_qmakeBuildConfiguration(source->m_qmakeBuildConfiguration),
m_subNodeBuild(0), // temporary value, so not copied
m_fileNodeBuild(0)
@@ -108,7 +107,6 @@ QVariantMap Qt4BuildConfiguration::toMap() const
{
QVariantMap map(BuildConfiguration::toMap());
map.insert(QLatin1String(USE_SHADOW_BUILD_KEY), m_shadowBuild);
map.insert(QLatin1String(BUILD_DIRECTORY_KEY), m_buildDirectory);
map.insert(QLatin1String(BUILD_CONFIGURATION_KEY), int(m_qmakeBuildConfiguration));
return map;
}
@@ -120,9 +118,7 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map)
m_shadowBuild = map.value(QLatin1String(USE_SHADOW_BUILD_KEY), true).toBool();
m_qmakeBuildConfiguration = BaseQtVersion::QmakeBuildConfigs(map.value(QLatin1String(BUILD_CONFIGURATION_KEY)).toInt());
m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), defaultShadowBuildDirectory()).toString();
m_lastEmmitedBuildDirectory = buildDirectory();
m_qtVersionSupportsShadowBuilds = supportsShadowBuilds();
m_lastKitState = LastKitState(target()->kit());
@@ -138,8 +134,6 @@ void Qt4BuildConfiguration::ctor()
{
m_buildDirectory = target()->project()->projectDirectory(); // default to in-source build!
connect(this, SIGNAL(environmentChanged()),
this, SLOT(emitBuildDirectoryChanged()));
connect(this, SIGNAL(environmentChanged()),
this, SLOT(emitProFileEvaluateNeeded()));
connect(target(), SIGNAL(kitChanged()),
@@ -174,9 +168,7 @@ void Qt4BuildConfiguration::qtVersionsChanged(const QList<int> &,const QList<int
bool Qt4BuildConfiguration::emitBuildDirectoryChanged()
{
// We also emit buildDirectoryChanged if the the Qt version's supportShadowBuild changed
if (buildDirectory() != m_lastEmmitedBuildDirectory
|| supportsShadowBuilds() != m_qtVersionSupportsShadowBuilds) {
m_lastEmmitedBuildDirectory = buildDirectory();
if (supportsShadowBuilds() != m_qtVersionSupportsShadowBuilds) {
m_qtVersionSupportsShadowBuilds = supportsShadowBuilds();
emit buildDirectoryChanged();
return true;
@@ -196,19 +188,6 @@ QString Qt4BuildConfiguration::defaultShadowBuildDirectory() const
target()->kit(), displayName());
}
/// returns the unexpanded build directory
QString Qt4BuildConfiguration::rawBuildDirectory() const
{
return m_buildDirectory;
}
/// Returns the build directory.
QString Qt4BuildConfiguration::buildDirectory() const
{
QString path = QDir::cleanPath(environment().expandVariables(rawBuildDirectory()));
return QDir::cleanPath(QDir(target()->project()->projectDirectory()).absoluteFilePath(path));
}
bool Qt4BuildConfiguration::supportsShadowBuilds()
{
BaseQtVersion *version = QtKitInformation::qtVersion(target()->kit());
@@ -250,19 +229,15 @@ void Qt4BuildConfiguration::setFileNodeBuild(FileNode *node)
/// still is a in-source build
bool Qt4BuildConfiguration::isShadowBuild() const
{
return buildDirectory() != target()->project()->projectDirectory();
return buildDirectory().toString() != target()->project()->projectDirectory();
}
void Qt4BuildConfiguration::setBuildDirectory(const QString &directory)
void Qt4BuildConfiguration::setBuildDirectory(const FileName &directory)
{
if (!supportsShadowBuilds()) {
m_buildDirectory = target()->project()->projectDirectory();
} else {
m_buildDirectory = directory;
}
if (emitBuildDirectoryChanged())
emitProFileEvaluateNeeded();
BuildConfiguration::setBuildDirectory(directory);
QTC_CHECK(supportsShadowBuilds()
|| (!supportsShadowBuilds()
&& buildDirectory().toString() == target()->project()->projectDirectory()));
}
QString Qt4BuildConfiguration::makefile() const
@@ -726,9 +701,9 @@ Qt4BuildConfiguration *Qt4BuildConfiguration::setup(Target *t, QString defaultDi
bc->setQMakeBuildConfiguration(qmakeBuildConfiguration);
if (directory.isEmpty())
bc->setBuildDirectory(t->project()->projectDirectory());
bc->setBuildDirectory(Utils::FileName::fromString(t->project()->projectDirectory()));
else
bc->setBuildDirectory(directory);
bc->setBuildDirectory(Utils::FileName::fromString(directory));
return bc;
}