aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-12-09 12:59:38 +0100
committerhjk <hjk@qt.io>2019-12-09 14:12:45 +0000
commit041a86c8c7d8a7e563655c5ae4dae08752ceaad8 (patch)
treef1434adf884c101bc6741ab63c3565b56346a1e6 /src
parentb82add7813384c19879044b44796db1f8f067ad3 (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')
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp37
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp139
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h3
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp12
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h8
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.cpp12
-rw-r--r--src/plugins/genericprojectmanager/genericbuildconfiguration.h3
-rw-r--r--src/plugins/nim/project/nimblebuildconfiguration.cpp36
-rw-r--r--src/plugins/nim/project/nimblebuildconfiguration.h6
-rw-r--r--src/plugins/nim/project/nimbuildconfiguration.cpp71
-rw-r--r--src/plugins/nim/project/nimbuildconfiguration.h2
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp43
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h6
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp83
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.h1
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp89
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h2
18 files changed, 271 insertions, 284 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
index 0950ae46bc..406347aba0 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
@@ -53,26 +53,25 @@ AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::I
setBuildDirectory(Utils::FilePath::fromString("/<foobar>"));
setBuildDirectoryHistoryCompleter("AutoTools.BuildDir.History");
setConfigWidgetDisplayName(tr("Autotools Manager"));
-}
-void AutotoolsBuildConfiguration::initialize()
-{
- // ### Build Steps Build ###
- // autogen.sh or autoreconf
- QFile autogenFile(target()->project()->projectDirectory().toString() + "/autogen.sh");
- if (autogenFile.exists())
- buildSteps()->appendStep(Constants::AUTOGEN_STEP_ID);
- else
- buildSteps()->appendStep(Constants::AUTORECONF_STEP_ID);
-
- // ./configure.
- buildSteps()->appendStep(Constants::CONFIGURE_STEP_ID);
-
- // make
- buildSteps()->appendStep(Constants::MAKE_STEP_ID);
-
- // ### Build Steps Clean ###
- cleanSteps()->appendStep(Constants::MAKE_STEP_ID);
+ setInitializer([this] {
+ // ### Build Steps Build ###
+ // autogen.sh or autoreconf
+ QFile autogenFile(target()->project()->projectDirectory().toString() + "/autogen.sh");
+ if (autogenFile.exists())
+ buildSteps()->appendStep(Constants::AUTOGEN_STEP_ID);
+ else
+ buildSteps()->appendStep(Constants::AUTORECONF_STEP_ID);
+
+ // ./configure.
+ buildSteps()->appendStep(Constants::CONFIGURE_STEP_ID);
+
+ // make
+ buildSteps()->appendStep(Constants::MAKE_STEP_ID);
+
+ // ### Build Steps Clean ###
+ cleanSteps()->appendStep(Constants::MAKE_STEP_ID);
+ });
}
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
index 1b2bcf8021..d3c89c9d59 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h
@@ -38,8 +38,6 @@ class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
-
- void initialize() override;
};
class AutotoolsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 976d1cc11a..6cfb3b2fed 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -82,91 +82,90 @@ Q_LOGGING_CATEGORY(cmakeBuildConfigurationLog, "qtc.cmake.bc", QtWarningMsg);
const char CONFIGURATION_KEY[] = "CMake.Configuration";
-CMakeBuildConfiguration::CMakeBuildConfiguration(Target *parent, Core::Id id)
- : BuildConfiguration(parent, id)
+CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id)
+ : BuildConfiguration(target, id)
{
m_buildSystem = new CMakeBuildSystem(this);
setBuildDirectory(shadowBuildDirectory(project()->projectFilePath(),
- target()->kit(),
+ target->kit(),
displayName(),
BuildConfiguration::Unknown));
-}
-CMakeBuildConfiguration::~CMakeBuildConfiguration()
-{
- delete m_buildSystem;
-}
+ setInitializer([this, target] {
+ buildSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID);
+
+ if (DeviceTypeKitAspect::deviceTypeId(target->kit())
+ == Android::Constants::ANDROID_DEVICE_TYPE) {
+ buildSteps()->appendStep(Android::Constants::ANDROID_BUILD_APK_ID);
+ const auto &bs = buildSteps()->steps().constLast();
+ m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_NATIVE_API_LEVEL",
+ CMakeProjectManager::CMakeConfigItem::Type::STRING,
+ "Android native API level",
+ bs->data(Android::Constants::AndroidNdkPlatform).toString().toUtf8()});
+ auto ndkLocation = bs->data(Android::Constants::NdkLocation).value<FilePath>();
+ m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_NDK",
+ CMakeProjectManager::CMakeConfigItem::Type::PATH,
+ "Android NDK PATH",
+ ndkLocation.toString().toUtf8()});
-void CMakeBuildConfiguration::initialize()
-{
- buildSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID);
-
- if (DeviceTypeKitAspect::deviceTypeId(target()->kit())
- == Android::Constants::ANDROID_DEVICE_TYPE) {
- buildSteps()->appendStep(Android::Constants::ANDROID_BUILD_APK_ID);
- const auto &bs = buildSteps()->steps().constLast();
- m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_NATIVE_API_LEVEL",
- CMakeProjectManager::CMakeConfigItem::Type::STRING,
- "Android native API level",
- bs->data(Android::Constants::AndroidNdkPlatform).toString().toUtf8()});
- auto ndkLocation = bs->data(Android::Constants::NdkLocation).value<FilePath>();
- m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_NDK",
- CMakeProjectManager::CMakeConfigItem::Type::PATH,
- "Android NDK PATH",
- ndkLocation.toString().toUtf8()});
-
- m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"CMAKE_TOOLCHAIN_FILE",
- CMakeProjectManager::CMakeConfigItem::Type::PATH,
- "Android CMake toolchain file",
- ndkLocation.pathAppended("build/cmake/android.toolchain.cmake").toString().toUtf8()});
-
- auto androidAbis = bs->data(Android::Constants::AndroidABIs).toStringList();
- QString preferredAbi;
- if (androidAbis.contains("armeabi-v7a")) {
- preferredAbi = "armeabi-v7a";
- } else if (androidAbis.isEmpty() || androidAbis.contains("arm64-v8a")) {
- preferredAbi = "arm64-v8a";
- } else {
- preferredAbi = androidAbis.first();
- }
- // FIXME: configmodel doesn't care about our androidAbis list...
- m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_ABI",
- CMakeProjectManager::CMakeConfigItem::Type::STRING,
- "Android ABI",
- preferredAbi.toLatin1(),
- androidAbis});
-
- QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target()->kit());
- if (qt->qtVersion() >= QtSupport::QtVersionNumber{5, 14, 0}) {
- auto sdkLocation = bs->data(Android::Constants::SdkLocation).value<FilePath>();
- m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_SDK",
+ m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"CMAKE_TOOLCHAIN_FILE",
CMakeProjectManager::CMakeConfigItem::Type::PATH,
- "Android SDK PATH",
- sdkLocation.toString().toUtf8()});
+ "Android CMake toolchain file",
+ ndkLocation.pathAppended("build/cmake/android.toolchain.cmake").toString().toUtf8()});
+
+ auto androidAbis = bs->data(Android::Constants::AndroidABIs).toStringList();
+ QString preferredAbi;
+ if (androidAbis.contains("armeabi-v7a")) {
+ preferredAbi = "armeabi-v7a";
+ } else if (androidAbis.isEmpty() || androidAbis.contains("arm64-v8a")) {
+ preferredAbi = "arm64-v8a";
+ } else {
+ preferredAbi = androidAbis.first();
+ }
+ // FIXME: configmodel doesn't care about our androidAbis list...
+ m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_ABI",
+ CMakeProjectManager::CMakeConfigItem::Type::STRING,
+ "Android ABI",
+ preferredAbi.toLatin1(),
+ androidAbis});
+
+ QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target->kit());
+ if (qt->qtVersion() >= QtSupport::QtVersionNumber{5, 14, 0}) {
+ auto sdkLocation = bs->data(Android::Constants::SdkLocation).value<FilePath>();
+ m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_SDK",
+ CMakeProjectManager::CMakeConfigItem::Type::PATH,
+ "Android SDK PATH",
+ sdkLocation.toString().toUtf8()});
- }
+ }
- m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_STL",
- CMakeProjectManager::CMakeConfigItem::Type::STRING,
- "Android STL",
- "c++_shared"});
+ m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"ANDROID_STL",
+ CMakeProjectManager::CMakeConfigItem::Type::STRING,
+ "Android STL",
+ "c++_shared"});
- m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"CMAKE_FIND_ROOT_PATH", "%{Qt:QT_INSTALL_PREFIX}"});
- }
+ m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"CMAKE_FIND_ROOT_PATH", "%{Qt:QT_INSTALL_PREFIX}"});
+ }
- cleanSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID);
+ cleanSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID);
- if (initialBuildDirectory().isEmpty()) {
- auto project = target()->project();
- setBuildDirectory(CMakeBuildConfiguration::shadowBuildDirectory(project->projectFilePath(),
- target()->kit(),
- initialDisplayName(),
- initialBuildType()));
- }
- auto info = extraInfo().value<CMakeExtraBuildInfo>();
- setConfigurationForCMake(info.configuration);
+ if (initialBuildDirectory().isEmpty()) {
+ setBuildDirectory(shadowBuildDirectory(target->project()->projectFilePath(),
+ target->kit(),
+ initialDisplayName(),
+ initialBuildType()));
+ }
+ auto info = extraInfo().value<CMakeExtraBuildInfo>();
+ setConfigurationForCMake(info.configuration);
+ });
}
+CMakeBuildConfiguration::~CMakeBuildConfiguration()
+{
+ delete m_buildSystem;
+}
+
+
QString CMakeBuildConfiguration::disabledReason() const
{
return error();
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index 70f1b17a74..7b1453e808 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -47,7 +47,7 @@ class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration
Q_OBJECT
friend class ProjectExplorer::BuildConfigurationFactory;
- CMakeBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
+ CMakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
~CMakeBuildConfiguration() final;
public:
@@ -79,7 +79,6 @@ private:
QVariantMap toMap() const override;
BuildType buildType() const override;
- void initialize() override;
QString disabledReason() const override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
index 403976f7d1..973b37f45a 100644
--- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
+++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
@@ -528,11 +528,15 @@ CompilationDatabaseEditorFactory::CompilationDatabaseEditorFactory()
setCodeFoldingSupported(true);
}
-CompilationDatabaseBuildConfiguration::CompilationDatabaseBuildConfiguration(
- ProjectExplorer::Target *target, Core::Id id)
- : ProjectExplorer::BuildConfiguration(target, id)
+class CompilationDatabaseBuildConfiguration : public BuildConfiguration
{
-}
+public:
+ CompilationDatabaseBuildConfiguration(Target *target, Core::Id id)
+ : BuildConfiguration(target, id)
+ {
+ }
+};
+
CompilationDatabaseBuildConfigurationFactory::CompilationDatabaseBuildConfigurationFactory()
{
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h
index d70397c934..e8a3163563 100644
--- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h
+++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h
@@ -95,14 +95,6 @@ public:
CompilationDatabaseEditorFactory();
};
-class CompilationDatabaseBuildConfiguration : public ProjectExplorer::BuildConfiguration
-{
- Q_OBJECT
-public:
- CompilationDatabaseBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
- void initialize() final {}
-};
-
class CompilationDatabaseBuildConfigurationFactory
: public ProjectExplorer::BuildConfigurationFactory
{
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
index bfe729d502..0e909ebc5c 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp
@@ -55,13 +55,11 @@ GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, Core::Id id
setConfigWidgetDisplayName(tr("Generic Manager"));
setBuildDirectoryHistoryCompleter("Generic.BuildDir.History");
- updateCacheAndEmitEnvironmentChanged();
-}
-
-void GenericBuildConfiguration::initialize()
-{
- buildSteps()->appendStep(Constants::GENERIC_MS_ID);
- cleanSteps()->appendStep(Constants::GENERIC_MS_ID);
+ setInitializer([this] {
+ buildSteps()->appendStep(Constants::GENERIC_MS_ID);
+ cleanSteps()->appendStep(Constants::GENERIC_MS_ID);
+ updateCacheAndEmitEnvironmentChanged();
+ });
updateCacheAndEmitEnvironmentChanged();
}
diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
index 03e590ab92..9416dd1414 100644
--- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h
+++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h
@@ -27,8 +27,6 @@
#include <projectexplorer/buildconfiguration.h>
-namespace Utils { class FilePath; }
-
namespace GenericProjectManager {
namespace Internal {
@@ -39,7 +37,6 @@ class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
GenericBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
- void initialize() override;
void addToEnvironment(Utils::Environment &env) const final;
};
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;
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index 51e46edacf..6f91095748 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -84,6 +84,8 @@ public:
QString m_configWidgetDisplayName;
bool m_configWidgetHasFrame = false;
+ std::function<void()> m_initializer;
+
// FIXME: Remove.
BuildConfiguration::BuildType m_initialBuildType = BuildConfiguration::Unknown;
Utils::FilePath m_initialBuildDirectory;
@@ -181,6 +183,28 @@ void BuildConfiguration::addConfigWidgets(const std::function<void(NamedWidget *
adder(subConfigWidget);
}
+void BuildConfiguration::doInitialize(const BuildInfo &info)
+{
+ setDisplayName(info.displayName);
+ setDefaultDisplayName(info.displayName);
+ setBuildDirectory(info.buildDirectory);
+
+ d->m_initialBuildType = info.buildType;
+ d->m_initialDisplayName = info.displayName;
+ d->m_initialBuildDirectory = info.buildDirectory;
+ d->m_extraInfo = info.extraInfo;
+
+ acquaintAspects();
+
+ if (d->m_initializer)
+ d->m_initializer();
+}
+
+void BuildConfiguration::setInitializer(const std::function<void ()> &initializer)
+{
+ d->m_initializer = initializer;
+}
+
NamedWidget *BuildConfiguration::createConfigWidget()
{
NamedWidget *named = new NamedWidget(d->m_configWidgetDisplayName);
@@ -405,7 +429,7 @@ bool BuildConfiguration::regenerateBuildFiles(Node *node)
void BuildConfiguration::restrictNextBuild(const RunConfiguration *rc)
{
- Q_UNUSED(rc);
+ Q_UNUSED(rc)
}
BuildConfiguration::BuildType BuildConfiguration::buildType() const
@@ -568,21 +592,10 @@ BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const Buil
if (!canHandle(parent))
return nullptr;
QTC_ASSERT(m_creator, return nullptr);
- BuildConfiguration *bc = m_creator(parent);
- if (!bc)
- return nullptr;
- bc->setDisplayName(info.displayName);
- bc->setDefaultDisplayName(info.displayName);
- bc->setBuildDirectory(info.buildDirectory);
-
- bc->d->m_initialBuildType = info.buildType;
- bc->d->m_initialDisplayName = info.displayName;
- bc->d->m_initialBuildDirectory = info.buildDirectory;
- bc->d->m_extraInfo = info.extraInfo;
-
- bc->acquaintAspects();
- bc->initialize();
+ BuildConfiguration *bc = m_creator(parent);
+ if (bc)
+ bc->doInitialize(info);
return bc;
}
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 6981422702..191393842d 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -55,7 +55,7 @@ protected:
explicit BuildConfiguration(Target *target, Core::Id id);
public:
- ~BuildConfiguration();
+ ~BuildConfiguration() override;
Utils::FilePath buildDirectory() const;
Utils::FilePath rawBuildDirectory() const;
@@ -118,6 +118,8 @@ public:
void addConfigWidgets(const std::function<void (NamedWidget *)> &adder);
+ void doInitialize(const BuildInfo &info);
+
signals:
void environmentChanged();
void buildDirectoryChanged();
@@ -125,7 +127,7 @@ signals:
void buildTypeChanged();
protected:
- virtual void initialize() = 0;
+ void setInitializer(const std::function<void()> &initializer);
private:
void emitBuildDirectoryChanged();
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index 36ff246a05..38cd4caa59 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -80,6 +80,47 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
{
setConfigWidgetHasFrame(true);
+ setInitializer([this, target] {
+ const Kit *kit = target->kit();
+ QVariantMap configData = extraInfo().value<QVariantMap>();
+ configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
+ (initialBuildType() == BuildConfiguration::Debug)
+ ? QLatin1String(Constants::QBS_VARIANT_DEBUG)
+ : QLatin1String(Constants::QBS_VARIANT_RELEASE));
+
+ Utils::FilePath buildDir = initialBuildDirectory();
+ if (buildDir.isEmpty())
+ buildDir = defaultBuildDirectory(target->project()->projectFilePath(),
+ kit, initialDisplayName(),
+ initialBuildType());
+ setBuildDirectory(buildDir);
+
+ // Add the build configuration.
+ QVariantMap bd = configData;
+ QString configName = bd.take("configName").toString();
+ if (configName.isEmpty()) {
+ configName = "qtc_" + kit->fileSystemFriendlyName() + '_'
+ + Utils::FileUtils::fileSystemFriendlyName(initialDisplayName());
+ }
+
+ const QString kitName = kit->displayName();
+ const QByteArray kitHash = QCryptographicHash::hash(kitName.toUtf8(), QCryptographicHash::Sha1);
+
+ const QString uniqueConfigName = configName
+ + '_' + kit->fileSystemFriendlyName().left(8)
+ + '_' + kitHash.toHex().left(16);
+
+ m_configurationName->setValue(uniqueConfigName);
+
+ auto bs = new QbsBuildStep(buildSteps());
+ bs->setQbsConfiguration(bd);
+ buildSteps()->appendStep(bs);
+
+ cleanSteps()->appendStep(Constants::QBS_CLEANSTEP_ID);
+
+ emit qbsConfigurationChanged();
+ });
+
m_configurationName = addAspect<BaseStringAspect>();
m_configurationName->setLabelText(tr("Configuration name:"));
m_configurationName->setSettingsKey("Qbs.configName");
@@ -124,48 +165,6 @@ BuildSystem *QbsBuildConfiguration::buildSystem() const
return m_buildSystem;
}
-void QbsBuildConfiguration::initialize()
-{
- QVariantMap configData = extraInfo().value<QVariantMap>();
- configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
- (initialBuildType() == BuildConfiguration::Debug)
- ? QLatin1String(Constants::QBS_VARIANT_DEBUG)
- : QLatin1String(Constants::QBS_VARIANT_RELEASE));
-
- Utils::FilePath buildDir = initialBuildDirectory();
- if (buildDir.isEmpty())
- buildDir = defaultBuildDirectory(target()->project()->projectFilePath(),
- target()->kit(), initialDisplayName(),
- initialBuildType());
- setBuildDirectory(buildDir);
-
- // Add the build configuration.
- QVariantMap bd = configData;
- QString configName = bd.take("configName").toString();
- if (configName.isEmpty()) {
- configName = "qtc_" + target()->kit()->fileSystemFriendlyName() + '_'
- + Utils::FileUtils::fileSystemFriendlyName(initialDisplayName());
- }
-
- const Kit *kit = target()->kit();
- const QString kitName = kit->displayName();
- const QByteArray kitHash = QCryptographicHash::hash(kitName.toUtf8(), QCryptographicHash::Sha1);
-
- const QString uniqueConfigName = configName
- + '_' + kit->fileSystemFriendlyName().left(8)
- + '_' + kitHash.toHex().left(16);
-
- m_configurationName->setValue(uniqueConfigName);
-
- auto bs = new QbsBuildStep(buildSteps());
- bs->setQbsConfiguration(bd);
- buildSteps()->appendStep(bs);
-
- cleanSteps()->appendStep(Constants::QBS_CLEANSTEP_ID);
-
- emit qbsConfigurationChanged();
-}
-
void QbsBuildConfiguration::triggerReparseIfActive()
{
if (isActive())
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
index c92291a0b3..94507080d6 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
@@ -57,7 +57,6 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration
public:
ProjectExplorer::BuildSystem *buildSystem() const final;
- void initialize() final;
QbsBuildStep *qbsStep() const;
QVariantMap qbsConfiguration() const;
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index 1a86fa5522..de5f1cd1f3 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -109,6 +109,50 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
setConfigWidgetHasFrame(true);
m_buildSystem = new QmakeBuildSystem(this);
+ setInitializer([this, target] {
+ auto qmakeStep = new QMakeStep(buildSteps());
+ buildSteps()->appendStep(qmakeStep);
+ buildSteps()->appendStep(Constants::MAKESTEP_BS_ID);
+
+ cleanSteps()->appendStep(Constants::MAKESTEP_BS_ID);
+
+ const QmakeExtraBuildInfo qmakeExtra = extraInfo().value<QmakeExtraBuildInfo>();
+ BaseQtVersion *version = QtKitAspect::qtVersion(target->kit());
+
+ BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
+ if (initialBuildType() == BuildConfiguration::Debug)
+ config |= BaseQtVersion::DebugBuild;
+ else
+ config &= ~BaseQtVersion::DebugBuild;
+
+ QString additionalArguments = qmakeExtra.additionalArguments;
+ if (!additionalArguments.isEmpty())
+ qmakeStep->setUserArguments(additionalArguments);
+
+ aspect<SeparateDebugInfoAspect>()->setSetting(qmakeExtra.config.separateDebugInfo);
+ aspect<QmlDebuggingAspect>()->setSetting(qmakeExtra.config.linkQmlDebuggingQQ2);
+ aspect<QtQuickCompilerAspect>()->setSetting(qmakeExtra.config.useQtQuickCompiler);
+
+ setQMakeBuildConfiguration(config);
+
+ FilePath directory = initialBuildDirectory();
+ if (directory.isEmpty()) {
+ directory = shadowBuildDirectory(target->project()->projectFilePath(),
+ target->kit(), initialDisplayName(),
+ initialBuildType());
+ }
+
+ setBuildDirectory(directory);
+
+ if (DeviceTypeKitAspect::deviceTypeId(target->kit())
+ == Android::Constants::ANDROID_DEVICE_TYPE) {
+ buildSteps()->appendStep(Android::Constants::ANDROID_PACKAGE_INSTALLATION_STEP_ID);
+ buildSteps()->appendStep(Android::Constants::ANDROID_BUILD_APK_ID);
+ }
+
+ updateCacheAndEmitEnvironmentChanged();
+ });
+
connect(target, &Target::kitChanged,
this, &QmakeBuildConfiguration::kitChanged);
MacroExpander *expander = macroExpander();
@@ -153,51 +197,6 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
});
}
-void QmakeBuildConfiguration::initialize()
-{
- auto qmakeStep = new QMakeStep(buildSteps());
- buildSteps()->appendStep(qmakeStep);
- buildSteps()->appendStep(Constants::MAKESTEP_BS_ID);
-
- cleanSteps()->appendStep(Constants::MAKESTEP_BS_ID);
-
- const QmakeExtraBuildInfo qmakeExtra = extraInfo().value<QmakeExtraBuildInfo>();
- BaseQtVersion *version = QtKitAspect::qtVersion(target()->kit());
-
- BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
- if (initialBuildType() == BuildConfiguration::Debug)
- config |= BaseQtVersion::DebugBuild;
- else
- config &= ~BaseQtVersion::DebugBuild;
-
- QString additionalArguments = qmakeExtra.additionalArguments;
- if (!additionalArguments.isEmpty())
- qmakeStep->setUserArguments(additionalArguments);
-
- aspect<SeparateDebugInfoAspect>()->setSetting(qmakeExtra.config.separateDebugInfo);
- aspect<QmlDebuggingAspect>()->setSetting(qmakeExtra.config.linkQmlDebuggingQQ2);
- aspect<QtQuickCompilerAspect>()->setSetting(qmakeExtra.config.useQtQuickCompiler);
-
- setQMakeBuildConfiguration(config);
-
- FilePath directory = initialBuildDirectory();
- if (directory.isEmpty()) {
- directory = shadowBuildDirectory(target()->project()->projectFilePath(),
- target()->kit(), initialDisplayName(),
- initialBuildType());
- }
-
- setBuildDirectory(directory);
-
- if (DeviceTypeKitAspect::deviceTypeId(target()->kit())
- == Android::Constants::ANDROID_DEVICE_TYPE) {
- buildSteps()->appendStep(Android::Constants::ANDROID_PACKAGE_INSTALLATION_STEP_ID);
- buildSteps()->appendStep(Android::Constants::ANDROID_BUILD_APK_ID);
- }
-
- updateCacheAndEmitEnvironmentChanged();
-}
-
QmakeBuildConfiguration::~QmakeBuildConfiguration()
{
delete m_buildSystem;
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
index edb2782921..e003d86f7e 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
@@ -53,8 +53,6 @@ public:
ProjectExplorer::BuildSystem *buildSystem() const final;
- void initialize() override;
-
void setSubNodeBuild(QmakeProFileNode *node);
QmakeProFileNode *subNodeBuild() const;