diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-01-29 13:38:41 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-02-02 07:18:20 +0000 |
commit | ef9ac8f2f43af1effacb985dc6c4eff6cf742985 (patch) | |
tree | 541edfdc413bd19df8bd3f9c0ce37c6e766e2048 | |
parent | 09f8bd3ac0dca7e20be0f17f95df37bdc1211536 (diff) |
QmlProject: Add support for setting the environment
This allows setting arbitrary environment variables
in the .qmlproject.
This is required for example qtquickcontrols2.conf
and QT_AUTO_SCREEN_SCALE_FACTOR.
Task-number: QTCREATORBUG-19513
Change-Id: I8421a9fc7f85d24b3564f1b60f383be3838f2af4
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
7 files changed, 43 insertions, 0 deletions
diff --git a/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes b/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes index 70003d049f..4f914d4598 100644 --- a/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes +++ b/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes @@ -70,4 +70,7 @@ Module { ] Property { name: "filter"; type: "string" } } + Component { + name: "Environment" + } } diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp index 6154ecd3d7..01054df127 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp @@ -127,6 +127,13 @@ QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FileName &fi OtherFileFilterItem *otherFileFilterItem = new OtherFileFilterItem(projectItem); setupFileFilterItem(otherFileFilterItem, childNode); projectItem->appendContent(otherFileFilterItem); + } else if (childNode->name() == "Environment") { + const auto properties = childNode->properties(); + auto i = properties.constBegin(); + while (i != properties.constEnd()) { + projectItem->addToEnviroment(i.key(), i.value().toString()); + ++i; + } } else { qWarning() << "Unknown type:" << childNode->name(); } diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp index 8e9e99475f..b462bf48b8 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp @@ -106,4 +106,14 @@ bool QmlProjectItem::matchesFile(const QString &filePath) const return false; } +QList<Utils::EnvironmentItem> QmlProjectItem::environment() const +{ + return m_environment; +} + +void QmlProjectItem::addToEnviroment(const QString &key, const QString &value) +{ + m_environment.append(Utils::EnvironmentItem(key, value)); +} + } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h index 757e571468..e3c65e7ef1 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h @@ -25,6 +25,8 @@ #pragma once +#include <utils/environment.h> + #include <QObject> #include <QSet> #include <QStringList> @@ -60,6 +62,9 @@ public: void appendContent(QmlProjectContentItem *item) { m_content.append(item); } + QList<Utils::EnvironmentItem> environment() const; + void addToEnviroment(const QString &key, const QString &value); + signals: void qmlFilesChanged(const QSet<QString> &, const QSet<QString> &); @@ -69,6 +74,7 @@ protected: QStringList m_importPaths; QStringList m_absoluteImportPaths; QString m_mainFile; + QList<Utils::EnvironmentItem> m_environment; QList<QmlProjectContentItem *> m_content; // content property }; diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index 2f9ab498da..471ef4a13b 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -213,6 +213,13 @@ Utils::FileName QmlProject::targetFile(const Utils::FileName &sourceFile, return Utils::FileName::fromString(QDir::cleanPath(targetDir.absoluteFilePath(relative))); } +QList<Utils::EnvironmentItem> QmlProject::environment() const +{ + if (m_projectItem) + return m_projectItem.data()->environment(); + return {}; +} + bool QmlProject::validProjectFile() const { return !m_projectItem.isNull(); diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index c1b667d21a..4ecd7b226e 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -30,6 +30,8 @@ #include <projectexplorer/project.h> +#include <utils/environment.h> + #include <QPointer> namespace ProjectExplorer { class RunConfiguration; } @@ -65,6 +67,8 @@ public: Utils::FileName targetDirectory(const ProjectExplorer::Target *target) const; Utils::FileName targetFile(const Utils::FileName &sourceFile, const ProjectExplorer::Target *target) const; + + QList<Utils::EnvironmentItem> environment() const; QStringList customImportPaths() const; bool addFiles(const QStringList &filePaths); diff --git a/src/plugins/qmlprojectmanager/qmlprojectenvironmentaspect.cpp b/src/plugins/qmlprojectmanager/qmlprojectenvironmentaspect.cpp index 626c889551..5cc6fe9988 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectenvironmentaspect.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectenvironmentaspect.cpp @@ -25,6 +25,8 @@ #include "qmlprojectenvironmentaspect.h" +#include "qmlproject.h" + #include <projectexplorer/target.h> #include <projectexplorer/kit.h> #include <utils/qtcassert.h> @@ -57,6 +59,10 @@ Utils::Environment QmlProjectEnvironmentAspect::baseEnvironment() const if (base == static_cast<int>(KitEnvironmentBase)) runConfiguration()->target()->kit()->addToEnvironment(env); + QmlProject *project = qobject_cast<QmlProject *>(runConfiguration()->target()->project()); + if (project) + env.modify(project->environment()); + return env; } |