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