| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | /**************************************************************************
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** Contact: Nokia Corporation (qt-info@nokia.com) | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | ** Commercial Usage | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Licensees holding valid Qt Commercial licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the Qt Commercial License Agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and Nokia. | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** GNU Lesser General Public License Usage | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
					
						
							|  |  |  | ** General Public License version 2.1 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation and appearing in the file LICENSE.LGPL included in the | 
					
						
							|  |  |  | ** packaging of this file.  Please review the following information to | 
					
						
							|  |  |  | ** ensure the GNU Lesser General Public License version 2.1 requirements | 
					
						
							|  |  |  | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** If you are unsure which license is appropriate for your use, please | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** contact the sales department at http://www.qtsoftware.com/contact.
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | **************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | #include "genericmakestep.h"
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | #include "genericprojectconstants.h"
 | 
					
						
							|  |  |  | #include "genericproject.h"
 | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  | #include "ui_genericmakestep.h"
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | #include <extensionsystem/pluginmanager.h>
 | 
					
						
							| 
									
										
										
										
											2009-03-18 14:35:35 +01:00
										 |  |  | #include <projectexplorer/toolchain.h>
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | #include <utils/qtcassert.h>
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | #include <QtGui/QFormLayout>
 | 
					
						
							|  |  |  | #include <QtGui/QGroupBox>
 | 
					
						
							|  |  |  | #include <QtGui/QCheckBox>
 | 
					
						
							|  |  |  | #include <QtGui/QLineEdit>
 | 
					
						
							|  |  |  | #include <QtGui/QListWidget>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace GenericProjectManager; | 
					
						
							|  |  |  | using namespace GenericProjectManager::Internal; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | GenericMakeStep::GenericMakeStep(GenericProject *pro) | 
					
						
							| 
									
										
										
										
											2009-05-05 14:56:59 +02:00
										 |  |  |     : AbstractMakeStep(pro), m_pro(pro) | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | GenericMakeStep::~GenericMakeStep() | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | bool GenericMakeStep::init(const QString &buildConfiguration) | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     const QString buildParser = m_pro->buildParser(buildConfiguration); | 
					
						
							| 
									
										
										
										
											2009-05-05 14:56:59 +02:00
										 |  |  |     setBuildParser(buildParser); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  |     qDebug() << "*** build parser:" << buildParser; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setEnabled(buildConfiguration, true); | 
					
						
							|  |  |  |     setWorkingDirectory(buildConfiguration, m_pro->buildDirectory(buildConfiguration)); | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     QString command = value(buildConfiguration, "makeCommand").toString(); | 
					
						
							|  |  |  |     if (command.isEmpty()) { | 
					
						
							|  |  |  |         if (ProjectExplorer::ToolChain *toolChain = m_pro->toolChain()) | 
					
						
							|  |  |  |             command = toolChain->makeCommand(); | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             command = QLatin1String("make"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     setCommand(buildConfiguration, command); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const QStringList targets = value(buildConfiguration, "buildTargets").toStringList(); | 
					
						
							|  |  |  |     QStringList arguments = value(buildConfiguration, "makeArguments").toStringList(); | 
					
						
							|  |  |  |     arguments.append(targets); | 
					
						
							|  |  |  |     setArguments(buildConfiguration, arguments); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  |     setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration)); | 
					
						
							| 
									
										
										
										
											2009-05-05 14:56:59 +02:00
										 |  |  |     return AbstractMakeStep::init(buildConfiguration); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | void GenericMakeStep::run(QFutureInterface<bool> &fi) | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     AbstractProcessStep::run(fi); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | QString GenericMakeStep::name() | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return Constants::MAKESTEP; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | QString GenericMakeStep::displayName() | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return "Make"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | ProjectExplorer::BuildStepConfigWidget *GenericMakeStep::createConfigWidget() | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  |     return new GenericMakeStepConfigWidget(this); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | bool GenericMakeStep::immutable() const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | GenericProject *GenericMakeStep::project() const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return m_pro; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | bool GenericMakeStep::buildsTarget(const QString &buildConfiguration, const QString &target) const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return value(buildConfiguration, "buildTargets").toStringList().contains(target); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | void GenericMakeStep::setBuildTarget(const QString &buildConfiguration, const QString &target, bool on) | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     QStringList old = value(buildConfiguration, "buildTargets").toStringList(); | 
					
						
							|  |  |  |     if (on && !old.contains(target)) | 
					
						
							|  |  |  |         setValue(buildConfiguration, "buildTargets", old << target); | 
					
						
							|  |  |  |     else if(!on && old.contains(target)) | 
					
						
							|  |  |  |         setValue(buildConfiguration, "buildTargets", old.removeOne(target)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | // GenericMakeStepConfigWidget
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | //
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | GenericMakeStepConfigWidget::GenericMakeStepConfigWidget(GenericMakeStep *makeStep) | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  |     : m_makeStep(makeStep) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  |     m_ui = new Ui::GenericMakeStep; | 
					
						
							|  |  |  |     m_ui->setupUi(this); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // TODO update this list also on rescans of the GenericLists.txt
 | 
					
						
							|  |  |  |     GenericProject *pro = m_makeStep->project(); | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  |     foreach (const QString &target, pro->targets()) { | 
					
						
							|  |  |  |         QListWidgetItem *item = new QListWidgetItem(target, m_ui->targetsList); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  |         item->setFlags(item->flags() | Qt::ItemIsUserCheckable); | 
					
						
							|  |  |  |         item->setCheckState(Qt::Unchecked); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  |     connect(m_ui->targetsList, SIGNAL(itemChanged(QListWidgetItem*)), | 
					
						
							|  |  |  |             this, SLOT(itemChanged(QListWidgetItem*))); | 
					
						
							| 
									
										
										
										
											2009-03-18 17:43:55 +01:00
										 |  |  |     connect(m_ui->makeLineEdit, SIGNAL(textEdited(QString)), | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  |             this, SLOT(makeLineEditTextEdited())); | 
					
						
							| 
									
										
										
										
											2009-03-18 17:43:55 +01:00
										 |  |  |     connect(m_ui->makeArgumentsLineEdit, SIGNAL(textEdited(QString)), | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  |             this, SLOT(makeArgumentsLineEditTextEdited())); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | QString GenericMakeStepConfigWidget::displayName() const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return "Make"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | void GenericMakeStepConfigWidget::init(const QString &buildConfiguration) | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     m_buildConfiguration = buildConfiguration; | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // TODO: Label should update when tool chain is changed
 | 
					
						
							|  |  |  |     m_ui->makeLabel->setText(tr("Override %1:").arg(m_makeStep->command(buildConfiguration))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const QString &makeCommand = m_makeStep->value(buildConfiguration, "makeCommand").toString(); | 
					
						
							|  |  |  |     m_ui->makeLineEdit->setText(makeCommand); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const QStringList &makeArguments = | 
					
						
							|  |  |  |             m_makeStep->value(buildConfiguration, "makeArguments").toStringList(); | 
					
						
							|  |  |  |     m_ui->makeArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(makeArguments)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Disconnect to make the changes to the items
 | 
					
						
							|  |  |  |     disconnect(m_ui->targetsList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     int count = m_ui->targetsList->count(); | 
					
						
							|  |  |  |     for (int i = 0; i < count; ++i) { | 
					
						
							|  |  |  |         QListWidgetItem *item = m_ui->targetsList->item(i); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  |         item->setCheckState(m_makeStep->buildsTarget(buildConfiguration, item->text()) ? Qt::Checked : Qt::Unchecked); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  |     // and connect again
 | 
					
						
							| 
									
										
										
										
											2009-03-18 15:58:36 +01:00
										 |  |  |     connect(m_ui->targetsList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GenericMakeStepConfigWidget::itemChanged(QListWidgetItem *item) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QTC_ASSERT(!m_buildConfiguration.isNull(), return); | 
					
						
							|  |  |  |     m_makeStep->setBuildTarget(m_buildConfiguration, item->text(), item->checkState() & Qt::Checked); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GenericMakeStepConfigWidget::makeLineEditTextEdited() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QTC_ASSERT(!m_buildConfiguration.isNull(), return); | 
					
						
							|  |  |  |     m_makeStep->setValue(m_buildConfiguration, "makeCommand", m_ui->makeLineEdit->text()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void GenericMakeStepConfigWidget::makeArgumentsLineEditTextEdited() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QTC_ASSERT(!m_buildConfiguration.isNull(), return); | 
					
						
							|  |  |  |     m_makeStep->setValue(m_buildConfiguration, "makeArguments", | 
					
						
							|  |  |  |                          ProjectExplorer::Environment::parseCombinedArgString(m_ui->makeArgumentsLineEdit->text())); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | // GenericMakeStepFactory
 | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | bool GenericMakeStepFactory::canCreate(const QString &name) const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return (Constants::MAKESTEP == name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | ProjectExplorer::BuildStep *GenericMakeStepFactory::create(ProjectExplorer::Project *project, const QString &name) const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     Q_ASSERT(name == Constants::MAKESTEP); | 
					
						
							|  |  |  |     GenericProject *pro = qobject_cast<GenericProject *>(project); | 
					
						
							|  |  |  |     Q_ASSERT(pro); | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  |     return new GenericMakeStep(pro); | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | QStringList GenericMakeStepFactory::canCreateForProject(ProjectExplorer::Project * /* pro */) const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return QStringList(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 13:33:00 +01:00
										 |  |  | QString GenericMakeStepFactory::displayNameForName(const QString & /* name */) const | 
					
						
							| 
									
										
										
										
											2009-03-10 14:20:07 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return "Make"; | 
					
						
							|  |  |  | } |