diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2020-01-23 12:25:44 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2020-02-06 13:50:57 +0000 |
commit | e4738904d9bc0a98321face1975abbc4e67d4a86 (patch) | |
tree | a830cc7ac2133be7c6ef36d7c645c81bad808f88 /src/plugins/qmakeprojectmanager | |
parent | ec4e60e691dd140646be9c8d21b553fded1366a0 (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.cpp | 24 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp | 24 |
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) |