aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2018-01-29 13:38:41 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2018-02-02 07:18:20 +0000
commitef9ac8f2f43af1effacb985dc6c4eff6cf742985 (patch)
tree541edfdc413bd19df8bd3f9c0ce37c6e766e2048
parent09f8bd3ac0dca7e20be0f17f95df37bdc1211536 (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>
-rw-r--r--share/qtcreator/qml-type-descriptions/qmlproject.qmltypes3
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp7
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp10
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h6
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp7
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.h4
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectenvironmentaspect.cpp6
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;
}