forked from qt-creator/qt-creator
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:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user