summaryrefslogtreecommitdiff
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
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>
-rw-r--r--src/plugins/autotoolsprojectmanager/autogenstep.cpp11
-rw-r--r--src/plugins/autotoolsprojectmanager/autoreconfstep.cpp7
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp41
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h9
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.cpp13
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.h1
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsprojectconstants.h1
-rw-r--r--src/plugins/autotoolsprojectmanager/configurestep.cpp9
-rw-r--r--src/plugins/autotoolsprojectmanager/makestep.cpp4
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp28
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h7
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.cpp18
-rw-r--r--src/plugins/cmakeprojectmanager/makestep.cpp4
-rw-r--r--src/plugins/debugger/debuggerrunner.cpp2
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.cpp54
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.h11
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.cpp4
-rw-r--r--src/plugins/madde/maemoinstalltosysrootstep.cpp2
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp36
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h12
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp2
-rw-r--r--src/plugins/projectexplorer/settingsaccessor.cpp38
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp27
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.h5
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp15
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h1
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp2
-rw-r--r--src/plugins/qnx/blackberryabstractdeploystep.cpp2
-rw-r--r--src/plugins/qnx/blackberrycreatepackagestep.cpp2
-rw-r--r--src/plugins/qnx/blackberrydeployinformation.cpp8
-rw-r--r--src/plugins/qnx/blackberryruncontrolfactory.cpp2
-rw-r--r--src/plugins/qnx/qnxruncontrolfactory.cpp2
-rw-r--r--src/plugins/qt4projectmanager/librarydetailscontroller.cpp2
-rw-r--r--src/plugins/qt4projectmanager/makestep.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qmakestep.cpp2
-rw-r--r--src/plugins/qt4projectmanager/qt4buildconfiguration.cpp45
-rw-r--r--src/plugins/qt4projectmanager/qt4buildconfiguration.h9
-rw-r--r--src/plugins/qt4projectmanager/qt4nodes.cpp2
-rw-r--r--src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp28
-rw-r--r--src/plugins/remotelinux/abstractpackagingstep.cpp2
-rw-r--r--src/plugins/remotelinux/remotelinuxdebugsupport.cpp2
-rw-r--r--src/plugins/valgrind/memchecktool.cpp2
43 files changed, 212 insertions, 268 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autogenstep.cpp b/src/plugins/autotoolsprojectmanager/autogenstep.cpp
index f8afd63a02..06071a228e 100644
--- a/src/plugins/autotoolsprojectmanager/autogenstep.cpp
+++ b/src/plugins/autotoolsprojectmanager/autogenstep.cpp
@@ -158,7 +158,7 @@ bool AutogenStep::init()
ProcessParameters *pp = processParameters();
pp->setMacroExpander(bc->macroExpander());
pp->setEnvironment(bc->environment());
- pp->setWorkingDirectory(bc->buildDirectory());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
pp->setCommand(QLatin1String("autogen.sh"));
pp->setArguments(additionalArguments());
pp->resolveAll();
@@ -171,9 +171,10 @@ void AutogenStep::run(QFutureInterface<bool> &interface)
BuildConfiguration *bc = buildConfiguration();
// Check whether we need to run autogen.sh
- const QFileInfo configureInfo(bc->buildDirectory() + QLatin1String("/configure"));
- const QFileInfo configureAcInfo(bc->buildDirectory() + QLatin1String("/configure.ac"));
- const QFileInfo makefileAmInfo(bc->buildDirectory() + QLatin1String("/Makefile.am"));
+ const QString buildDir = bc->buildDirectory().toString();
+ const QFileInfo configureInfo(buildDir + QLatin1String("/configure"));
+ const QFileInfo configureAcInfo(buildDir + QLatin1String("/configure.ac"));
+ const QFileInfo makefileAmInfo(buildDir + QLatin1String("/Makefile.am"));
if (!configureInfo.exists()
|| configureInfo.lastModified() < configureAcInfo.lastModified()
@@ -275,7 +276,7 @@ void AutogenStepConfigWidget::updateDetails()
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
param.setEnvironment(bc->environment());
- param.setWorkingDirectory(bc->buildDirectory());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
param.setCommand(QLatin1String("autogen.sh"));
param.setArguments(m_autogenStep->additionalArguments());
m_summaryText = param.summary(displayName());
diff --git a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
index adcb7b0096..1b8d7b8990 100644
--- a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
+++ b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
@@ -157,7 +157,7 @@ bool AutoreconfStep::init()
ProcessParameters *pp = processParameters();
pp->setMacroExpander(bc->macroExpander());
pp->setEnvironment(bc->environment());
- pp->setWorkingDirectory(bc->buildDirectory());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
pp->setCommand(QLatin1String("autoreconf"));
pp->setArguments(additionalArguments());
pp->resolveAll();
@@ -170,7 +170,8 @@ void AutoreconfStep::run(QFutureInterface<bool> &interface)
BuildConfiguration *bc = buildConfiguration();
// Check whether we need to run autoreconf
- const QFileInfo configureInfo(bc->buildDirectory() + QLatin1String("/configure"));
+ const QString buildDir = bc->buildDirectory().toString();
+ const QFileInfo configureInfo(buildDir + QLatin1String("/configure"));
if (!configureInfo.exists())
m_runAutoreconf = true;
@@ -269,7 +270,7 @@ void AutoreconfStepConfigWidget::updateDetails()
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
param.setEnvironment(bc->environment());
- param.setWorkingDirectory(bc->buildDirectory());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
param.setCommand(QLatin1String("autoreconf"));
param.setArguments(m_autoreconfStep->additionalArguments());
m_summaryText = param.summary(displayName());
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
index bf07d5c593..26bdc479b6 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
@@ -59,11 +59,7 @@ using namespace ProjectExplorer::Constants;
//////////////////////////////////////
AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(ProjectExplorer::Target *parent)
: BuildConfiguration(parent, Core::Id(AUTOTOOLS_BC_ID))
-{
- AutotoolsProject *project = qobject_cast<AutotoolsProject *>(parent->project());
- if (project)
- m_buildDirectory = project->defaultBuildDirectory();
-}
+{ }
NamedWidget *AutotoolsBuildConfiguration::createConfigWidget()
{
@@ -72,46 +68,15 @@ NamedWidget *AutotoolsBuildConfiguration::createConfigWidget()
AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, const Core::Id id)
: BuildConfiguration(parent, id)
-{
-}
+{ }
AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(ProjectExplorer::Target *parent,
AutotoolsBuildConfiguration *source)
- : BuildConfiguration(parent, source),
- m_buildDirectory(source->m_buildDirectory)
+ : BuildConfiguration(parent, source)
{
cloneSteps(source);
}
-QVariantMap AutotoolsBuildConfiguration::toMap() const
-{
- QVariantMap map = BuildConfiguration::toMap();
- map.insert(QLatin1String(BUILD_DIRECTORY_KEY), m_buildDirectory);
- return map;
-}
-
-bool AutotoolsBuildConfiguration::fromMap(const QVariantMap &map)
-{
- if (!BuildConfiguration::fromMap(map))
- return false;
-
- m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY)).toString();
- return true;
-}
-
-QString AutotoolsBuildConfiguration::buildDirectory() const
-{
- return m_buildDirectory;
-}
-
-void AutotoolsBuildConfiguration::setBuildDirectory(const QString &buildDirectory)
-{
- if (m_buildDirectory == buildDirectory)
- return;
- m_buildDirectory = buildDirectory;
- emit buildDirectoryChanged();
-}
-
//////////////////////////////////////
// AutotoolsBuildConfiguration class
//////////////////////////////////////
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
index 639efc305d..7fb3a04792 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
@@ -39,6 +39,7 @@ namespace Internal {
class AutotoolsTarget;
class AutotoolsBuildConfigurationFactory;
+class AutotoolsBuildSettingsWidget;
class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
@@ -50,19 +51,13 @@ public:
ProjectExplorer::NamedWidget *createConfigWidget();
- QString buildDirectory() const;
- void setBuildDirectory(const QString &buildDirectory);
- QVariantMap toMap() const;
BuildType buildType() const;
protected:
AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, const Core::Id id);
AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, AutotoolsBuildConfiguration *source);
- bool fromMap(const QVariantMap &map);
-
-private:
- QString m_buildDirectory;
+ friend class AutotoolsBuildSettingsWidget;
};
class AutotoolsBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.cpp
index e55079283b..627510bb46 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.cpp
@@ -59,15 +59,24 @@ AutotoolsBuildSettingsWidget::AutotoolsBuildSettingsWidget(AutotoolsBuildConfigu
m_pathChooser = new Utils::PathChooser(this);
m_pathChooser->setEnabled(true);
m_pathChooser->setExpectedKind(Utils::PathChooser::Directory);
+ m_pathChooser->setBaseDirectory(bc->target()->project()->projectDirectory());
+ m_pathChooser->setEnvironment(bc->environment());
fl->addRow(tr("Build directory:"), m_pathChooser);
connect(m_pathChooser, SIGNAL(changed(QString)), this, SLOT(buildDirectoryChanged()));
m_pathChooser->setBaseDirectory(bc->target()->project()->projectDirectory());
- m_pathChooser->setPath(m_buildConfiguration->buildDirectory());
+ m_pathChooser->setPath(m_buildConfiguration->rawBuildDirectory().toString());
setDisplayName(tr("Autotools Manager"));
+
+ connect(bc, SIGNAL(environmentChanged()), this, SLOT(environmentHasChanged()));
}
void AutotoolsBuildSettingsWidget::buildDirectoryChanged()
{
- m_buildConfiguration->setBuildDirectory(m_pathChooser->rawPath());
+ m_buildConfiguration->setBuildDirectory(Utils::FileName::fromString(m_pathChooser->rawPath()));
+}
+
+void AutotoolsBuildSettingsWidget::environmentHasChanged()
+{
+ m_pathChooser->setEnvironment(m_buildConfiguration->environment());
}
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.h
index 459fb2e234..183c2e4300 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.h
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildsettingswidget.h
@@ -61,6 +61,7 @@ public:
private slots:
void buildDirectoryChanged();
+ void environmentHasChanged();
private:
Utils::PathChooser *m_pathChooser;
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectconstants.h b/src/plugins/autotoolsprojectmanager/autotoolsprojectconstants.h
index 382737e709..44a0c21f6d 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsprojectconstants.h
+++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectconstants.h
@@ -41,7 +41,6 @@ namespace Constants {
//BuildConfiguration
const char AUTOTOOLS_BC_ID[] = "AutotoolsProjectManager.AutotoolsBuildConfiguration";
- const char BUILD_DIRECTORY_KEY[] = "AutotoolsProjectManager.AutotoolsBuildConfiguration.BuildDirectory";
//Project
const char AUTOTOOLS_PROJECT_ID[] = "AutotoolsProjectManager.AutotoolsProject";
diff --git a/src/plugins/autotoolsprojectmanager/configurestep.cpp b/src/plugins/autotoolsprojectmanager/configurestep.cpp
index 687fcc924e..8f0b13d818 100644
--- a/src/plugins/autotoolsprojectmanager/configurestep.cpp
+++ b/src/plugins/autotoolsprojectmanager/configurestep.cpp
@@ -158,7 +158,7 @@ bool ConfigureStep::init()
ProcessParameters *pp = processParameters();
pp->setMacroExpander(bc->macroExpander());
pp->setEnvironment(bc->environment());
- pp->setWorkingDirectory(bc->buildDirectory());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
pp->setCommand(QLatin1String("configure"));
pp->setArguments(additionalArguments());
pp->resolveAll();
@@ -171,8 +171,9 @@ void ConfigureStep::run(QFutureInterface<bool>& interface)
BuildConfiguration *bc = buildConfiguration();
//Check whether we need to run configure
- const QFileInfo configureInfo(bc->buildDirectory() + QLatin1String("/configure"));
- const QFileInfo configStatusInfo(bc->buildDirectory() + QLatin1String("/config.status"));
+ QString buildDir = bc->buildDirectory().toString();
+ const QFileInfo configureInfo(buildDir +QLatin1String("/configure"));
+ const QFileInfo configStatusInfo(buildDir + QLatin1String("/config.status"));
if (!configStatusInfo.exists()
|| configStatusInfo.lastModified() < configureInfo.lastModified()) {
@@ -273,7 +274,7 @@ void ConfigureStepConfigWidget::updateDetails()
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
param.setEnvironment(bc->environment());
- param.setWorkingDirectory(bc->buildDirectory());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
param.setCommand(QLatin1String("configure"));
param.setArguments(m_configureStep->additionalArguments());
m_summaryText = param.summary(displayName());
diff --git a/src/plugins/autotoolsprojectmanager/makestep.cpp b/src/plugins/autotoolsprojectmanager/makestep.cpp
index 2485779999..51206624c4 100644
--- a/src/plugins/autotoolsprojectmanager/makestep.cpp
+++ b/src/plugins/autotoolsprojectmanager/makestep.cpp
@@ -186,7 +186,7 @@ bool MakeStep::init()
// addToEnvironment() to not screw up the users run environment.
env.set(QLatin1String("LC_ALL"), QLatin1String("C"));
pp->setEnvironment(env);
- pp->setWorkingDirectory(bc->buildDirectory());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
pp->setCommand(tc ? tc->makeCommand(bc->environment()) : QLatin1String("make"));
pp->setArguments(arguments);
pp->resolveAll();
@@ -321,7 +321,7 @@ void MakeStepConfigWidget::updateDetails()
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
param.setEnvironment(bc->environment());
- param.setWorkingDirectory(bc->buildDirectory());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
param.setCommand(tc->makeCommand(bc->environment()));
param.setArguments(arguments);
m_summaryText = param.summary(displayName());
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index f460ec6222..3af1ccf901 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -44,7 +44,6 @@ using namespace CMakeProjectManager;
using namespace Internal;
namespace {
-const char BUILD_DIRECTORY_KEY[] = "CMakeProjectManager.CMakeBuildConfiguration.BuildDirectory";
const char USE_NINJA_KEY[] = "CMakeProjectManager.CMakeBuildConfiguration.UseNinja";
} // namespace
@@ -52,15 +51,14 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent
BuildConfiguration(parent, Core::Id(Constants::CMAKE_BC_ID)), m_useNinja(false)
{
CMakeProject *project = static_cast<CMakeProject *>(parent->project());
- m_buildDirectory = project->shadowBuildDirectory(project->projectFilePath(),
- parent->kit(),
- displayName());
+ setBuildDirectory(Utils::FileName::fromString(project->shadowBuildDirectory(project->projectFilePath(),
+ parent->kit(),
+ displayName())));
}
CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent,
CMakeBuildConfiguration *source) :
BuildConfiguration(parent, source),
- m_buildDirectory(source->m_buildDirectory),
m_msvcVersion(source->m_msvcVersion),
m_useNinja(false)
{
@@ -71,7 +69,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent
QVariantMap CMakeBuildConfiguration::toMap() const
{
QVariantMap map(ProjectExplorer::BuildConfiguration::toMap());
- map.insert(QLatin1String(BUILD_DIRECTORY_KEY), m_buildDirectory);
map.insert(QLatin1String(USE_NINJA_KEY), m_useNinja);
return map;
}
@@ -81,7 +78,6 @@ bool CMakeBuildConfiguration::fromMap(const QVariantMap &map)
if (!BuildConfiguration::fromMap(map))
return false;
- m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY)).toString();
m_useNinja = map.value(QLatin1String(USE_NINJA_KEY), false).toBool();
return true;
@@ -108,20 +104,6 @@ ProjectExplorer::NamedWidget *CMakeBuildConfiguration::createConfigWidget()
return new CMakeBuildSettingsWidget(this);
}
-QString CMakeBuildConfiguration::buildDirectory() const
-{
- return m_buildDirectory;
-}
-
-void CMakeBuildConfiguration::setBuildDirectory(const QString &buildDirectory)
-{
- if (m_buildDirectory == buildDirectory)
- return;
- m_buildDirectory = buildDirectory;
- emit buildDirectoryChanged();
- emit environmentChanged();
-}
-
/*!
\class CMakeBuildConfigurationFactory
*/
@@ -205,7 +187,7 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer:
cleanMakeStep->setAdditionalArguments(QLatin1String("clean"));
cleanMakeStep->setClean(true);
- bc->setBuildDirectory(copw.buildDirectory());
+ bc->setBuildDirectory(Utils::FileName::fromString(copw.buildDirectory()));
bc->setUseNinja(copw.useNinja());
// Default to all
@@ -254,7 +236,7 @@ bool CMakeBuildConfigurationFactory::canHandle(const ProjectExplorer::Target *t)
ProjectExplorer::BuildConfiguration::BuildType CMakeBuildConfiguration::buildType() const
{
QString cmakeBuildType;
- QFile cmakeCache(buildDirectory() + QLatin1String("/CMakeCache.txt"));
+ QFile cmakeCache(buildDirectory().toString() + QLatin1String("/CMakeCache.txt"));
if (cmakeCache.open(QIODevice::ReadOnly)) {
while (!cmakeCache.atEnd()) {
QByteArray line = cmakeCache.readLine();
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index 494c28ea2c..d4d7286988 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -39,6 +39,7 @@ class ToolChain;
namespace CMakeProjectManager {
namespace Internal {
+class CMakeProject;
class CMakeBuildConfigurationFactory;
@@ -52,9 +53,6 @@ public:
~CMakeBuildConfiguration();
ProjectExplorer::NamedWidget *createConfigWidget();
- QString buildDirectory() const;
-
- void setBuildDirectory(const QString &buildDirectory);
QVariantMap toMap() const;
@@ -71,9 +69,10 @@ protected:
bool fromMap(const QVariantMap &map);
private:
- QString m_buildDirectory;
QString m_msvcVersion;
bool m_useNinja;
+
+ friend class CMakeProject;
};
class CMakeBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
diff --git a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h
index 90db125212..5b1a7f6841 100644
--- a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h
+++ b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.h
@@ -78,7 +78,7 @@ public:
BuildInfo(CMakeBuildConfiguration *bc)
: sourceDirectory(bc->target()->project()->projectDirectory())
- , buildDirectory(bc->buildDirectory())
+ , buildDirectory(bc->buildDirectory().toString())
, environment(bc->environment())
, useNinja(bc->useNinja())
, kit(bc->target()->kit())
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index 3be2f5f483..e0044282c1 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -135,7 +135,7 @@ void CMakeProject::changeActiveBuildConfiguration(ProjectExplorer::BuildConfigur
CMakeBuildConfiguration *cmakebc = static_cast<CMakeBuildConfiguration *>(bc);
// Pop up a dialog asking the user to rerun cmake
- QString cbpFile = CMakeManager::findCbpFile(QDir(bc->buildDirectory()));
+ QString cbpFile = CMakeManager::findCbpFile(QDir(bc->buildDirectory().toString()));
QFileInfo cbpFileFi(cbpFile);
CMakeOpenProjectWizard::Mode mode = CMakeOpenProjectWizard::Nothing;
if (!cbpFileFi.exists()) {
@@ -180,7 +180,7 @@ void CMakeProject::activeTargetWasChanged(Target *target)
void CMakeProject::changeBuildDirectory(CMakeBuildConfiguration *bc, const QString &newBuildDirectory)
{
- bc->setBuildDirectory(newBuildDirectory);
+ bc->setBuildDirectory(Utils::FileName::fromString(newBuildDirectory));
parseCMakeLists();
}
@@ -210,7 +210,7 @@ bool CMakeProject::parseCMakeLists()
document->infoBar()->removeInfo(Core::Id("CMakeEditor.RunCMake"));
// Find cbp file
- QString cbpFile = CMakeManager::findCbpFile(activeBC->buildDirectory());
+ QString cbpFile = CMakeManager::findCbpFile(activeBC->buildDirectory().toString());
if (cbpFile.isEmpty()) {
emit buildTargetsChanged();
@@ -559,7 +559,7 @@ bool CMakeProject::fromMap(const QVariantMap &map)
CMakeBuildConfiguration *bc(new CMakeBuildConfiguration(t));
bc->setDefaultDisplayName(QLatin1String("all"));
bc->setUseNinja(copw.useNinja());
- bc->setBuildDirectory(copw.buildDirectory());
+ bc->setBuildDirectory(Utils::FileName::fromString(copw.buildDirectory()));
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
@@ -585,7 +585,7 @@ bool CMakeProject::fromMap(const QVariantMap &map)
CMakeBuildConfiguration *activeBC = qobject_cast<CMakeBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
if (!activeBC)
return false;
- QString cbpFile = CMakeManager::findCbpFile(QDir(activeBC->buildDirectory()));
+ QString cbpFile = CMakeManager::findCbpFile(QDir(activeBC->buildDirectory().toString()));
QFileInfo cbpFileFi(cbpFile);
CMakeOpenProjectWizard::Mode mode = CMakeOpenProjectWizard::Nothing;
@@ -669,7 +669,7 @@ QString CMakeProject::uiHeaderFile(const QString &uiFile)
QDir srcDirRoot = QDir(project.toString());
QString relativePath = srcDirRoot.relativeFilePath(baseDirectory.toString());
- QDir buildDir = QDir(activeTarget()->activeBuildConfiguration()->buildDirectory());
+ QDir buildDir = QDir(activeTarget()->activeBuildConfiguration()->buildDirectory().toString());
QString uiHeaderFilePath = buildDir.absoluteFilePath(relativePath);
uiHeaderFilePath += QLatin1String("/ui_");
uiHeaderFilePath += fi.completeBaseName();
@@ -839,8 +839,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
fl->addRow(tr("Build directory:"), hbox);
m_buildConfiguration = bc;
- m_pathLineEdit->setText(m_buildConfiguration->buildDirectory());
- if (m_buildConfiguration->buildDirectory() == bc->target()->project()->projectDirectory())
+ m_pathLineEdit->setText(m_buildConfiguration->rawBuildDirectory().toString());
+ if (m_buildConfiguration->buildDirectory().toString() == bc->target()->project()->projectDirectory())
m_changeButton->setEnabled(false);
else
m_changeButton->setEnabled(true);
@@ -856,7 +856,7 @@ void CMakeBuildSettingsWidget::openChangeBuildDirectoryDialog()
if (copw.exec() == QDialog::Accepted) {
project->changeBuildDirectory(m_buildConfiguration, copw.buildDirectory());
m_buildConfiguration->setUseNinja(copw.useNinja());
- m_pathLineEdit->setText(m_buildConfiguration->buildDirectory());
+ m_pathLineEdit->setText(m_buildConfiguration->rawBuildDirectory().toString());
}
}
diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp
index 9dad1172f6..957f9cf069 100644
--- a/src/plugins/cmakeprojectmanager/makestep.cpp
+++ b/src/plugins/cmakeprojectmanager/makestep.cpp
@@ -192,7 +192,7 @@ bool MakeStep::init()
if (m_useNinja && !env.value(QLatin1String("NINJA_STATUS")).startsWith(m_ninjaProgressString))
env.set(QLatin1String("NINJA_STATUS"), m_ninjaProgressString + QLatin1String("%o/sec] "));
pp->setEnvironment(env);
- pp->setWorkingDirectory(bc->buildDirectory());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
pp->setCommand(makeCommand(tc, bc->environment()));
pp->setArguments(arguments);
pp->resolveAll();
@@ -408,7 +408,7 @@ void MakeStepConfigWidget::updateDetails()
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
param.setEnvironment(bc->environment());
- param.setWorkingDirectory(bc->buildDirectory());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
param.setCommand(m_makeStep->makeCommand(tc, bc->environment()));
param.setArguments(arguments);
m_summaryText = param.summary(displayName());
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index ab172b5b22..cc7588bd59 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -359,7 +359,7 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
if (const Project *project = target->project()) {
sp.projectSourceDirectory = project->projectDirectory();
if (const BuildConfiguration *buildConfig = target->activeBuildConfiguration())
- sp.projectBuildDirectory = buildConfig->buildDirectory();
+ sp.projectBuildDirectory = buildConfig->buildDirectory().toString();
sp.projectSourceFiles = project->files(Project::ExcludeGeneratedFiles);
}
}
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
index 663552a635..3d451c6692 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
@@ -48,7 +48,6 @@ namespace GenericProjectManager {
namespace Internal {
const char GENERIC_BC_ID[] = "GenericProjectManager.GenericBuildConfiguration";
-const char BUILD_DIRECTORY_KEY[] = "GenericProjectManager.GenericBuildConfiguration.BuildDirectory";
GenericBuildConfiguration::GenericBuildConfiguration(Target *parent)
: BuildConfiguration(parent, Core::Id(GENERIC_BC_ID))
@@ -61,50 +60,11 @@ GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, const Core:
}
GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, GenericBuildConfiguration *source) :
- BuildConfiguration(parent, source),
- m_buildDirectory(source->m_buildDirectory)
+ BuildConfiguration(parent, source)
{
cloneSteps(source);
}
-QVariantMap GenericBuildConfiguration::toMap() const
-{
- QVariantMap map(BuildConfiguration::toMap());
- map.insert(QLatin1String(BUILD_DIRECTORY_KEY), m_buildDirectory);
- return map;
-}
-
-bool GenericBuildConfiguration::fromMap(const QVariantMap &map)
-{
- m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), target()->project()->projectDirectory()).toString();
-
- return BuildConfiguration::fromMap(map);
-}
-
-QString GenericBuildConfiguration::buildDirectory() const
-{
- // Convert to absolute path when necessary
- const QDir projectDir(target()->project()->projectDirectory());
- return projectDir.absoluteFilePath(m_buildDirectory);
-}
-
-/**
- * Returns the build directory unmodified, instead of making it absolute like
- * buildDirectory() does.
- */
-QString GenericBuildConfiguration::rawBuildDirectory() const
-{
- return m_buildDirectory;
-}
-
-void GenericBuildConfiguration::setBuildDirectory(const QString &buildDirectory)
-{
- if (m_buildDirectory == buildDirectory)
- return;
- m_buildDirectory = buildDirectory;
- emit buildDirectoryChanged();
-}
-
NamedWidget *GenericBuildConfiguration::createConfigWidget()
{
return new GenericBuildSettingsWidget(this);
@@ -244,13 +204,21 @@ GenericBuildSettingsWidget::GenericBuildSettingsWidget(GenericBuildConfiguration
m_buildConfiguration = bc;
m_pathChooser->setBaseDirectory(bc->target()->project()->projectDirectory());
- m_pathChooser->setPath(m_buildConfiguration->rawBuildDirectory());
+ m_pathChooser->setEnvironment(bc->environment());
+ m_pathChooser->setPath(m_buildConfiguration->rawBuildDirectory().toString());
setDisplayName(tr("Generic Manager"));
+
+ connect(bc, SIGNAL(environmentChanged()), this, SLOT(environmentHasChanged()));
}
void GenericBuildSettingsWidget::buildDirectoryChanged()
{
- m_buildConfiguration->setBuildDirectory(m_pathChooser->rawPath());
+ m_buildConfiguration->setBuildDirectory(Utils::FileName::fromString(m_pathChooser->rawPath()));
+}
+
+void GenericBuildSettingsWidget::environmentHasChanged()
+{
+ m_pathChooser->setEnvironment(m_buildConfiguration->environment());
}
} // namespace Internal
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
index 996fa4ae42..38624547ab 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
@@ -40,6 +40,7 @@ namespace Internal {
class GenericTarget;
class GenericBuildConfigurationFactory;
+class GenericBuildSettingsWidget;
class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
@@ -50,21 +51,14 @@ public:
explicit GenericBuildConfiguration(ProjectExplorer::Target *parent);
ProjectExplorer::NamedWidget *createConfigWidget();
- QString buildDirectory() const;
- QString rawBuildDirectory() const;
- void setBuildDirectory(const QString &buildDirectory);
-
- QVariantMap toMap() const;
BuildType buildType() const;
protected:
GenericBuildConfiguration(ProjectExplorer::Target *parent, GenericBuildConfiguration *source);
GenericBuildConfiguration(ProjectExplorer::Target *parent, const Core::Id id);
- virtual bool fromMap(const QVariantMap &map);
-private:
- QString m_buildDirectory;
+ friend class GenericBuildSettingsWidget;
};
class GenericBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
@@ -98,6 +92,7 @@ public:
private slots:
void buildDirectoryChanged();
+ void environmentHasChanged();
private:
Utils::PathChooser *m_pathChooser;
diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp
index da24383a73..4fcce35c1d 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.cpp
+++ b/src/plugins/genericprojectmanager/genericmakestep.cpp
@@ -113,7 +113,7 @@ bool GenericMakeStep::init()
ProcessParameters *pp = processParameters();
pp->setMacroExpander(bc->macroExpander());
- pp->setWorkingDirectory(bc->buildDirectory());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
Utils::Environment env = bc->environment();
// Force output to english for the parsers. Do this here and not in the toolchain's
// addToEnvironment() to not screw up the users run environment.
@@ -301,7 +301,7 @@ void GenericMakeStepConfigWidget::updateDetails()
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
- param.setWorkingDirectory(bc->buildDirectory());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
param.setEnvironment(bc->environment());
param.setCommand(m_makeStep->makeCommand(bc->environment()));
param.setArguments(m_makeStep->allArguments());
diff --git a/src/plugins/madde/maemoinstalltosysrootstep.cpp b/src/plugins/madde/maemoinstalltosysrootstep.cpp
index 00c918b712..8352b29195 100644
--- a/src/plugins/madde/maemoinstalltosysrootstep.cpp
+++ b/src/plugins/madde/maemoinstalltosysrootstep.cpp
@@ -366,7 +366,7 @@ bool MaemoMakeInstallToSysrootStep::init()
processParameters()->setCommand(command);
processParameters()->setArguments(args.join(QLatin1String(" ")));
processParameters()->setEnvironment(env);
- processParameters()->setWorkingDirectory(bc->buildDirectory());
+ processParameters()->setWorkingDirectory(bc->buildDirectory().toString());
return true;
}
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());
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 975c23c04c..3f2cf3759d 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -34,10 +34,9 @@
#include "projectconfiguration.h"
#include <utils/environment.h>
+#include <utils/fileutils.h>
-namespace Utils {
-class AbstractMacroExpander;
-}
+namespace Utils { class AbstractMacroExpander; }
namespace ProjectExplorer {
@@ -56,7 +55,8 @@ public:
// ctors are protected
virtual ~BuildConfiguration();
- virtual QString buildDirectory() const = 0;
+ Utils::FileName buildDirectory() const;
+ Utils::FileName rawBuildDirectory() const;
virtual ProjectExplorer::NamedWidget *createConfigWidget() = 0;
virtual QList<NamedWidget *> createSubConfigWidgets();
@@ -99,10 +99,12 @@ protected:
BuildConfiguration(Target *target, const Core::Id id);
BuildConfiguration(Target *target, BuildConfiguration *source);
+ virtual void setBuildDirectory(const Utils::FileName &dir);
void cloneSteps(BuildConfiguration *source);
private slots:
void handleKitUpdate();
+ void emitBuildDirectoryChanged();
private:
void emitEnvironmentChanged();
@@ -111,6 +113,8 @@ private:
QList<Utils::EnvironmentItem> m_userEnvironmentChanges;
QList<BuildStepList *> m_stepLists;
Utils::AbstractMacroExpander *m_macroExpander;
+ Utils::FileName m_buildDirectory;
+ Utils::FileName m_lastEmmitedBuildDirectory;
mutable Utils::Environment m_cachedEnvironment;
};
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index da31877809..544e18b7cd 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1129,7 +1129,7 @@ void ProjectExplorerPlugin::updateVariable(const QByteArray &variable)
if (variable == Constants::VAR_CURRENTPROJECT_BUILDPATH) {
if (currentProject() && currentProject()->activeTarget() && currentProject()->activeTarget()->activeBuildConfiguration()) {
Core::VariableManager::insert(variable,
- currentProject()->activeTarget()->activeBuildConfiguration()->buildDirectory());
+ currentProject()->activeTarget()->activeBuildConfiguration()->buildDirectory().toUserOutput());
} else {
Core::VariableManager::remove(variable);
}
diff --git a/src/plugins/projectexplorer/settingsaccessor.cpp b/src/plugins/projectexplorer/settingsaccessor.cpp
index 84991e5652..4c5f76347d 100644
--- a/src/plugins/projectexplorer/settingsaccessor.cpp
+++ b/src/plugins/projectexplorer/settingsaccessor.cpp
@@ -421,6 +421,23 @@ public:
QVariantMap update(Project *project, const QVariantMap &map);
};
+// Version 14 Move builddir into BuildConfiguration
+class Version14Handler : public UserFileVersionHandler
+{
+public:
+ int userFileVersion() const
+ {
+ return 14;
+ }
+
+ QString displayUserFileVersion() const
+ {
+ return QLatin1String("3.0-pre1");
+ }
+
+ QVariantMap update(Project *project, const QVariantMap &map);
+};
+
} // namespace
//
@@ -513,6 +530,7 @@ SettingsAccessor::SettingsAccessor(Project *project) :
addVersionHandler(new Version11Handler);
addVersionHandler(new Version12Handler);
addVersionHandler(new Version13Handler);
+ addVersionHandler(new Version14Handler);
}
SettingsAccessor::~SettingsAccessor()
@@ -2768,3 +2786,23 @@ QVariantMap Version13Handler::update(Project *project, const QVariantMap &map)
}
return result;
}
+
+QVariantMap Version14Handler::update(Project *project, const QVariantMap &map)
+{
+ QVariantMap result;
+ QMapIterator<QString, QVariant> it(map);
+ while (it.hasNext()) {
+ it.next();
+ if (it.value().type() == QVariant::Map)
+ result.insert(it.key(), update(project, it.value().toMap()));
+ else if (it.key() == QLatin1String("AutotoolsProjectManager.AutotoolsBuildConfiguration.BuildDirectory")
+ || it.key() == QLatin1String("CMakeProjectManager.CMakeBuildConfiguration.BuildDirectory")
+ || it.key() == QLatin1String("GenericProjectManager.GenericBuildConfiguration.BuildDirectory")
+ || it.key() == QLatin1String("Qbs.BuildDirectory")
+ || it.key() == QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory"))
+ result.insert(QLatin1String("ProjectExplorer.BuildConfiguration.BuildDirectory"), it.value());
+ else
+ result.insert(it.key(), it.value());
+ }
+ return result;
+}
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index 7f8ed0cb6f..e08a616bd8 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -46,7 +46,6 @@
#include <QInputDialog>
static const char QBS_BC_ID[] = "Qbs.QbsBuildConfiguration";
-static const char QBS_BUILD_DIRECTORY_KEY[] = "Qbs.BuildDirectory";
namespace QbsProjectManager {
namespace Internal {
@@ -74,19 +73,11 @@ QbsBuildConfiguration::QbsBuildConfiguration(ProjectExplorer::Target *target, co
{ }
QbsBuildConfiguration::QbsBuildConfiguration(ProjectExplorer::Target *target, QbsBuildConfiguration *source) :
- BuildConfiguration(target, source),
- m_buildDirectory(source->m_buildDirectory)
+ BuildConfiguration(target, source)
{
cloneSteps(source);
}
-QVariantMap QbsBuildConfiguration::toMap() const
-{
- QVariantMap map(BuildConfiguration::toMap());
- map.insert(QLatin1String(QBS_BUILD_DIRECTORY_KEY), m_buildDirectory.toUserOutput());
- return map;
-}
-
bool QbsBuildConfiguration::fromMap(const QVariantMap &map)
{
if (!BuildConfiguration::fromMap(map))
@@ -101,8 +92,6 @@ bool QbsBuildConfiguration::fromMap(const QVariantMap &map)
connect(bs, SIGNAL(qbsConfigurationChanged()), this, SIGNAL(qbsConfigurationChanged()));
}
- m_buildDirectory = Utils::FileName::fromUserInput(map.value(QLatin1String(QBS_BUILD_DIRECTORY_KEY)).toString());
-
return true;
}
@@ -139,12 +128,6 @@ QVariantMap QbsBuildConfiguration::qbsConfiguration() const
return config;
}
-QString QbsBuildConfiguration::buildDirectory() const
-{
- QString path = QDir::cleanPath(environment().expandVariables(m_buildDirectory.toString()));
- return QDir::cleanPath(QDir(target()->project()->projectDirectory()).absoluteFilePath(path));
-}
-
Internal::QbsProject *QbsBuildConfiguration::project() const
{
return qobject_cast<Internal::QbsProject *>(target()->project());
@@ -239,14 +222,6 @@ QbsBuildConfiguration *QbsBuildConfiguration::setup(ProjectExplorer::Target *t,
return bc;
}
-void QbsBuildConfiguration::setBuildDirectory(const Utils::FileName &dir)
-{
- if (m_buildDirectory == dir)
- return;
- m_buildDirectory = dir;
- emit buildDirectoryChanged();
-}
-
// ---------------------------------------------------------------------------
// QbsBuildConfigurationFactory:
// ---------------------------------------------------------------------------
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
index 022165b7fe..7959137f8f 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
@@ -57,12 +57,9 @@ public:
QbsBuildStep *qbsStep() const;
QVariantMap qbsConfiguration() const;
- QString buildDirectory() const;
Internal::QbsProject *project() const;
- QVariantMap toMap() const;
-
ProjectExplorer::IOutputParser *createOutputParser() const;
bool isEnabled() const;
@@ -96,11 +93,9 @@ private:
const QString &displayName,
const QVariantMap &buildData,
const Utils::FileName &directory);
- void setBuildDirectory(const Utils::FileName &dir);
bool m_isParsing;
bool m_parsingError;
- Utils::FileName m_buildDirectory;
QStringList m_changedFiles;
QStringList m_activeFileTags;
QStringList m_products;
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
index b6f6c90743..45e6135718 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
@@ -31,6 +31,8 @@
#include "qbsbuildconfiguration.h"
+#include <projectexplorer/target.h>
+#include <projectexplorer/project.h>
#include <utils/detailswidget.h>
#include <utils/pathchooser.h>
@@ -45,8 +47,8 @@ QbsBuildConfigurationWidget::QbsBuildConfigurationWidget(QbsProjectManager::Inte
m_buildConfiguration(bc),
m_ignoreChange(false)
{
- connect(m_buildConfiguration, SIGNAL(buildDirectoryChanged()),
- this, SLOT(buildDirectoryChanged()));
+ connect(bc, SIGNAL(buildDirectoryChanged()), this, SLOT(buildDirectoryChanged()));
+ connect(bc, SIGNAL(environmentChanged()), this, SLOT(environmentHasChanged()));
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0);
@@ -63,6 +65,8 @@ QbsBuildConfigurationWidget::QbsBuildConfigurationWidget(QbsProjectManager::Inte
m_buildDirChooser = new Utils::PathChooser;
m_buildDirChooser->setExpectedKind(Utils::PathChooser::Directory);
+ m_buildDirChooser->setBaseDirectory(bc->target()->project()->projectDirectory());
+ m_buildDirChooser->setEnvironment(bc->environment());
layout->addWidget(m_buildDirChooser, 0, 1);
connect(m_buildDirChooser, SIGNAL(changed(QString)), this, SLOT(buildDirEdited()));
@@ -81,7 +85,12 @@ void QbsBuildConfigurationWidget::buildDirectoryChanged()
if (m_ignoreChange)
return;
- m_buildDirChooser->setPath(m_buildConfiguration->buildDirectory());
+ m_buildDirChooser->setPath(m_buildConfiguration->rawBuildDirectory().toString());
+}
+
+void QbsBuildConfigurationWidget::environmentHasChanged()
+{
+ m_buildDirChooser->setEnvironment(m_buildConfiguration->environment());
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h
index 0625e5ae39..b91e7d8e90 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.h
@@ -53,6 +53,7 @@ private slots:
// Changes triggered from creator
void buildDirectoryChanged();
+ void environmentHasChanged();
private:
Internal::QbsBuildConfiguration *m_buildConfiguration;
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 13d3ed8cf0..aa5e0156b3 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -349,7 +349,7 @@ void QbsProject::parseCurrentBuildConfiguration()
QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
if (!bc)
return;
- parse(bc->qbsConfiguration(), bc->environment(), bc->buildDirectory());
+ parse(bc->qbsConfiguration(), bc->environment(), bc->buildDirectory().toString());
}
bool QbsProject::fromMap(const QVariantMap &map)
diff --git a/src/plugins/qnx/blackberryabstractdeploystep.cpp b/src/plugins/qnx/blackberryabstractdeploystep.cpp
index 8931989b40..f97c56df8e 100644
--- a/src/plugins/qnx/blackberryabstractdeploystep.cpp
+++ b/src/plugins/qnx/blackberryabstractdeploystep.cpp
@@ -81,7 +81,7 @@ bool BlackBerryAbstractDeployStep::init()
m_processCounter = -1;
m_environment = target()->activeBuildConfiguration()->environment();
- m_buildDirectory = target()->activeBuildConfiguration()->buildDirectory();
+ m_buildDirectory = target()->activeBuildConfiguration()->buildDirectory().toString();
return true;
}
diff --git a/src/plugins/qnx/blackberrycreatepackagestep.cpp b/src/plugins/qnx/blackberrycreatepackagestep.cpp
index 4c21158323..b8ef2f8011 100644
--- a/src/plugins/qnx/blackberrycreatepackagestep.cpp
+++ b/src/plugins/qnx/blackberrycreatepackagestep.cpp
@@ -301,8 +301,8 @@ bool BlackBerryCreatePackageStep::prepareAppDescriptorFile(const QString &appDes
}
}
- const QString buildDir = target()->activeBuildConfiguration()->buildDirectory();
if (!preparedFile.open(QIODevice::WriteOnly)) {
+ const QString buildDir = target()->activeBuildConfiguration()->buildDirectory().toUserOutput();
raiseError(tr("Could not create prepared application descriptor file in '%1'").arg(buildDir));
return false;
}
diff --git a/src/plugins/qnx/blackberrydeployinformation.cpp b/src/plugins/qnx/blackberrydeployinformation.cpp
index 5698bd8893..ed4412593b 100644
--- a/src/plugins/qnx/blackberrydeployinformation.cpp
+++ b/src/plugins/qnx/blackberrydeployinformation.cpp
@@ -221,7 +221,9 @@ void BlackBerryDeployInformation::fromMap(const QVariantMap &map)
const QString targetName = innerMap.value(QLatin1String(TARGET_KEY)).toString();
const QString sourceDir = innerMap.value(QLatin1String(SOURCE_KEY)).toString();
- BarPackageDeployInformation deployInformation(enabled, proFilePath, sourceDir, m_target->activeBuildConfiguration()->buildDirectory(), targetName);
+ BarPackageDeployInformation deployInformation(enabled, proFilePath, sourceDir,
+ m_target->activeBuildConfiguration()->buildDirectory().toString(),
+ targetName);
deployInformation.userAppDescriptorPath = appDescriptorPath;
deployInformation.userPackagePath = packagePath;
m_deployInformation << deployInformation;
@@ -248,7 +250,7 @@ void BlackBerryDeployInformation::updateModel()
|| !m_deployInformation[i].userPackagePath.isEmpty())) {
BarPackageDeployInformation deployInformation = m_deployInformation[i];
// In case the user resets the bar package path (or if it is empty already), we need the current build dir
- deployInformation.buildDir = m_target->activeBuildConfiguration()->buildDirectory();
+ deployInformation.buildDir = m_target->activeBuildConfiguration()->buildDirectory().toString();
keep << deployInformation;
nodeFound = true;
break;
@@ -302,7 +304,7 @@ BarPackageDeployInformation BlackBerryDeployInformation::deployInformationFromNo
Qt4ProjectManager::TargetInformation ti = node->targetInformation();
QFileInfo fi(node->path());
- const QString buildDir = m_target->activeBuildConfiguration()->buildDirectory();
+ const QString buildDir = m_target->activeBuildConfiguration()->buildDirectory().toString();
return BarPackageDeployInformation(true, node->path(), fi.absolutePath(), buildDir, ti.target);
}
diff --git a/src/plugins/qnx/blackberryruncontrolfactory.cpp b/src/plugins/qnx/blackberryruncontrolfactory.cpp
index 0e56535343..99ec7e33cb 100644
--- a/src/plugins/qnx/blackberryruncontrolfactory.cpp
+++ b/src/plugins/qnx/blackberryruncontrolfactory.cpp
@@ -151,7 +151,7 @@ Debugger::DebuggerStartParameters BlackBerryRunControlFactory::startParameters(
if (const ProjectExplorer::Project *project = runConfig->target()->project()) {
params.projectSourceDirectory = project->projectDirectory();
if (const ProjectExplorer::BuildConfiguration *buildConfig = runConfig->target()->activeBuildConfiguration())
- params.projectBuildDirectory = buildConfig->buildDirectory();
+ params.projectBuildDirectory = buildConfig->buildDirectory().toString();
params.projectSourceFiles = project->files(ProjectExplorer::Project::ExcludeGeneratedFiles);
}
diff --git a/src/plugins/qnx/qnxruncontrolfactory.cpp b/src/plugins/qnx/qnxruncontrolfactory.cpp
index f979280ffa..39aa384e37 100644
--- a/src/plugins/qnx/qnxruncontrolfactory.cpp
+++ b/src/plugins/qnx/qnxruncontrolfactory.cpp
@@ -102,7 +102,7 @@ static DebuggerStartParameters createDebuggerStartParameters(const QnxRunConfigu
if (const ProjectExplorer::Project *project = runConfig->target()->project()) {
params.projectSourceDirectory = project->projectDirectory();
if (const ProjectExplorer::BuildConfiguration *buildConfig = runConfig->target()->activeBuildConfiguration())
- params.projectBuildDirectory = buildConfig->buildDirectory();
+ params.projectBuildDirectory = buildConfig->buildDirectory().toString();
params.projectSourceFiles = project->files(ProjectExplorer::Project::ExcludeGeneratedFiles);
}
diff --git a/src/plugins/qt4projectmanager/librarydetailscontroller.cpp b/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
index 8080054f6f..73a7d79af2 100644
--- a/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
+++ b/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
@@ -1060,7 +1060,7 @@ QString InternalLibraryDetailsController::snippet() const
QDir rootBuildDir = rootDir; // If the project is unconfigured use the project dir
if (ProjectExplorer::Target *t = project->activeTarget())
if (ProjectExplorer::BuildConfiguration *bc = t->activeBuildConfiguration())
- rootBuildDir = bc->buildDirectory();
+ rootBuildDir = bc->buildDirectory().toString();
// the project for which we insert the snippet inside build tree
QFileInfo pfi(rootBuildDir.filePath(proRelavitePath));
diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp
index 02a76cdec3..c0b0fb81d0 100644
--- a/src/plugins/qt4projectmanager/makestep.cpp
+++ b/src/plugins/qt4projectmanager/makestep.cpp
@@ -173,7 +173,7 @@ bool MakeStep::init()
if (bc->subNodeBuild())
workingDirectory = bc->subNodeBuild()->buildDir();
else
- workingDirectory = bc->buildDirectory();
+ workingDirectory = bc->buildDirectory().toString();
pp->setWorkingDirectory(workingDirectory);
QString makeCmd = tc->makeCommand(bc->environment());
@@ -415,7 +415,7 @@ void MakeStepConfigWidget::updateDetails()
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
- param.setWorkingDirectory(bc->buildDirectory());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
QString makeCmd = tc->makeCommand(bc->environment());
if (!m_makeStep->makeCommand().isEmpty())
makeCmd = m_makeStep->makeCommand();
diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index ec2108ef27..1cae7daf88 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -248,7 +248,7 @@ bool QMakeStep::init()
if (qt4bc->subNodeBuild())
workingDirectory = qt4bc->subNodeBuild()->buildDir();
else
- workingDirectory = qt4bc->buildDirectory();
+ workingDirectory = qt4bc->buildDirectory().toString();
FileName program = qtVersion->qmakeCommand();
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index 81786a4a3f..795d8c8aa9 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -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());
@@ -139,8 +135,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()),
this, SLOT(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;
}
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index e39e82c8d4..b12dcaa132 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -45,6 +45,8 @@ class Qt4BuildConfigurationFactory;
class Qt4ProFileNode;
class BuildConfigurationInfo;
+namespace Internal { class Qt4ProjectConfigWidget; }
+
class QT4PROJECTMANAGER_EXPORT Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration
{
Q_OBJECT
@@ -55,10 +57,7 @@ public:
~Qt4BuildConfiguration();
ProjectExplorer::NamedWidget *createConfigWidget();
- QString buildDirectory() const;
- QString rawBuildDirectory() const;
bool isShadowBuild() const;
- void setBuildDirectory(const QString &dir);
void setSubNodeBuild(Qt4ProjectManager::Qt4ProFileNode *node);
Qt4ProjectManager::Qt4ProFileNode *subNodeBuild() const;
@@ -136,6 +135,7 @@ protected:
private:
void ctor();
QString defaultShadowBuildDirectory() const;
+ void setBuildDirectory(const Utils::FileName &directory);
class LastKitState
{
@@ -155,11 +155,12 @@ private:
bool m_shadowBuild;
bool m_isEnabled;
QString m_buildDirectory;
- QString m_lastEmmitedBuildDirectory;
bool m_qtVersionSupportsShadowBuilds;
QtSupport::BaseQtVersion::QmakeBuildConfigs m_qmakeBuildConfiguration;
Qt4ProjectManager::Qt4ProFileNode *m_subNodeBuild;
ProjectExplorer::FileNode *m_fileNodeBuild;
+
+ friend class Internal::Qt4ProjectConfigWidget;
};
class QT4PROJECTMANAGER_EXPORT Qt4BuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory
diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 805ea32ae4..be3c7b4a21 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -2246,7 +2246,7 @@ QString Qt4ProFileNode::buildDir(Qt4BuildConfiguration *bc) const
bc = static_cast<Qt4BuildConfiguration *>(m_project->activeTarget()->activeBuildConfiguration());
if (!bc)
return QString();
- return QDir::cleanPath(QDir(bc->buildDirectory()).absoluteFilePath(relativeDir));
+ return QDir::cleanPath(QDir(bc->buildDirectory().toString()).absoluteFilePath(relativeDir));
}
QString Qt4ProFileNode::uiDirectory() const
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 0f862c329c..1468354cda 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -67,9 +67,11 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4BuildConfiguration *bc)
m_ui->shadowBuildDirEdit->setPromptDialogTitle(tr("Shadow Build Directory"));
m_ui->shadowBuildDirEdit->setExpectedKind(Utils::PathChooser::ExistingDirectory);
+ m_ui->shadowBuildDirEdit->setEnvironment(bc->environment());
+ m_ui->shadowBuildDirEdit->setBaseDirectory(bc->target()->project()->projectDirectory());
bool isShadowBuild = bc->isShadowBuild();
if (isShadowBuild) {
- m_ui->shadowBuildDirEdit->setPath(bc->rawBuildDirectory());
+ m_ui->shadowBuildDirEdit->setPath(bc->rawBuildDirectory().toString());
m_ui->inSourceBuildDirEdit->setVisible(false);
} else {
m_ui->shadowBuildDirEdit->setPath(m_defaultShadowBuildDir);
@@ -97,15 +99,11 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4BuildConfiguration *bc)
connect(bc->target(), SIGNAL(kitChanged()), this, SLOT(updateProblemLabel()));
- m_ui->shadowBuildDirEdit->setEnvironment(m_buildConfiguration->environment());
-
connect(m_buildConfiguration, SIGNAL(buildDirectoryChanged()),
this, SLOT(buildDirectoryChanged()));
connect(m_buildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()),
this, SLOT(updateProblemLabel()));
- m_ui->shadowBuildDirEdit->setBaseDirectory(m_buildConfiguration->target()->project()->projectDirectory());
-
setDisplayName(tr("General"));
updateDetails();
@@ -121,7 +119,7 @@ void Qt4ProjectConfigWidget::updateDetails()
{
m_detailsContainer->setSummaryText(
tr("building in <b>%1</b>")
- .arg(QDir::toNativeSeparators(m_buildConfiguration->buildDirectory())));
+ .arg(m_buildConfiguration->buildDirectory().toUserOutput()));
}
void Qt4ProjectConfigWidget::setProblemLabel(const QString &text)
@@ -148,7 +146,7 @@ void Qt4ProjectConfigWidget::buildDirectoryChanged()
m_ui->shadowBuildDirEdit->setEnabled(shadowBuild);
m_browseButton->setEnabled(shadowBuild);
- m_ui->shadowBuildDirEdit->setPath(m_buildConfiguration->rawBuildDirectory());
+ m_ui->shadowBuildDirEdit->setPath(m_buildConfiguration->rawBuildDirectory().toString());
updateDetails();
updateProblemLabel();
@@ -171,9 +169,9 @@ void Qt4ProjectConfigWidget::shadowBuildClicked(bool checked)
m_ignoreChange = true;
if (checked)
- m_buildConfiguration->setBuildDirectory(m_ui->shadowBuildDirEdit->rawPath());
+ m_buildConfiguration->setBuildDirectory(Utils::FileName::fromString(m_ui->shadowBuildDirEdit->rawPath()));
else
- m_buildConfiguration->setBuildDirectory(m_ui->inSourceBuildDirEdit->rawPath());
+ m_buildConfiguration->setBuildDirectory(Utils::FileName::fromString(m_ui->inSourceBuildDirEdit->rawPath()));
m_ignoreChange = false;
updateDetails();
@@ -182,11 +180,11 @@ void Qt4ProjectConfigWidget::shadowBuildClicked(bool checked)
void Qt4ProjectConfigWidget::shadowBuildEdited()
{
- if (m_buildConfiguration->rawBuildDirectory() == m_ui->shadowBuildDirEdit->rawPath())
+ if (m_buildConfiguration->rawBuildDirectory().toString() == m_ui->shadowBuildDirEdit->rawPath())
return;
m_ignoreChange = true;
- m_buildConfiguration->setBuildDirectory(m_ui->shadowBuildDirEdit->rawPath());
+ m_buildConfiguration->setBuildDirectory(Utils::FileName::fromString(m_ui->shadowBuildDirEdit->rawPath()));
m_ignoreChange = false;
}
@@ -214,7 +212,7 @@ void Qt4ProjectConfigWidget::updateProblemLabel()
bool allGood = false;
// we only show if we actually have a qmake and makestep
if (m_buildConfiguration->qmakeStep() && m_buildConfiguration->makeStep()) {
- QString makefile = m_buildConfiguration->buildDirectory() + QLatin1Char('/');
+ QString makefile = m_buildConfiguration->buildDirectory().toString() + QLatin1Char('/');
if (m_buildConfiguration->makefile().isEmpty())
makefile.append(QLatin1String("Makefile"));
else
@@ -246,7 +244,7 @@ void Qt4ProjectConfigWidget::updateProblemLabel()
if (allGood) {
QString buildDirectory = m_buildConfiguration->target()->project()->projectDirectory();;
if (m_buildConfiguration->isShadowBuild())
- buildDirectory = m_buildConfiguration->buildDirectory();
+ buildDirectory = m_buildConfiguration->buildDirectory().toString();
QList<ProjectExplorer::Task> issues;
issues = version->reportIssues(proFileName, buildDirectory);
qSort(issues);
@@ -278,12 +276,12 @@ void Qt4ProjectConfigWidget::updateProblemLabel()
} else if (targetMismatch) {
setProblemLabel(shadowBuildWarning + tr("A build for a different project exists in %1, which will be overwritten.",
"%1 build directory")
- .arg(QDir::toNativeSeparators(m_buildConfiguration->buildDirectory())));
+ .arg(m_buildConfiguration->buildDirectory().toUserOutput()));
return;
} else if (incompatibleBuild) {
setProblemLabel(shadowBuildWarning +tr("An incompatible build exists in %1, which will be overwritten.",
"%1 build directory")
- .arg(QDir::toNativeSeparators(m_buildConfiguration->buildDirectory())));
+ .arg(m_buildConfiguration->buildDirectory().toUserOutput()));
return;
} else if (!shadowBuildWarning.isEmpty()) {
setProblemLabel(shadowBuildWarning);
diff --git a/src/plugins/remotelinux/abstractpackagingstep.cpp b/src/plugins/remotelinux/abstractpackagingstep.cpp
index 05612e0ccf..ee3952747a 100644
--- a/src/plugins/remotelinux/abstractpackagingstep.cpp
+++ b/src/plugins/remotelinux/abstractpackagingstep.cpp
@@ -117,7 +117,7 @@ QString AbstractPackagingStep::cachedPackageDirectory() const
QString AbstractPackagingStep::packageDirectory() const
{
return d->currentBuildConfiguration
- ? d->currentBuildConfiguration->buildDirectory() : QString();
+ ? d->currentBuildConfiguration->buildDirectory().toString() : QString();
}
bool AbstractPackagingStep::isPackagingNeeded() const
diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
index 8448103e58..9e53238bd3 100644
--- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
@@ -111,7 +111,7 @@ DebuggerStartParameters LinuxDeviceDebugSupport::startParameters(const RemoteLin
if (const Project *project = target->project()) {
params.projectSourceDirectory = project->projectDirectory();
if (const BuildConfiguration *buildConfig = target->activeBuildConfiguration())
- params.projectBuildDirectory = buildConfig->buildDirectory();
+ params.projectBuildDirectory = buildConfig->buildDirectory().toString();
params.projectSourceFiles = project->files(Project::ExcludeGeneratedFiles);
}
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index 2eb6f8f2a3..873840b079 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -145,7 +145,7 @@ bool MemcheckErrorFilterProxyModel::filterAcceptsRow(int sourceRow, const QModel
validFolders << project->projectDirectory();
foreach (Target *target, project->targets()) {
foreach (BuildConfiguration *config, target->buildConfigurations())
- validFolders << config->buildDirectory();
+ validFolders << config->buildDirectory().toString();
}
}