forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -149,7 +149,7 @@ QString AndroidManager::activityName(ProjectExplorer::Target *target)
|
|||||||
int AndroidManager::minimumSDK(ProjectExplorer::Target *target)
|
int AndroidManager::minimumSDK(ProjectExplorer::Target *target)
|
||||||
{
|
{
|
||||||
QDomDocument doc;
|
QDomDocument doc;
|
||||||
if (!openManifest(target, doc))
|
if (!openXmlFile(doc, AndroidManager::manifestSourcePath(target)))
|
||||||
return 0;
|
return 0;
|
||||||
QDomElement manifestElem = doc.documentElement();
|
QDomElement manifestElem = doc.documentElement();
|
||||||
QDomElement usesSdk = manifestElem.firstChildElement(QLatin1String("uses-sdk"));
|
QDomElement usesSdk = manifestElem.firstChildElement(QLatin1String("uses-sdk"));
|
||||||
@@ -192,7 +192,18 @@ QString AndroidManager::targetArch(ProjectExplorer::Target *target)
|
|||||||
|
|
||||||
Utils::FileName AndroidManager::dirPath(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)
|
Utils::FileName AndroidManager::manifestPath(ProjectExplorer::Target *target)
|
||||||
|
@@ -77,6 +77,7 @@ public:
|
|||||||
|
|
||||||
static Utils::FileName dirPath(ProjectExplorer::Target *target);
|
static Utils::FileName dirPath(ProjectExplorer::Target *target);
|
||||||
static Utils::FileName manifestPath(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 libsPath(ProjectExplorer::Target *target);
|
||||||
static Utils::FileName defaultPropertiesPath(ProjectExplorer::Target *target);
|
static Utils::FileName defaultPropertiesPath(ProjectExplorer::Target *target);
|
||||||
|
|
||||||
|
@@ -51,7 +51,9 @@ AndroidManifestDocument::AndroidManifestDocument(AndroidManifestEditorWidget *ed
|
|||||||
bool AndroidManifestDocument::save(QString *errorString, const QString &fileName, bool autoSave)
|
bool AndroidManifestDocument::save(QString *errorString, const QString &fileName, bool autoSave)
|
||||||
{
|
{
|
||||||
m_editorWidget->preSave();
|
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
|
QString AndroidManifestDocument::defaultPath() const
|
||||||
|
@@ -617,6 +617,16 @@ void AndroidManifestEditorWidget::preSave()
|
|||||||
updateInfoBar();
|
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
|
Core::IEditor *AndroidManifestEditorWidget::editor() const
|
||||||
{
|
{
|
||||||
return m_editor;
|
return m_editor;
|
||||||
|
@@ -105,6 +105,7 @@ public:
|
|||||||
bool setActivePage(EditorPage page);
|
bool setActivePage(EditorPage page);
|
||||||
|
|
||||||
void preSave();
|
void preSave();
|
||||||
|
void postSave();
|
||||||
|
|
||||||
Core::IEditor *editor() const;
|
Core::IEditor *editor() const;
|
||||||
TextEditor::TextEditorWidget *textEditorWidget() const;
|
TextEditor::TextEditorWidget *textEditorWidget() const;
|
||||||
|
@@ -66,7 +66,8 @@ public:
|
|||||||
virtual Utils::FileName apkPath(ProjectExplorer::Target *target) const;
|
virtual Utils::FileName apkPath(ProjectExplorer::Target *target) const;
|
||||||
virtual Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const = 0;
|
virtual Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const = 0;
|
||||||
virtual Utils::FileName androiddeployJsonPath(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
|
} // namespace Android
|
||||||
|
@@ -103,24 +103,10 @@ QList<Abi> AndroidQtVersion::detectQtAbis() const
|
|||||||
|
|
||||||
void AndroidQtVersion::addToEnvironment(const Kit *k, Utils::Environment &env) 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)
|
// 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_HOST"), AndroidConfigurations::currentConfig().toolchainHost());
|
||||||
env.set(QLatin1String("ANDROID_NDK_ROOT"), AndroidConfigurations::currentConfig().ndkLocation().toUserOutput());
|
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
|
Utils::Environment AndroidQtVersion::qmakeRunEnvironment() const
|
||||||
|
@@ -235,6 +235,7 @@ Utils::Environment BuildConfiguration::baseEnvironment() const
|
|||||||
if (useSystemEnvironment())
|
if (useSystemEnvironment())
|
||||||
result = Utils::Environment::systemEnvironment();
|
result = Utils::Environment::systemEnvironment();
|
||||||
target()->kit()->addToEnvironment(result);
|
target()->kit()->addToEnvironment(result);
|
||||||
|
addToEnvironment(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,6 +260,11 @@ void BuildConfiguration::setUseSystemEnvironment(bool b)
|
|||||||
emitEnvironmentChanged();
|
emitEnvironmentChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(env);
|
||||||
|
}
|
||||||
|
|
||||||
bool BuildConfiguration::useSystemEnvironment() const
|
bool BuildConfiguration::useSystemEnvironment() const
|
||||||
{
|
{
|
||||||
return !m_clearSystemEnvironment;
|
return !m_clearSystemEnvironment;
|
||||||
@@ -314,10 +320,22 @@ IBuildConfigurationFactory::~IBuildConfigurationFactory()
|
|||||||
// restore
|
// restore
|
||||||
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, const QVariantMap &map)
|
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, const QVariantMap &map)
|
||||||
{
|
{
|
||||||
return ExtensionSystem::PluginManager::getObject<IBuildConfigurationFactory>(
|
QList<IBuildConfigurationFactory *> factories
|
||||||
[&parent, map](IBuildConfigurationFactory *factory) {
|
= ExtensionSystem::PluginManager::getObjects<IBuildConfigurationFactory>(
|
||||||
return factory->canRestore(parent, map);
|
[&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
|
// setup
|
||||||
@@ -357,9 +375,21 @@ IBuildConfigurationFactory * IBuildConfigurationFactory::find(Target *parent)
|
|||||||
// clone
|
// clone
|
||||||
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, BuildConfiguration *bc)
|
IBuildConfigurationFactory *IBuildConfigurationFactory::find(Target *parent, BuildConfiguration *bc)
|
||||||
{
|
{
|
||||||
return ExtensionSystem::PluginManager::getObject<IBuildConfigurationFactory>(
|
QList<IBuildConfigurationFactory *> factories
|
||||||
[&parent, &bc](IBuildConfigurationFactory *factory) {
|
= ExtensionSystem::PluginManager::getObjects<IBuildConfigurationFactory>(
|
||||||
return factory->canClone(parent, bc);
|
[&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
|
} // namespace ProjectExplorer
|
||||||
|
@@ -70,6 +70,8 @@ public:
|
|||||||
bool useSystemEnvironment() const;
|
bool useSystemEnvironment() const;
|
||||||
void setUseSystemEnvironment(bool b);
|
void setUseSystemEnvironment(bool b);
|
||||||
|
|
||||||
|
virtual void addToEnvironment(Utils::Environment &env) const;
|
||||||
|
|
||||||
QList<Core::Id> knownStepLists() const;
|
QList<Core::Id> knownStepLists() const;
|
||||||
BuildStepList *stepList(Core::Id id) const;
|
BuildStepList *stepList(Core::Id id) const;
|
||||||
|
|
||||||
@@ -100,13 +102,13 @@ protected:
|
|||||||
|
|
||||||
virtual void setBuildDirectory(const Utils::FileName &dir);
|
virtual void setBuildDirectory(const Utils::FileName &dir);
|
||||||
void cloneSteps(BuildConfiguration *source);
|
void cloneSteps(BuildConfiguration *source);
|
||||||
|
void emitEnvironmentChanged();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleKitUpdate();
|
void handleKitUpdate();
|
||||||
void emitBuildDirectoryChanged();
|
void emitBuildDirectoryChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void emitEnvironmentChanged();
|
|
||||||
void ctor();
|
void ctor();
|
||||||
|
|
||||||
bool m_clearSystemEnvironment;
|
bool m_clearSystemEnvironment;
|
||||||
|
@@ -33,9 +33,12 @@
|
|||||||
#include "androidpackageinstallationstep.h"
|
#include "androidpackageinstallationstep.h"
|
||||||
|
|
||||||
#include <android/androidmanager.h>
|
#include <android/androidmanager.h>
|
||||||
|
#include <android/androidconfigurations.h>
|
||||||
#include <projectexplorer/buildsteplist.h>
|
#include <projectexplorer/buildsteplist.h>
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
|
|
||||||
|
#include <qmakeprojectmanager/qmakebuildinfo.h>
|
||||||
|
|
||||||
using namespace QmakeAndroidSupport::Internal;
|
using namespace QmakeAndroidSupport::Internal;
|
||||||
|
|
||||||
int AndroidQmakeBuildConfigurationFactory::priority(const ProjectExplorer::Kit *k, const QString &projectPath) const
|
int AndroidQmakeBuildConfigurationFactory::priority(const ProjectExplorer::Kit *k, const QString &projectPath) const
|
||||||
@@ -54,17 +57,59 @@ int AndroidQmakeBuildConfigurationFactory::priority(const ProjectExplorer::Targe
|
|||||||
return -1;
|
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));
|
ProjectExplorer::BuildStepList *buildSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
|
||||||
buildSteps->insertStep(2, new AndroidPackageInstallationStep(buildSteps));
|
buildSteps->insertStep(2, new AndroidPackageInstallationStep(buildSteps));
|
||||||
buildSteps->insertStep(3, new QmakeAndroidBuildApkStep(buildSteps));
|
buildSteps->insertStep(3, new QmakeAndroidBuildApkStep(buildSteps));
|
||||||
|
|
||||||
return bc;
|
return bc;
|
||||||
}
|
}
|
||||||
|
|
||||||
// should the buildconfiguration have its own id?
|
ProjectExplorer::BuildConfiguration *AndroidQmakeBuildConfigurationFactory::clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source)
|
||||||
// and implement restore/clone then?
|
{
|
||||||
|
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())));
|
||||||
|
}
|
||||||
|
@@ -48,8 +48,21 @@ public:
|
|||||||
|
|
||||||
ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
|
ProjectExplorer::BuildConfiguration *create(ProjectExplorer::Target *parent,
|
||||||
const ProjectExplorer::BuildInfo *info) const;
|
const ProjectExplorer::BuildInfo *info) const;
|
||||||
// The clone and restore from QmakeBuildConfigurationFactory
|
ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source);
|
||||||
// work for us too.
|
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
|
} // namespace Internal
|
||||||
|
@@ -31,6 +31,8 @@
|
|||||||
#include "androidpackageinstallationstep.h"
|
#include "androidpackageinstallationstep.h"
|
||||||
#include "qmakeandroidbuildapkstep.h"
|
#include "qmakeandroidbuildapkstep.h"
|
||||||
#include "qmakeandroidsupport.h"
|
#include "qmakeandroidsupport.h"
|
||||||
|
#include "androidqmakebuildconfigurationfactory.h"
|
||||||
|
#include "qmakeandroidrunconfiguration.h"
|
||||||
|
|
||||||
#include <android/androidconstants.h>
|
#include <android/androidconstants.h>
|
||||||
#include <android/androidglobal.h>
|
#include <android/androidglobal.h>
|
||||||
@@ -131,27 +133,42 @@ Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(ProjectExplorer::Targ
|
|||||||
return Utils::FileName::fromString(inputFile);
|
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());
|
ProjectExplorer::BuildConfiguration *bc = target->activeBuildConfiguration();
|
||||||
if (!bc)
|
if (auto qbc = qobject_cast<AndroidQmakeBuildConfiguration *>(bc)) {
|
||||||
return;
|
qbc->emitEnvironmentChanged();
|
||||||
|
|
||||||
QMakeStep *qs = bc->qmakeStep();
|
QMakeStep *qs = qbc->qmakeStep();
|
||||||
if (!qs)
|
if (!qs)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
qs->setForced(true);
|
qs->setForced(true);
|
||||||
|
|
||||||
ProjectExplorer::BuildManager::buildList(bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN),
|
ProjectExplorer::BuildManager::buildList(bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN),
|
||||||
ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
||||||
ProjectExplorer::BuildManager::appendStep(qs, ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
ProjectExplorer::BuildManager::appendStep(qs, ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
||||||
bc->setSubNodeBuild(0);
|
qbc->setSubNodeBuild(0);
|
||||||
// Make the buildconfiguration emit a evironmentChanged() signal
|
}
|
||||||
// TODO find a better way
|
}
|
||||||
bool use = bc->useSystemEnvironment();
|
|
||||||
bc->setUseSystemEnvironment(!use);
|
Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::Target *target)
|
||||||
bc->setUseSystemEnvironment(use);
|
{
|
||||||
|
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
|
} // namespace Internal
|
||||||
|
@@ -47,7 +47,8 @@ public:
|
|||||||
Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const;
|
Utils::FileName androiddeployqtPath(ProjectExplorer::Target *target) const;
|
||||||
Utils::FileName androiddeployJsonPath(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
|
} // namespace Internal
|
||||||
|
@@ -699,16 +699,11 @@ QList<BuildInfo *> QmakeBuildConfigurationFactory::availableSetups(const Kit *k,
|
|||||||
return result;
|
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());
|
BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(parent->kit());
|
||||||
QTC_ASSERT(version, return 0);
|
|
||||||
|
|
||||||
BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
|
BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
|
||||||
if (qmakeInfo->type == BuildConfiguration::Release)
|
if (qmakeInfo->type == BuildConfiguration::Release)
|
||||||
@@ -716,9 +711,8 @@ BuildConfiguration *QmakeBuildConfigurationFactory::create(Target *parent, const
|
|||||||
else
|
else
|
||||||
config |= QtSupport::BaseQtVersion::DebugBuild;
|
config |= QtSupport::BaseQtVersion::DebugBuild;
|
||||||
|
|
||||||
QmakeBuildConfiguration *bc = new QmakeBuildConfiguration(parent);
|
bc->setDefaultDisplayName(qmakeInfo->displayName);
|
||||||
bc->setDefaultDisplayName(info->displayName);
|
bc->setDisplayName(qmakeInfo->displayName);
|
||||||
bc->setDisplayName(info->displayName);
|
|
||||||
|
|
||||||
BuildStepList *buildSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
|
BuildStepList *buildSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
|
||||||
BuildStepList *cleanSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
BuildStepList *cleanSteps = bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
||||||
@@ -751,10 +745,21 @@ BuildConfiguration *QmakeBuildConfigurationFactory::create(Target *parent, const
|
|||||||
if (directory.isEmpty()) {
|
if (directory.isEmpty()) {
|
||||||
directory = defaultBuildDirectory(qmakeInfo->supportsShadowBuild,
|
directory = defaultBuildDirectory(qmakeInfo->supportsShadowBuild,
|
||||||
parent->project()->projectFilePath().toString(),
|
parent->project()->projectFilePath().toString(),
|
||||||
parent->kit(), info->displayName);
|
parent->kit(), qmakeInfo->displayName);
|
||||||
}
|
}
|
||||||
|
|
||||||
bc->setBuildDirectory(directory);
|
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;
|
return bc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -129,11 +129,11 @@ protected:
|
|||||||
QmakeBuildConfiguration(ProjectExplorer::Target *target, QmakeBuildConfiguration *source);
|
QmakeBuildConfiguration(ProjectExplorer::Target *target, QmakeBuildConfiguration *source);
|
||||||
QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
|
QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
|
||||||
virtual bool fromMap(const QVariantMap &map);
|
virtual bool fromMap(const QVariantMap &map);
|
||||||
|
void setBuildDirectory(const Utils::FileName &directory);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ctor();
|
void ctor();
|
||||||
QString defaultShadowBuildDirectory() const;
|
QString defaultShadowBuildDirectory() const;
|
||||||
void setBuildDirectory(const Utils::FileName &directory);
|
|
||||||
void updateShadowBuild();
|
void updateShadowBuild();
|
||||||
|
|
||||||
class LastKitState
|
class LastKitState
|
||||||
@@ -182,6 +182,8 @@ public:
|
|||||||
ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source);
|
ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source);
|
||||||
bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const;
|
bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const;
|
||||||
ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
|
ProjectExplorer::BuildConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
|
||||||
|
protected:
|
||||||
|
void configureBuildConfiguration(ProjectExplorer::Target *parent, QmakeBuildConfiguration *bc, const QmakeBuildInfo *info) const;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void update();
|
void update();
|
||||||
|
Reference in New Issue
Block a user