summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Teske <daniel.teske@theqtcompany.com>2015-01-27 18:46:40 +0100
committerDaniel Teske <daniel.teske@theqtcompany.com>2015-02-13 15:35:35 +0000
commite7b90b8681f68a889f2da601b42b001111aaef43 (patch)
tree227fe1d655553ada4cfe7cca48852a27d6932a93
parent5442d144b65efd873e851f540512c2c19c010cba (diff)
downloadqt-creator-e7b90b8681f68a889f2da601b42b001111aaef43.tar.gz
Android: Set correct ANDROID_NDK_PLATFORM
Introduce the class AndroidQmakeBuildConfiguration whose purpose is to set the environment variable. Modify the Factory to create buildconfigurations of that type and fix restore/clone to also take the factories' priorities into account. Change-Id: Icb377fa9211cd3564c36b60cf7c5f7dd84fcab50 Reviewed-by: BogDan Vatra <bogdan@kde.org>
-rw-r--r--src/plugins/android/androidmanager.cpp15
-rw-r--r--src/plugins/android/androidmanager.h1
-rw-r--r--src/plugins/android/androidmanifestdocument.cpp4
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.cpp10
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.h1
-rw-r--r--src/plugins/android/androidqtsupport.h3
-rw-r--r--src/plugins/android/androidqtversion.cpp16
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp46
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h4
-rw-r--r--src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp55
-rw-r--r--src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h17
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp57
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupport.h3
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp29
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h4
15 files changed, 196 insertions, 69 deletions
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index c80f56d5ed..b5ad731b66 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -149,7 +149,7 @@ QString AndroidManager::activityName(ProjectExplorer::Target *target)
int AndroidManager::minimumSDK(ProjectExplorer::Target *target)
{
QDomDocument doc;
- if (!openManifest(target, doc))
+ if (!openXmlFile(doc, AndroidManager::manifestSourcePath(target)))
return 0;
QDomElement manifestElem = doc.documentElement();
QDomElement usesSdk = manifestElem.firstChildElement(QLatin1String("uses-sdk"));
@@ -192,7 +192,18 @@ QString AndroidManager::targetArch(ProjectExplorer::Target *target)
Utils::FileName AndroidManager::dirPath(ProjectExplorer::Target *target)
{
- return target->activeBuildConfiguration()->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY));
+ if (target->activeBuildConfiguration())
+ return target->activeBuildConfiguration()->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY));
+ return Utils::FileName();
+}
+
+Utils::FileName AndroidManager::manifestSourcePath(ProjectExplorer::Target *target)
+{
+ AndroidQtSupport *androidQtSupport = AndroidManager::androidQtSupport(target);
+ Utils::FileName source = androidQtSupport->manifestSourcePath(target);
+ if (!source.isEmpty())
+ return source;
+ return manifestPath(target);
}
Utils::FileName AndroidManager::manifestPath(ProjectExplorer::Target *target)
diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h
index 17b11f9013..acb81dfafd 100644
--- a/src/plugins/android/androidmanager.h
+++ b/src/plugins/android/androidmanager.h
@@ -77,6 +77,7 @@ public:
static Utils::FileName dirPath(ProjectExplorer::Target *target);
static Utils::FileName manifestPath(ProjectExplorer::Target *target);
+ static Utils::FileName manifestSourcePath(ProjectExplorer::Target *target);
static Utils::FileName libsPath(ProjectExplorer::Target *target);
static Utils::FileName defaultPropertiesPath(ProjectExplorer::Target *target);
diff --git a/src/plugins/android/androidmanifestdocument.cpp b/src/plugins/android/androidmanifestdocument.cpp
index 64696959d8..cce32f2edf 100644
--- a/src/plugins/android/androidmanifestdocument.cpp
+++ b/src/plugins/android/androidmanifestdocument.cpp
@@ -51,7 +51,9 @@ AndroidManifestDocument::AndroidManifestDocument(AndroidManifestEditorWidget *ed
bool AndroidManifestDocument::save(QString *errorString, const QString &fileName, bool autoSave)
{
m_editorWidget->preSave();
- return TextDocument::save(errorString, fileName, autoSave);
+ bool result = TextDocument::save(errorString, fileName, autoSave);
+ m_editorWidget->postSave();
+ return result;
}
QString AndroidManifestDocument::defaultPath() const
diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp
index c74513919d..1d4a138a05 100644
--- a/src/plugins/android/androidmanifesteditorwidget.cpp
+++ b/src/plugins/android/androidmanifesteditorwidget.cpp
@@ -617,6 +617,16 @@ void AndroidManifestEditorWidget::preSave()
updateInfoBar();
}
+void AndroidManifestEditorWidget::postSave()
+{
+ const QString docPath(m_textEditorWidget->textDocument()->filePath().toString());
+ ProjectExplorer::Project *project = androidProject(docPath);
+ if (Target *target = project->activeTarget()) {
+ AndroidQtSupport *androidQtSupport = AndroidManager::androidQtSupport(target);
+ androidQtSupport->manifestSaved(target);
+ }
+}
+
Core::IEditor *AndroidManifestEditorWidget::editor() const
{
return m_editor;
diff --git a/src/plugins/android/androidmanifesteditorwidget.h b/src/plugins/android/androidmanifesteditorwidget.h
index fcce653d05..2d0ebdf1ac 100644
--- a/src/plugins/android/androidmanifesteditorwidget.h
+++ b/src/plugins/android/androidmanifesteditorwidget.h
@@ -105,6 +105,7 @@ public:
bool setActivePage(EditorPage page);
void preSave();
+ void postSave();
Core::IEditor *editor() const;
TextEditor::TextEditorWidget *textEditorWidget() const;
diff --git a/src/plugins/android/androidqtsupport.h b/src/plugins/android/androidqtsupport.h
index b7ee4b52cd..013e28a3b2 100644
--- a/src/plugins/android/androidqtsupport.h
+++ b/src/plugins/android/androidqtsupport.h
@@ -66,7 +66,8 @@ public:
virtual Utils::FileName apkPath(ProjectExplorer::Target *target) const;
virtual Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const = 0;
virtual Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const = 0;
- virtual void resetBuild(const ProjectExplorer::Target *target) = 0;
+ virtual void manifestSaved(const ProjectExplorer::Target *target) = 0;
+ virtual Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) = 0;
};
} // namespace Android
diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp
index 45bc0549c2..c23f2e8d64 100644
--- a/src/plugins/android/androidqtversion.cpp
+++ b/src/plugins/android/androidqtversion.cpp
@@ -103,24 +103,10 @@ QList<Abi> AndroidQtVersion::detectQtAbis() const
void AndroidQtVersion::addToEnvironment(const Kit *k, Utils::Environment &env) const
{
+ Q_UNUSED(k);
// this env vars are used by qmake mkspecs to generate makefiles (check QTDIR/mkspecs/android-g++/qmake.conf for more info)
env.set(QLatin1String("ANDROID_NDK_HOST"), AndroidConfigurations::currentConfig().toolchainHost());
env.set(QLatin1String("ANDROID_NDK_ROOT"), AndroidConfigurations::currentConfig().ndkLocation().toUserOutput());
-
- Project *project = ProjectTree::currentProject();
- if (!project || !project->activeTarget()
- || QtSupport::QtKitInformation::qtVersion(k)->type() != QLatin1String(Constants::ANDROIDQT))
- return;
-
- Target *target = project->activeTarget();
- if (DeviceTypeKitInformation::deviceTypeId(target->kit()) != Constants::ANDROID_DEVICE_TYPE)
- return;
- if (AndroidConfigurations::currentConfig().ndkLocation().isEmpty()
- || AndroidConfigurations::currentConfig().sdkLocation().isEmpty())
- return;
-
- env.set(QLatin1String("ANDROID_NDK_PLATFORM"),
- AndroidConfigurations::currentConfig().bestNdkPlatformMatch(AndroidManager::minimumSDK(target)));
}
Utils::Environment AndroidQtVersion::qmakeRunEnvironment() const
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index 8c6817f653..12d293cdf6 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -235,6 +235,7 @@ Utils::Environment BuildConfiguration::baseEnvironment() const
if (useSystemEnvironment())
result = Utils::Environment::systemEnvironment();
target()->kit()->addToEnvironment(result);
+ addToEnvironment(result);
return result;
}
@@ -259,6 +260,11 @@ void BuildConfiguration::setUseSystemEnvironment(bool b)
emitEnvironmentChanged();
}
+void BuildConfiguration::addToEnvironment(Utils::Environment &env) const
+{
+ Q_UNUSED(env);
+}
+
bool BuildConfiguration::useSystemEnvironment() const
{
return !m_clearSystemEnvironment;
@@ -314,10 +320,22 @@ IBuildConfigurationFactory::~IBuildConfigurationFactory()
// restore
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, const QVariantMap &map)
{
- return ExtensionSystem::PluginManager::getObject<IBuildConfigurationFactory>(
- [&parent, map](IBuildConfigurationFactory *factory) {
- return factory->canRestore(parent, map);
- });
+ QList<IBuildConfigurationFactory *> factories
+ = ExtensionSystem::PluginManager::getObjects<IBuildConfigurationFactory>(
+ [&parent, map](IBuildConfigurationFactory *factory) {
+ return factory->canRestore(parent, map);
+ });
+
+ IBuildConfigurationFactory *factory = 0;
+ int priority = -1;
+ foreach (IBuildConfigurationFactory *i, factories) {
+ int iPriority = i->priority(parent);
+ if (iPriority > priority) {
+ factory = i;
+ priority = iPriority;
+ }
+ }
+ return factory;
}
// setup
@@ -357,9 +375,21 @@ IBuildConfigurationFactory * IBuildConfigurationFactory::find(Target *parent)
// clone
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, BuildConfiguration *bc)
{
- return ExtensionSystem::PluginManager::getObject<IBuildConfigurationFactory>(
- [&parent, &bc](IBuildConfigurationFactory *factory) {
- return factory->canClone(parent, bc);
- });
+ QList<IBuildConfigurationFactory *> factories
+ = ExtensionSystem::PluginManager::getObjects<IBuildConfigurationFactory>(
+ [&parent, &bc](IBuildConfigurationFactory *factory) {
+ return factory->canClone(parent, bc);
+ });
+
+ IBuildConfigurationFactory *factory = 0;
+ int priority = -1;
+ foreach (IBuildConfigurationFactory *i, factories) {
+ int iPriority = i->priority(parent);
+ if (iPriority > priority) {
+ factory = i;
+ priority = iPriority;
+ }
+ }
+ return factory;
}
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index fc3e2b7ec2..ebd5b5a389 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -70,6 +70,8 @@ public:
bool useSystemEnvironment() const;
void setUseSystemEnvironment(bool b);
+ virtual void addToEnvironment(Utils::Environment &env) const;
+
QList<Core::Id> knownStepLists() const;
BuildStepList *stepList(Core::Id id) const;
@@ -100,13 +102,13 @@ protected:
virtual void setBuildDirectory(const Utils::FileName &dir);
void cloneSteps(BuildConfiguration *source);
+ void emitEnvironmentChanged();
private slots:
void handleKitUpdate();
void emitBuildDirectoryChanged();
private:
- void emitEnvironmentChanged();
void ctor();
bool m_clearSystemEnvironment;
diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
index d1c599d83c..2e51d28720 100644
--- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
+++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
@@ -33,9 +33,12 @@
#include "androidpackageinstallationstep.h"
#include <android/androidmanager.h>
+#include <android/androidconfigurations.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
+#include <qmakeprojectmanager/qmakebuildinfo.h>
+
using namespace QmakeAndroidSupport::Internal;
int AndroidQmakeBuildConfigurationFactory::priority(const ProjectExplorer::Kit *k, const QString &projectPath) const
@@ -54,17 +57,59 @@ int AndroidQmakeBuildConfigurationFactory::priority(const ProjectExplorer::Targe
return -1;
}
-ProjectExplorer::BuildConfiguration *AndroidQmakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent, const ProjectExplorer::BuildInfo *info) const
+ProjectExplorer::BuildConfiguration *AndroidQmakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent,
+ const ProjectExplorer::BuildInfo *info) const
{
- ProjectExplorer::BuildConfiguration *bc = QmakeBuildConfigurationFactory::create(parent, info);
+ auto qmakeInfo = static_cast<const QmakeProjectManager::QmakeBuildInfo *>(info);
+ AndroidQmakeBuildConfiguration *bc = new AndroidQmakeBuildConfiguration(parent);
+ configureBuildConfiguration(parent, bc, qmakeInfo);
+
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
buildSteps->insertStep(2, new AndroidPackageInstallationStep(buildSteps));
buildSteps->insertStep(3, new QmakeAndroidBuildApkStep(buildSteps));
-
return bc;
}
-// should the buildconfiguration have its own id?
-// and implement restore/clone then?
+ProjectExplorer::BuildConfiguration *AndroidQmakeBuildConfigurationFactory::clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source)
+{
+ if (!canClone(parent, source))
+ return 0;
+ AndroidQmakeBuildConfiguration *oldbc(static_cast<AndroidQmakeBuildConfiguration *>(source));
+ return new AndroidQmakeBuildConfiguration(parent, oldbc);
+}
+
+ProjectExplorer::BuildConfiguration *AndroidQmakeBuildConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map)
+{
+ if (!canRestore(parent, map))
+ return 0;
+ AndroidQmakeBuildConfiguration *bc = new AndroidQmakeBuildConfiguration(parent);
+ if (bc->fromMap(map))
+ return bc;
+ delete bc;
+ return 0;
+}
+
+
+AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target)
+ : QmakeProjectManager::QmakeBuildConfiguration(target)
+{
+
+}
+
+AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, AndroidQmakeBuildConfiguration *source)
+ : QmakeProjectManager::QmakeBuildConfiguration(target, source)
+{
+}
+AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id)
+ : QmakeProjectManager::QmakeBuildConfiguration(target, id)
+{
+
+}
+
+void AndroidQmakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
+{
+ env.set(QLatin1String("ANDROID_NDK_PLATFORM"),
+ Android::AndroidConfigurations::currentConfig().bestNdkPlatformMatch(Android::AndroidManager::minimumSDK(target())));
+}
diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
index 0b917e6c5a..900a57855d 100644
--- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
+++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
@@ -48,8 +48,21 @@ public:
ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
const ProjectExplorer::BuildInfo *info) const;
- // The clone and restore from QmakeBuildConfigurationFactory
- // work for us too.
+ ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source);
+ ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
+};
+
+class AndroidQmakeBuildConfiguration : public QmakeProjectManager::QmakeBuildConfiguration
+{
+ friend class AndroidQmakeBuildConfigurationFactory;
+ Q_OBJECT
+public:
+ explicit AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target);
+ AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, AndroidQmakeBuildConfiguration *source);
+ AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
+ void addToEnvironment(Utils::Environment &env) const;
+
+ using BuildConfiguration::emitEnvironmentChanged;
};
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
index f81cae8de5..229dbb1254 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
@@ -31,6 +31,8 @@
#include "androidpackageinstallationstep.h"
#include "qmakeandroidbuildapkstep.h"
#include "qmakeandroidsupport.h"
+#include "androidqmakebuildconfigurationfactory.h"
+#include "qmakeandroidrunconfiguration.h"
#include <android/androidconstants.h>
#include <android/androidglobal.h>
@@ -131,27 +133,42 @@ Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(ProjectExplorer::Targ
return Utils::FileName::fromString(inputFile);
}
-void QmakeAndroidSupport::resetBuild(const ProjectExplorer::Target *target)
+void QmakeAndroidSupport::manifestSaved(const ProjectExplorer::Target *target)
{
- QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration*>(target->activeBuildConfiguration());
- if (!bc)
- return;
-
- QMakeStep *qs = bc->qmakeStep();
- if (!qs)
- return;
-
- qs->setForced(true);
-
- ProjectExplorer::BuildManager::buildList(bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN),
- ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
- ProjectExplorer::BuildManager::appendStep(qs, ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
- bc->setSubNodeBuild(0);
- // Make the buildconfiguration emit a evironmentChanged() signal
- // TODO find a better way
- bool use = bc->useSystemEnvironment();
- bc->setUseSystemEnvironment(!use);
- bc->setUseSystemEnvironment(use);
+ ProjectExplorer::BuildConfiguration *bc = target->activeBuildConfiguration();
+ if (auto qbc = qobject_cast<AndroidQmakeBuildConfiguration *>(bc)) {
+ qbc->emitEnvironmentChanged();
+
+ QMakeStep *qs = qbc->qmakeStep();
+ if (!qs)
+ return;
+
+ qs->setForced(true);
+
+ ProjectExplorer::BuildManager::buildList(bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN),
+ ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
+ ProjectExplorer::BuildManager::appendStep(qs, ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
+ qbc->setSubNodeBuild(0);
+ }
+}
+
+Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::Target *target)
+{
+ ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration();
+ if (auto qrc = qobject_cast<QmakeAndroidRunConfiguration *>(rc)) {
+ QString proFilePath = qrc->proFilePath();
+ const auto project = static_cast<QmakeProjectManager::QmakeProject *>(target->project());
+ const QmakeProFileNode *node = project->rootQmakeProjectNode()->findProFileFor(proFilePath);
+ if (node) {
+ QString packageSource = node->singleVariableValue(AndroidPackageSourceDir);
+ if (!packageSource.isEmpty()) {
+ Utils::FileName manifest = Utils::FileName::fromUserInput(packageSource + QLatin1String("/AndroidManifest.xml"));
+ if (manifest.exists())
+ return manifest;
+ }
+ }
+ }
+ return Utils::FileName();
}
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
index e274dd4a80..5c19c9498c 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
@@ -47,7 +47,8 @@ public:
Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const;
Utils::FileName androiddeployJsonPath(ProjectExplorer::Target *target) const;
- void resetBuild(const ProjectExplorer::Target *target);
+ void manifestSaved(const ProjectExplorer::Target *target);
+ Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target);
};
} // namespace Internal
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index 7cfc1964eb..2241309fda 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -699,16 +699,11 @@ QList<BuildInfo *> QmakeBuildConfigurationFactory::availableSetups(const Kit *k,
return result;
}
-BuildConfiguration *QmakeBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
+void QmakeBuildConfigurationFactory::configureBuildConfiguration(Target *parent,
+ QmakeBuildConfiguration *bc,
+ const QmakeBuildInfo *qmakeInfo) const
{
- QTC_ASSERT(info->factory() == this, return 0);
- QTC_ASSERT(info->kitId == parent->kit()->id(), return 0);
- QTC_ASSERT(!info->displayName.isEmpty(), return 0);
-
- const QmakeBuildInfo *qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
-
BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(parent->kit());
- QTC_ASSERT(version, return 0);
BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
if (qmakeInfo->type == BuildConfiguration::Release)
@@ -716,9 +711,8 @@ BuildConfiguration *QmakeBuildConfigurationFactory::create(Target *parent, const
else
config |= QtSupport::BaseQtVersion::DebugBuild;
- QmakeBuildConfiguration *bc = new QmakeBuildConfiguration(parent);
- bc->setDefaultDisplayName(info->displayName);
- bc->setDisplayName(info->displayName);
+ bc->setDefaultDisplayName(qmakeInfo->displayName);
+ bc->setDisplayName(qmakeInfo->displayName);
BuildStepList *buildSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
BuildStepList *cleanSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
@@ -751,10 +745,21 @@ BuildConfiguration *QmakeBuildConfigurationFactory::create(Target *parent, const
if (directory.isEmpty()) {
directory = defaultBuildDirectory(qmakeInfo->supportsShadowBuild,
parent->project()->projectFilePath().toString(),
- parent->kit(), info->displayName);
+ parent->kit(), qmakeInfo->displayName);
}
bc->setBuildDirectory(directory);
+}
+
+BuildConfiguration *QmakeBuildConfigurationFactory::create(Target *parent, const BuildInfo *info) const
+{
+ QTC_ASSERT(info->factory() == this, return 0);
+ QTC_ASSERT(info->kitId == parent->kit()->id(), return 0);
+ QTC_ASSERT(!info->displayName.isEmpty(), return 0);
+
+ const QmakeBuildInfo *qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
+ QmakeBuildConfiguration *bc = new QmakeBuildConfiguration(parent);
+ configureBuildConfiguration(parent, bc, qmakeInfo);
return bc;
}
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
index a5e290e71c..be178558f7 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
@@ -129,11 +129,11 @@ protected:
QmakeBuildConfiguration(ProjectExplorer::Target *target, QmakeBuildConfiguration *source);
QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
virtual bool fromMap(const QVariantMap &map);
+ void setBuildDirectory(const Utils::FileName &directory);
private:
void ctor();
QString defaultShadowBuildDirectory() const;
- void setBuildDirectory(const Utils::FileName &directory);
void updateShadowBuild();
class LastKitState
@@ -182,6 +182,8 @@ public:
ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source);
bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const;
ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
+protected:
+ void configureBuildConfiguration(ProjectExplorer::Target *parent, QmakeBuildConfiguration *bc, const QmakeBuildInfo *info) const;
private slots:
void update();