Merge remote-tracking branch 'origin/4.6'

Conflicts:
	qbs/modules/qtc/qtc.qbs
	qtcreator.pri
	src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp

Change-Id: I2445882a270731b866b04f28ff87d161224c539a
This commit is contained in:
Eike Ziller
2018-02-13 13:37:37 +01:00
65 changed files with 654 additions and 398 deletions

View File

@@ -124,7 +124,8 @@ private:
// --------------------------------------------------------------------
QbsBuildStep::QbsBuildStep(ProjectExplorer::BuildStepList *bsl) :
ProjectExplorer::BuildStep(bsl, Constants::QBS_BUILDSTEP_ID)
ProjectExplorer::BuildStep(bsl, Constants::QBS_BUILDSTEP_ID),
m_enableQmlDebugging(QtSupport::BaseQtVersion::isQmlDebuggingSupported(target()->kit()))
{
setDisplayName(tr("Qbs Build"));
setQbsConfiguration(QVariantMap());
@@ -204,6 +205,8 @@ QVariantMap QbsBuildStep::qbsConfiguration(VariableHandling variableHandling) co
{
QVariantMap config = m_qbsConfiguration;
config.insert(Constants::QBS_FORCE_PROBES_KEY, m_forceProbes);
if (m_enableQmlDebugging)
config.insert(Constants::QBS_CONFIG_QUICK_DEBUG_KEY, true);
if (variableHandling == ExpandVariables) {
const Utils::MacroExpander *expander = Utils::globalMacroExpander();
for (auto it = config.begin(), end = config.end(); it != end; ++it) {
@@ -280,6 +283,7 @@ int QbsBuildStep::maxJobs() const
}
static QString forceProbesKey() { return QLatin1String("Qbs.forceProbesKey"); }
static QString enableQmlDebuggingKey() { return QLatin1String("Qbs.enableQmlDebuggingKey"); }
bool QbsBuildStep::fromMap(const QVariantMap &map)
{
@@ -297,6 +301,7 @@ bool QbsBuildStep::fromMap(const QVariantMap &map)
m_qbsBuildOptions.setRemoveExistingInstallation(map.value(QBS_CLEAN_INSTALL_ROOT)
.toBool());
m_forceProbes = map.value(forceProbesKey()).toBool();
m_enableQmlDebugging = map.value(enableQmlDebuggingKey()).toBool();
return true;
}
@@ -313,6 +318,7 @@ QVariantMap QbsBuildStep::toMap() const
map.insert(QBS_CLEAN_INSTALL_ROOT,
m_qbsBuildOptions.removeExistingInstallation());
map.insert(forceProbesKey(), m_forceProbes);
map.insert(enableQmlDebuggingKey(), m_enableQmlDebugging);
return map;
}
@@ -412,13 +418,6 @@ QString QbsBuildStep::buildVariant() const
return qbsConfiguration(PreserveVariables).value(Constants::QBS_CONFIG_VARIANT_KEY).toString();
}
bool QbsBuildStep::isQmlDebuggingEnabled() const
{
QVariantMap data = qbsConfiguration(PreserveVariables);
return data.value(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY, false).toBool()
|| data.value(Constants::QBS_CONFIG_QUICK_DEBUG_KEY, false).toBool();
}
void QbsBuildStep::setBuildVariant(const QString &variant)
{
if (m_qbsConfiguration.value(Constants::QBS_CONFIG_VARIANT_KEY).toString() == variant)
@@ -564,7 +563,7 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
QString *errorMessage) {
return validateProperties(edit, errorMessage);
});
m_ui->qmlDebuggingWarningText->setPixmap(Utils::Icons::WARNING.pixmap());
m_ui->qmlDebuggingWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
connect(m_ui->buildVariantComboBox,
static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
@@ -635,7 +634,7 @@ void QbsBuildStepConfigWidget::updateState()
}
if (m_step->isQmlDebuggingEnabled())
command += " Qt.declarative.qmlDebugging:true Qt.quick.qmlDebugging:true";
command.append(Constants::QBS_CONFIG_QUICK_DEBUG_KEY).append(":true");
m_ui->commandLineTextEdit->setPlainText(command);
QString summary = tr("<b>Qbs:</b> %1").arg(command);
@@ -667,7 +666,7 @@ void QbsBuildStepConfigWidget::updatePropertyEdit(const QVariantMap &data)
// remove data that is edited with special UIs:
editable.remove(Constants::QBS_CONFIG_PROFILE_KEY);
editable.remove(Constants::QBS_CONFIG_VARIANT_KEY);
editable.remove(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY);
editable.remove(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY); // For existing .user files
editable.remove(Constants::QBS_CONFIG_QUICK_DEBUG_KEY);
editable.remove(Constants::QBS_FORCE_PROBES_KEY);
editable.remove(Constants::QBS_INSTALL_ROOT_KEY);
@@ -788,17 +787,8 @@ void QbsBuildStepConfigWidget::applyCachedProperties()
void QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked(bool checked)
{
QVariantMap data = m_step->qbsConfiguration(QbsBuildStep::PreserveVariables);
if (checked) {
data.insert(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY, checked);
data.insert(Constants::QBS_CONFIG_QUICK_DEBUG_KEY, checked);
} else {
data.remove(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY);
data.remove(Constants::QBS_CONFIG_QUICK_DEBUG_KEY);
}
m_ignoreChange = true;
m_step->setQbsConfiguration(data);
m_step->setQmlDebuggingEnabled(checked);
m_ignoreChange = false;
}

