diff options
author | Peter Kümmel <syntheticpp@gmx.net> | 2012-10-02 17:46:12 +0200 |
---|---|---|
committer | Daniel Teske <daniel.teske@digia.com> | 2012-10-04 15:26:08 +0200 |
commit | 264313ec90e7eaf3797833d715d3c4aa1e40d60b (patch) | |
tree | dcbaad3c893ef10741e4755d5c6edc772c229d86 /src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp | |
parent | bec84f09aa6260b28093953a424de33c5a81a40b (diff) | |
download | qt-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.cpp | 77 |
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(); |