Commit e3ecf423 authored by Tobias Hunger's avatar Tobias Hunger

Qbs: Add Qbs install step

Change-Id: I0fb96cf2f3ba90d226203703f755025020680ac2
Reviewed-by: default avatarChristian Kandeler <>
parent 8ac0f17e
This diff is collapsed.
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact:
** This file is part of Qt Creator.
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see For further information
** use the contact form at
** 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:
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
#include "qbsbuildconfiguration.h"
#include <projectexplorer/buildstep.h>
#include <projectexplorer/task.h>
#include <qbs.h>
namespace QbsProjectManager {
namespace Internal {
class QbsInstallStepConfigWidget;
class QbsInstallStep : public ProjectExplorer::BuildStep
QbsInstallStep(ProjectExplorer::BuildStepList *bsl);
QbsInstallStep(ProjectExplorer::BuildStepList *bsl, const QbsInstallStep *other);
bool init();
void run(QFutureInterface<bool> &fi);
ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
bool runInGuiThread() const;
void cancel();
bool fromMap(const QVariantMap &map);
QVariantMap toMap() const;
QString installRoot() const;
QString absoluteInstallRoot() const;
bool removeFirst() const;
bool dryRun() const;
bool keepGoing() const;
void changed();
private slots:
void installDone(bool success);
void handleTaskStarted(const QString &desciption, int max);
void handleProgress(int value);
void createTaskAndOutput(ProjectExplorer::Task::TaskType type,
const QString &message, const QString &file, int line);
void setInstallRoot(const QString &ir);
void setRemoveFirst(bool rf);
void setDryRun(bool dr);
void setKeepGoing(bool kg);
qbs::InstallOptions m_qbsInstallOptions;
QFutureInterface<bool> *m_fi;
qbs::InstallJob *m_job;
int m_progressBase;
bool m_showCompilerOutput;
ProjectExplorer::IOutputParser *m_parser;
friend class QbsInstallStepConfigWidget;
namespace Ui { class QbsInstallStepConfigWidget; }
class QbsInstallStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
QbsInstallStepConfigWidget(QbsInstallStep *step);
QString summaryText() const;
QString displayName() const;
private slots:
void updateState();
void changeInstallRoot();
void changeRemoveFirst(bool rf);
void changeDryRun(bool dr);
void changeKeepGoing(bool kg);
Ui::QbsInstallStepConfigWidget *m_ui;
QbsInstallStep *m_step;
QString m_summary;
bool m_ignoreChange;
class QbsInstallStepFactory : public ProjectExplorer::IBuildStepFactory
explicit QbsInstallStepFactory(QObject *parent = 0);
// used to show the list of possible additons to a target, returns a list of types
QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *parent) const;
// used to translate the types to names to display to the user
QString displayNameForId(Core::Id id) const;
bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const;
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id);
// used to recreate the runConfigurations when restoring settings
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const;
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map);
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const;
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product);
} // namespace Internal
} // namespace QbsProjectManager
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<widget class="QWidget" name="QbsProjectManager::Internal::QbsInstallStepConfigWidget">
<property name="geometry">
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<property name="topMargin">
<property name="rightMargin">
<property name="bottomMargin">
<property name="horizontalSpacing">
<property name="verticalSpacing">
<item row="0" column="0">
<widget class="QLabel" name="installRootLabel">
<property name="text">
<string>Install Root:</string>
<item row="0" column="1" colspan="2">
<widget class="Utils::PathChooser" name="installRootChooser">
<property name="minimumSize">
<item row="1" column="0">
<widget class="QCheckBox" name="removeFirstCheckBox">
<property name="text">
<string>Remove First</string>
<item row="1" column="1">
<widget class="QCheckBox" name="dryRunCheckBox">
<property name="text">
<string>Dry run</string>
<item row="1" column="2">
<widget class="QCheckBox" name="keepGoingCheckBox">
<property name="text">
<string>Keep Going</string>
<header location="global">utils/pathchooser.h</header>
......@@ -195,6 +195,13 @@ qbs::CleanJob *QbsProject::clean(const qbs::CleanOptions &opts)
return qbsProject()->cleanAllProducts(opts);
qbs::InstallJob *QbsProject::install(const qbs::InstallOptions &opts)
if (!qbsProject())
return 0;
return qbsProject()->installAllProducts(opts);
QString QbsProject::profileForTarget(const ProjectExplorer::Target *t) const
return m_manager->profileForKit(t->kit());
......@@ -81,6 +81,7 @@ public:
qbs::BuildJob *build(const qbs::BuildOptions &opts);
qbs::CleanJob *clean(const qbs::CleanOptions &opts);
qbs::InstallJob *install(const qbs::InstallOptions &opts);
static ProjectExplorer::FileType fileTypeFor(const QSet<QString> &tags);
......@@ -18,6 +18,7 @@ HEADERS = \
qbsbuildconfigurationwidget.h \
qbsbuildstep.h \
qbscleanstep.h \
qbsinstallstep.h \
qbslogsink.h \
qbsnodes.h \
qbsparser.h \
......@@ -34,6 +35,7 @@ SOURCES = \
qbsbuildconfigurationwidget.cpp \
qbsbuildstep.cpp \
qbscleanstep.cpp \
qbsinstallstep.cpp \
qbslogsink.cpp \
qbsnodes.cpp \
qbsparser.cpp \
......@@ -46,4 +48,5 @@ SOURCES = \
qbsbuildstepconfigwidget.ui \
qbscleanstepconfigwidget.ui \
qbsinstallstepconfigwidget.ui \
......@@ -59,6 +59,9 @@ QtcPlugin {
......@@ -52,6 +52,7 @@ const char ACTION_BUILD_FILE_QBS_CONTEXT[] = "Qbs.BuildFileCtx";
// Ids:
const char QBS_BUILDSTEP_ID[] = "Qbs.BuildStep";
const char QBS_CLEANSTEP_ID[] = "Qbs.CleanStep";
const char QBS_INSTALLSTEP_ID[] = "Qbs.InstallStep";
// QBS strings:
static const char QBS_VARIANT_DEBUG[] = "debug";
......@@ -32,6 +32,7 @@
#include "qbsbuildconfiguration.h"
#include "qbsbuildstep.h"
#include "qbscleanstep.h"
#include "qbsinstallstep.h"
#include "qbsproject.h"
#include "qbsprojectmanager.h"
#include "qbsprojectmanagerconstants.h"
......@@ -81,6 +82,7 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString *
addAutoReleasedObject(new QbsBuildConfigurationFactory);
addAutoReleasedObject(new QbsBuildStepFactory);
addAutoReleasedObject(new QbsCleanStepFactory);
addAutoReleasedObject(new QbsInstallStepFactory);
// Build Menu:
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment