summaryrefslogtreecommitdiff
path: root/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp
diff options
context:
space:
mode:
authorPeter Kümmel <syntheticpp@gmx.net>2012-10-02 17:46:12 +0200
committerDaniel Teske <daniel.teske@digia.com>2012-10-04 15:26:08 +0200
commit264313ec90e7eaf3797833d715d3c4aa1e40d60b (patch)
treedcbaad3c893ef10741e4755d5c6edc772c229d86 /src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp
parentbec84f09aa6260b28093953a424de33c5a81a40b (diff)
downloadqt-creator-264313ec90e7eaf3797833d715d3c4aa1e40d60b.tar.gz
CMake: add Ninja support
The cmake wizard proposes also ninja if ninja support is available Ninja must be in PATH, but it is only called once, so it doesn't hurt. Task-number: QTCREATORBUG-7720 Reviewed-by: Daniel Teske <daniel.teske@digia.com> Change-Id: If3c9c7ae55e6990fa16b031fc2998a8d8d9ed17a Reviewed-by: Peter Kümmel <syntheticpp@gmx.net> Reviewed-by: Yuchen Deng <loaden@gmail.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp77
1 files changed, 58 insertions, 19 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp
index 433f5fc61c..de16775854 100644
--- a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp
@@ -30,6 +30,7 @@
#include "cmakeopenprojectwizard.h"
#include "cmakeprojectmanager.h"
+#include "cmakebuildconfiguration.h"
#include <coreplugin/icore.h>
#include <utils/pathchooser.h>
@@ -63,11 +64,37 @@ using namespace CMakeProjectManager::Internal;
// |--> Already existing cbp file (and new enough) --> Page: Ready to load the project
// |--> Page: Ask for cmd options, run generator
-CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const QString &sourceDirectory, const Utils::Environment &env)
+
+namespace CMakeProjectManager {
+namespace Internal {
+
+ class GeneratorInfo
+ {
+ public:
+ GeneratorInfo()
+ : m_kit(0), m_isNinja(false) {}
+ explicit GeneratorInfo(ProjectExplorer::Kit *kit, bool ninja = false)
+ : m_kit(kit), m_isNinja(ninja) {}
+
+ ProjectExplorer::Kit *kit() const { return m_kit; }
+ bool isNinja() const { return m_isNinja; }
+
+ private:
+ ProjectExplorer::Kit *m_kit;
+ bool m_isNinja;
+ };
+
+}
+}
+
+Q_DECLARE_METATYPE(CMakeProjectManager::Internal::GeneratorInfo);
+
+
+CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const QString &sourceDirectory, CMakeBuildConfiguration *bc)
: m_cmakeManager(cmakeManager),
m_sourceDirectory(sourceDirectory),
m_creatingCbpFiles(false),
- m_environment(env)
+ m_buildConfiguration(bc)
{
int startid;
if (hasInSourceBuild()) {
@@ -95,11 +122,11 @@ CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const
CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const QString &sourceDirectory,
const QString &buildDirectory, CMakeOpenProjectWizard::Mode mode,
- const Utils::Environment &env)
+ CMakeBuildConfiguration *bc)
: m_cmakeManager(cmakeManager),
m_sourceDirectory(sourceDirectory),
m_creatingCbpFiles(true),
- m_environment(env)
+ m_buildConfiguration(bc)
{
CMakeRunPage::Mode rmode;
@@ -115,11 +142,11 @@ CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const
CMakeOpenProjectWizard::CMakeOpenProjectWizard(CMakeManager *cmakeManager, const QString &sourceDirectory,
const QString &oldBuildDirectory,
- const Utils::Environment &env)
+ CMakeBuildConfiguration *bc)
: m_cmakeManager(cmakeManager),
m_sourceDirectory(sourceDirectory),
m_creatingCbpFiles(true),
- m_environment(env)
+ m_buildConfiguration(bc)
{
m_buildDirectory = oldBuildDirectory;
addPage(new ShadowBuildPage(this, true));
@@ -201,9 +228,13 @@ void CMakeOpenProjectWizard::setArguments(const QString &args)
Utils::Environment CMakeOpenProjectWizard::environment() const
{
- return m_environment;
+ return m_buildConfiguration->environment();
}
+CMakeBuildConfiguration *CMakeOpenProjectWizard::buildConfiguration() const
+{
+ return m_buildConfiguration;
+}
InSourceBuildPage::InSourceBuildPage(CMakeOpenProjectWizard *cmakeWizard)
: QWizardPage(cmakeWizard), m_cmakeWizard(cmakeWizard)
@@ -409,8 +440,6 @@ void CMakeRunPage::initializePage()
ProjectExplorer::KitManager::instance()->kits();
foreach (ProjectExplorer::Kit *k, kitList) {
- QVariant kitVariant = qVariantFromValue(static_cast<void *>(k));
-
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(k);
if (!tc)
continue;
@@ -421,22 +450,24 @@ void CMakeRunPage::initializePage()
|| targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2010Flavor
|| targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2012Flavor) {
if (hasCodeBlocksGenerator && (cachedGenerator.isEmpty() || cachedGenerator == "NMake Makefiles"))
- m_generatorComboBox->addItem(tr("NMake Generator (%1)").arg(k->displayName()), kitVariant);
+ m_generatorComboBox->addItem(tr("NMake Generator (%1)").arg(k->displayName()), qVariantFromValue(GeneratorInfo(k)));
} else if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) {
#ifdef Q_OS_WIN
if (cachedGenerator.isEmpty() || cachedGenerator == "MinGW Makefiles")
- m_generatorComboBox->addItem(tr("MinGW Generator (%1)").arg(k->displayName()), kitVariant);
+ m_generatorComboBox->addItem(tr("MinGW Generator (%1)").arg(k->displayName()), qVariantFromValue(GeneratorInfo(k)));
#else
if (cachedGenerator.isEmpty() || cachedGenerator == "Unix Makefiles")
- m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(k->displayName()), kitVariant);
+ m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(k->displayName()), qVariantFromValue(GeneratorInfo(k)));
#endif
-
}
} else {
// Non windows
if (cachedGenerator.isEmpty() || cachedGenerator == "Unix Makefiles")
- m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(k->displayName()), kitVariant);
+ m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(k->displayName()), qVariantFromValue(GeneratorInfo(k)));
}
+ if (m_cmakeWizard->cmakeManager()->hasCodeBlocksNinjaGenerator() &&
+ (cachedGenerator.isEmpty() || cachedGenerator == "Ninja"))
+ m_generatorComboBox->addItem(tr("Ninja (%1)").arg(k->displayName()), qVariantFromValue(GeneratorInfo(k, true)));
}
}
@@ -449,8 +480,11 @@ void CMakeRunPage::runCMake()
int index = m_generatorComboBox->currentIndex();
ProjectExplorer::Kit *k = 0;
- if (index >= 0)
- k = static_cast<ProjectExplorer::Kit *>(m_generatorComboBox->itemData(index).value<void *>());
+ GeneratorInfo generatorInfo;
+ if (index >= 0) {
+ generatorInfo = m_generatorComboBox->itemData(index).value<GeneratorInfo>();
+ k = generatorInfo.kit();
+ }
if (!k) {
m_output->appendPlainText(tr("No generator selected."));
return;
@@ -464,15 +498,20 @@ void CMakeRunPage::runCMake()
CMakeManager *cmakeManager = m_cmakeWizard->cmakeManager();
QString generator = QLatin1String("-GCodeBlocks - Unix Makefiles");
- if (tc->targetAbi().os() == ProjectExplorer::Abi::WindowsOS) {
- if (tc->targetAbi().osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor)
+ if (generatorInfo.isNinja()) {
+ m_cmakeWizard->buildConfiguration()->setUseNinja(true);
+ generator = "-GCodeBlocks - Ninja";
+ } else if (tc->targetAbi().os() == ProjectExplorer::Abi::WindowsOS) {
+ m_cmakeWizard->buildConfiguration()->setUseNinja(false);
+ if (tc->targetAbi().osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) {
#ifdef Q_OS_WIN
generator = QLatin1String("-GCodeBlocks - MinGW Makefiles");
#else
generator = QLatin1String("-GCodeBlocks - Unix Makefiles");
#endif
- else
+ } else {
generator = QLatin1String("-GCodeBlocks - NMake Makefiles");
+ }
}
Utils::Environment env = m_cmakeWizard->environment();