diff options
Diffstat (limited to 'src/plugins/projectexplorer/buildstep.cpp')
-rw-r--r-- | src/plugins/projectexplorer/buildstep.cpp | 98 |
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) |