forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.0'
Conflicts: qtcreator.pri qtcreator.qbs src/plugins/debugger/debuggerruncontrol.cpp Change-Id: I81b43480a1369e3d7be60ae26e812dda6b962b0b
This commit is contained in:
@@ -280,7 +280,9 @@ CMakeConfig BuildDirManager::parsedConfiguration() const
|
||||
CMakeConfig result = parseConfiguration(cacheFile, &errorMessage);
|
||||
if (!errorMessage.isEmpty())
|
||||
emit errorOccured(errorMessage);
|
||||
if (CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result) != sourceDirectory().toString().toUtf8())
|
||||
const Utils::FileName sourceOfBuildDir
|
||||
= Utils::FileName::fromUtf8(CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result));
|
||||
if (sourceOfBuildDir != sourceDirectory()) // Use case-insensitive compare where appropriate
|
||||
emit errorOccured(tr("The build directory is not for %1").arg(sourceDirectory().toUserOutput()));
|
||||
|
||||
return result;
|
||||
@@ -605,8 +607,10 @@ void BuildDirManager::maybeForceReparse()
|
||||
const QByteArray EXTRA_GENERATOR_KEY = "CMAKE_EXTRA_GENERATOR";
|
||||
const QByteArray CMAKE_COMMAND_KEY = "CMAKE_COMMAND";
|
||||
|
||||
if (!m_hasData)
|
||||
if (!m_hasData) {
|
||||
forceReparse();
|
||||
return;
|
||||
}
|
||||
|
||||
const CMakeConfig currentConfig = parsedConfiguration();
|
||||
|
||||
|
||||
@@ -63,33 +63,7 @@ const char CONFIGURATION_KEY[] = "CMake.Configuration";
|
||||
CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent) :
|
||||
BuildConfiguration(parent, Core::Id(Constants::CMAKE_BC_ID))
|
||||
{
|
||||
auto project = static_cast<CMakeProject *>(parent->project());
|
||||
setBuildDirectory(shadowBuildDirectory(project->projectFilePath(),
|
||||
parent->kit(),
|
||||
displayName(), BuildConfiguration::Unknown));
|
||||
|
||||
m_buildDirManager = new BuildDirManager(this);
|
||||
connect(m_buildDirManager, &BuildDirManager::dataAvailable,
|
||||
this, &CMakeBuildConfiguration::dataAvailable);
|
||||
connect(m_buildDirManager, &BuildDirManager::errorOccured,
|
||||
this, &CMakeBuildConfiguration::setError);
|
||||
connect(m_buildDirManager, &BuildDirManager::configurationStarted,
|
||||
this, [this]() { m_completeConfigurationCache.clear(); emit parsingStarted(); });
|
||||
|
||||
connect(this, &CMakeBuildConfiguration::environmentChanged,
|
||||
m_buildDirManager, &BuildDirManager::forceReparse);
|
||||
connect(this, &CMakeBuildConfiguration::buildDirectoryChanged,
|
||||
m_buildDirManager, &BuildDirManager::forceReparse);
|
||||
connect(target(), &Target::kitChanged, this, [this]() {
|
||||
ProjectExplorer::Kit *k = target()->kit();
|
||||
CMakeConfig config = cmakeConfiguration();
|
||||
config.append(CMakeConfigurationKitInformation::configuration(k)); // last value wins...
|
||||
setCMakeConfiguration(config);
|
||||
m_buildDirManager->maybeForceReparse();
|
||||
});
|
||||
|
||||
connect(this, &CMakeBuildConfiguration::parsingStarted, project, &CMakeProject::handleParsingStarted);
|
||||
connect(this, &CMakeBuildConfiguration::dataAvailable, project, &CMakeProject::parseCMakeOutput);
|
||||
ctor();
|
||||
}
|
||||
|
||||
CMakeBuildConfiguration::~CMakeBuildConfiguration()
|
||||
@@ -112,7 +86,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent
|
||||
BuildConfiguration(parent, source),
|
||||
m_configuration(source->m_configuration)
|
||||
{
|
||||
Q_ASSERT(parent);
|
||||
ctor();
|
||||
cloneSteps(source);
|
||||
}
|
||||
|
||||
@@ -155,6 +129,39 @@ bool CMakeBuildConfiguration::fromMap(const QVariantMap &map)
|
||||
return true;
|
||||
}
|
||||
|
||||
void CMakeBuildConfiguration::ctor()
|
||||
{
|
||||
auto project = static_cast<CMakeProject *>(target()->project());
|
||||
setBuildDirectory(shadowBuildDirectory(project->projectFilePath(),
|
||||
target()->kit(),
|
||||
displayName(), BuildConfiguration::Unknown));
|
||||
|
||||
m_buildDirManager = new BuildDirManager(this);
|
||||
connect(m_buildDirManager, &BuildDirManager::dataAvailable,
|
||||
this, &CMakeBuildConfiguration::dataAvailable);
|
||||
connect(m_buildDirManager, &BuildDirManager::errorOccured,
|
||||
this, &CMakeBuildConfiguration::setError);
|
||||
connect(m_buildDirManager, &BuildDirManager::configurationStarted,
|
||||
this, [this]() { m_completeConfigurationCache.clear(); emit parsingStarted(); });
|
||||
|
||||
connect(this, &CMakeBuildConfiguration::environmentChanged,
|
||||
m_buildDirManager, &BuildDirManager::forceReparse);
|
||||
connect(this, &CMakeBuildConfiguration::buildDirectoryChanged,
|
||||
m_buildDirManager, &BuildDirManager::forceReparse);
|
||||
|
||||
connect(this, &CMakeBuildConfiguration::parsingStarted, project, &CMakeProject::handleParsingStarted);
|
||||
connect(this, &CMakeBuildConfiguration::dataAvailable, project, &CMakeProject::parseCMakeOutput);
|
||||
}
|
||||
|
||||
void CMakeBuildConfiguration::maybeForceReparse()
|
||||
{
|
||||
ProjectExplorer::Kit *k = target()->kit();
|
||||
CMakeConfig config = cmakeConfiguration();
|
||||
config.append(CMakeConfigurationKitInformation::configuration(k)); // last value wins...
|
||||
setCMakeConfiguration(config);
|
||||
m_buildDirManager->maybeForceReparse();
|
||||
}
|
||||
|
||||
BuildDirManager *CMakeBuildConfiguration::buildDirManager() const
|
||||
{
|
||||
return m_buildDirManager;
|
||||
@@ -165,11 +172,6 @@ bool CMakeBuildConfiguration::isParsing() const
|
||||
return m_buildDirManager && m_buildDirManager->isParsing();
|
||||
}
|
||||
|
||||
void CMakeBuildConfiguration::parse()
|
||||
{
|
||||
m_buildDirManager->parse();
|
||||
}
|
||||
|
||||
void CMakeBuildConfiguration::resetData()
|
||||
{
|
||||
m_buildDirManager->resetData();
|
||||
@@ -197,7 +199,7 @@ FileName CMakeBuildConfiguration::shadowBuildDirectory(const FileName &projectFi
|
||||
|
||||
QList<ConfigModel::DataItem> CMakeBuildConfiguration::completeCMakeConfiguration() const
|
||||
{
|
||||
if (m_buildDirManager->isParsing())
|
||||
if (!m_buildDirManager && m_buildDirManager->isParsing())
|
||||
return QList<ConfigModel::DataItem>();
|
||||
|
||||
if (m_completeConfigurationCache.isEmpty())
|
||||
@@ -409,14 +411,14 @@ ProjectExplorer::BuildConfiguration *CMakeBuildConfigurationFactory::create(Proj
|
||||
|
||||
auto cleanStep = new CMakeBuildStep(cleanSteps);
|
||||
cleanSteps->insertStep(0, cleanStep);
|
||||
cleanStep->setBuildTarget(CMakeBuildStep::cleanTarget(), true);
|
||||
cleanStep->setBuildTarget(CMakeBuildStep::cleanTarget());
|
||||
|
||||
bc->setBuildDirectory(copy.buildDirectory);
|
||||
bc->setCMakeConfiguration(copy.configuration);
|
||||
|
||||
// Default to all
|
||||
if (project->hasBuildTarget(QLatin1String("all")))
|
||||
buildStep->setBuildTarget(QLatin1String("all"), true);
|
||||
if (project->hasBuildTarget(CMakeBuildStep::allTarget()))
|
||||
buildStep->setBuildTarget(CMakeBuildStep::allTarget());
|
||||
|
||||
return bc;
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
|
||||
bool isParsing() const;
|
||||
|
||||
void parse();
|
||||
void maybeForceReparse();
|
||||
void resetData();
|
||||
bool persistCMakeState();
|
||||
|
||||
@@ -92,6 +92,7 @@ protected:
|
||||
bool fromMap(const QVariantMap &map) override;
|
||||
|
||||
private:
|
||||
void ctor();
|
||||
QList<ConfigModel::DataItem> completeCMakeConfiguration() const;
|
||||
void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items);
|
||||
|
||||
|
||||
@@ -82,9 +82,8 @@ CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Core::Id id) : AbstractProces
|
||||
|
||||
CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, CMakeBuildStep *bs) :
|
||||
AbstractProcessStep(bsl, bs),
|
||||
m_buildTargets(bs->m_buildTargets),
|
||||
m_toolArguments(bs->m_toolArguments),
|
||||
m_addRunConfigurationArgument(bs->m_addRunConfigurationArgument)
|
||||
m_buildTarget(bs->m_buildTarget),
|
||||
m_toolArguments(bs->m_toolArguments)
|
||||
{
|
||||
ctor(bsl);
|
||||
}
|
||||
@@ -125,31 +124,34 @@ CMakeRunConfiguration *CMakeBuildStep::targetsActiveRunConfiguration() const
|
||||
|
||||
void CMakeBuildStep::handleBuildTargetChanges()
|
||||
{
|
||||
const QStringList filteredTargets
|
||||
= Utils::filtered(static_cast<CMakeProject *>(project())->buildTargetTitles(),
|
||||
[this](const QString &s) { return m_buildTargets.contains(s); });
|
||||
setBuildTargets(filteredTargets);
|
||||
if (static_cast<CMakeProject *>(project())->buildTargetTitles().contains(m_buildTarget))
|
||||
setBuildTarget(m_buildTarget);
|
||||
else
|
||||
setBuildTarget(CMakeBuildStep::allTarget());
|
||||
emit buildTargetsChanged();
|
||||
}
|
||||
|
||||
QVariantMap CMakeBuildStep::toMap() const
|
||||
{
|
||||
QVariantMap map(AbstractProcessStep::toMap());
|
||||
map.insert(QLatin1String(BUILD_TARGETS_KEY), m_buildTargets);
|
||||
// Use QStringList for compatibility with old files
|
||||
map.insert(QLatin1String(BUILD_TARGETS_KEY), QStringList(m_buildTarget));
|
||||
map.insert(QLatin1String(TOOL_ARGUMENTS_KEY), m_toolArguments);
|
||||
map.insert(QLatin1String(ADD_RUNCONFIGURATION_ARGUMENT_KEY), m_addRunConfigurationArgument);
|
||||
return map;
|
||||
}
|
||||
|
||||
bool CMakeBuildStep::fromMap(const QVariantMap &map)
|
||||
{
|
||||
if (map.value(QLatin1String(CLEAN_KEY), false).toBool()) {
|
||||
m_buildTargets = QStringList(CMakeBuildStep::cleanTarget());
|
||||
m_buildTarget = CMakeBuildStep::cleanTarget();
|
||||
} else {
|
||||
m_buildTargets = map.value(QLatin1String(BUILD_TARGETS_KEY)).toStringList();
|
||||
const QStringList targetList = map.value(QLatin1String(BUILD_TARGETS_KEY)).toStringList();
|
||||
if (!targetList.isEmpty())
|
||||
m_buildTarget = targetList.last();
|
||||
m_toolArguments = map.value(QLatin1String(TOOL_ARGUMENTS_KEY)).toString();
|
||||
}
|
||||
m_addRunConfigurationArgument = map.value(QLatin1String(ADD_RUNCONFIGURATION_ARGUMENT_KEY), false).toBool();
|
||||
if (map.value(QLatin1String(ADD_RUNCONFIGURATION_ARGUMENT_KEY), false).toBool())
|
||||
m_buildTarget = QLatin1String(ADD_RUNCONFIGURATION_TEXT);
|
||||
|
||||
return BuildStep::fromMap(map);
|
||||
}
|
||||
@@ -178,7 +180,7 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
|
||||
}
|
||||
|
||||
CMakeRunConfiguration *rc = targetsActiveRunConfiguration();
|
||||
if (m_addRunConfigurationArgument && (!rc || rc->title().isEmpty())) {
|
||||
if ((m_buildTarget == QLatin1String(ADD_RUNCONFIGURATION_TEXT)) && (!rc || rc->title().isEmpty())) {
|
||||
emit addTask(Task(Task::Error,
|
||||
QCoreApplication::translate("ProjectExplorer::Task",
|
||||
"You asked to build the current Run Configuration's build target only, "
|
||||
@@ -196,7 +198,7 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
|
||||
|
||||
QString arguments = allArguments(rc);
|
||||
|
||||
setIgnoreReturnValue(m_buildTargets.contains(CMakeBuildStep::cleanTarget()));
|
||||
setIgnoreReturnValue(m_buildTarget == CMakeBuildStep::cleanTarget());
|
||||
|
||||
ProcessParameters *pp = processParameters();
|
||||
pp->setMacroExpander(bc->macroExpander());
|
||||
@@ -292,44 +294,27 @@ void CMakeBuildStep::stdOutput(const QString &line)
|
||||
AbstractProcessStep::stdOutput(line);
|
||||
}
|
||||
|
||||
QStringList CMakeBuildStep::buildTargets() const
|
||||
QString CMakeBuildStep::buildTarget() const
|
||||
{
|
||||
return m_buildTargets;
|
||||
return m_buildTarget;
|
||||
}
|
||||
|
||||
bool CMakeBuildStep::buildsBuildTarget(const QString &target) const
|
||||
{
|
||||
if (target == tr(ADD_RUNCONFIGURATION_TEXT))
|
||||
return addRunConfigurationArgument();
|
||||
else
|
||||
return m_buildTargets.contains(target);
|
||||
return target == m_buildTarget;
|
||||
}
|
||||
|
||||
void CMakeBuildStep::setBuildTarget(const QString &buildTarget, bool on)
|
||||
void CMakeBuildStep::setBuildTarget(const QString &buildTarget)
|
||||
{
|
||||
if (buildTarget == tr(ADD_RUNCONFIGURATION_TEXT)) {
|
||||
setAddRunConfigurationArgument(on);
|
||||
} else {
|
||||
QStringList old = m_buildTargets;
|
||||
if (on && !old.contains(buildTarget))
|
||||
old << buildTarget;
|
||||
else if (!on && old.contains(buildTarget))
|
||||
old.removeOne(buildTarget);
|
||||
setBuildTargets(old);
|
||||
}
|
||||
}
|
||||
|
||||
void CMakeBuildStep::setBuildTargets(const QStringList &targets)
|
||||
{
|
||||
if (targets != m_buildTargets) {
|
||||
m_buildTargets = targets;
|
||||
emit targetsToBuildChanged();
|
||||
}
|
||||
if (m_buildTarget == buildTarget)
|
||||
return;
|
||||
m_buildTarget = buildTarget;
|
||||
emit targetToBuildChanged();
|
||||
}
|
||||
|
||||
void CMakeBuildStep::clearBuildTargets()
|
||||
{
|
||||
m_buildTargets.clear();
|
||||
m_buildTarget.clear();
|
||||
}
|
||||
|
||||
QString CMakeBuildStep::toolArguments() const
|
||||
@@ -349,18 +334,20 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const
|
||||
Utils::QtcProcess::addArg(&arguments, QLatin1String("--build"));
|
||||
Utils::QtcProcess::addArg(&arguments, QLatin1String("."));
|
||||
|
||||
if (m_addRunConfigurationArgument) {
|
||||
Utils::QtcProcess::addArg(&arguments, QLatin1String("--target"));
|
||||
QString target;
|
||||
|
||||
if (m_buildTarget == QLatin1String(ADD_RUNCONFIGURATION_TEXT)) {
|
||||
if (rc)
|
||||
Utils::QtcProcess::addArg(&arguments, rc->title());
|
||||
target = rc->title();
|
||||
else
|
||||
Utils::QtcProcess::addArg(&arguments, QLatin1String("<i><") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("></i>"));
|
||||
}
|
||||
foreach (const QString &t, m_buildTargets) {
|
||||
Utils::QtcProcess::addArg(&arguments, QLatin1String("--target"));
|
||||
Utils::QtcProcess::addArg(&arguments, t);
|
||||
target = QLatin1String("<i><") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("></i>");
|
||||
} else {
|
||||
target = m_buildTarget;
|
||||
}
|
||||
|
||||
Utils::QtcProcess::addArg(&arguments, QLatin1String("--target"));
|
||||
Utils::QtcProcess::addArg(&arguments, target);
|
||||
|
||||
if (!m_toolArguments.isEmpty()) {
|
||||
Utils::QtcProcess::addArg(&arguments, QLatin1String("--"));
|
||||
arguments += QLatin1Char(' ') + m_toolArguments;
|
||||
@@ -369,16 +356,6 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const
|
||||
return arguments;
|
||||
}
|
||||
|
||||
bool CMakeBuildStep::addRunConfigurationArgument() const
|
||||
{
|
||||
return m_addRunConfigurationArgument;
|
||||
}
|
||||
|
||||
void CMakeBuildStep::setAddRunConfigurationArgument(bool add)
|
||||
{
|
||||
m_addRunConfigurationArgument = add;
|
||||
}
|
||||
|
||||
QString CMakeBuildStep::cmakeCommand() const
|
||||
{
|
||||
CMakeTool *tool = CMakeKitInformation::cmakeTool(target()->kit());
|
||||
@@ -390,6 +367,11 @@ QString CMakeBuildStep::cleanTarget()
|
||||
return QLatin1String("clean");
|
||||
}
|
||||
|
||||
QString CMakeBuildStep::allTarget()
|
||||
{
|
||||
return QLatin1String("all");
|
||||
}
|
||||
|
||||
//
|
||||
// CMakeBuildStepConfigWidget
|
||||
//
|
||||
@@ -407,7 +389,6 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
|
||||
fl->addRow(tr("Tool arguments:"), m_toolArguments);
|
||||
m_toolArguments->setText(m_buildStep->toolArguments());
|
||||
|
||||
|
||||
m_buildTargetsList->setFrameStyle(QFrame::NoFrame);
|
||||
m_buildTargetsList->setMinimumHeight(200);
|
||||
|
||||
@@ -420,22 +401,7 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
|
||||
|
||||
fl->addRow(tr("Targets:"), frame);
|
||||
|
||||
auto itemAddRunConfigurationArgument = new QListWidgetItem(tr(ADD_RUNCONFIGURATION_TEXT), m_buildTargetsList);
|
||||
itemAddRunConfigurationArgument->setFlags(itemAddRunConfigurationArgument->flags() | Qt::ItemIsUserCheckable);
|
||||
itemAddRunConfigurationArgument->setCheckState(m_buildStep->addRunConfigurationArgument() ? Qt::Checked : Qt::Unchecked);
|
||||
QFont f;
|
||||
f.setItalic(true);
|
||||
itemAddRunConfigurationArgument->setFont(f);
|
||||
|
||||
CMakeProject *pro = static_cast<CMakeProject *>(m_buildStep->project());
|
||||
QStringList targetList = pro->buildTargetTitles();
|
||||
targetList.sort();
|
||||
foreach (const QString &buildTarget, targetList) {
|
||||
auto item = new QListWidgetItem(buildTarget, m_buildTargetsList);
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(m_buildStep->buildsBuildTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
|
||||
}
|
||||
|
||||
buildTargetsChanged();
|
||||
updateDetails();
|
||||
|
||||
connect(m_toolArguments, &QLineEdit::textEdited, this, &CMakeBuildStepConfigWidget::toolArgumentsEdited);
|
||||
@@ -444,8 +410,9 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
|
||||
this, &CMakeBuildStepConfigWidget::updateDetails);
|
||||
|
||||
connect(m_buildStep, &CMakeBuildStep::buildTargetsChanged, this, &CMakeBuildStepConfigWidget::buildTargetsChanged);
|
||||
connect(m_buildStep, &CMakeBuildStep::targetsToBuildChanged, this, &CMakeBuildStepConfigWidget::selectedBuildTargetsChanged);
|
||||
connect(pro, &CMakeProject::environmentChanged, this, &CMakeBuildStepConfigWidget::updateDetails);
|
||||
connect(m_buildStep, &CMakeBuildStep::targetToBuildChanged, this, &CMakeBuildStepConfigWidget::selectedBuildTargetsChanged);
|
||||
connect(static_cast<CMakeProject *>(m_buildStep->project()), &CMakeProject::environmentChanged,
|
||||
this, &CMakeBuildStepConfigWidget::updateDetails);
|
||||
}
|
||||
|
||||
void CMakeBuildStepConfigWidget::toolArgumentsEdited()
|
||||
@@ -456,7 +423,9 @@ void CMakeBuildStepConfigWidget::toolArgumentsEdited()
|
||||
|
||||
void CMakeBuildStepConfigWidget::itemChanged(QListWidgetItem *item)
|
||||
{
|
||||
m_buildStep->setBuildTarget(item->text(), item->checkState() & Qt::Checked);
|
||||
const QString target =
|
||||
(item->checkState() == Qt::Checked) ? item->data(Qt::UserRole).toString() : CMakeBuildStep::allTarget();
|
||||
m_buildStep->setBuildTarget(target);
|
||||
updateDetails();
|
||||
}
|
||||
|
||||
@@ -467,30 +436,44 @@ QString CMakeBuildStepConfigWidget::displayName() const
|
||||
|
||||
void CMakeBuildStepConfigWidget::buildTargetsChanged()
|
||||
{
|
||||
disconnect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
|
||||
|
||||
auto *addRunConfigurationArgumentItem = m_buildTargetsList->takeItem(0);
|
||||
const bool wasBlocked = m_buildTargetsList->blockSignals(true);
|
||||
m_buildTargetsList->clear();
|
||||
m_buildTargetsList->insertItem(0, addRunConfigurationArgumentItem);
|
||||
|
||||
CMakeProject *pro = static_cast<CMakeProject *>(m_buildStep->target()->project());
|
||||
foreach (const QString& buildTarget, pro->buildTargetTitles()) {
|
||||
auto item = new QListWidgetItem(tr(ADD_RUNCONFIGURATION_TEXT), m_buildTargetsList);
|
||||
|
||||
item->setData(Qt::UserRole, QString::fromLatin1(ADD_RUNCONFIGURATION_TEXT));
|
||||
QFont f;
|
||||
f.setItalic(true);
|
||||
item->setFont(f);
|
||||
|
||||
CMakeProject *pro = static_cast<CMakeProject *>(m_buildStep->project());
|
||||
QStringList targetList = pro->buildTargetTitles();
|
||||
targetList.sort();
|
||||
|
||||
foreach (const QString &buildTarget, targetList) {
|
||||
auto item = new QListWidgetItem(buildTarget, m_buildTargetsList);
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(m_buildStep->buildsBuildTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
|
||||
item->setData(Qt::UserRole, buildTarget);
|
||||
}
|
||||
connect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
|
||||
|
||||
for (int i = 0; i < m_buildTargetsList->count(); ++i) {
|
||||
QListWidgetItem *item = m_buildTargetsList->item(i);
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(m_buildStep->buildsBuildTarget(item->data(Qt::UserRole).toString())
|
||||
? Qt::Checked : Qt::Unchecked);
|
||||
}
|
||||
m_buildTargetsList->blockSignals(wasBlocked);
|
||||
updateSummary();
|
||||
}
|
||||
|
||||
void CMakeBuildStepConfigWidget::selectedBuildTargetsChanged()
|
||||
{
|
||||
disconnect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
|
||||
const bool wasBlocked = m_buildTargetsList->blockSignals(true);
|
||||
for (int y = 0; y < m_buildTargetsList->count(); ++y) {
|
||||
QListWidgetItem *item = m_buildTargetsList->item(y);
|
||||
item->setCheckState(m_buildStep->buildsBuildTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
|
||||
item->setCheckState(m_buildStep->buildsBuildTarget(item->data(Qt::UserRole).toString())
|
||||
? Qt::Checked : Qt::Unchecked);
|
||||
}
|
||||
connect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
|
||||
m_buildTargetsList->blockSignals(wasBlocked);
|
||||
updateSummary();
|
||||
}
|
||||
|
||||
@@ -541,7 +524,7 @@ BuildStep *CMakeBuildStepFactory::create(BuildStepList *parent, Core::Id id)
|
||||
return 0;
|
||||
auto step = new CMakeBuildStep(parent);
|
||||
if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN)
|
||||
step->setBuildTarget(CMakeBuildStep::cleanTarget(), true);
|
||||
step->setBuildTarget(CMakeBuildStep::cleanTarget());
|
||||
return step;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,10 +61,9 @@ public:
|
||||
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
|
||||
bool immutable() const override;
|
||||
|
||||
QStringList buildTargets() const;
|
||||
QString buildTarget() const;
|
||||
bool buildsBuildTarget(const QString &target) const;
|
||||
void setBuildTarget(const QString &target, bool on);
|
||||
void setBuildTargets(const QStringList &targets);
|
||||
void setBuildTarget(const QString &target);
|
||||
void clearBuildTargets();
|
||||
|
||||
QString toolArguments() const;
|
||||
@@ -72,18 +71,16 @@ public:
|
||||
|
||||
QString allArguments(const CMakeRunConfiguration *rc) const;
|
||||
|
||||
bool addRunConfigurationArgument() const;
|
||||
void setAddRunConfigurationArgument(bool add);
|
||||
|
||||
QString cmakeCommand() const;
|
||||
|
||||
QVariantMap toMap() const override;
|
||||
|
||||
static QString cleanTarget();
|
||||
static QString allTarget();
|
||||
|
||||
signals:
|
||||
void cmakeCommandChanged();
|
||||
void targetsToBuildChanged();
|
||||
void targetToBuildChanged();
|
||||
void buildTargetsChanged();
|
||||
|
||||
protected:
|
||||
@@ -112,9 +109,8 @@ private:
|
||||
QRegExp m_percentProgress;
|
||||
QRegExp m_ninjaProgress;
|
||||
QString m_ninjaProgressString;
|
||||
QStringList m_buildTargets;
|
||||
QString m_buildTarget;
|
||||
QString m_toolArguments;
|
||||
bool m_addRunConfigurationArgument = false;
|
||||
bool m_useNinja = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -111,13 +111,13 @@ void CMakeLocatorFilter::accept(Core::LocatorFilterEntry selection) const
|
||||
return;
|
||||
|
||||
// Change the make step to build only the given target
|
||||
QStringList oldTargets = buildStep->buildTargets();
|
||||
QString oldTarget = buildStep->buildTarget();
|
||||
buildStep->clearBuildTargets();
|
||||
buildStep->setBuildTarget(selection.displayName, true);
|
||||
buildStep->setBuildTarget(selection.displayName);
|
||||
|
||||
// Build
|
||||
ProjectExplorerPlugin::buildProject(cmakeProject);
|
||||
buildStep->setBuildTargets(oldTargets);
|
||||
buildStep->setBuildTarget(oldTarget);
|
||||
}
|
||||
|
||||
void CMakeLocatorFilter::refresh(QFutureInterface<void> &future)
|
||||
|
||||
@@ -92,6 +92,8 @@ CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName)
|
||||
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
|
||||
|
||||
rootProjectNode()->setDisplayName(fileName.parentDir().fileName());
|
||||
|
||||
connect(this, &CMakeProject::activeTargetChanged, this, &CMakeProject::handleActiveTargetChanged);
|
||||
}
|
||||
|
||||
CMakeProject::~CMakeProject()
|
||||
@@ -439,10 +441,6 @@ Project::RestoreResult CMakeProject::fromMap(const QVariantMap &map, QString *er
|
||||
RestoreResult result = Project::fromMap(map, errorMessage);
|
||||
if (result != RestoreResult::Ok)
|
||||
return result;
|
||||
|
||||
handleActiveTargetChanged();
|
||||
handleActiveBuildConfigurationChanged();
|
||||
|
||||
return RestoreResult::Ok;
|
||||
}
|
||||
|
||||
@@ -461,7 +459,8 @@ void CMakeProject::handleActiveTargetChanged()
|
||||
if (m_connectedTarget) {
|
||||
disconnect(m_connectedTarget, &Target::activeBuildConfigurationChanged,
|
||||
this, &CMakeProject::handleActiveBuildConfigurationChanged);
|
||||
|
||||
disconnect(m_connectedTarget, &Target::kitChanged,
|
||||
this, &CMakeProject::handleActiveBuildConfigurationChanged);
|
||||
}
|
||||
|
||||
m_connectedTarget = activeTarget();
|
||||
@@ -469,7 +468,11 @@ void CMakeProject::handleActiveTargetChanged()
|
||||
if (m_connectedTarget) {
|
||||
connect(m_connectedTarget, &Target::activeBuildConfigurationChanged,
|
||||
this, &CMakeProject::handleActiveBuildConfigurationChanged);
|
||||
connect(m_connectedTarget, &Target::kitChanged,
|
||||
this, &CMakeProject::handleActiveBuildConfigurationChanged);
|
||||
}
|
||||
|
||||
handleActiveBuildConfigurationChanged();
|
||||
}
|
||||
|
||||
void CMakeProject::handleActiveBuildConfigurationChanged()
|
||||
@@ -483,7 +486,7 @@ void CMakeProject::handleActiveBuildConfigurationChanged()
|
||||
auto i = qobject_cast<CMakeBuildConfiguration *>(bc);
|
||||
QTC_ASSERT(i, continue);
|
||||
if (i == activeBc)
|
||||
i->parse();
|
||||
i->maybeForceReparse();
|
||||
else
|
||||
i->resetData();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user