forked from qt-creator/qt-creator
QbsProjectManager: Let users provide a default install root
Fixes: QTCREATORBUG-12983 Change-Id: I016d298aaf8abc0d96267115225ab825bdd039e9 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -94,6 +94,9 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
|
|||||||
connect(this, &QbsBuildConfiguration::qbsConfigurationChanged,
|
connect(this, &QbsBuildConfiguration::qbsConfigurationChanged,
|
||||||
this, &QbsBuildConfiguration::triggerReparseIfActive);
|
this, &QbsBuildConfiguration::triggerReparseIfActive);
|
||||||
|
|
||||||
|
macroExpander()->registerVariable("CurrentBuild:QbsBuildRoot", tr("The qbs project build root"),
|
||||||
|
[this] { return buildDirectory().pathAppended(configurationName()).toUserOutput(); });
|
||||||
|
|
||||||
m_buildSystem = new QbsBuildSystem(this);
|
m_buildSystem = new QbsBuildSystem(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +307,7 @@ public:
|
|||||||
bs = static_cast<QbsBuildConfiguration *>(m_qbsInstallStep->deployConfiguration()
|
bs = static_cast<QbsBuildConfiguration *>(m_qbsInstallStep->deployConfiguration()
|
||||||
->target()->activeBuildConfiguration())->qbsStep();
|
->target()->activeBuildConfiguration())->qbsStep();
|
||||||
}
|
}
|
||||||
if (bs && bs->hasCustomInstallRoot())
|
if (bs)
|
||||||
return bs->installRoot();
|
return bs->installRoot();
|
||||||
return Utils::FilePath();
|
return Utils::FilePath();
|
||||||
}
|
}
|
||||||
|
@@ -227,7 +227,7 @@ QVariantMap QbsBuildStep::qbsConfiguration(VariableHandling variableHandling) co
|
|||||||
else
|
else
|
||||||
config.remove(Constants::QBS_CONFIG_QUICK_DEBUG_KEY);
|
config.remove(Constants::QBS_CONFIG_QUICK_DEBUG_KEY);
|
||||||
if (variableHandling == ExpandVariables) {
|
if (variableHandling == ExpandVariables) {
|
||||||
const Utils::MacroExpander *expander = Utils::globalMacroExpander();
|
const MacroExpander * const expander = buildConfiguration()->macroExpander();
|
||||||
for (auto it = config.begin(), end = config.end(); it != end; ++it) {
|
for (auto it = config.begin(), end = config.end(); it != end; ++it) {
|
||||||
const QString rawString = it.value().toString();
|
const QString rawString = it.value().toString();
|
||||||
const QString expandedString = expander->expand(rawString);
|
const QString expandedString = expander->expand(rawString);
|
||||||
@@ -264,10 +264,10 @@ Utils::FilePath QbsBuildStep::installRoot(VariableHandling variableHandling) con
|
|||||||
qbsConfiguration(variableHandling).value(Constants::QBS_INSTALL_ROOT_KEY).toString();
|
qbsConfiguration(variableHandling).value(Constants::QBS_INSTALL_ROOT_KEY).toString();
|
||||||
if (!root.isNull())
|
if (!root.isNull())
|
||||||
return Utils::FilePath::fromString(root);
|
return Utils::FilePath::fromString(root);
|
||||||
|
QString defaultInstallDir = QbsSettings::defaultInstallDirTemplate();
|
||||||
const QbsBuildConfiguration * const bc
|
if (variableHandling == VariableHandling::ExpandVariables)
|
||||||
= static_cast<QbsBuildConfiguration *>(buildConfiguration());
|
defaultInstallDir = buildConfiguration()->macroExpander()->expand(defaultInstallDir);
|
||||||
return bc->buildDirectory().pathAppended(bc->configurationName()).pathAppended("install-root");
|
return FilePath::fromString(defaultInstallDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
int QbsBuildStep::maxJobs() const
|
int QbsBuildStep::maxJobs() const
|
||||||
@@ -640,6 +640,9 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
|
|||||||
auto chooser = new Core::VariableChooser(this);
|
auto chooser = new Core::VariableChooser(this);
|
||||||
chooser->addSupportedWidget(propertyEdit);
|
chooser->addSupportedWidget(propertyEdit);
|
||||||
chooser->addSupportedWidget(installDirChooser->lineEdit());
|
chooser->addSupportedWidget(installDirChooser->lineEdit());
|
||||||
|
chooser->addMacroExpanderProvider([step] {
|
||||||
|
return step->buildConfiguration()->macroExpander();
|
||||||
|
});
|
||||||
propertyEdit->setValidationFunction([this](FancyLineEdit *edit, QString *errorMessage) {
|
propertyEdit->setValidationFunction([this](FancyLineEdit *edit, QString *errorMessage) {
|
||||||
return validateProperties(edit, errorMessage);
|
return validateProperties(edit, errorMessage);
|
||||||
});
|
});
|
||||||
@@ -868,7 +871,7 @@ bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QS
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<Property> properties;
|
QList<Property> properties;
|
||||||
const Utils::MacroExpander *expander = Utils::globalMacroExpander();
|
const MacroExpander * const expander = step()->buildConfiguration()->macroExpander();
|
||||||
foreach (const QString &rawArg, argList) {
|
foreach (const QString &rawArg, argList) {
|
||||||
int pos = rawArg.indexOf(':');
|
int pos = rawArg.indexOf(':');
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
#include "qbsprojectmanagerconstants.h"
|
#include "qbsprojectmanagerconstants.h"
|
||||||
#include "qbsnodetreebuilder.h"
|
#include "qbsnodetreebuilder.h"
|
||||||
#include "qbssession.h"
|
#include "qbssession.h"
|
||||||
|
#include "qbssettings.h"
|
||||||
|
|
||||||
#include <coreplugin/documentmanager.h>
|
#include <coreplugin/documentmanager.h>
|
||||||
#include <coreplugin/icontext.h>
|
#include <coreplugin/icontext.h>
|
||||||
@@ -592,6 +593,10 @@ void QbsBuildSystem::parseCurrentBuildConfiguration()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap config = m_buildConfiguration->qbsConfiguration();
|
QVariantMap config = m_buildConfiguration->qbsConfiguration();
|
||||||
|
if (!config.contains(Constants::QBS_INSTALL_ROOT_KEY)) {
|
||||||
|
config.insert(Constants::QBS_INSTALL_ROOT_KEY, m_buildConfiguration->macroExpander()
|
||||||
|
->expand(QbsSettings::defaultInstallDirTemplate()));
|
||||||
|
}
|
||||||
Environment env = m_buildConfiguration->environment();
|
Environment env = m_buildConfiguration->environment();
|
||||||
QString dir = m_buildConfiguration->buildDirectory().toString();
|
QString dir = m_buildConfiguration->buildDirectory().toString();
|
||||||
|
|
||||||
|
@@ -46,11 +46,13 @@ namespace QbsProjectManager {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
const char QBS_EXE_KEY[] = "QbsProjectManager/QbsExecutable";
|
const char QBS_EXE_KEY[] = "QbsProjectManager/QbsExecutable";
|
||||||
|
const char QBS_DEFAULT_INSTALL_DIR_KEY[] = "QbsProjectManager/DefaultInstallDir";
|
||||||
const char USE_CREATOR_SETTINGS_KEY[] = "QbsProjectManager/useCreatorDir";
|
const char USE_CREATOR_SETTINGS_KEY[] = "QbsProjectManager/useCreatorDir";
|
||||||
|
|
||||||
static bool operator==(const QbsSettingsData &s1, const QbsSettingsData &s2)
|
static bool operator==(const QbsSettingsData &s1, const QbsSettingsData &s2)
|
||||||
{
|
{
|
||||||
return s1.qbsExecutableFilePath == s2.qbsExecutableFilePath
|
return s1.qbsExecutableFilePath == s2.qbsExecutableFilePath
|
||||||
|
&& s1.defaultInstallDirTemplate == s2.defaultInstallDirTemplate
|
||||||
&& s1.useCreatorSettings == s2.useCreatorSettings;
|
&& s1.useCreatorSettings == s2.useCreatorSettings;
|
||||||
}
|
}
|
||||||
static bool operator!=(const QbsSettingsData &s1, const QbsSettingsData &s2)
|
static bool operator!=(const QbsSettingsData &s1, const QbsSettingsData &s2)
|
||||||
@@ -71,6 +73,11 @@ FilePath QbsSettings::qbsExecutableFilePath()
|
|||||||
return candidate;
|
return candidate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString QbsSettings::defaultInstallDirTemplate()
|
||||||
|
{
|
||||||
|
return instance().m_settings.defaultInstallDirTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
bool QbsSettings::useCreatorSettingsDirForQbs()
|
bool QbsSettings::useCreatorSettingsDirForQbs()
|
||||||
{
|
{
|
||||||
return instance().m_settings.useCreatorSettings;
|
return instance().m_settings.useCreatorSettings;
|
||||||
@@ -105,6 +112,8 @@ void QbsSettings::loadSettings()
|
|||||||
{
|
{
|
||||||
QSettings * const s = Core::ICore::settings();
|
QSettings * const s = Core::ICore::settings();
|
||||||
m_settings.qbsExecutableFilePath = FilePath::fromString(s->value(QBS_EXE_KEY).toString());
|
m_settings.qbsExecutableFilePath = FilePath::fromString(s->value(QBS_EXE_KEY).toString());
|
||||||
|
m_settings.defaultInstallDirTemplate = s->value(QBS_DEFAULT_INSTALL_DIR_KEY,
|
||||||
|
"%{CurrentBuild:QbsBuildRoot}").toString();
|
||||||
m_settings.useCreatorSettings = s->value(USE_CREATOR_SETTINGS_KEY, true).toBool();
|
m_settings.useCreatorSettings = s->value(USE_CREATOR_SETTINGS_KEY, true).toBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,6 +121,7 @@ void QbsSettings::storeSettings() const
|
|||||||
{
|
{
|
||||||
QSettings * const s = Core::ICore::settings();
|
QSettings * const s = Core::ICore::settings();
|
||||||
s->setValue(QBS_EXE_KEY, m_settings.qbsExecutableFilePath.toString());
|
s->setValue(QBS_EXE_KEY, m_settings.qbsExecutableFilePath.toString());
|
||||||
|
s->setValue(QBS_DEFAULT_INSTALL_DIR_KEY, m_settings.defaultInstallDirTemplate);
|
||||||
s->setValue(USE_CREATOR_SETTINGS_KEY, m_settings.useCreatorSettings);
|
s->setValue(USE_CREATOR_SETTINGS_KEY, m_settings.useCreatorSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,6 +133,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_qbsExePathChooser.setExpectedKind(PathChooser::ExistingCommand);
|
m_qbsExePathChooser.setExpectedKind(PathChooser::ExistingCommand);
|
||||||
m_qbsExePathChooser.setFileName(QbsSettings::qbsExecutableFilePath());
|
m_qbsExePathChooser.setFileName(QbsSettings::qbsExecutableFilePath());
|
||||||
|
m_defaultInstallDirLineEdit.setText(QbsSettings::defaultInstallDirTemplate());
|
||||||
m_versionLabel.setText(getQbsVersion());
|
m_versionLabel.setText(getQbsVersion());
|
||||||
m_settingsDirCheckBox.setText(tr("Use %1 settings directory for Qbs")
|
m_settingsDirCheckBox.setText(tr("Use %1 settings directory for Qbs")
|
||||||
.arg(Core::Constants::IDE_DISPLAY_NAME));
|
.arg(Core::Constants::IDE_DISPLAY_NAME));
|
||||||
@@ -131,6 +142,7 @@ public:
|
|||||||
const auto layout = new QFormLayout(this);
|
const auto layout = new QFormLayout(this);
|
||||||
layout->addRow(&m_settingsDirCheckBox);
|
layout->addRow(&m_settingsDirCheckBox);
|
||||||
layout->addRow(tr("Path to qbs executable:"), &m_qbsExePathChooser);
|
layout->addRow(tr("Path to qbs executable:"), &m_qbsExePathChooser);
|
||||||
|
layout->addRow(tr("Default installation directory:"), &m_defaultInstallDirLineEdit);
|
||||||
layout->addRow(tr("Qbs version:"), &m_versionLabel);
|
layout->addRow(tr("Qbs version:"), &m_versionLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,6 +151,7 @@ public:
|
|||||||
QbsSettingsData settings;
|
QbsSettingsData settings;
|
||||||
if (m_qbsExePathChooser.isValid())
|
if (m_qbsExePathChooser.isValid())
|
||||||
settings.qbsExecutableFilePath = m_qbsExePathChooser.fileName();
|
settings.qbsExecutableFilePath = m_qbsExePathChooser.fileName();
|
||||||
|
settings.defaultInstallDirTemplate = m_defaultInstallDirLineEdit.text();
|
||||||
settings.useCreatorSettings = m_settingsDirCheckBox.isChecked();
|
settings.useCreatorSettings = m_settingsDirCheckBox.isChecked();
|
||||||
QbsSettings::setSettingsData(settings);
|
QbsSettings::setSettingsData(settings);
|
||||||
}
|
}
|
||||||
@@ -158,6 +171,7 @@ private:
|
|||||||
PathChooser m_qbsExePathChooser;
|
PathChooser m_qbsExePathChooser;
|
||||||
QLabel m_versionLabel;
|
QLabel m_versionLabel;
|
||||||
QCheckBox m_settingsDirCheckBox;
|
QCheckBox m_settingsDirCheckBox;
|
||||||
|
FancyLineEdit m_defaultInstallDirLineEdit;
|
||||||
};
|
};
|
||||||
|
|
||||||
QbsSettingsPage::QbsSettingsPage()
|
QbsSettingsPage::QbsSettingsPage()
|
||||||
|
@@ -37,6 +37,7 @@ namespace Internal {
|
|||||||
class QbsSettingsData {
|
class QbsSettingsData {
|
||||||
public:
|
public:
|
||||||
Utils::FilePath qbsExecutableFilePath;
|
Utils::FilePath qbsExecutableFilePath;
|
||||||
|
QString defaultInstallDirTemplate;
|
||||||
bool useCreatorSettings = true;
|
bool useCreatorSettings = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -47,6 +48,7 @@ public:
|
|||||||
static QbsSettings &instance();
|
static QbsSettings &instance();
|
||||||
|
|
||||||
static Utils::FilePath qbsExecutableFilePath();
|
static Utils::FilePath qbsExecutableFilePath();
|
||||||
|
static QString defaultInstallDirTemplate();
|
||||||
static bool useCreatorSettingsDirForQbs();
|
static bool useCreatorSettingsDirForQbs();
|
||||||
static QString qbsSettingsBaseDir();
|
static QString qbsSettingsBaseDir();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user