aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmakeprojectmanager
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2020-01-23 12:25:44 +0100
committerTobias Hunger <tobias.hunger@qt.io>2020-02-06 13:50:57 +0000
commite4738904d9bc0a98321face1975abbc4e67d4a86 (patch)
treea830cc7ac2133be7c6ef36d7c645c81bad808f88 /src/plugins/qmakeprojectmanager
parentec4e60e691dd140646be9c8d21b553fded1366a0 (diff)
TargetSetupPage: Improve reporting on invalid kits
Give the reason for a kit being disabled in the tooltip. E.g. for a CMake project you will now get "Kit is invalid: No CMake tool set." instead of a generic error message about the kit being invalid. Change-Id: Ic776dc24149d65ebf27163b605ec2e52a3a504a7 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/qmakeprojectmanager')
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.cpp24
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp24
2 files changed, 32 insertions, 16 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
index 91987e2574f..b7bb4693558 100644
--- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
@@ -117,16 +117,15 @@ private:
/*!
\class QmakeProject
- QmakeProject manages information about an individual Qt 4 (.pro) project file.
+ QmakeProject manages information about an individual qmake project file (.pro).
*/
-static bool matchesKit(const Project *p, const Kit *kit)
+static QtSupport::BaseQtVersion *projectIsPartOfQt(const Project *p)
{
FilePath filePath = p->projectFilePath();
- QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(kit);
- return QtSupport::QtVersionManager::version([&filePath, version](const QtSupport::BaseQtVersion *v) {
- return v->isValid() && v->isSubProject(filePath) && v == version;
+ return QtSupport::QtVersionManager::version([&filePath](const QtSupport::BaseQtVersion *v) {
+ return v->isValid() && v->isSubProject(filePath);
});
}
@@ -138,8 +137,6 @@ QmakeProject::QmakeProject(const FilePath &fileName) :
setDisplayName(fileName.toFileInfo().completeBaseName());
setCanBuildProducts();
setHasMakeInstallEquivalent(true);
-
- setPreferredKitPredicate([this](const Kit *kit) -> bool { return matchesKit(this, kit); });
}
QmakeProject::~QmakeProject()
@@ -603,12 +600,21 @@ void QmakeBuildSystem::buildFinished(bool success)
Tasks QmakeProject::projectIssues(const Kit *k) const
{
Tasks result = Project::projectIssues(k);
- if (!QtSupport::QtKitAspect::qtVersion(k))
+ const QtSupport::BaseQtVersion *const qtFromKit = QtSupport::QtKitAspect::qtVersion(k);
+ if (!qtFromKit)
result.append(createProjectTask(Task::TaskType::Error, tr("No Qt version set in kit.")));
- else if (!QtSupport::QtKitAspect::qtVersion(k)->isValid())
+ else if (!qtFromKit->isValid())
result.append(createProjectTask(Task::TaskType::Error, tr("Qt version is invalid.")));
if (!ToolChainKitAspect::toolChain(k, ProjectExplorer::Constants::CXX_LANGUAGE_ID))
result.append(createProjectTask(Task::TaskType::Error, tr("No C++ compiler set in kit.")));
+
+ const QtSupport::BaseQtVersion *const qtThatContainsProject = projectIsPartOfQt(this);
+ if (qtThatContainsProject && qtThatContainsProject != qtFromKit) {
+ result.append(CompileTask(Task::Warning,
+ tr("Project is part of Qt sources that do not match "
+ "the Qt defined in the Kit")));
+ }
+
return result;
}
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
index c6d90f617f3..38074cb0c61 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
@@ -37,6 +37,7 @@
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/targetsetuppage.h>
+#include <projectexplorer/task.h>
#include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtsupportconstants.h>
@@ -178,14 +179,23 @@ BaseQmakeProjectWizardDialog::~BaseQmakeProjectWizardDialog()
int BaseQmakeProjectWizardDialog::addTargetSetupPage(int id)
{
m_targetSetupPage = new ProjectExplorer::TargetSetupPage;
- const Core::Id platform = selectedPlatform();
- QSet<Core::Id> features = {QtSupport::Constants::FEATURE_DESKTOP};
- if (!platform.isValid())
- m_targetSetupPage->setPreferredKitPredicate(QtKitAspect::qtVersionPredicate(features));
- else
- m_targetSetupPage->setPreferredKitPredicate(QtKitAspect::platformPredicate(platform));
- m_targetSetupPage->setRequiredKitPredicate(QtKitAspect::qtVersionPredicate(requiredFeatures()));
+ m_targetSetupPage->setTasksGenerator([this](const Kit *k) -> Tasks {
+ if (!QtKitAspect::qtVersionPredicate(requiredFeatures())(k))
+ return {
+ ProjectExplorer::CompileTask(Task::Error, tr("Required Qt features not present."))};
+
+ const Core::Id platform = selectedPlatform();
+ if (platform.isValid() && !QtKitAspect::platformPredicate(platform)(k))
+ return {ProjectExplorer::CompileTask(
+ ProjectExplorer::Task::Warning,
+ tr("Qt version does not target the expected platform."))};
+ QSet<Core::Id> features = {QtSupport::Constants::FEATURE_DESKTOP};
+ if (!QtKitAspect::qtVersionPredicate(features)(k))
+ return {ProjectExplorer::CompileTask(ProjectExplorer::Task::Unknown,
+ tr("Qt version does not provide all features."))};
+ return {};
+ });
resize(900, 450);
if (id >= 0)