View File

@@ -44,6 +44,10 @@ class QbsBuildStep : public ProjectExplorer::BuildStep
{
Q_OBJECT
// used in DebuggerRunConfigurationAspect
Q_PROPERTY(bool linkQmlDebuggingLibrary READ isQmlDebuggingEnabled
WRITE setQmlDebuggingEnabled NOTIFY qbsConfigurationChanged)
public:
enum VariableHandling
{
@@ -78,7 +82,11 @@ public:
void setForceProbes(bool force) { m_forceProbes = force; emit qbsConfigurationChanged(); }
bool forceProbes() const { return m_forceProbes; }
bool isQmlDebuggingEnabled() const;
void setQmlDebuggingEnabled(bool debug) {
m_enableQmlDebugging = debug;
emit qbsConfigurationChanged();
}
bool isQmlDebuggingEnabled() const { return m_enableQmlDebugging; }
signals:
void qbsConfigurationChanged();
@@ -116,6 +124,7 @@ private:
QVariantMap m_qbsConfiguration;
qbs::BuildOptions m_qbsBuildOptions;
bool m_forceProbes = false;
bool m_enableQmlDebugging;
// Temporary data:
QStringList m_changedFiles;

View File

@@ -30,6 +30,8 @@
#include <projectexplorer/kitconfigwidget.h>
#include <projectexplorer/kitmanager.h>
#include <utils/qtcassert.h>
#include <qbs.h>
#include <QLabel>
@@ -89,11 +91,13 @@ QString QbsKitInformation::representation(const Kit *kit)
QVariantMap QbsKitInformation::properties(const Kit *kit)
{
QTC_ASSERT(kit, return QVariantMap());
return kit->value(id()).toMap();
}
void QbsKitInformation::setProperties(Kit *kit, const QVariantMap &properties)
{
QTC_ASSERT(kit, return);
kit->setValue(id(), properties);
}

View File

@@ -50,6 +50,8 @@ ProjectExplorer::FileType fileType(const qbs::ArtifactData &artifact)
return ProjectExplorer::FileType::Form;
if (artifact.fileTags().contains("scxml"))
return ProjectExplorer::FileType::StateChart;
if (artifact.fileTags().contains("qt.qml.qml"))
return ProjectExplorer::FileType::QML;
return ProjectExplorer::FileType::Unknown;
}
@@ -101,13 +103,13 @@ QbsProjectManager::Internal::QbsGroupNode
}
void setupQbsProductData(QbsProjectManager::Internal::QbsProductNode *node,
const qbs::ProductData &prd, const qbs::Project &project)
const qbs::ProductData &prd)
{
using namespace QbsProjectManager::Internal;
node->setEnabled(prd.isEnabled());
node->setDisplayName(QbsProject::productDisplayName(project, prd));
node->setDisplayName(prd.fullDisplayName());
node->setAbsoluteFilePathAndLine(Utils::FileName::fromString(prd.location().filePath()).parentDir(), -1);
const QString &productPath = QFileInfo(prd.location().filePath()).absolutePath();
@@ -135,12 +137,11 @@ void setupQbsProductData(QbsProjectManager::Internal::QbsProductNode *node,
setupArtifacts(genFiles, prd.generatedArtifacts());
}
QbsProjectManager::Internal::QbsProductNode *
buildProductNodeTree(const qbs::Project &project, const qbs::ProductData &prd)
QbsProjectManager::Internal::QbsProductNode *buildProductNodeTree(const qbs::ProductData &prd)
{
auto result = new QbsProjectManager::Internal::QbsProductNode(prd);
setupQbsProductData(result, prd, project);
setupQbsProductData(result, prd);
return result;
}
@@ -160,7 +161,7 @@ void setupProjectNode(QbsProjectManager::Internal::QbsProjectNode *node, const q
}
foreach (const qbs::ProductData &prd, prjData.products())
node->addNode(buildProductNodeTree(qbsProject, prd));
node->addNode(buildProductNodeTree(prd));
if (!prjData.name().isEmpty())
node->setDisplayName(prjData.name());

View File

@@ -640,18 +640,9 @@ void QbsProject::generateErrors(const qbs::ErrorInfo &e)
}
QString QbsProject::productDisplayName(const qbs::Project &project,
const qbs::ProductData &product)
{
QString displayName = product.name();
if (product.profile() != project.profile())
displayName.append(QLatin1String(" [")).append(product.profile()).append(QLatin1Char(']'));
return displayName;
}
QString QbsProject::uniqueProductName(const qbs::ProductData &product)
{
return product.name() + QLatin1Char('.') + product.profile();
return product.name() + QLatin1Char('.') + product.multiplexConfigurationId();
}
void QbsProject::configureAsExampleProject(const QSet<Id> &platforms)
@@ -1113,7 +1104,7 @@ void QbsProject::updateApplicationTargets()
foreach (const qbs::ProductData &productData, m_projectData.allProducts()) {
if (!productData.isEnabled() || !productData.isRunnable())
continue;
const QString displayName = productDisplayName(m_qbsProject, productData);
const QString displayName = productData.fullDisplayName();
if (productData.targetArtifacts().isEmpty()) { // No build yet.
applications.list << BuildTargetInfo(displayName,
FileName(),

View File

@@ -101,8 +101,6 @@ public:
bool needsSpecialDeployment() const override;
void generateErrors(const qbs::ErrorInfo &e);
static QString productDisplayName(const qbs::Project &project,
const qbs::ProductData &product);
static QString uniqueProductName(const qbs::ProductData &product);
void configureAsExampleProject(const QSet<Core::Id> &platforms) final;

View File

@@ -67,8 +67,8 @@ const char QBS_VARIANT_RELEASE[] = "release";
const char QBS_CONFIG_VARIANT_KEY[] = "qbs.defaultBuildVariant";
const char QBS_CONFIG_PROFILE_KEY[] = "qbs.profile";
const char QBS_INSTALL_ROOT_KEY[] = "qbs.installRoot";
const char QBS_CONFIG_DECLARATIVE_DEBUG_KEY[] = "Qt.declarative.qmlDebugging";
const char QBS_CONFIG_QUICK_DEBUG_KEY[] = "Qt.quick.qmlDebugging";
const char QBS_CONFIG_DECLARATIVE_DEBUG_KEY[] = "modules.Qt.declarative.qmlDebugging";
const char QBS_CONFIG_QUICK_DEBUG_KEY[] = "modules.Qt.quick.qmlDebugging";
const char QBS_FORCE_PROBES_KEY[] = "qbspm.forceProbes";
// Icons:

View File

@@ -408,7 +408,7 @@ QbsRunConfigurationFactory::availableCreators(Target *parent, CreationMode mode)
}
return Utils::transform(products, [this, project](const qbs::ProductData &product) {
const QString displayName = QbsProject::productDisplayName(project->qbsProject(), product);
const QString displayName = product.fullDisplayName();
const QString targetName = QbsProject::uniqueProductName(product) + rcNameSeparator() + displayName;
return convert(displayName, targetName);
});