From 28b99dafc6ac43308d2e735701f5afc21aa56426 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 24 Sep 2019 21:59:59 +0200 Subject: [PATCH 01/12] sdktool: Document WebAssembly types Task-number: QTBUG-74923 Task-number: QTBUG-72884 Change-Id: I4fef49123bc1f66f94d374572537cfa2b5ad9a3b Reviewed-by: Eike Ziller Reviewed-by: Leena Miettinen --- src/tools/sdktool/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/tools/sdktool/README.md b/src/tools/sdktool/README.md index 764fee53427..b77e531348e 100644 --- a/src/tools/sdktool/README.md +++ b/src/tools/sdktool/README.md @@ -84,6 +84,7 @@ Tricky parts: * `ProjectExplorer.ToolChain.Custom` for custom toolchain * `Qt4ProjectManager.ToolChain.Android` for the Android tool chain * `Qnx.QccToolChain` for the Qnx QCC tool chain + * `WebAssembly.ToolChain.Emscripten` for the Emscripten tool chain Check the classes derived from `ProjectExplorer::ToolChain` for their Ids. @@ -141,7 +142,7 @@ Tricky parts: - `type` must be the string returned by `BaseQtVersion::type()`. - Currently these are (Qt Creator 4.6): + Currently these are (Qt Creator 4.11): * `Qt4ProjectManager.QtVersion.Android` for Android * `Qt4ProjectManager.QtVersion.Desktop` for a desktop Qt * `Qt4ProjectManager.QtVersion.Ios` for iOS @@ -149,6 +150,7 @@ Tricky parts: * `RemoteLinux.EmbeddedLinuxQt` for Embedded Linux * `WinRt.QtVersion.WindowsRuntime` for Windows RT * `WinRt.QtVersion.WindowsPhone` for Windows RT phone + * `Qt4ProjectManager.QtVersion.WebAssembly` for WebAssembly Add a kit: ========== @@ -171,7 +173,7 @@ Using the newly set up tool chain and Qt version: Tricky parts: - `devicetype` is the string returned IDevice::type() - Currently these are (Qt Creator 4.6): + Currently these are (Qt Creator 4.11): * `Android.Device.Type` for Android devices * `Desktop` for code running on the local desktop * `Ios.Device.Type` for an iOS device @@ -180,6 +182,7 @@ Tricky parts: * `WinRt.Device.Local` for Windows RT (local) * `WinRt.Device.Emulator` for a Windows RT emulator * `WinRt.Device.Phone` for a Windows RT phone + * `WebAssemblyDeviceType` for a web browser that supports WebAssembly - `debuggerid` is one of the ids used when setting up toolchains with `sdktool addDebugger`. From be61acffe7c11a3e451fe7b99740daaa599f056a Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Mon, 2 Sep 2019 11:06:55 +0200 Subject: [PATCH 02/12] Don't link against QtSupport in CTF Visualizer plugin Change-Id: I03e4e3d4a2c687ba5841987318eee569c3fa15c4 Reviewed-by: Ulf Hermann --- src/plugins/ctfvisualizer/CMakeLists.txt | 2 +- src/plugins/ctfvisualizer/ctfvisualizer.qbs | 1 - src/plugins/ctfvisualizer/ctfvisualizer_dependencies.pri | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/ctfvisualizer/CMakeLists.txt b/src/plugins/ctfvisualizer/CMakeLists.txt index 342393bcd1c..32f1188e3ec 100644 --- a/src/plugins/ctfvisualizer/CMakeLists.txt +++ b/src/plugins/ctfvisualizer/CMakeLists.txt @@ -1,7 +1,7 @@ add_qtc_plugin(CtfVisualizer DEPENDS Tracing Qt5::QuickWidgets INCLUDES ${PROJECT_SOURCE_DIR}/src - PLUGIN_DEPENDS Core Debugger ProjectExplorer QtSupport + PLUGIN_DEPENDS Core Debugger ProjectExplorer SOURCES ctfstatisticsmodel.cpp ctfstatisticsview.cpp diff --git a/src/plugins/ctfvisualizer/ctfvisualizer.qbs b/src/plugins/ctfvisualizer/ctfvisualizer.qbs index aee007518c6..71d9ebc2606 100644 --- a/src/plugins/ctfvisualizer/ctfvisualizer.qbs +++ b/src/plugins/ctfvisualizer/ctfvisualizer.qbs @@ -5,7 +5,6 @@ QtcPlugin { Depends { name: "Core" } Depends { name: "Debugger" } - Depends { name: "QtSupport" } Depends { name: "Tracing" } Depends { name: "Utils" } diff --git a/src/plugins/ctfvisualizer/ctfvisualizer_dependencies.pri b/src/plugins/ctfvisualizer/ctfvisualizer_dependencies.pri index 56a2101bdff..c83f6605601 100644 --- a/src/plugins/ctfvisualizer/ctfvisualizer_dependencies.pri +++ b/src/plugins/ctfvisualizer/ctfvisualizer_dependencies.pri @@ -5,5 +5,4 @@ QTC_LIB_DEPENDS += \ tracing QTC_PLUGIN_DEPENDS += \ - debugger \ - qtsupport + debugger From 17f7b8e957684a20305e0efa88436bc5031891b6 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 27 Sep 2019 15:14:35 +0200 Subject: [PATCH 03/12] QtSupport: Simplify detection of embedded linux Qt versions The temporary Qt version never has a qmake path set, so it always returns an empty list of qtAbis. Make that explicit:-) Change-Id: I74b65897e5a9daddae638a99c38fa1a95f8a3086 Reviewed-by: hjk --- src/plugins/qtsupport/qtversions.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/plugins/qtsupport/qtversions.cpp b/src/plugins/qtsupport/qtversions.cpp index 450f1dd8485..03825f2822c 100644 --- a/src/plugins/qtsupport/qtversions.cpp +++ b/src/plugins/qtsupport/qtversions.cpp @@ -127,15 +127,7 @@ EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory() setSupportedType(EMBEDDED_LINUX_QT); setPriority(10); - setRestrictionChecker([](const SetupData &) { - const EmbeddedLinuxQtVersion tempVersion; - const ProjectExplorer::Abis abis = tempVersion.qtAbis(); - - // Note: This fails for e.g. intel/meego cross builds on x86 linux machines. - return abis.count() == 1 - && abis.at(0).os() == ProjectExplorer::Abi::LinuxOS - && !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0)); - }); + setRestrictionChecker([](const SetupData &) { return false; }); } } // Internal From 9c84c6b271348fcc14478ed67c8ff1b6ef3765a9 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 27 Sep 2019 15:16:28 +0200 Subject: [PATCH 04/12] QtSupport: Replace 0 with nullptr ... and let clang-format clean up the indentation. Change-Id: I56401804899628813e54c5b573806ab149885e67 Reviewed-by: hjk --- src/plugins/qtsupport/qtoptionspage.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 51e7a29679a..d531677e143 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -615,12 +615,12 @@ void QtOptionsPageWidget::editPath() BaseQtVersion *current = currentVersion(); QString dir = currentVersion()->qmakeCommand().toFileInfo().absolutePath(); FilePath qtVersion = FilePath::fromString( - QFileDialog::getOpenFileName(this, - tr("Select a qmake Executable"), - dir, - BuildableHelperLibrary::filterForQmakeFileDialog(), - 0, - QFileDialog::DontResolveSymlinks)); + QFileDialog::getOpenFileName(this, + tr("Select a qmake Executable"), + dir, + BuildableHelperLibrary::filterForQmakeFileDialog(), + nullptr, + QFileDialog::DontResolveSymlinks)); if (qtVersion.isEmpty()) return; BaseQtVersion *version = QtVersionFactory::createQtVersionFromQMakePath(qtVersion); From 3404a44ee1bf0cc72cecd899246f35f842b1e970 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Sep 2019 15:44:52 +0200 Subject: [PATCH 05/12] BaseQtVersion: Have examplesPath() return a FilePath Change-Id: I6b37345022d7cdba4aef0af0ca2a825c8606062c Reviewed-by: hjk --- src/plugins/qtsupport/baseqtversion.cpp | 6 +++--- src/plugins/qtsupport/baseqtversion.h | 5 ++--- src/plugins/qtsupport/exampleslistmodel.cpp | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 88a406eda97..6049f8b3e51 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1275,9 +1275,9 @@ bool BaseQtVersion::hasExamples() const return d->m_hasExamples; } -QString BaseQtVersion::examplesPath() const +FilePath BaseQtVersion::examplesPath() const { - return QFileInfo(qmakeProperty("QT_INSTALL_EXAMPLES")).canonicalFilePath(); + return FilePath::fromString(QFileInfo(qmakeProperty("QT_INSTALL_EXAMPLES")).canonicalFilePath()); } QStringList BaseQtVersion::qtSoPaths() const @@ -1842,7 +1842,7 @@ bool BaseQtVersion::isSubProject(const FilePath &filePath) const return true; } - const QString &examples = examplesPath(); + const QString examples = examplesPath().toString(); if (!examples.isEmpty() && filePath.isChildOf(QDir(examples))) return true; diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 48ae12e2dc8..2a22d44c2ac 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -143,11 +143,9 @@ public: QString qtVersionString() const; QtVersionNumber qtVersion() const; - bool hasExamples() const; - QString examplesPath() const; - QStringList qtSoPaths() const; + bool hasExamples() const; bool hasDocumentation() const; QString documentationPath() const; @@ -206,6 +204,7 @@ public: Utils::FilePath headerPath() const; Utils::FilePath docsPath() const; + Utils::FilePath examplesPath() const; Utils::FilePath libraryPath() const; Utils::FilePath pluginPath() const; Utils::FilePath qmlPath() const; diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index ee0d88088a6..3477796d00d 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -578,7 +578,7 @@ QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath, QStrin foreach (BaseQtVersion *version, QtVersionManager::versions()) { if (version->uniqueId() == qtId) { manifestScanPath = version->documentationPath(); - examplesPath = version->examplesPath(); + examplesPath = version->examplesPath().toString(); demosPath = version->demosPath(); break; } From 67934ccaaa0cad0de3cde09cf63ed2710fb2f276 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Sep 2019 15:48:31 +0200 Subject: [PATCH 06/12] BaseQtVersion: Use FilePath for demosPath() Change-Id: I83bcbf64a37faf0f88c6b1f655ff3d5c5d7e623c Reviewed-by: hjk --- src/plugins/qtsupport/baseqtversion.cpp | 6 +++--- src/plugins/qtsupport/baseqtversion.h | 6 +++--- src/plugins/qtsupport/exampleslistmodel.cpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 6049f8b3e51..f7daaadf7b6 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1257,9 +1257,9 @@ bool BaseQtVersion::hasDemos() const return d->m_hasDemos; } -QString BaseQtVersion::demosPath() const +FilePath BaseQtVersion::demosPath() const { - return QFileInfo(qmakeProperty("QT_INSTALL_DEMOS")).canonicalFilePath(); + return FilePath::fromString(QFileInfo(qmakeProperty("QT_INSTALL_DEMOS")).canonicalFilePath()); } QString BaseQtVersion::frameworkInstallPath() const @@ -1846,7 +1846,7 @@ bool BaseQtVersion::isSubProject(const FilePath &filePath) const if (!examples.isEmpty() && filePath.isChildOf(QDir(examples))) return true; - const QString &demos = demosPath(); + const QString demos = demosPath().toString(); if (!demos.isEmpty() && filePath.isChildOf(QDir(demos))) return true; diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 2a22d44c2ac..6d1230d8699 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -147,10 +147,9 @@ public: bool hasExamples() const; bool hasDocumentation() const; - QString documentationPath() const; - bool hasDemos() const; - QString demosPath() const; + + QString documentationPath() const; QString frameworkInstallPath() const; @@ -203,6 +202,7 @@ public: virtual ProjectExplorer::Tasks validateKit(const ProjectExplorer::Kit *k); Utils::FilePath headerPath() const; + Utils::FilePath demosPath() const; Utils::FilePath docsPath() const; Utils::FilePath examplesPath() const; Utils::FilePath libraryPath() const; diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 3477796d00d..9af72ce63f1 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -579,7 +579,7 @@ QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath, QStrin if (version->uniqueId() == qtId) { manifestScanPath = version->documentationPath(); examplesPath = version->examplesPath().toString(); - demosPath = version->demosPath(); + demosPath = version->demosPath().toString(); break; } } From a542f5075fc0ef4e73898b33da7d97d33ac62fae Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Sep 2019 15:54:11 +0200 Subject: [PATCH 07/12] BaseQtVersion: Deduplicate documentation related methods Use docsPath() over documentationPath() since that fits better into the naming scheme of the rest and already returns a FilePath. Change hasDocumentation() to hasDocs() accordingly. Change-Id: I619d7c68e612c4e25a830e4dce128d9a1e84c2e2 Reviewed-by: hjk --- src/plugins/qtsupport/baseqtversion.cpp | 7 +------ src/plugins/qtsupport/baseqtversion.h | 4 +--- src/plugins/qtsupport/exampleslistmodel.cpp | 6 +++--- src/plugins/qtsupport/qtversionmanager.cpp | 4 ++-- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index f7daaadf7b6..f79e669a250 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1240,17 +1240,12 @@ void BaseQtVersion::applyProperties(QMakeGlobals *qmakeGlobals) const qmakeGlobals->setProperties(d->versionInfo()); } -bool BaseQtVersion::hasDocumentation() const +bool BaseQtVersion::hasDocs() const { d->updateVersionInfo(); return d->m_hasDocumentation; } -QString BaseQtVersion::documentationPath() const -{ - return qmakeProperty("QT_INSTALL_DOCS"); -} - bool BaseQtVersion::hasDemos() const { d->updateVersionInfo(); diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 6d1230d8699..24a476d5163 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -146,11 +146,9 @@ public: QStringList qtSoPaths() const; bool hasExamples() const; - bool hasDocumentation() const; + bool hasDocs() const; bool hasDemos() const; - QString documentationPath() const; - QString frameworkInstallPath() const; // former local functions diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 9af72ce63f1..8f253330476 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -141,7 +141,7 @@ void ExampleSetModel::recreateModel(const QList &qtVersions) foreach (BaseQtVersion *version, qtVersions) { // sanitize away qt versions that have already been added through extra sets - if (extraManifestDirs.contains(version->documentationPath())) { + if (extraManifestDirs.contains(version->docsPath().toString())) { if (debugExamples()) { qWarning() << "Not showing Qt version because manifest path is already added through InstalledExamples settings:" << version->displayName(); @@ -172,7 +172,7 @@ int ExampleSetModel::indexForQtVersion(BaseQtVersion *qtVersion) const } // check for extra set - const QString &documentationPath = qtVersion->documentationPath(); + const QString &documentationPath = qtVersion->docsPath().toString(); for (int i = 0; i < rowCount(); ++i) { if (getType(i) == ExtraExampleSetType && m_extraExampleSets.at(getExtraExampleSetIndex(i)).manifestPath == documentationPath) @@ -577,7 +577,7 @@ QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath, QStrin int qtId = getQtId(m_selectedExampleSetIndex); foreach (BaseQtVersion *version, QtVersionManager::versions()) { if (version->uniqueId() == qtId) { - manifestScanPath = version->documentationPath(); + manifestScanPath = version->docsPath().toString(); examplesPath = version->examplesPath().toString(); demosPath = version->demosPath().toString(); break; diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index f8ab8f50d35..cbf44af8eff 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -469,8 +469,8 @@ static void updateDocumentation() { QStringList files; foreach (BaseQtVersion *v, m_versions) { - const QStringList docPaths = QStringList({v->documentationPath() + QChar('/'), - v->documentationPath() + "/qch/"}); + const QStringList docPaths = QStringList( + {v->docsPath().toString() + QChar('/'), v->docsPath().toString() + "/qch/"}); foreach (const QString &docPath, docPaths) { const QDir versionHelpDir(docPath); foreach (const QString &helpFile, From d6d05abcccb706e6825472b696b9e7d5c4f872c6 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Sep 2019 16:03:16 +0200 Subject: [PATCH 08/12] BaseQtVersion: Return FilePath from frameworkInstallPath Rename the method to frameworkPath to be more in line with the rest. Change-Id: I3e018ca91e027a95d1ef4993705781957bc68144 Reviewed-by: hjk --- src/plugins/qmakeprojectmanager/qmakeproject.cpp | 5 +++-- src/plugins/qtsupport/baseqtversion.cpp | 6 +++--- src/plugins/qtsupport/baseqtversion.h | 3 +-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index fc619f3b6c1..d8b9744ce86 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -260,8 +260,9 @@ void QmakeProject::updateCppCodeModel() headerPaths += headerPath; } - if (kitInfo.qtVersion && !kitInfo.qtVersion->frameworkInstallPath().isEmpty()) - headerPaths += {kitInfo.qtVersion->frameworkInstallPath(), HeaderPathType::Framework}; + if (kitInfo.qtVersion && !kitInfo.qtVersion->frameworkPath().isEmpty()) + headerPaths += {kitInfo.qtVersion->frameworkPath().toString(), + HeaderPathType::Framework}; rpp.setHeaderPaths(headerPaths); // Files and generators diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index f79e669a250..4e2e5838068 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1257,11 +1257,11 @@ FilePath BaseQtVersion::demosPath() const return FilePath::fromString(QFileInfo(qmakeProperty("QT_INSTALL_DEMOS")).canonicalFilePath()); } -QString BaseQtVersion::frameworkInstallPath() const +FilePath BaseQtVersion::frameworkPath() const { if (HostOsInfo::isMacHost()) - return qmakeProperty("QT_INSTALL_LIBS"); - return QString(); + return FilePath::fromString(qmakeProperty("QT_INSTALL_LIBS")); + return {}; } bool BaseQtVersion::hasExamples() const diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 24a476d5163..5e04f4b4141 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -149,8 +149,6 @@ public: bool hasDocs() const; bool hasDemos() const; - QString frameworkInstallPath() const; - // former local functions Utils::FilePath qmakeCommand() const; @@ -203,6 +201,7 @@ public: Utils::FilePath demosPath() const; Utils::FilePath docsPath() const; Utils::FilePath examplesPath() const; + Utils::FilePath frameworkPath() const; Utils::FilePath libraryPath() const; Utils::FilePath pluginPath() const; Utils::FilePath qmlPath() const; From e90081cd8817716914d139f9b6888c39926df61a Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Sep 2019 14:44:15 +0200 Subject: [PATCH 09/12] Fix white space Change-Id: I1743eadb01149ebcc705aafbe7cc3374489e65e8 Reviewed-by: hjk --- src/plugins/qtsupport/baseqtversion.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 5e04f4b4141..779db97566d 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -191,7 +191,7 @@ public: virtual QtConfigWidget *createConfigurationWidget() const; static QString defaultUnexpandedDisplayName(const Utils::FilePath &qmakePath, - bool fromPath = false); + bool fromPath = false); virtual QSet targetDeviceTypes() const = 0; From fc2e22dad247445ed4134afbbaff7d9960fd18e2 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Aug 2019 10:12:34 +0200 Subject: [PATCH 10/12] Android: Move logic to trigger AndroidManager::updateGradleProperties Previously, AndroidManager::updateGradleProperties operated always on a project node found using target->activeRunConfiguration() which might or might not be the one that will actually be used after the build. This here still does not address the problem that the activeRunConfiguration may change but introduces a way to specify the relevant node, and tries to use the right one when available. At some time, this could be developed into a real solution, e.g. by invalidating the cache on build key changes. Change-Id: I37a3d73e9ad3615025e4def2493f683d11add3c6 Reviewed-by: BogDan Vatra --- src/plugins/android/androidbuildapkstep.cpp | 1 - src/plugins/android/androidbuildapkwidget.cpp | 1 + src/plugins/android/androidmanager.cpp | 13 +++++++-- src/plugins/android/androidmanager.h | 2 +- src/plugins/android/androidplugin.cpp | 28 ------------------- .../android/androidrunconfiguration.cpp | 1 + .../android/createandroidmanifestwizard.cpp | 2 +- 7 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index df2708c3748..4cff7c90abb 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -510,7 +510,6 @@ QString AndroidBuildApkStep::buildTargetSdk() const void AndroidBuildApkStep::setBuildTargetSdk(const QString &sdk) { m_buildTargetSdk = sdk; - AndroidManager::updateGradleProperties(target()); } QVariant AndroidBuildApkStep::data(Core::Id id) const diff --git a/src/plugins/android/androidbuildapkwidget.cpp b/src/plugins/android/androidbuildapkwidget.cpp index ccb94542258..0edf6aef3f8 100644 --- a/src/plugins/android/androidbuildapkwidget.cpp +++ b/src/plugins/android/androidbuildapkwidget.cpp @@ -104,6 +104,7 @@ QWidget *AndroidBuildApkWidget::createApplicationGroup() connect(targetSDKComboBox, cbActivated, this, [this, targetSDKComboBox](int idx) { const QString sdk = targetSDKComboBox->itemText(idx); m_step->setBuildTargetSdk(sdk); + AndroidManager::updateGradleProperties(step()->target(), QString()); // FIXME: Use real key. }); auto hbox = new QHBoxLayout(group); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 2ce27e5d26a..b0f887a74da 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -683,13 +683,22 @@ static bool mergeGradleProperties(const QString &path, GradleProperties properti } -bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target) +bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target, const QString &buildKey) { QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); if (!version) return false; - const ProjectNode *node = currentProjectNode(target); + QString key = buildKey; + if (key.isEmpty()) { + // FIXME: This case is triggered from AndroidBuildApkWidget::createApplicationGroup + // and should be avoided. + if (RunConfiguration *rc = target->activeRunConfiguration()) + key = rc->buildKey(); + } + + QTC_ASSERT(!key.isEmpty(), return false); + const ProjectNode *node = target->project()->findNodeForBuildKey(key); if (!node) return false; diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index 73e0fa79cbd..a6af5651e9f 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -117,7 +117,7 @@ public: static bool checkCertificatePassword(const QString &keystorePath, const QString &keystorePasswd, const QString &alias, const QString &certificatePasswd); static bool checkCertificateExists(const QString &keystorePath, const QString &keystorePasswd, const QString &alias); - static bool updateGradleProperties(ProjectExplorer::Target *target); + static bool updateGradleProperties(ProjectExplorer::Target *target, const QString &buildKey); static int findApiLevel(const Utils::FilePath &platformPath); static QProcess *runAdbCommandDetached(const QStringList &args, QString *err = nullptr, diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp index d8225eebaea..17926f653cb 100644 --- a/src/plugins/android/androidplugin.cpp +++ b/src/plugins/android/androidplugin.cpp @@ -98,34 +98,6 @@ public: class AndroidPluginPrivate : public QObject { public: - AndroidPluginPrivate() - { - connect(SessionManager::instance(), &SessionManager::projectAdded, this, [=](Project *project) { - for (Target *target : project->targets()) - handleNewTarget(target); - connect(project, &Project::addedTarget, this, &AndroidPluginPrivate::handleNewTarget); - }); - } - - void handleNewTarget(Target *target) - { - if (DeviceTypeKitAspect::deviceTypeId(target->kit()) != Android::Constants::ANDROID_DEVICE_TYPE) - return; - - for (BuildConfiguration *bc : target->buildConfigurations()) - handleNewBuildConfiguration(bc); - - connect(target, &Target::addedBuildConfiguration, - this, &AndroidPluginPrivate::handleNewBuildConfiguration); - } - - void handleNewBuildConfiguration(BuildConfiguration *bc) - { - connect(bc->target()->project(), &Project::parsingFinished, bc, [bc] { - AndroidManager::updateGradleProperties(bc->target()); - }); - } - AndroidConfigurations androidConfiguration; AndroidSettingsPage settingsPage; AndroidDeployQtStepFactory deployQtStepFactory; diff --git a/src/plugins/android/androidrunconfiguration.cpp b/src/plugins/android/androidrunconfiguration.cpp index 95eb3e1a2d3..01b0c6050af 100644 --- a/src/plugins/android/androidrunconfiguration.cpp +++ b/src/plugins/android/androidrunconfiguration.cpp @@ -134,6 +134,7 @@ AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id) connect(target->project(), &Project::parsingFinished, this, [this] { updateTargetInformation(); + AndroidManager::updateGradleProperties(this->target(), buildKey()); }); } diff --git a/src/plugins/android/createandroidmanifestwizard.cpp b/src/plugins/android/createandroidmanifestwizard.cpp index ca386fa9075..70f75fed98a 100644 --- a/src/plugins/android/createandroidmanifestwizard.cpp +++ b/src/plugins/android/createandroidmanifestwizard.cpp @@ -343,7 +343,7 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles() nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);}); } - AndroidManager::updateGradleProperties(m_target); + AndroidManager::updateGradleProperties(m_target, m_buildKey); } From b489bfd6155a150c337085ad4ac040973391ac8e Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Sep 2019 14:34:31 +0200 Subject: [PATCH 11/12] BaseQtVersion: remove qmakeProperty(...) getter Qt 6 will not use qmake to identify a Qt version, so this can not be part of the public interface of BaseQtVersion anymore. Provide getters for the information actually read via qmakeProperty(...). Use the getters whenever possible. Change-Id: Iadbee80b75e4f8b06caf90e7ed69fae2029b4dd7 Reviewed-by: hjk --- src/plugins/android/androidbuildapkstep.cpp | 2 +- src/plugins/android/androiddeployqtstep.cpp | 2 +- src/plugins/android/androidmanager.cpp | 11 +- .../android/createandroidmanifestwizard.cpp | 8 +- .../cmakebuildconfiguration.cpp | 6 +- .../cmakekitinformation.cpp | 2 +- .../genericbuildconfiguration.cpp | 2 +- src/plugins/perfprofiler/perfdatareader.cpp | 2 +- .../qbsprojectmanager/qbsprojectimporter.cpp | 2 +- .../qmakebuildconfiguration.cpp | 10 +- .../designercore/instances/puppetcreator.cpp | 6 +- src/plugins/qmldesigner/generateresource.cpp | 2 +- src/plugins/qnx/qnxdebugsupport.cpp | 6 +- .../qnx/qnxdeployqtlibrariesdialog.cpp | 14 +- src/plugins/qnx/qnxqtversion.cpp | 2 +- src/plugins/qtsupport/baseqtversion.cpp | 294 ++++++++++-------- src/plugins/qtsupport/baseqtversion.h | 18 +- src/plugins/qtsupport/qmldumptool.cpp | 2 +- src/plugins/qtsupport/qtsupportplugin.cpp | 28 +- src/plugins/winrt/winrtdevice.cpp | 2 +- .../winrt/winrtpackagedeploymentstep.cpp | 7 +- src/plugins/winrt/winrtrunnerhelper.cpp | 4 +- 22 files changed, 239 insertions(+), 193 deletions(-) diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index 4cff7c90abb..bf89bd4a934 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -212,7 +212,7 @@ bool AndroidBuildApkStep::init() if (!AbstractProcessStep::init()) return false; - QString command = version->qmakeProperty("QT_HOST_BINS"); + QString command = version->hostBinPath().toString(); if (!command.endsWith('/')) command += '/'; command += "androiddeployqt"; diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index ab9a0745a6e..fe6e2f30b5d 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -240,7 +240,7 @@ bool AndroidDeployQtStep::init() emit addOutput(tr("Cannot find the androiddeploy Json file."), OutputFormat::Stderr); return false; } - m_command = FilePath::fromString(version->qmakeProperty("QT_HOST_BINS")); + m_command = version->hostBinPath(); if (m_command.isEmpty()) { emit addOutput(tr("Cannot find the androiddeployqt tool."), OutputFormat::Stderr); return false; diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index b0f887a74da..4958bd02a3c 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -238,9 +238,8 @@ int AndroidManager::minimumSDK(const ProjectExplorer::Kit *kit) int minSDKVersion = -1; QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(kit); if (version && version->targetDeviceTypes().contains(Constants::ANDROID_DEVICE_TYPE)) { - Utils::FilePath stockManifestFilePath = - Utils::FilePath::fromUserInput(version->qmakeProperty("QT_INSTALL_PREFIX") + - QLatin1String("/src/android/templates/AndroidManifest.xml")); + Utils::FilePath stockManifestFilePath = Utils::FilePath::fromUserInput( + version->prefix().toString() + "/src/android/templates/AndroidManifest.xml"); QDomDocument doc; if (openXmlFile(doc, stockManifestFilePath)) { minSDKVersion = parseMinSdk(doc.documentElement()); @@ -276,7 +275,7 @@ QJsonObject AndroidManager::deploymentSettings(const Target *target) return {}; QJsonObject settings; settings["_description"] = "This file is generated by QtCreator to be read by androiddeployqt and should not be modified by hand."; - settings["qt"] = qt->qmakeProperty("QT_INSTALL_PREFIX"); + settings["qt"] = qt->prefix().toString(); settings["ndk"] = AndroidConfigurations::currentConfig().ndkLocation().toString(); settings["sdk"] = AndroidConfigurations::currentConfig().sdkLocation().toString(); settings["stdcpp-path"] = AndroidConfigurations::currentConfig().toolchainPath().pathAppended("sysroot/usr/lib/").toString(); @@ -728,8 +727,8 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target, con const QString gradlePropertiesPath = packageSourceDir.pathAppended("gradle.properties").toString(); GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath); - gradleProperties["qt5AndroidDir"] = version->qmakeProperty("QT_INSTALL_PREFIX") - .append(QLatin1String("/src/android/java")).toLocal8Bit(); + gradleProperties["qt5AndroidDir"] = (version->prefix().toString() + "/src/android/java") + .toLocal8Bit(); gradleProperties["buildDir"] = ".build"; gradleProperties["androidCompileSdkVersion"] = buildTargetSDK(target).split(QLatin1Char('-')).last().toLocal8Bit(); if (gradleProperties["androidBuildToolsVersion"].isEmpty()) { diff --git a/src/plugins/android/createandroidmanifestwizard.cpp b/src/plugins/android/createandroidmanifestwizard.cpp index 70f75fed98a..bac135d7d2e 100644 --- a/src/plugins/android/createandroidmanifestwizard.cpp +++ b/src/plugins/android/createandroidmanifestwizard.cpp @@ -322,21 +322,19 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles() if (!version) return; if (version->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) { - const QString src(version->qmakeProperty("QT_INSTALL_PREFIX") - .append(QLatin1String("/src/android/java/AndroidManifest.xml"))); + const QString src = version->prefix().toString() + "/src/android/java/AndroidManifest.xml"; FileUtils::copyRecursively(FilePath::fromString(src), FilePath::fromString(m_directory + QLatin1String("/AndroidManifest.xml")), nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);}); } else { - const QString src(version->qmakeProperty("QT_INSTALL_PREFIX") - .append(QLatin1String("/src/android/templates"))); + const QString src = version->prefix().toString() + "/src/android/templates"; FileUtils::copyRecursively(FilePath::fromString(src), FilePath::fromString(m_directory), nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);}); if (m_copyGradle) { - FilePath gradlePath = FilePath::fromString(version->qmakeProperty("QT_INSTALL_PREFIX").append(QLatin1String("/src/3rdparty/gradle"))); + FilePath gradlePath = version->prefix().pathAppended("src/3rdparty/gradle"); if (!gradlePath.exists()) gradlePath = AndroidConfigurations::currentConfig().sdkLocation().pathAppended("/tools/templates/gradle/wrapper"); FileUtils::copyRecursively(gradlePath, FilePath::fromString(m_directory), diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 95ba123d5b9..b95df439ee6 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -292,10 +292,8 @@ const QList CMakeBuildConfiguration::appTargets() const bti.runEnvModifier = [this](Environment &env, bool) { if (HostOsInfo::isWindowsHost()) { const Kit *k = target()->kit(); - if (const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k)) { - const QString installBinPath = qt->qmakeProperty("QT_INSTALL_BINS"); - env.prependOrSetPath(installBinPath); - } + if (const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k)) + env.prependOrSetPath(qt->binPath().toString()); } }; diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp index 9b9561e8be2..63dfdac4c6c 100644 --- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp +++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp @@ -1001,7 +1001,7 @@ Tasks CMakeConfigurationKitAspect::validate(const Kit *k) const Utils::FilePath(), -1, Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); } } - if (version && !qtInstallDirs.contains(version->qmakeProperty("QT_INSTALL_PREFIX")) && !isQt4) { + if (version && !qtInstallDirs.contains(version->prefix().toString()) && !isQt4) { if (version->isValid()) { result << Task(Task::Warning, tr("CMake configuration has no CMAKE_PREFIX_PATH set " "that points to the kit Qt version."), diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 12d61b16115..b70f1e33d7c 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -106,7 +106,7 @@ void GenericBuildConfiguration::addToEnvironment(Utils::Environment &env) const prependCompilerPathToEnvironment(target()->kit(), env); const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target()->kit()); if (qt) - env.prependOrSetPath(qt->binPath().toString()); + env.prependOrSetPath(qt->hostBinPath().toString()); } } // namespace Internal diff --git a/src/plugins/perfprofiler/perfdatareader.cpp b/src/plugins/perfprofiler/perfdatareader.cpp index 86c80f382ca..4902c1fd203 100644 --- a/src/plugins/perfprofiler/perfdatareader.cpp +++ b/src/plugins/perfprofiler/perfdatareader.cpp @@ -300,7 +300,7 @@ QStringList PerfDataReader::collectArguments(const QString &executableDirPath, arguments << QLatin1String("--extra") << QString::fromLatin1("%1%5%2%5%3%5%4") .arg(QDir::toNativeSeparators(qt->libraryPath().toString())) .arg(QDir::toNativeSeparators(qt->pluginPath().toString())) - .arg(QDir::toNativeSeparators(qt->binPath().toString())) + .arg(QDir::toNativeSeparators(qt->hostBinPath().toString())) .arg(QDir::toNativeSeparators(qt->qmlPath().toString())) .arg(QDir::listSeparator()); } diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp index dd8600095d3..10b7e3fa4ce 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp @@ -186,7 +186,7 @@ bool QbsProjectImporter::matchKit(void *directoryData, const Kit *k) const if (!bgData->qtBinPath.isEmpty()) { if (!qtVersion) return false; - if (bgData->qtBinPath != qtVersion->binPath()) + if (bgData->qtBinPath != qtVersion->hostBinPath()) return false; } if (bgData->sysroot != SysRootKitAspect::sysRoot(k)) diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index b9c96fbb200..7e90562c54b 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -507,8 +507,8 @@ QString QmakeBuildConfiguration::extractSpecFromArguments(QString *args, if (parsedSpec.isEmpty()) return {}; - FilePath baseMkspecDir = FilePath::fromUserInput( - version->qmakeProperty("QT_HOST_DATA") + QLatin1String("/mkspecs")); + FilePath baseMkspecDir = FilePath::fromUserInput(version->hostDataPath().toString() + + "/mkspecs"); baseMkspecDir = FilePath::fromString(baseMkspecDir.toFileInfo().canonicalFilePath()); // if the path is relative it can be @@ -608,7 +608,7 @@ BuildInfo QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k, QString projectDirectory = projectPath.toFileInfo().absolutePath(); QDir qtSourceDir = QDir(version->sourcePath().toString()); QString relativeProjectPath = qtSourceDir.relativeFilePath(projectDirectory); - QString qtBuildDir = version->qmakeProperty("QT_INSTALL_PREFIX"); + QString qtBuildDir = version->prefix().toString(); QString absoluteBuildPath = QDir::cleanPath(qtBuildDir + QLatin1Char('/') + relativeProjectPath); info.buildDirectory = FilePath::fromString(absoluteBuildPath); @@ -672,8 +672,8 @@ void QmakeBuildConfiguration::setupBuildEnvironment(Kit *k, Environment &env) { prependCompilerPathToEnvironment(k, env); const BaseQtVersion *qt = QtKitAspect::qtVersion(k); - if (qt && !qt->binPath().isEmpty()) - env.prependOrSetPath(qt->binPath().toString()); + if (qt && !qt->hostBinPath().isEmpty()) + env.prependOrSetPath(qt->hostBinPath().toString()); } QmakeBuildConfiguration::LastKitState::LastKitState() = default; diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index 553a47914c7..25840c01a35 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -92,7 +92,7 @@ QByteArray PuppetCreator::qtHash() const { QtSupport::BaseQtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_kit); if (currentQtVersion) { - return QCryptographicHash::hash(currentQtVersion->qmakeProperty("QT_INSTALL_DATA").toUtf8(), + return QCryptographicHash::hash(currentQtVersion->dataPath().toString().toUtf8(), QCryptographicHash::Sha1) .toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals); } @@ -104,7 +104,7 @@ QDateTime PuppetCreator::qtLastModified() const { QtSupport::BaseQtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_kit); if (currentQtVersion) - return QFileInfo(currentQtVersion->qmakeProperty("QT_INSTALL_LIBS")).lastModified(); + return currentQtVersion->libraryPath().toFileInfo().lastModified(); return QDateTime(); } @@ -422,7 +422,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_kit); if (QTC_GUARD(qt)) { // Kits without a Qt version should not have a puppet! // Update PATH to include QT_HOST_BINS - const Utils::FilePath qtBinPath = qt->binPath(); + const Utils::FilePath qtBinPath = qt->hostBinPath(); environment.prependOrSetPath(qtBinPath.toString()); } environment.set("QML_BAD_GUI_RENDER_LOOP", "true"); diff --git a/src/plugins/qmldesigner/generateresource.cpp b/src/plugins/qmldesigner/generateresource.cpp index e7f250e9589..2a07ae816ec 100644 --- a/src/plugins/qmldesigner/generateresource.cpp +++ b/src/plugins/qmldesigner/generateresource.cpp @@ -98,7 +98,7 @@ void GenerateResource::generateMenuEntry() return; temp.close(); - auto rccBinary = QtSupport::QtKitAspect::qtVersion(currentProject->activeTarget()->kit())->binPath(); + auto rccBinary = QtSupport::QtKitAspect::qtVersion(currentProject->activeTarget()->kit())->hostBinPath(); #ifdef Q_OS_WIN rccBinary = rccBinary.pathAppended("rcc.exe"); #else diff --git a/src/plugins/qnx/qnxdebugsupport.cpp b/src/plugins/qnx/qnxdebugsupport.cpp index 54a0c5c2238..49eb59ac9ad 100644 --- a/src/plugins/qnx/qnxdebugsupport.cpp +++ b/src/plugins/qnx/qnxdebugsupport.cpp @@ -76,15 +76,15 @@ static QStringList searchPaths(Kit *kit) if (!qtVersion) return {}; - const QDir pluginDir(qtVersion->qmakeProperty("QT_INSTALL_PLUGINS")); + const QDir pluginDir(qtVersion->pluginPath().toString()); const QStringList pluginSubDirs = pluginDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); QStringList searchPaths; for (const QString &dir : pluginSubDirs) - searchPaths << qtVersion->qmakeProperty("QT_INSTALL_PLUGINS") + '/' + dir; + searchPaths << qtVersion->pluginPath().toString() + '/' + dir; - searchPaths << qtVersion->qmakeProperty("QT_INSTALL_LIBS"); + searchPaths << qtVersion->libraryPath().toString(); searchPaths << qtVersion->qnxTarget().pathAppended(qtVersion->cpuDir() + "/lib").toString(); searchPaths << qtVersion->qnxTarget().pathAppended(qtVersion->cpuDir() + "/usr/lib").toString(); diff --git a/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp b/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp index aec85826a2f..4653d8bad03 100644 --- a/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp +++ b/src/plugins/qnx/qnxdeployqtlibrariesdialog.cpp @@ -234,16 +234,16 @@ QList QnxDeployQtLibrariesDialog::gatherFiles() QTC_ASSERT(qtVersion, return result); if (Utils::HostOsInfo::isWindowsHost()) { - result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_LIBS"), - QString(), QStringList() << QLatin1String("*.so.?"))); - result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_LIBS") - + QLatin1String("/fonts"))); + result.append(gatherFiles(qtVersion->libraryPath().toString(), + QString(), + QStringList() << QLatin1String("*.so.?"))); + result.append(gatherFiles(qtVersion->libraryPath().toString() + QLatin1String("/fonts"))); } else { - result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_LIBS"))); + result.append(gatherFiles(qtVersion->libraryPath().toString())); } - result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_PLUGINS"))); - result.append(gatherFiles(qtVersion->qmakeProperty("QT_INSTALL_IMPORTS"))); + result.append(gatherFiles(qtVersion->pluginPath().toString())); + result.append(gatherFiles(qtVersion->importsPath().toString())); result.append(gatherFiles(qtVersion->qmlPath().toString())); return result; diff --git a/src/plugins/qnx/qnxqtversion.cpp b/src/plugins/qnx/qnxqtversion.cpp index b096f16a807..3c704bb4214 100644 --- a/src/plugins/qnx/qnxqtversion.cpp +++ b/src/plugins/qnx/qnxqtversion.cpp @@ -130,7 +130,7 @@ void QnxQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::Enviro updateEnvironment(); env.modify(m_qnxEnv); - env.prependOrSetLibrarySearchPath(qmakeProperty("QT_INSTALL_LIBS", PropertyVariantDev)); + env.prependOrSetLibrarySearchPath(libraryPath().toString()); } Utils::Environment QnxQtVersion::qmakeRunEnvironment() const diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 4e2e5838068..491390d95dc 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -141,9 +141,11 @@ public: const Environment &env, QHash *versionInfo, QString *error = nullptr); + enum PropertyVariant { PropertyVariantDev, PropertyVariantGet, PropertyVariantSrc }; + QString qmakeProperty(const QByteArray &name, PropertyVariant variant = PropertyVariantGet); static QString qmakeProperty(const QHash &versionInfo, const QByteArray &name, - BaseQtVersion::PropertyVariant variant = BaseQtVersion::PropertyVariantGet); + PropertyVariant variant = PropertyVariantGet); static FilePath mkspecDirectoryFromVersionInfo(const QHash &versionInfo); static FilePath mkspecFromVersionInfo(const QHash &versionInfo); static FilePath sourcePath(const QHash &versionInfo); @@ -158,6 +160,7 @@ public: bool m_isAutodetected = false; QString m_type; + bool m_isUpdating = false; bool m_hasQmlDump = false; // controlled by m_versionInfoUpToDate bool m_mkspecUpToDate = false; bool m_mkspecReadUpToDate = false; @@ -512,41 +515,76 @@ Tasks BaseQtVersion::validateKit(const Kit *k) return result; } -FilePath BaseQtVersion::headerPath() const +FilePath BaseQtVersion::prefix() const // QT_INSTALL_PREFIX { - return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_HEADERS")); + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_PREFIX")); } -FilePath BaseQtVersion::docsPath() const +FilePath BaseQtVersion::binPath() const // QT_INSTALL_BINS { - return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_DOCS")); + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_BINS")); } -FilePath BaseQtVersion::libraryPath() const +FilePath BaseQtVersion::configurationPath() const // QT_INSTALL_CONFIGURATION { - return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_LIBS")); + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_CONFIGURATION")); } -FilePath BaseQtVersion::pluginPath() const +FilePath BaseQtVersion::headerPath() const // QT_INSTALL_HEADERS { - return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_PLUGINS")); + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_HEADERS")); } -FilePath BaseQtVersion::qmlPath() const +FilePath BaseQtVersion::dataPath() const // QT_INSTALL_DATA { - return FilePath::fromUserInput(qmakeProperty("QT_INSTALL_QML")); + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_DATA")); } -FilePath BaseQtVersion::binPath() const +FilePath BaseQtVersion::docsPath() const // QT_INSTALL_DOCS { - return FilePath::fromUserInput(qmakeProperty("QT_HOST_BINS")); + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_DOCS")); +} + +FilePath BaseQtVersion::importsPath() const // QT_INSTALL_IMPORTS +{ + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_IMPORTS")); +} + +FilePath BaseQtVersion::libraryPath() const // QT_INSTALL_LIBS +{ + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_LIBS")); +} + +FilePath BaseQtVersion::pluginPath() const // QT_INSTALL_PLUGINS +{ + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_PLUGINS")); +} + +FilePath BaseQtVersion::qmlPath() const // QT_INSTALL_QML +{ + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_QML")); +} + +FilePath BaseQtVersion::translationsPath() const // QT_INSTALL_TRANSLATIONS +{ + return FilePath::fromUserInput(d->qmakeProperty("QT_INSTALL_TRANSLATIONS")); +} + +FilePath BaseQtVersion::hostBinPath() const // QT_HOST_BINS +{ + return FilePath::fromUserInput(d->qmakeProperty("QT_HOST_BINS")); +} + +FilePath BaseQtVersion::hostDataPath() const // QT_HOST_DATA +{ + return FilePath::fromUserInput(d->qmakeProperty("QT_HOST_DATA")); } FilePath BaseQtVersion::mkspecsPath() const { - const FilePath result = FilePath::fromUserInput(qmakeProperty("QT_HOST_DATA")); + const FilePath result = hostDataPath(); if (result.isEmpty()) - return FilePath::fromUserInput(qmakeProperty("QMAKE_MKSPECS")); + return FilePath::fromUserInput(d->qmakeProperty(d->m_versionInfo, "QMAKE_MKSPECS")); return result.pathAppended("mkspecs"); } @@ -557,8 +595,7 @@ FilePath BaseQtVersion::qmlBinPath() const FilePath BaseQtVersion::librarySearchPath() const { - return HostOsInfo::isWindowsHost() - ? FilePath::fromUserInput(qmakeProperty("QT_INSTALL_BINS")) : libraryPath(); + return HostOsInfo::isWindowsHost() ? binPath() : libraryPath(); } FilePathList BaseQtVersion::directoriesToIgnoreInProjectTree() const @@ -567,7 +604,8 @@ FilePathList BaseQtVersion::directoriesToIgnoreInProjectTree() const const FilePath mkspecPathGet = mkspecsPath(); result.append(mkspecPathGet); - FilePath mkspecPathSrc = FilePath::fromUserInput(qmakeProperty("QT_HOST_DATA", PropertyVariantSrc)); + FilePath mkspecPathSrc = FilePath::fromUserInput( + d->qmakeProperty("QT_HOST_DATA", BaseQtVersionPrivate::PropertyVariantSrc)); if (!mkspecPathSrc.isEmpty()) { mkspecPathSrc = mkspecPathSrc.pathAppended("mkspecs"); if (mkspecPathSrc != mkspecPathGet) @@ -663,11 +701,8 @@ bool BaseQtVersion::isValid() const d->updateVersionInfo(); d->updateMkspec(); - return !qmakeCommand().isEmpty() - && d->m_installed - && !qmakeProperty("QT_HOST_BINS").isNull() - && !d->m_mkspecFullPath.isEmpty() - && d->m_qmakeIsExecutable; + return !qmakeCommand().isEmpty() && d->m_installed && !binPath().isEmpty() + && !d->m_mkspecFullPath.isEmpty() && d->m_qmakeIsExecutable; } BaseQtVersion::Predicate BaseQtVersion::isValidPredicate(const BaseQtVersion::Predicate &predicate) @@ -687,7 +722,7 @@ QString BaseQtVersion::invalidReason() const return QCoreApplication::translate("QtVersion", "qmake does not exist or is not executable"); if (!d->m_installed) return QCoreApplication::translate("QtVersion", "Qt version is not properly installed, please run make install"); - if (qmakeProperty("QT_HOST_BINS").isNull()) + if (binPath().isEmpty()) return QCoreApplication::translate("QtVersion", "Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?"); if (d->m_mkspecUpToDate && d->m_mkspecFullPath.isEmpty()) @@ -922,7 +957,7 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const { QString baseDir; if (q->qtVersion() < QtVersionNumber(5, 0, 0)) { - baseDir = q->qmakeProperty("QT_HOST_BINS"); + baseDir = q->binPath().toString(); } else { q->ensureMkSpecParsed(); switch (binary) { @@ -932,7 +967,7 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const break; case Uic: case QScxmlc: - baseDir = q->qmakeProperty("QT_HOST_BINS"); + baseDir = q->hostBinPath().toString(); break; default: // Can't happen @@ -1109,8 +1144,7 @@ bool BaseQtVersion::hasMkspec(const QString &spec) const if (spec.isEmpty()) return true; // default spec of a Qt version - QDir mkspecDir = QDir(QDir::fromNativeSeparators(qmakeProperty("QT_HOST_DATA")) - + "/mkspecs/"); + QDir mkspecDir = QDir(hostDataPath().toString() + "/mkspecs/"); const QString absSpec = mkspecDir.absoluteFilePath(spec); if (QFileInfo(absSpec).isDir() && QFileInfo(absSpec + "/qmake.conf").isFile()) return true; @@ -1146,11 +1180,11 @@ QtVersionNumber BaseQtVersion::qtVersion() const void BaseQtVersionPrivate::updateVersionInfo() { - if (m_versionInfoUpToDate) - return; - if (!m_qmakeIsExecutable) + if (m_versionInfoUpToDate || !m_qmakeIsExecutable || m_isUpdating) return; + m_isUpdating = true; + // extract data from qmake executable m_versionInfo.clear(); m_installed = true; @@ -1166,9 +1200,8 @@ void BaseQtVersionPrivate::updateVersionInfo() } m_qmakeIsExecutable = true; - - const QString qtInstallBins = qmakeProperty(m_versionInfo, "QT_INSTALL_BINS"); - const QString qtHeaderData = qmakeProperty(m_versionInfo, "QT_INSTALL_HEADERS"); + const QString qtInstallBins = q->binPath().toString(); + const QString qtHeaderData = q->headerPath().toString(); if (!qtInstallBins.isNull()) { if (!qtInstallBins.isEmpty()) { @@ -1179,7 +1212,7 @@ void BaseQtVersionPrivate::updateVersionInfo() } // Now check for a qt that is configured with a prefix but not installed - QString installDir = qmakeProperty(m_versionInfo, "QT_HOST_BINS"); + QString installDir = q->hostBinPath().toString(); if (!installDir.isNull()) { if (!QFileInfo::exists(installDir)) m_installed = false; @@ -1192,23 +1225,24 @@ void BaseQtVersionPrivate::updateVersionInfo() m_installed = false; } } - const QString qtInstallDocs = qmakeProperty(m_versionInfo, "QT_INSTALL_DOCS"); + const QString qtInstallDocs = q->docsPath().toString(); if (!qtInstallDocs.isNull()) { if (QFileInfo::exists(qtInstallDocs)) m_hasDocumentation = true; } - const QString qtInstallExamples = qmakeProperty(m_versionInfo, "QT_INSTALL_EXAMPLES"); + const QString qtInstallExamples = q->examplesPath().toString(); if (!qtInstallExamples.isNull()) { if (QFileInfo::exists(qtInstallExamples)) m_hasExamples = true; } - const QString qtInstallDemos = qmakeProperty(m_versionInfo, "QT_INSTALL_DEMOS"); + const QString qtInstallDemos = q->demosPath().toString(); if (!qtInstallDemos.isNull()) { if (QFileInfo::exists(qtInstallDemos)) m_hasDemos = true; } - m_qtVersionString = qmakeProperty(m_versionInfo, "QT_VERSION"); + m_qtVersionString = qmakeProperty("QT_VERSION"); + m_isUpdating = false; m_versionInfoUpToDate = true; } @@ -1218,23 +1252,22 @@ QHash BaseQtVersionPrivate::versionInfo() return m_versionInfo; } -QString BaseQtVersionPrivate::qmakeProperty(const QHash &versionInfo, const QByteArray &name, - BaseQtVersion::PropertyVariant variant) +QString BaseQtVersionPrivate::qmakeProperty(const QHash &versionInfo, + const QByteArray &name, + PropertyVariant variant) { - QString val = versionInfo.value(ProKey(QString::fromLatin1( - name + (variant == BaseQtVersion::PropertyVariantDev ? "/dev" : - variant == BaseQtVersion::PropertyVariantGet ? "/get" : "/src")))).toQString(); + QString val = versionInfo + .value(ProKey(QString::fromLatin1( + name + + (variant == PropertyVariantDev + ? "/dev" + : variant == PropertyVariantGet ? "/get" : "/src")))) + .toQString(); if (!val.isNull()) return val; return versionInfo.value(ProKey(name)).toQString(); } -QString BaseQtVersion::qmakeProperty(const QByteArray &name, PropertyVariant variant) const -{ - d->updateVersionInfo(); - return d->qmakeProperty(d->m_versionInfo, name, variant); -} - void BaseQtVersion::applyProperties(QMakeGlobals *qmakeGlobals) const { qmakeGlobals->setProperties(d->versionInfo()); @@ -1254,13 +1287,13 @@ bool BaseQtVersion::hasDemos() const FilePath BaseQtVersion::demosPath() const { - return FilePath::fromString(QFileInfo(qmakeProperty("QT_INSTALL_DEMOS")).canonicalFilePath()); + return FilePath::fromString(QFileInfo(d->qmakeProperty("QT_INSTALL_DEMOS")).canonicalFilePath()); } FilePath BaseQtVersion::frameworkPath() const { if (HostOsInfo::isMacHost()) - return FilePath::fromString(qmakeProperty("QT_INSTALL_LIBS")); + return libraryPath(); return {}; } @@ -1270,9 +1303,10 @@ bool BaseQtVersion::hasExamples() const return d->m_hasExamples; } -FilePath BaseQtVersion::examplesPath() const +FilePath BaseQtVersion::examplesPath() const // QT_INSTALL_EXAMPLES { - return FilePath::fromString(QFileInfo(qmakeProperty("QT_INSTALL_EXAMPLES")).canonicalFilePath()); + return FilePath::fromString( + QFileInfo(d->qmakeProperty("QT_INSTALL_EXAMPLES")).canonicalFilePath()); } QStringList BaseQtVersion::qtSoPaths() const @@ -1286,7 +1320,7 @@ QStringList BaseQtVersion::qtSoPaths() const QSet paths; for (uint i = 0; i < sizeof qMakeVariables / sizeof qMakeVariables[0]; ++i) { - QString path = qmakeProperty(qMakeVariables[i]); + QString path = d->qmakeProperty(qMakeVariables[i]); if (path.isNull()) continue; QDirIterator it(path, QStringList("*.so"), QDir::Files, QDirIterator::Subdirectories); @@ -1328,12 +1362,11 @@ BaseQtVersion::createMacroExpander(const std::function std::unique_ptr expander(new MacroExpander); expander->setDisplayName(QtKitAspect::tr("Qt version")); - expander->registerVariable( - "Qt:Version", - QtKitAspect::tr("The version string of the current Qt version."), - versionProperty([](const BaseQtVersion *version) { - return version->qtVersionString(); - })); + expander->registerVariable("Qt:Version", + QtKitAspect::tr("The version string of the current Qt version."), + versionProperty([](const BaseQtVersion *version) { + return version->qtVersionString(); + })); expander->registerVariable( "Qt:Type", @@ -1349,96 +1382,94 @@ BaseQtVersion::createMacroExpander(const std::function return QDir::toNativeSeparators(version->mkspec()); })); - expander->registerVariable( - "Qt:QT_INSTALL_PREFIX", - QtKitAspect::tr("The installation prefix of the current Qt version."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_PREFIX"); - })); + expander->registerVariable("Qt:QT_INSTALL_PREFIX", + QtKitAspect::tr( + "The installation prefix of the current Qt version."), + versionProperty([](const BaseQtVersion *version) { + return version->prefix().toString(); + })); - expander->registerVariable( - "Qt:QT_INSTALL_DATA", - QtKitAspect::tr("The installation location of the current Qt version's data."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_DATA"); - })); + expander->registerVariable("Qt:QT_INSTALL_DATA", + QtKitAspect::tr( + "The installation location of the current Qt version's data."), + versionProperty([](const BaseQtVersion *version) { + return version->dataPath().toString(); + })); expander->registerVariable( "Qt:QT_INSTALL_HEADERS", QtKitAspect::tr("The installation location of the current Qt version's header files."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_HEADERS"); - })); + versionProperty( + [](const BaseQtVersion *version) { return version->headerPath().toString(); })); expander->registerVariable( "Qt:QT_INSTALL_LIBS", QtKitAspect::tr("The installation location of the current Qt version's library files."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_LIBS"); - })); + versionProperty( + [](const BaseQtVersion *version) { return version->libraryPath().toString(); })); expander->registerVariable( "Qt:QT_INSTALL_DOCS", - QtKitAspect::tr("The installation location of the current Qt version's documentation files."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_DOCS"); - })); + QtKitAspect::tr( + "The installation location of the current Qt version's documentation files."), + versionProperty( + [](const BaseQtVersion *version) { return version->docsPath().toString(); })); expander->registerVariable( "Qt:QT_INSTALL_BINS", QtKitAspect::tr("The installation location of the current Qt version's executable files."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_BINS"); - })); + versionProperty([](const BaseQtVersion *version) { return version->binPath().toString(); })); - expander->registerVariable( - "Qt:QT_INSTALL_PLUGINS", - QtKitAspect::tr("The installation location of the current Qt version's plugins."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_PLUGINS"); - })); + expander + ->registerVariable("Qt:QT_INSTALL_PLUGINS", + QtKitAspect::tr( + "The installation location of the current Qt version's plugins."), + versionProperty([](const BaseQtVersion *version) { + return version->pluginPath().toString(); + })); - expander->registerVariable( - "Qt:QT_INSTALL_QML", - QtKitAspect::tr("The installation location of the current Qt version's QML files."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_QML"); - })); + expander + ->registerVariable("Qt:QT_INSTALL_QML", + QtKitAspect::tr( + "The installation location of the current Qt version's QML files."), + versionProperty([](const BaseQtVersion *version) { + return version->qmlPath().toString(); + })); - expander->registerVariable( - "Qt:QT_INSTALL_IMPORTS", - QtKitAspect::tr("The installation location of the current Qt version's imports."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_IMPORTS"); - })); + expander + ->registerVariable("Qt:QT_INSTALL_IMPORTS", + QtKitAspect::tr( + "The installation location of the current Qt version's imports."), + versionProperty([](const BaseQtVersion *version) { + return version->importsPath().toString(); + })); expander->registerVariable( "Qt:QT_INSTALL_TRANSLATIONS", QtKitAspect::tr("The installation location of the current Qt version's translation files."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_TRANSLATIONS"); - })); + versionProperty( + [](const BaseQtVersion *version) { return version->translationsPath().toString(); })); expander->registerVariable( "Qt:QT_INSTALL_CONFIGURATION", QtKitAspect::tr("The installation location of the current Qt version's translation files."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_CONFIGURATION"); - })); + versionProperty( + [](const BaseQtVersion *version) { return version->configurationPath().toString(); })); - expander->registerVariable( - "Qt:QT_INSTALL_EXAMPLES", - QtKitAspect::tr("The installation location of the current Qt version's examples."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_EXAMPLES"); - })); + expander + ->registerVariable("Qt:QT_INSTALL_EXAMPLES", + QtKitAspect::tr( + "The installation location of the current Qt version's examples."), + versionProperty([](const BaseQtVersion *version) { + return version->examplesPath().toString(); + })); - expander->registerVariable( - "Qt:QT_INSTALL_DEMOS", - QtKitAspect::tr("The installation location of the current Qt version's demos."), - versionProperty([](const BaseQtVersion *version) { - return version->d->qmakeProperty(version->d->m_versionInfo, "QT_INSTALL_DEMOS"); - })); + expander->registerVariable("Qt:QT_INSTALL_DEMOS", + QtKitAspect::tr( + "The installation location of the current Qt version's demos."), + versionProperty([](const BaseQtVersion *version) { + return version->demosPath().toString(); + })); expander->registerVariable( "Qt:QMAKE_MKSPECS", @@ -1553,7 +1584,7 @@ QSet BaseQtVersion::features() const void BaseQtVersion::addToEnvironment(const Kit *k, Environment &env) const { Q_UNUSED(k) - env.set("QTDIR", QDir::toNativeSeparators(qmakeProperty("QT_HOST_DATA"))); + env.set("QTDIR", hostDataPath().toUserOutput()); } // Some Qt versions may require environment settings for qmake to work @@ -1585,7 +1616,7 @@ bool BaseQtVersion::needsQmlDump() const QString BaseQtVersion::qmlDumpTool(bool debugVersion) const { - const QString qtInstallBins = qmakeProperty("QT_INSTALL_BINS"); + const QString qtInstallBins = binPath().toString(); return QmlDumpTool::toolForQtPaths(qtInstallBins, debugVersion); } @@ -1701,9 +1732,16 @@ bool BaseQtVersionPrivate::queryQMakeVariables(const FilePath &binary, const Env return true; } +QString BaseQtVersionPrivate::qmakeProperty(const QByteArray &name, + BaseQtVersionPrivate::PropertyVariant variant) +{ + updateVersionInfo(); + return qmakeProperty(m_versionInfo, name, variant); +} + FilePath BaseQtVersionPrivate::mkspecDirectoryFromVersionInfo(const QHash &versionInfo) { - QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA", BaseQtVersion::PropertyVariantSrc); + QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA", PropertyVariantSrc); if (dataDir.isEmpty()) return FilePath(); return FilePath::fromUserInput(dataDir + "/mkspecs"); @@ -1916,10 +1954,10 @@ bool BaseQtVersion::isQtQuickCompilerSupported(QString *reason) const FilePathList BaseQtVersionPrivate::qtCorePaths() { updateVersionInfo(); - const QString &versionString = m_qtVersionString; + const QString versionString = m_qtVersionString; - const QString &installLibsDir = qmakeProperty(m_versionInfo, "QT_INSTALL_LIBS"); - const QString &installBinDir = qmakeProperty(m_versionInfo, "QT_INSTALL_BINS"); + const QString installLibsDir = q->libraryPath().toString(); + const QString installBinDir = q->binPath().toString(); const QDir::Filters filters = QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot; diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 779db97566d..f1127bbfd9d 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -119,9 +119,6 @@ public: ProjectExplorer::Abis qtAbis() const; virtual ProjectExplorer::Abis detectQtAbis() const; - enum PropertyVariant { PropertyVariantDev, PropertyVariantGet, PropertyVariantSrc }; - QString qmakeProperty(const QByteArray &name, - PropertyVariant variant = PropertyVariantGet) const; void applyProperties(QMakeGlobals *qmakeGlobals) const; virtual void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const; virtual Utils::Environment qmakeRunEnvironment() const; @@ -197,15 +194,25 @@ public: virtual ProjectExplorer::Tasks validateKit(const ProjectExplorer::Kit *k); - Utils::FilePath headerPath() const; + Utils::FilePath prefix() const; + + Utils::FilePath binPath() const; + Utils::FilePath configurationPath() const; + Utils::FilePath dataPath() const; Utils::FilePath demosPath() const; Utils::FilePath docsPath() const; Utils::FilePath examplesPath() const; Utils::FilePath frameworkPath() const; + Utils::FilePath headerPath() const; + Utils::FilePath importsPath() const; Utils::FilePath libraryPath() const; Utils::FilePath pluginPath() const; Utils::FilePath qmlPath() const; - Utils::FilePath binPath() const; + Utils::FilePath translationsPath() const; + + Utils::FilePath hostBinPath() const; + Utils::FilePath hostDataPath() const; + Utils::FilePath mkspecsPath() const; Utils::FilePath qmlBinPath() const; Utils::FilePath librarySearchPath() const; @@ -231,7 +238,6 @@ public: QSet features() const; - protected: BaseQtVersion(); BaseQtVersion(const BaseQtVersion &other) = delete; diff --git a/src/plugins/qtsupport/qmldumptool.cpp b/src/plugins/qtsupport/qmldumptool.cpp index dc9f766144b..5cbed627104 100644 --- a/src/plugins/qtsupport/qmldumptool.cpp +++ b/src/plugins/qtsupport/qmldumptool.cpp @@ -58,7 +58,7 @@ static inline QStringList validPrebuiltFilenames(bool debugBuild) QString QmlDumpTool::toolForVersion(const BaseQtVersion *version, bool debugDump) { if (version) { - const QString qtInstallBins = version->qmakeProperty("QT_INSTALL_BINS"); + const QString qtInstallBins = version->binPath().toString(); return toolForQtPaths(qtInstallBins, debugDump); } diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp index 9b6038f5ebd..fdfe8b37a7f 100644 --- a/src/plugins/qtsupport/qtsupportplugin.cpp +++ b/src/plugins/qtsupport/qtsupportplugin.cpp @@ -104,30 +104,36 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes return true; } -static QString qmakeProperty(const char *propertyName) +static BaseQtVersion *qtVersion() { ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject(); if (!project || !project->activeTarget()) - return QString(); + return nullptr; - const BaseQtVersion *qtVersion = QtKitAspect::qtVersion(project->activeTarget()->kit()); - if (!qtVersion) - return QString(); - return qtVersion->qmakeProperty(propertyName); + return QtKitAspect::qtVersion(project->activeTarget()->kit()); } void QtSupportPlugin::extensionsInitialized() { Utils::MacroExpander *expander = Utils::globalMacroExpander(); - expander->registerVariable(kHostBins, + expander->registerVariable( + kHostBins, tr("Full path to the host bin directory of the current project's Qt version."), - []() { return qmakeProperty("QT_HOST_BINS"); }); + []() { + BaseQtVersion *qt = qtVersion(); + return qt ? qt->hostBinPath().toUserOutput() : QString(); + }); - expander->registerVariable(kInstallBins, + expander->registerVariable( + kInstallBins, tr("Full path to the target bin directory of the current project's Qt version.
" - "You probably want %1 instead.").arg(QString::fromLatin1(kHostBins)), - []() { return qmakeProperty("QT_INSTALL_BINS"); }); + "You probably want %1 instead.") + .arg(QString::fromLatin1(kInstallBins)), + []() { + BaseQtVersion *qt = qtVersion(); + return qt ? qt->binPath().toUserOutput() : QString(); + }); } } // Internal diff --git a/src/plugins/winrt/winrtdevice.cpp b/src/plugins/winrt/winrtdevice.cpp index 953756c79fa..cf99e212b03 100644 --- a/src/plugins/winrt/winrtdevice.cpp +++ b/src/plugins/winrt/winrtdevice.cpp @@ -225,7 +225,7 @@ QString WinRtDeviceFactory::findRunnerFilePath() const BaseQtVersion *qt = nullptr; for (BaseQtVersion *v : winrtVersions) { if (!qt || qt->qtVersion() < v->qtVersion()) { - QFileInfo fi(v->binPath().toString() + winRtRunnerExe); + QFileInfo fi(v->hostBinPath().toString() + winRtRunnerExe); if (fi.isFile() && fi.isExecutable()) { qt = v; filePath = fi.absoluteFilePath(); diff --git a/src/plugins/winrt/winrtpackagedeploymentstep.cpp b/src/plugins/winrt/winrtpackagedeploymentstep.cpp index b1b7cf76ca2..c410de4bf45 100644 --- a/src/plugins/winrt/winrtpackagedeploymentstep.cpp +++ b/src/plugins/winrt/winrtpackagedeploymentstep.cpp @@ -91,7 +91,8 @@ bool WinRtPackageDeploymentStep::init() if (!qt) return false; - const QString windeployqtPath = FileUtils::resolvePath(qt->binPath().toString(), "windeployqt.exe"); + const QString windeployqtPath = FileUtils::resolvePath(qt->hostBinPath().toString(), + "windeployqt.exe"); CommandLine windeployqt{windeployqtPath}; windeployqt.addArg(QDir::toNativeSeparators(m_targetFilePath)); @@ -104,8 +105,8 @@ bool WinRtPackageDeploymentStep::init() ProcessParameters *params = processParameters(); if (!QFile::exists(windeployqtPath)) { - raiseError(tr("Cannot find windeployqt.exe in \"%1\".").arg( - QDir::toNativeSeparators(qt->binPath().toString()))); + raiseError(tr("Cannot find windeployqt.exe in \"%1\".") + .arg(QDir::toNativeSeparators(qt->hostBinPath().toString()))); return false; } params->setCommandLine(windeployqt); diff --git a/src/plugins/winrt/winrtrunnerhelper.cpp b/src/plugins/winrt/winrtrunnerhelper.cpp index 139929d44b1..488215acb4a 100644 --- a/src/plugins/winrt/winrtrunnerhelper.cpp +++ b/src/plugins/winrt/winrtrunnerhelper.cpp @@ -62,10 +62,10 @@ WinRtRunnerHelper::WinRtRunnerHelper(ProjectExplorer::RunWorker *runWorker, QStr return; } - m_runnerFilePath = qt->binPath().toString() + QStringLiteral("/winrtrunner.exe"); + m_runnerFilePath = qt->hostBinPath().toString() + QStringLiteral("/winrtrunner.exe"); if (!QFile::exists(m_runnerFilePath)) { *errorMessage = tr("Cannot find winrtrunner.exe in \"%1\".").arg( - QDir::toNativeSeparators(qt->binPath().toString())); + QDir::toNativeSeparators(qt->hostBinPath().toString())); return; } From 7debb513e24d5874b9689126281a389e14a0513c Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Sep 2019 14:43:42 +0200 Subject: [PATCH 12/12] BaseQtVersion: Remove getters for configValues and qtConfigValues They are unused. Change-Id: I4350fe33af24e418eb318518f7ca66301d9a7519 Reviewed-by: hjk --- src/plugins/qtsupport/baseqtversion.cpp | 20 ++------------------ src/plugins/qtsupport/baseqtversion.h | 3 --- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 491390d95dc..7cb597c8cb3 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -175,9 +175,6 @@ public: bool m_qmakeIsExecutable = true; bool m_hasQtAbis = false; - QStringList m_configValues; - QStringList m_qtConfigValues; - QString m_unexpandedDisplayName; QString m_autodetectionSource; QSet m_overrideFeatures; @@ -1078,11 +1075,10 @@ void BaseQtVersion::ensureMkSpecParsed() const void BaseQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const { - d->m_configValues = evaluator->values("CONFIG"); - d->m_qtConfigValues = evaluator->values("QT_CONFIG"); + const QStringList configValues = evaluator->values("CONFIG"); d->m_defaultConfigIsDebugAndRelease = false; d->m_frameworkBuild = false; - for (const QString &value : qAsConst(d->m_configValues)) { + for (const QString &value : configValues) { if (value == "debug") d->m_defaultConfigIsDebug = true; else if (value == "release") @@ -1332,18 +1328,6 @@ QStringList BaseQtVersion::qtSoPaths() const return Utils::toList(paths); } -QStringList BaseQtVersion::configValues() const -{ - ensureMkSpecParsed(); - return d->m_configValues; -} - -QStringList BaseQtVersion::qtConfigValues() const -{ - ensureMkSpecParsed(); - return d->m_qtConfigValues; -} - MacroExpander *BaseQtVersion::macroExpander() const { return d->m_expander.macroExpander(this); diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index f1127bbfd9d..8de93f138bc 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -226,9 +226,6 @@ public: bool hasDebugBuild() const; bool hasReleaseBuild() const; - QStringList configValues() const; - QStringList qtConfigValues() const; - Utils::MacroExpander *macroExpander() const; // owned by the Qt version static std::unique_ptr createMacroExpander(const std::function &qtVersion);