aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/buildstep.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/buildstep.cpp')
-rw-r--r--src/plugins/projectexplorer/buildstep.cpp98
1 files changed, 81 insertions, 17 deletions
diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp
index 959e91d23c..39a2e647fd 100644
--- a/src/plugins/projectexplorer/buildstep.cpp
+++ b/src/plugins/projectexplorer/buildstep.cpp
@@ -27,14 +27,19 @@
#include "buildconfiguration.h"
#include "buildsteplist.h"
+#include "customparser.h"
#include "deployconfiguration.h"
#include "kitinformation.h"
#include "project.h"
+#include "projectexplorer.h"
+#include "projectexplorerconstants.h"
#include "target.h"
#include <coreplugin/variablechooser.h>
#include <utils/algorithm.h>
+#include <utils/fileinprojectfinder.h>
+#include <utils/outputformatter.h>
#include <utils/qtcassert.h>
#include <utils/runextensions.h>
@@ -117,20 +122,23 @@
This signal needs to be emitted if the build step runs in the GUI thread.
*/
+using namespace Utils;
+
static const char buildStepEnabledKey[] = "ProjectExplorer.BuildStep.Enabled";
namespace ProjectExplorer {
static QList<BuildStepFactory *> g_buildStepFactories;
-BuildStep::BuildStep(BuildStepList *bsl, Core::Id id) :
+BuildStep::BuildStep(BuildStepList *bsl, Utils::Id id) :
ProjectConfiguration(bsl, id)
{
QTC_CHECK(bsl->target() && bsl->target() == this->target());
- Utils::MacroExpander *expander = macroExpander();
- expander->setDisplayName(tr("Build Step"));
- expander->setAccumulating(true);
- expander->registerSubProvider([this] { return projectConfiguration()->macroExpander(); });
+}
+
+BuildStep::~BuildStep()
+{
+ emit finished(false);
}
void BuildStep::run()
@@ -186,6 +194,13 @@ BuildConfiguration *BuildStep::buildConfiguration() const
auto config = qobject_cast<BuildConfiguration *>(parent()->parent());
if (config)
return config;
+
+ // This situation should be avoided, as the step returned below is almost
+ // always not the right one, but the fallback is best we can do.
+ // A potential currently still valid path is accessing a build configuration
+ // from a BuildStep in a DeployConfiguration. Let's hunt those down and
+ // replace with explicit code there.
+ QTC_CHECK(false);
// step is not part of a build configuration, use active build configuration of step's target
return target()->activeBuildConfiguration();
}
@@ -195,6 +210,8 @@ DeployConfiguration *BuildStep::deployConfiguration() const
auto config = qobject_cast<DeployConfiguration *>(parent()->parent());
if (config)
return config;
+ // See comment in buildConfiguration()
+ QTC_CHECK(false);
// step is not part of a deploy configuration, use active deploy configuration of step's target
return target()->activeDeployConfiguration();
}
@@ -211,6 +228,53 @@ BuildSystem *BuildStep::buildSystem() const
return target()->buildSystem();
}
+Environment BuildStep::buildEnvironment() const
+{
+ if (auto bc = buildConfiguration())
+ return bc->environment();
+ return Environment::systemEnvironment();
+}
+
+FilePath BuildStep::buildDirectory() const
+{
+ if (auto bc = buildConfiguration())
+ return bc->buildDirectory();
+ return {};
+}
+
+BuildConfiguration::BuildType BuildStep::buildType() const
+{
+ if (auto bc = buildConfiguration())
+ return bc->buildType();
+ return BuildConfiguration::Unknown;
+}
+
+Utils::MacroExpander *BuildStep::macroExpander() const
+{
+ if (auto bc = buildConfiguration())
+ return bc->macroExpander();
+ return Utils::globalMacroExpander();
+}
+
+QString BuildStep::fallbackWorkingDirectory() const
+{
+ if (buildConfiguration())
+ return {Constants::DEFAULT_WORKING_DIR};
+ return {Constants::DEFAULT_WORKING_DIR_ALTERNATE};
+}
+
+void BuildStep::setupOutputFormatter(OutputFormatter *formatter)
+{
+ for (const Utils::Id id : buildConfiguration()->customParsers()) {
+ if (Internal::CustomParser * const parser = Internal::CustomParser::createFromId(id))
+ formatter->addLineParser(parser);
+ }
+ Utils::FileInProjectFinder fileFinder;
+ fileFinder.setProjectDirectory(project()->projectDirectory());
+ fileFinder.setProjectFiles(project()->files(Project::AllFiles));
+ formatter->setFileFinder(fileFinder);
+}
+
void BuildStep::reportRunResult(QFutureInterface<bool> &fi, bool success)
{
fi.reportResult(success);
@@ -227,7 +291,7 @@ void BuildStep::setWidgetExpandedByDefault(bool widgetExpandedByDefault)
m_widgetExpandedByDefault = widgetExpandedByDefault;
}
-QVariant BuildStep::data(Core::Id id) const
+QVariant BuildStep::data(Utils::Id id) const
{
Q_UNUSED(id)
return {};
@@ -322,7 +386,7 @@ bool BuildStepFactory::canHandle(BuildStepList *bsl) const
if (!m_supportedDeviceTypes.isEmpty()) {
Target *target = bsl->target();
QTC_ASSERT(target, return false);
- Core::Id deviceType = DeviceTypeKitAspect::deviceTypeId(target->kit());
+ Utils::Id deviceType = DeviceTypeKitAspect::deviceTypeId(target->kit());
if (!m_supportedDeviceTypes.contains(deviceType))
return false;
}
@@ -330,7 +394,7 @@ bool BuildStepFactory::canHandle(BuildStepList *bsl) const
if (m_supportedProjectType.isValid()) {
if (!config)
return false;
- Core::Id projectId = config->project()->id();
+ Utils::Id projectId = config->project()->id();
if (projectId != m_supportedProjectType)
return false;
}
@@ -341,7 +405,7 @@ bool BuildStepFactory::canHandle(BuildStepList *bsl) const
if (m_supportedConfiguration.isValid()) {
if (!config)
return false;
- Core::Id configId = config->id();
+ Utils::Id configId = config->id();
if (configId != m_supportedConfiguration)
return false;
}
@@ -359,32 +423,32 @@ void BuildStepFactory::setFlags(BuildStepInfo::Flags flags)
m_info.flags = flags;
}
-void BuildStepFactory::setSupportedStepList(Core::Id id)
+void BuildStepFactory::setSupportedStepList(Utils::Id id)
{
m_supportedStepLists = {id};
}
-void BuildStepFactory::setSupportedStepLists(const QList<Core::Id> &ids)
+void BuildStepFactory::setSupportedStepLists(const QList<Utils::Id> &ids)
{
m_supportedStepLists = ids;
}
-void BuildStepFactory::setSupportedConfiguration(Core::Id id)
+void BuildStepFactory::setSupportedConfiguration(Utils::Id id)
{
m_supportedConfiguration = id;
}
-void BuildStepFactory::setSupportedProjectType(Core::Id id)
+void BuildStepFactory::setSupportedProjectType(Utils::Id id)
{
m_supportedProjectType = id;
}
-void BuildStepFactory::setSupportedDeviceType(Core::Id id)
+void BuildStepFactory::setSupportedDeviceType(Utils::Id id)
{
m_supportedDeviceTypes = {id};
}
-void BuildStepFactory::setSupportedDeviceTypes(const QList<Core::Id> &ids)
+void BuildStepFactory::setSupportedDeviceTypes(const QList<Utils::Id> &ids)
{
m_supportedDeviceTypes = ids;
}
@@ -394,12 +458,12 @@ BuildStepInfo BuildStepFactory::stepInfo() const
return m_info;
}
-Core::Id BuildStepFactory::stepId() const
+Utils::Id BuildStepFactory::stepId() const
{
return m_info.id;
}
-BuildStep *BuildStepFactory::create(BuildStepList *parent, Core::Id id)
+BuildStep *BuildStepFactory::create(BuildStepList *parent, Utils::Id id)
{
BuildStep *bs = nullptr;
if (id == m_info.id)