summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/buildconfiguration.cpp
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2013-08-16 17:45:16 +0200
committerTobias Hunger <tobias.hunger@digia.com>2013-08-28 11:41:38 +0200
commita7bb77288d28160daabbc00179e77736886ce8d2 (patch)
tree04dcfc73f09e702e0597f9b1c8ff05313dc50f5c /src/plugins/projectexplorer/buildconfiguration.cpp
parent52a41ecb0c455b9979b2a55cc5f96b078b696996 (diff)
downloadqt-creator-a7bb77288d28160daabbc00179e77736886ce8d2.tar.gz
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>
Diffstat (limited to 'src/plugins/projectexplorer/buildconfiguration.cpp')
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index 9c8c41d807..72e52a69aa 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -49,6 +49,7 @@ static const char BUILD_STEP_LIST_COUNT[] = "ProjectExplorer.BuildConfiguration.
static const char BUILD_STEP_LIST_PREFIX[] = "ProjectExplorer.BuildConfiguration.BuildStepList.";
static const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "ProjectExplorer.BuildConfiguration.ClearSystemEnvironment";
static const char USER_ENVIRONMENT_CHANGES_KEY[] = "ProjectExplorer.BuildConfiguration.UserEnvironmentChanges";
+static const char BUILDDIRECTORY_KEY[] = "ProjectExplorer.BuildConfiguration.BuildDirectory";
namespace ProjectExplorer {
namespace Internal {
@@ -68,7 +69,7 @@ bool BuildConfigMacroExpander::resolveMacro(const QString &name, QString *ret)
return true;
}
if (name == QLatin1String("buildDir")) {
- *ret = QDir::toNativeSeparators(m_bc->buildDirectory());
+ *ret = m_bc->buildDirectory().toUserOutput();
return true;
}
*ret = Core::VariableManager::value(name.toUtf8());
@@ -95,13 +96,15 @@ BuildConfiguration::BuildConfiguration(Target *target, const Core::Id id) :
connect(target, SIGNAL(kitChanged()),
this, SLOT(handleKitUpdate()));
+ connect(this, SIGNAL(environmentChanged()), this, SLOT(emitBuildDirectoryChanged()));
}
BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *source) :
ProjectConfiguration(target, source),
m_clearSystemEnvironment(source->m_clearSystemEnvironment),
m_userEnvironmentChanges(source->m_userEnvironmentChanges),
- m_macroExpander(0)
+ m_macroExpander(0),
+ m_buildDirectory(source->m_buildDirectory)
{
Q_ASSERT(target);
// Do not clone stepLists here, do that in the derived constructor instead
@@ -119,6 +122,23 @@ BuildConfiguration::~BuildConfiguration()
delete m_macroExpander;
}
+Utils::FileName BuildConfiguration::buildDirectory() const
+{
+ QString path = QDir::cleanPath(environment().expandVariables(m_buildDirectory.toString()));
+ return Utils::FileName::fromString(QDir::cleanPath(QDir(target()->project()->projectDirectory()).absoluteFilePath(path)));
+}
+
+Utils::FileName BuildConfiguration::rawBuildDirectory() const
+{
+ return m_buildDirectory;
+}
+
+void BuildConfiguration::setBuildDirectory(const Utils::FileName &dir)
+{
+ m_buildDirectory = dir;
+ emitBuildDirectoryChanged();
+}
+
QList<NamedWidget *> BuildConfiguration::createSubConfigWidgets()
{
return QList<NamedWidget *>() << new ProjectExplorer::BuildEnvironmentWidget(this);
@@ -152,6 +172,7 @@ QVariantMap BuildConfiguration::toMap() const
QVariantMap map(ProjectConfiguration::toMap());
map.insert(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY), m_clearSystemEnvironment);
map.insert(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY), Utils::EnvironmentItem::toStringList(m_userEnvironmentChanges));
+ map.insert(QLatin1String(BUILDDIRECTORY_KEY), m_buildDirectory.toString());
map.insert(QLatin1String(BUILD_STEP_LIST_COUNT), m_stepLists.count());
for (int i = 0; i < m_stepLists.count(); ++i)
@@ -164,6 +185,7 @@ bool BuildConfiguration::fromMap(const QVariantMap &map)
{
m_clearSystemEnvironment = map.value(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY)).toBool();
m_userEnvironmentChanges = Utils::EnvironmentItem::fromStringList(map.value(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY)).toStringList());
+ m_buildDirectory = Utils::FileName::fromString(map.value(QLatin1String(BUILDDIRECTORY_KEY)).toString());
emitEnvironmentChanged();
@@ -204,7 +226,7 @@ void BuildConfiguration::emitEnvironmentChanged()
if (env == m_cachedEnvironment)
return;
m_cachedEnvironment = env;
- emit environmentChanged();
+ emit environmentChanged(); // might trigger buildDirectoryChanged signal!
}
void BuildConfiguration::handleKitUpdate()
@@ -212,6 +234,14 @@ void BuildConfiguration::handleKitUpdate()
emitEnvironmentChanged();
}
+void BuildConfiguration::emitBuildDirectoryChanged()
+{
+ if (buildDirectory() != m_lastEmmitedBuildDirectory) {
+ m_lastEmmitedBuildDirectory = buildDirectory();
+ emit buildDirectoryChanged();
+ }
+}
+
Target *BuildConfiguration::target() const
{
return static_cast<Target *>(parent());