aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakekitinformation.cpp')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakekitinformation.cpp148
1 files changed, 84 insertions, 64 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp
index 0e0d47cb5f..eeae05f921 100644
--- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp
@@ -24,16 +24,15 @@
****************************************************************************/
#include "cmakekitinformation.h"
+
#include "cmakeprojectconstants.h"
#include "cmakeprojectplugin.h"
#include "cmakespecificsettings.h"
#include "cmaketool.h"
#include "cmaketoolmanager.h"
-#include <app/app_version.h>
#include <coreplugin/icore.h>
#include <coreplugin/variablechooser.h>
-#include <projectexplorer/kit.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorersettings.h>
@@ -42,22 +41,23 @@
#include <qtsupport/baseqtversion.h>
#include <qtsupport/qtkitinformation.h>
#include <projectexplorer/projectexplorerconstants.h>
+
+#include <app/app_version.h>
+
#include <utils/algorithm.h>
#include <utils/elidinglabel.h>
#include <utils/environment.h>
+#include <utils/macroexpander.h>
#include <utils/qtcassert.h>
#include <QComboBox>
#include <QDialog>
#include <QDialogButtonBox>
-#include <QFileInfo>
#include <QGridLayout>
-#include <QLabel>
#include <QLineEdit>
#include <QPlainTextEdit>
#include <QPointer>
#include <QPushButton>
-#include <QVariant>
using namespace ProjectExplorer;
@@ -66,10 +66,10 @@ namespace CMakeProjectManager {
// CMakeKitAspect:
// --------------------------------------------------------------------
-static Core::Id defaultCMakeToolId()
+static Utils::Id defaultCMakeToolId()
{
CMakeTool *defaultTool = CMakeToolManager::defaultCMakeTool();
- return defaultTool ? defaultTool->id() : Core::Id();
+ return defaultTool ? defaultTool->id() : Utils::Id();
}
static const char TOOL_ID[] = "CMakeProjectManager.CMakeKitInformation";
@@ -125,10 +125,10 @@ private:
m_comboBox->setCurrentIndex(tool ? indexOf(tool->id()) : -1);
}
- int indexOf(const Core::Id &id)
+ int indexOf(const Utils::Id &id)
{
for (int i = 0; i < m_comboBox->count(); ++i) {
- if (id == Core::Id::fromSetting(m_comboBox->itemData(i)))
+ if (id == Utils::Id::fromSetting(m_comboBox->itemData(i)))
return i;
}
return -1;
@@ -137,20 +137,20 @@ private:
void updateComboBox()
{
// remove unavailable cmake tool:
- int pos = indexOf(Core::Id());
+ int pos = indexOf(Utils::Id());
if (pos >= 0)
m_comboBox->removeItem(pos);
if (m_comboBox->count() == 0) {
m_comboBox->addItem(tr("<No CMake Tool available>"),
- Core::Id().toSetting());
+ Utils::Id().toSetting());
m_comboBox->setEnabled(false);
} else {
m_comboBox->setEnabled(true);
}
}
- void cmakeToolAdded(const Core::Id &id)
+ void cmakeToolAdded(const Utils::Id &id)
{
const CMakeTool *tool = CMakeToolManager::findById(id);
QTC_ASSERT(tool, return);
@@ -160,7 +160,7 @@ private:
refresh();
}
- void cmakeToolUpdated(const Core::Id &id)
+ void cmakeToolUpdated(const Utils::Id &id)
{
const int pos = indexOf(id);
QTC_ASSERT(pos >= 0, return);
@@ -171,7 +171,7 @@ private:
m_comboBox->setItemText(pos, tool->displayName());
}
- void cmakeToolRemoved(const Core::Id &id)
+ void cmakeToolRemoved(const Utils::Id &id)
{
const int pos = indexOf(id);
QTC_ASSERT(pos >= 0, return);
@@ -191,14 +191,13 @@ private:
if (m_removingItem)
return;
- const Core::Id id = Core::Id::fromSetting(m_comboBox->itemData(index));
+ const Utils::Id id = Utils::Id::fromSetting(m_comboBox->itemData(index));
CMakeKitAspect::setCMakeTool(m_kit, id);
}
void manageCMakeTools()
{
- Core::ICore::showOptionsDialog(Constants::CMAKE_SETTINGSPAGE_ID,
- buttonWidget());
+ Core::ICore::showOptionsDialog(Constants::CMAKE_SETTINGS_PAGE_ID, buttonWidget());
}
bool m_removingItem = false;
@@ -224,16 +223,16 @@ CMakeKitAspect::CMakeKitAspect()
[this]() { foreach (Kit *k, KitManager::kits()) fix(k); });
}
-Core::Id CMakeKitAspect::id()
+Utils::Id CMakeKitAspect::id()
{
return TOOL_ID;
}
-Core::Id CMakeKitAspect::cmakeToolId(const Kit *k)
+Utils::Id CMakeKitAspect::cmakeToolId(const Kit *k)
{
if (!k)
return {};
- return Core::Id::fromSetting(k->value(TOOL_ID));
+ return Utils::Id::fromSetting(k->value(TOOL_ID));
}
CMakeTool *CMakeKitAspect::cmakeTool(const Kit *k)
@@ -241,9 +240,9 @@ CMakeTool *CMakeKitAspect::cmakeTool(const Kit *k)
return CMakeToolManager::findById(cmakeToolId(k));
}
-void CMakeKitAspect::setCMakeTool(Kit *k, const Core::Id id)
+void CMakeKitAspect::setCMakeTool(Kit *k, const Utils::Id id)
{
- const Core::Id toSet = id.isValid() ? id : defaultCMakeToolId();
+ const Utils::Id toSet = id.isValid() ? id : defaultCMakeToolId();
QTC_ASSERT(!id.isValid() || CMakeToolManager::findById(toSet), return);
if (k)
k->setValue(TOOL_ID, toSet.toSetting());
@@ -255,9 +254,11 @@ Tasks CMakeKitAspect::validate(const Kit *k) const
CMakeTool *tool = CMakeKitAspect::cmakeTool(k);
if (tool) {
CMakeTool::Version version = tool->version();
- if (version.major < 3) {
- result << BuildSystemTask(Task::Warning, tr("CMake version %1 is unsupported. Please update to "
- "version 3.0 or later.").arg(QString::fromUtf8(version.fullVersion)));
+ if (version.major < 3 || (version.major == 3 && version.minor < 14)) {
+ result << BuildSystemTask(Task::Warning,
+ tr("CMake version %1 is unsupported. Please update to "
+ "version 3.14 (with file-api) or later.")
+ .arg(QString::fromUtf8(version.fullVersion)));
}
}
return result;
@@ -297,7 +298,7 @@ void CMakeKitAspect::addToMacroExpander(Kit *k, Utils::MacroExpander *expander)
});
}
-QSet<Core::Id> CMakeKitAspect::availableFeatures(const Kit *k) const
+QSet<Utils::Id> CMakeKitAspect::availableFeatures(const Kit *k) const
{
if (cmakeTool(k))
return { CMakeProjectManager::Constants::CMAKE_FEATURE_ID };
@@ -468,7 +469,20 @@ private:
namespace {
-struct GeneratorInfo {
+class GeneratorInfo
+{
+public:
+ GeneratorInfo() = default;
+ GeneratorInfo(const QString &generator_,
+ const QString &extraGenerator_ = QString(),
+ const QString &platform_ = QString(),
+ const QString &toolset_ = QString())
+ : generator(generator_)
+ , extraGenerator(extraGenerator_)
+ , platform(platform_)
+ , toolset(toolset_)
+ {}
+
QVariant toVariant() const {
QVariantMap result;
result.insert(GENERATOR_KEY, generator);
@@ -570,10 +584,12 @@ void CMakeGeneratorKitAspect::setToolset(Kit *k, const QString &toolset)
}
void CMakeGeneratorKitAspect::set(Kit *k,
- const QString &generator, const QString &extraGenerator,
- const QString &platform, const QString &toolset)
+ const QString &generator,
+ const QString &extraGenerator,
+ const QString &platform,
+ const QString &toolset)
{
- GeneratorInfo info = {generator, extraGenerator, platform, toolset};
+ GeneratorInfo info(generator, extraGenerator, platform, toolset);
setGeneratorInfo(k, info);
}
@@ -607,12 +623,9 @@ QVariant CMakeGeneratorKitAspect::defaultValue(const Kit *k) const
if (!tool)
return QVariant();
- const QString extraGenerator = "CodeBlocks";
-
- QList<CMakeTool::Generator> known = tool->supportedGenerators();
- auto it = std::find_if(known.constBegin(), known.constEnd(),
- [extraGenerator](const CMakeTool::Generator &g) {
- return g.matches("Ninja", extraGenerator);
+ const QList<CMakeTool::Generator> known = tool->supportedGenerators();
+ auto it = std::find_if(known.constBegin(), known.constEnd(), [](const CMakeTool::Generator &g) {
+ return g.matches("Ninja");
});
if (it != known.constEnd()) {
const bool hasNinja = [k]() {
@@ -628,44 +641,45 @@ QVariant CMakeGeneratorKitAspect::defaultValue(const Kit *k) const
}();
if (hasNinja)
- return GeneratorInfo({QString("Ninja"), extraGenerator, QString(), QString()}).toVariant();
+ return GeneratorInfo("Ninja").toVariant();
}
if (Utils::HostOsInfo::isWindowsHost()) {
// *sigh* Windows with its zoo of incompatible stuff again...
- ToolChain *tc = ToolChainKitAspect::toolChain(k, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
+ ToolChain *tc = ToolChainKitAspect::cxxToolChain(k);
if (tc && tc->typeId() == ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID) {
- it = std::find_if(known.constBegin(), known.constEnd(),
- [extraGenerator](const CMakeTool::Generator &g) {
- return g.matches("MinGW Makefiles", extraGenerator);
- });
+ it = std::find_if(known.constBegin(),
+ known.constEnd(),
+ [](const CMakeTool::Generator &g) {
+ return g.matches("MinGW Makefiles");
+ });
} else {
- it = std::find_if(known.constBegin(), known.constEnd(),
- [extraGenerator](const CMakeTool::Generator &g) {
- return g.matches("NMake Makefiles", extraGenerator)
- || g.matches("NMake Makefiles JOM", extraGenerator);
- });
+ it = std::find_if(known.constBegin(),
+ known.constEnd(),
+ [](const CMakeTool::Generator &g) {
+ return g.matches("NMake Makefiles")
+ || g.matches("NMake Makefiles JOM");
+ });
if (ProjectExplorerPlugin::projectExplorerSettings().useJom) {
it = std::find_if(known.constBegin(),
known.constEnd(),
- [extraGenerator](const CMakeTool::Generator &g) {
- return g.matches("NMake Makefiles JOM", extraGenerator);
+ [](const CMakeTool::Generator &g) {
+ return g.matches("NMake Makefiles JOM");
});
}
if (it == known.constEnd()) {
it = std::find_if(known.constBegin(),
known.constEnd(),
- [extraGenerator](const CMakeTool::Generator &g) {
- return g.matches("NMake Makefiles", extraGenerator);
+ [](const CMakeTool::Generator &g) {
+ return g.matches("NMake Makefiles");
});
}
}
} else {
// Unix-oid OSes:
- it = std::find_if(known.constBegin(), known.constEnd(),
- [extraGenerator](const CMakeTool::Generator &g) {
- return g.matches("Unix Makefiles", extraGenerator);
+ it = std::find_if(known.constBegin(), known.constEnd(), [](const CMakeTool::Generator &g) {
+ return g.matches("Unix Makefiles");
});
}
if (it == known.constEnd())
@@ -673,7 +687,7 @@ QVariant CMakeGeneratorKitAspect::defaultValue(const Kit *k) const
if (it == known.constEnd())
return QVariant();
- return GeneratorInfo({it->name, extraGenerator, QString(), QString()}).toVariant();
+ return GeneratorInfo(it->name).toVariant();
}
Tasks CMakeGeneratorKitAspect::validate(const Kit *k) const
@@ -703,11 +717,10 @@ Tasks CMakeGeneratorKitAspect::validate(const Kit *k) const
if (!it->supportsToolset && !info.toolset.isEmpty())
addWarning(tr("Toolset is not supported by the selected CMake generator."));
}
- if (!tool->hasServerMode() && !tool->hasFileApi() && info.extraGenerator != "CodeBlocks") {
- addWarning(tr("The selected CMake binary has no server-mode and the CMake "
- "generator does not generate a CodeBlocks file. "
+ if (!tool->hasFileApi()) {
+ addWarning(tr("The selected CMake binary does not support file-api. "
"%1 will not be able to parse CMake projects.")
- .arg(Core::Constants::IDE_DISPLAY_NAME));
+ .arg(Core::Constants::IDE_DISPLAY_NAME));
}
}
@@ -740,9 +753,10 @@ void CMakeGeneratorKitAspect::fix(Kit *k)
dv.fromVariant(defaultValue(k));
setGeneratorInfo(k, dv);
} else {
- const GeneratorInfo dv = {info.generator, info.extraGenerator,
- it->supportsPlatform ? info.platform : QString(),
- it->supportsToolset ? info.toolset : QString()};
+ const GeneratorInfo dv(info.generator,
+ info.extraGenerator,
+ it->supportsPlatform ? info.platform : QString(),
+ it->supportsToolset ? info.toolset : QString());
setGeneratorInfo(k, dv);
}
}
@@ -960,6 +974,12 @@ void CMakeConfigurationKitAspect::fromStringList(Kit *k, const QStringList &in)
setConfiguration(k, result);
}
+QStringList CMakeConfigurationKitAspect::toArgumentsList(const Kit *k)
+{
+ return Utils::transform(CMakeConfigurationKitAspect::configuration(k),
+ [](const CMakeConfigItem &i) { return i.toArgument(nullptr); });
+}
+
CMakeConfig CMakeConfigurationKitAspect::defaultConfiguration(const Kit *k)
{
Q_UNUSED(k)
@@ -991,8 +1011,8 @@ Tasks CMakeConfigurationKitAspect::validate(const Kit *k) const
QTC_ASSERT(k, return Tasks());
const QtSupport::BaseQtVersion *const version = QtSupport::QtKitAspect::qtVersion(k);
- const ToolChain *const tcC = ToolChainKitAspect::toolChain(k, ProjectExplorer::Constants::C_LANGUAGE_ID);
- const ToolChain *const tcCxx = ToolChainKitAspect::toolChain(k, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
+ const ToolChain *const tcC = ToolChainKitAspect::cToolChain(k);
+ const ToolChain *const tcCxx = ToolChainKitAspect::cxxToolChain(k);
const CMakeConfig config = configuration(k);
const bool isQt4 = version && version->qtVersion() < QtSupport::QtVersionNumber(5, 0, 0);