diff options
author | hjk <hjk@qt.io> | 2019-12-09 12:59:38 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-12-09 14:12:45 +0000 |
commit | 041a86c8c7d8a7e563655c5ae4dae08752ceaad8 (patch) | |
tree | f1434adf884c101bc6741ab63c3565b56346a1e6 /src/plugins/nim | |
parent | b82add7813384c19879044b44796db1f8f067ad3 (diff) |
ProjectExplorer: Use function object for special build config init
Change-Id: I5da0f28ee1a64f8d9a3145f059019be702bee463
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/nim')
4 files changed, 53 insertions, 62 deletions
diff --git a/src/plugins/nim/project/nimblebuildconfiguration.cpp b/src/plugins/nim/project/nimblebuildconfiguration.cpp index 873b88de66..3703cb6442 100644 --- a/src/plugins/nim/project/nimblebuildconfiguration.cpp +++ b/src/plugins/nim/project/nimblebuildconfiguration.cpp @@ -54,30 +54,28 @@ NimbleBuildConfiguration::NimbleBuildConfiguration(Target *target, Core::Id id) setConfigWidgetHasFrame(true); setBuildDirectorySettingsKey("Nim.NimbleBuildConfiguration.BuildDirectory"); - m_nimbleBuildSystem = dynamic_cast<NimbleBuildSystem *>(buildSystem()); - QTC_ASSERT(m_nimbleBuildSystem, return); -} + setInitializer([this] { -BuildConfiguration::BuildType NimbleBuildConfiguration::buildType() const -{ - return m_buildType; -} - -void NimbleBuildConfiguration::initialize() -{ - m_buildType = initialBuildType(); + m_buildType = initialBuildType(); - setBuildDirectory(project()->projectDirectory()); + setBuildDirectory(project()->projectDirectory()); - // FIXME: This is the wrong place for this decision, as it depends on - // information that's typically only available after parsing which takes - // the build configuration that is initialized here into account. + // FIXME: This is the wrong place for this decision, as it depends on + // information that's typically only available after parsing which takes + // the build configuration that is initialized here into account. -// // Don't add a nimble build step when the package has no binaries (i.e a library package) -// if (!m_nimbleBuildSystem->metadata().bin.empty()) -// { + // // Don't add a nimble build step when the package has no binaries (i.e a library package) + // m_nimbleBuildSystem = dynamic_cast<NimbleBuildSystem *>(buildSystem()); + // if (!m_nimbleBuildSystem->metadata().bin.empty()) + // { buildSteps()->appendStep(new NimbleBuildStep(buildSteps())); -// } + // } + }); +} + +BuildConfiguration::BuildType NimbleBuildConfiguration::buildType() const +{ + return m_buildType; } bool NimbleBuildConfiguration::fromMap(const QVariantMap &map) diff --git a/src/plugins/nim/project/nimblebuildconfiguration.h b/src/plugins/nim/project/nimblebuildconfiguration.h index f7e7dc4dc7..8990842615 100644 --- a/src/plugins/nim/project/nimblebuildconfiguration.h +++ b/src/plugins/nim/project/nimblebuildconfiguration.h @@ -30,8 +30,6 @@ namespace Nim { -class NimbleBuildSystem; - class NimbleBuildConfiguration : public ProjectExplorer::BuildConfiguration { Q_OBJECT @@ -46,11 +44,7 @@ class NimbleBuildConfiguration : public ProjectExplorer::BuildConfiguration QVariantMap toMap() const override; -protected: - void initialize() override; - private: - NimbleBuildSystem *m_nimbleBuildSystem = nullptr; BuildType m_buildType; }; diff --git a/src/plugins/nim/project/nimbuildconfiguration.cpp b/src/plugins/nim/project/nimbuildconfiguration.cpp index 42f0177ceb..3b429cb550 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.cpp +++ b/src/plugins/nim/project/nimbuildconfiguration.cpp @@ -71,46 +71,47 @@ NimBuildConfiguration::NimBuildConfiguration(Target *target, Core::Id id) setConfigWidgetDisplayName(tr("General")); setConfigWidgetHasFrame(true); setBuildDirectorySettingsKey("Nim.NimBuildConfiguration.BuildDirectory"); -} - -void NimBuildConfiguration::initialize() -{ - // Create the build configuration and initialize it from build info - setBuildDirectory(defaultBuildDirectory(target()->kit(), - project()->projectFilePath(), - displayName(), - buildType())); - - // Add nim compiler build step - { - auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps()); - NimCompilerBuildStep::DefaultBuildOptions defaultOption; - switch (initialBuildType()) { - case BuildConfiguration::Release: - defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release; - break; - case BuildConfiguration::Debug: - defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Debug; - break; - default: - defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Empty; - break; - } - nimCompilerBuildStep->setDefaultCompilerOptions(defaultOption); - const Utils::FilePathList nimFiles = project()->files([](const Node *n) { - return Project::AllFiles(n) && n->path().endsWith(".nim"); - }); - if (!nimFiles.isEmpty()) - nimCompilerBuildStep->setTargetNimFile(nimFiles.first()); - buildSteps()->appendStep(nimCompilerBuildStep); - } + setInitializer([this, target] { + // Create the build configuration and initialize it from build info + setBuildDirectory(defaultBuildDirectory(target->kit(), + project()->projectFilePath(), + displayName(), + buildType())); + + // Add nim compiler build step + { + auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps()); + NimCompilerBuildStep::DefaultBuildOptions defaultOption; + switch (initialBuildType()) { + case BuildConfiguration::Release: + defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release; + break; + case BuildConfiguration::Debug: + defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Debug; + break; + default: + defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Empty; + break; + } + nimCompilerBuildStep->setDefaultCompilerOptions(defaultOption); + + const Utils::FilePathList nimFiles = project()->files([](const Node *n) { + return Project::AllFiles(n) && n->path().endsWith(".nim"); + }); + + if (!nimFiles.isEmpty()) + nimCompilerBuildStep->setTargetNimFile(nimFiles.first()); + buildSteps()->appendStep(nimCompilerBuildStep); + } - // Add clean step - cleanSteps()->appendStep(Constants::C_NIMCOMPILERCLEANSTEP_ID); + // Add clean step + cleanSteps()->appendStep(Constants::C_NIMCOMPILERCLEANSTEP_ID); + }); } + FilePath NimBuildConfiguration::cacheDirectory() const { return buildDirectory().pathAppended("nimcache"); diff --git a/src/plugins/nim/project/nimbuildconfiguration.h b/src/plugins/nim/project/nimbuildconfiguration.h index d5c4a293e4..a5c7cd23f7 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.h +++ b/src/plugins/nim/project/nimbuildconfiguration.h @@ -39,8 +39,6 @@ class NimBuildConfiguration : public ProjectExplorer::BuildConfiguration friend class ProjectExplorer::BuildConfigurationFactory; NimBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); - void initialize() override; - public: Utils::FilePath cacheDirectory() const; Utils::FilePath outFilePath() const; |