diff options
author | Eike Ziller <eike.ziller@qt.io> | 2018-05-09 09:48:23 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2018-05-16 12:04:40 +0000 |
commit | 0db5f13dd1cb38e8556b054accc4356f87ecd795 (patch) | |
tree | 4e4171fdb7850c4b43ed628e0b86d959c1169ed2 /src/plugins/genericprojectmanager/genericmakestep.cpp | |
parent | 01dd22dc08e8169f60df32f4618a5e2dabaea177 (diff) |
Move generic make step to project explorer
As a first step of creating a generic base for the 3 existing
implementations.
Change-Id: I2456db74cb635316f97a247e2a2b6bdb34931440
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/genericprojectmanager/genericmakestep.cpp')
-rw-r--r-- | src/plugins/genericprojectmanager/genericmakestep.cpp | 220 |
1 files changed, 3 insertions, 217 deletions
diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index 37951d0308..739c8211a0 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -25,28 +25,13 @@ #include "genericmakestep.h" #include "genericprojectconstants.h" -#include "genericproject.h" -#include "ui_genericmakestep.h" -#include "genericbuildconfiguration.h" -#include <projectexplorer/buildsteplist.h> +#include <projectexplorer/buildconfiguration.h> #include <projectexplorer/gnumakeparser.h> #include <projectexplorer/kitinformation.h> -#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> -#include <projectexplorer/toolchain.h> -#include <qtsupport/qtkitinformation.h> -#include <qtsupport/qtparser.h> - -#include <utils/stringutils.h> -#include <utils/qtcassert.h> -#include <utils/qtcprocess.h> - -#include <QDir> - -using namespace Core; using namespace ProjectExplorer; namespace GenericProjectManager { @@ -56,17 +41,11 @@ const char GENERIC_MS_ID[] = "GenericProjectManager.GenericMakeStep"; const char GENERIC_MS_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("GenericProjectManager::Internal::GenericMakeStep", "Make"); -const char BUILD_TARGETS_KEY[] = "GenericProjectManager.GenericMakeStep.BuildTargets"; -const char MAKE_ARGUMENTS_KEY[] = "GenericProjectManager.GenericMakeStep.MakeArguments"; -const char MAKE_COMMAND_KEY[] = "GenericProjectManager.GenericMakeStep.MakeCommand"; -const char CLEAN_KEY[] = "GenericProjectManager.GenericMakeStep.Clean"; - GenericMakeStep::GenericMakeStep(BuildStepList *parent, const QString &buildTarget) - : AbstractProcessStep(parent, GENERIC_MS_ID) + : MakeStep(parent, GENERIC_MS_ID, buildTarget, {"all", "clean"}) { setDefaultDisplayName(QCoreApplication::translate("GenericProjectManager::Internal::GenericMakeStep", GENERIC_MS_DISPLAY_NAME)); - setBuildTarget(buildTarget, true); } bool GenericMakeStep::init(QList<const BuildStep *> &earlierSteps) @@ -99,7 +78,7 @@ bool GenericMakeStep::init(QList<const BuildStep *> &earlierSteps) // If we are cleaning, then make can fail with an error code, but that doesn't mean // we should stop the clean queue // That is mostly so that rebuild works on an already clean project - setIgnoreReturnValue(m_clean); + setIgnoreReturnValue(isClean()); setOutputParser(new GnuMakeParser()); IOutputParser *parser = target()->kit()->createOutputParser(); @@ -110,199 +89,6 @@ bool GenericMakeStep::init(QList<const BuildStep *> &earlierSteps) return AbstractProcessStep::init(earlierSteps); } -void GenericMakeStep::setClean(bool clean) -{ - m_clean = clean; -} - -bool GenericMakeStep::isClean() const -{ - return m_clean; -} - -QVariantMap GenericMakeStep::toMap() const -{ - QVariantMap map(AbstractProcessStep::toMap()); - - map.insert(BUILD_TARGETS_KEY, m_buildTargets); - map.insert(MAKE_ARGUMENTS_KEY, m_makeArguments); - map.insert(MAKE_COMMAND_KEY, m_makeCommand); - map.insert(CLEAN_KEY, m_clean); - return map; -} - -bool GenericMakeStep::fromMap(const QVariantMap &map) -{ - m_buildTargets = map.value(BUILD_TARGETS_KEY).toStringList(); - m_makeArguments = map.value(MAKE_ARGUMENTS_KEY).toString(); - m_makeCommand = map.value(MAKE_COMMAND_KEY).toString(); - m_clean = map.value(CLEAN_KEY).toBool(); - - return BuildStep::fromMap(map); -} - -QString GenericMakeStep::allArguments() const -{ - QString args = m_makeArguments; - Utils::QtcProcess::addArgs(&args, m_buildTargets); - return args; -} - -QString GenericMakeStep::makeCommand(const Utils::Environment &environment) const -{ - QString command = m_makeCommand; - if (command.isEmpty()) { - ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID); - if (tc) - command = tc->makeCommand(environment); - else - command = "make"; - } - return command; -} - -void GenericMakeStep::run(QFutureInterface<bool> &fi) -{ - AbstractProcessStep::run(fi); -} - -BuildStepConfigWidget *GenericMakeStep::createConfigWidget() -{ - return new GenericMakeStepConfigWidget(this); -} - -bool GenericMakeStep::immutable() const -{ - return false; -} - -bool GenericMakeStep::buildsTarget(const QString &target) const -{ - return m_buildTargets.contains(target); -} - -void GenericMakeStep::setBuildTarget(const QString &target, bool on) -{ - QStringList old = m_buildTargets; - if (on && !old.contains(target)) - old << target; - else if (!on && old.contains(target)) - old.removeOne(target); - - m_buildTargets = old; -} - -// -// GenericMakeStepConfigWidget -// - -GenericMakeStepConfigWidget::GenericMakeStepConfigWidget(GenericMakeStep *makeStep) : - m_makeStep(makeStep) -{ - m_ui = new Ui::GenericMakeStep; - m_ui->setupUi(this); - - const auto pro = static_cast<GenericProject *>(m_makeStep->target()->project()); - const auto buildTargets = pro->buildTargets(); - for (const QString &target : buildTargets) { - auto item = new QListWidgetItem(target, m_ui->targetsList); - item->setFlags(item->flags() | Qt::ItemIsUserCheckable); - item->setCheckState(m_makeStep->buildsTarget(item->text()) ? Qt::Checked : Qt::Unchecked); - } - - m_ui->makeLineEdit->setText(m_makeStep->m_makeCommand); - m_ui->makeArgumentsLineEdit->setText(m_makeStep->m_makeArguments); - updateMakeOverrideLabel(); - updateDetails(); - - connect(m_ui->targetsList, &QListWidget::itemChanged, - this, &GenericMakeStepConfigWidget::itemChanged); - connect(m_ui->makeLineEdit, &QLineEdit::textEdited, - this, &GenericMakeStepConfigWidget::makeLineEditTextEdited); - connect(m_ui->makeArgumentsLineEdit, &QLineEdit::textEdited, - this, &GenericMakeStepConfigWidget::makeArgumentsLineEditTextEdited); - - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, - this, &GenericMakeStepConfigWidget::updateMakeOverrideLabel); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, - this, &GenericMakeStepConfigWidget::updateDetails); - - connect(m_makeStep->target(), &Target::kitChanged, - this, &GenericMakeStepConfigWidget::updateMakeOverrideLabel); - - pro->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() { - if (static_cast<BuildConfiguration *>(sender())->isActive()) { - updateMakeOverrideLabel(); - updateDetails(); - } - }); - connect(pro, &Project::activeProjectConfigurationChanged, - this, [this](ProjectConfiguration *pc) { - if (pc && pc->isActive()) { - updateMakeOverrideLabel(); - updateDetails(); - } - }); -} - -GenericMakeStepConfigWidget::~GenericMakeStepConfigWidget() -{ - delete m_ui; -} - -QString GenericMakeStepConfigWidget::displayName() const -{ - return tr("Make", "GenericMakestep display name."); -} - -void GenericMakeStepConfigWidget::updateMakeOverrideLabel() -{ - BuildConfiguration *bc = m_makeStep->buildConfiguration(); - if (!bc) - bc = m_makeStep->target()->activeBuildConfiguration(); - - m_ui->makeLabel->setText(tr("Override %1:").arg(QDir::toNativeSeparators(m_makeStep->makeCommand(bc->environment())))); -} - -void GenericMakeStepConfigWidget::updateDetails() -{ - BuildConfiguration *bc = m_makeStep->buildConfiguration(); - if (!bc) - bc = m_makeStep->target()->activeBuildConfiguration(); - - ProcessParameters param; - param.setMacroExpander(bc->macroExpander()); - param.setWorkingDirectory(bc->buildDirectory().toString()); - param.setEnvironment(bc->environment()); - param.setCommand(m_makeStep->makeCommand(bc->environment())); - param.setArguments(m_makeStep->allArguments()); - m_summaryText = param.summary(displayName()); - emit updateSummary(); -} - -QString GenericMakeStepConfigWidget::summaryText() const -{ - return m_summaryText; -} - -void GenericMakeStepConfigWidget::itemChanged(QListWidgetItem *item) -{ - m_makeStep->setBuildTarget(item->text(), item->checkState() & Qt::Checked); - updateDetails(); -} - -void GenericMakeStepConfigWidget::makeLineEditTextEdited() -{ - m_makeStep->m_makeCommand = m_ui->makeLineEdit->text(); - updateDetails(); -} - -void GenericMakeStepConfigWidget::makeArgumentsLineEditTextEdited() -{ - m_makeStep->m_makeArguments = m_ui->makeArgumentsLineEdit->text(); - updateDetails(); -} - // // GenericMakeAllStepFactory // |