aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/nim
diff options
context:
space:
mode:
authorChristian Kandeler <[email protected]>2025-01-24 16:48:30 +0100
committerChristian Kandeler <[email protected]>2025-01-29 12:05:30 +0000
commitad8b4f6997deac872535395df49677ed51911dd4 (patch)
tree910f7758a9cc19cd6a82b42a79429e6976114f85 /src/plugins/nim
parent601648a5ca2637597b0aa3784dc4277d998b1608 (diff)
Nim: Make BuildSystem classes "per build config"
Diffstat (limited to 'src/plugins/nim')
-rw-r--r--src/plugins/nim/project/nimbleproject.cpp13
-rw-r--r--src/plugins/nim/project/nimbleproject.h2
-rw-r--r--src/plugins/nim/project/nimproject.cpp12
-rw-r--r--src/plugins/nim/project/nimproject.h8
4 files changed, 23 insertions, 12 deletions
diff --git a/src/plugins/nim/project/nimbleproject.cpp b/src/plugins/nim/project/nimbleproject.cpp
index 70bde36c72c..eac21c26a44 100644
--- a/src/plugins/nim/project/nimbleproject.cpp
+++ b/src/plugins/nim/project/nimbleproject.cpp
@@ -117,8 +117,8 @@ static NimbleMetadata parseMetadata(const FilePath &nimblePath, const FilePath &
return result;
}
-NimbleBuildSystem::NimbleBuildSystem(Target *target)
- : BuildSystem(target), m_projectScanner(target->project())
+NimbleBuildSystem::NimbleBuildSystem(BuildConfiguration *bc)
+ : BuildSystem(bc), m_projectScanner(bc->project())
{
m_projectScanner.watchProjectFilePath();
@@ -140,9 +140,9 @@ NimbleBuildSystem::NimbleBuildSystem(Target *target)
requestDelayedParse();
});
- connect(target->project(), &ProjectExplorer::Project::settingsLoaded,
+ connect(bc->project(), &ProjectExplorer::Project::settingsLoaded,
this, &NimbleBuildSystem::loadSettings);
- connect(target->project(), &ProjectExplorer::Project::aboutToSaveSettings,
+ connect(bc->project(), &ProjectExplorer::Project::aboutToSaveSettings,
this, &NimbleBuildSystem::saveSettings);
requestDelayedParse();
}
@@ -286,7 +286,10 @@ class NimbleBuildConfiguration : public ProjectExplorer::BuildConfiguration
});
}
+ ~NimbleBuildConfiguration() { delete m_buildSystem; }
+
BuildType buildType() const override { return m_buildType; }
+ BuildSystem *buildSystem() const override { return m_buildSystem; }
void fromMap(const Utils::Store &map) override
{
@@ -310,6 +313,7 @@ private:
emit buildTypeChanged();
}
+ NimbleBuildSystem * const m_buildSystem{new NimbleBuildSystem(this)};
BuildType m_buildType = ProjectExplorer::BuildConfiguration::Unknown;
};
@@ -348,7 +352,6 @@ NimbleProject::NimbleProject(const FilePath &fileName)
setDisplayName(fileName.completeBaseName());
// ensure debugging is enabled (Nim plugin translates nim code to C code)
setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
- setBuildSystemCreator<NimbleBuildSystem>();
}
void NimbleProject::toMap(Store &map) const
diff --git a/src/plugins/nim/project/nimbleproject.h b/src/plugins/nim/project/nimbleproject.h
index beb9d82c654..4a61306235c 100644
--- a/src/plugins/nim/project/nimbleproject.h
+++ b/src/plugins/nim/project/nimbleproject.h
@@ -25,7 +25,7 @@ class NimbleBuildSystem final : public ProjectExplorer::BuildSystem
Q_OBJECT
public:
- NimbleBuildSystem(ProjectExplorer::Target *target);
+ NimbleBuildSystem(ProjectExplorer::BuildConfiguration *bc);
std::vector<NimbleTask> tasks() const;
diff --git a/src/plugins/nim/project/nimproject.cpp b/src/plugins/nim/project/nimproject.cpp
index d3eb6b2a6a7..fdd6f25c304 100644
--- a/src/plugins/nim/project/nimproject.cpp
+++ b/src/plugins/nim/project/nimproject.cpp
@@ -147,7 +147,7 @@ bool NimProjectScanner::renameFile(const QString &, const QString &to)
class NimBuildSystem final : public BuildSystem
{
public:
- explicit NimBuildSystem(Target *target);
+ explicit NimBuildSystem(BuildConfiguration *bc);
bool supportsAction(Node *, ProjectAction action, const Node *node) const final;
bool addFiles(Node *node, const FilePaths &filePaths, FilePaths *) final;
@@ -168,8 +168,8 @@ protected:
NimProjectScanner m_projectScanner;
};
-NimBuildSystem::NimBuildSystem(Target *target)
- : BuildSystem(target), m_projectScanner(target->project())
+NimBuildSystem::NimBuildSystem(BuildConfiguration *bc)
+ : BuildSystem(bc), m_projectScanner(bc->project())
{
connect(&m_projectScanner, &NimProjectScanner::finished, this, [this] {
m_guard.markAsSuccess();
@@ -267,7 +267,7 @@ static FilePath defaultBuildDirectory(const Kit *k,
}
NimBuildConfiguration::NimBuildConfiguration(Target *target, Utils::Id id)
- : BuildConfiguration(target, id)
+ : BuildConfiguration(target, id), m_buildSystem(new NimBuildSystem(this))
{
setConfigWidgetDisplayName(Tr::tr("General"));
setConfigWidgetHasFrame(true);
@@ -289,6 +289,8 @@ NimBuildConfiguration::NimBuildConfiguration(Target *target, Utils::Id id)
});
}
+NimBuildConfiguration::~NimBuildConfiguration() { delete m_buildSystem; }
+BuildSystem *NimBuildConfiguration::buildSystem() const { return m_buildSystem; }
FilePath NimBuildConfiguration::cacheDirectory() const
{
@@ -359,8 +361,6 @@ NimProject::NimProject(const FilePath &filePath) : Project(Constants::C_NIM_MIME
setDisplayName(filePath.completeBaseName());
// ensure debugging is enabled (Nim plugin translates nim code to C code)
setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
-
- setBuildSystemCreator<NimBuildSystem>();
}
Tasks NimProject::projectIssues(const Kit *k) const
diff --git a/src/plugins/nim/project/nimproject.h b/src/plugins/nim/project/nimproject.h
index ae7c746edd9..a504f1ed512 100644
--- a/src/plugins/nim/project/nimproject.h
+++ b/src/plugins/nim/project/nimproject.h
@@ -10,6 +10,7 @@
#include <utils/filesystemwatcher.h>
namespace Nim {
+class NimBuildSystem;
class NimBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
@@ -19,8 +20,15 @@ class NimBuildConfiguration : public ProjectExplorer::BuildConfiguration
NimBuildConfiguration(ProjectExplorer::Target *target, Utils::Id id);
public:
+ ~NimBuildConfiguration();
+
Utils::FilePath cacheDirectory() const;
Utils::FilePath outFilePath() const;
+
+private:
+ ProjectExplorer::BuildSystem *buildSystem() const;
+
+ NimBuildSystem * const m_buildSystem;
};
Utils::FilePath nimPathFromKit(ProjectExplorer::Kit *kit);