diff --git a/src/plugins/nim/project/nimblebuildstep.cpp b/src/plugins/nim/project/nimblebuildstep.cpp index a8a84ff9018..4bb2c345207 100644 --- a/src/plugins/nim/project/nimblebuildstep.cpp +++ b/src/plugins/nim/project/nimblebuildstep.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include "nimblebuildstep.h" + #include "nimconstants.h" #include "nimbleproject.h" #include "nimbuildsystem.h" @@ -34,6 +35,7 @@ #include #include #include +#include #include #include @@ -107,14 +109,12 @@ NimbleBuildStep::NimbleBuildStep(BuildStepList *parentList, Id id) m_arguments->setArguments(defaultArguments()); setCommandLineProvider([this] { - auto bs = static_cast(buildSystem()); - return CommandLine(bs->defaultNimble(), + return CommandLine(Nim::nimblePathFromKit(target()->kit()), {"build", m_arguments->arguments(macroExpander())}); }); setWorkingDirectoryProvider([this] { return project()->projectDirectory(); }); setEnvironmentModifier([this](Environment &env) { - auto bs = static_cast(buildSystem()); - env.appendOrSetPath(bs->nimPathFromKit().toUserOutput()); + env.appendOrSetPath(Nim::nimPathFromKit(target()->kit()).toUserOutput()); }); QTC_ASSERT(buildConfiguration(), return); diff --git a/src/plugins/nim/project/nimblebuildsystem.cpp b/src/plugins/nim/project/nimblebuildsystem.cpp index 19f21878e72..a3adcea07e4 100644 --- a/src/plugins/nim/project/nimblebuildsystem.cpp +++ b/src/plugins/nim/project/nimblebuildsystem.cpp @@ -24,6 +24,8 @@ ****************************************************************************/ #include "nimblebuildsystem.h" + +#include "nimbuildsystem.h" #include "nimbleproject.h" #include "nimproject.h" @@ -46,7 +48,7 @@ static std::vector parseTasks(const QString &nimblePath, const QStri { QProcess process; process.setWorkingDirectory(workingDirectory); - process.start(QStandardPaths::findExecutable(nimblePath), {"tasks"}); + process.start(nimblePath, {"tasks"}); process.waitForFinished(); std::vector result; @@ -145,8 +147,9 @@ void NimbleBuildSystem::triggerParsing() void NimbleBuildSystem::updateProject() { const FilePath projectDir = projectDirectory(); + const FilePath nimble = Nim::nimblePathFromKit(kit()); - m_metadata = parseMetadata(QStandardPaths::findExecutable("nimble"), projectDir.toString()); + m_metadata = parseMetadata(nimble.toString(), projectDir.toString()); const FilePath binDir = projectDir.pathAppended(m_metadata.binDir); const FilePath srcDir = projectDir.pathAppended("src"); @@ -162,7 +165,7 @@ void NimbleBuildSystem::updateProject() setApplicationTargets(std::move(targets)); - std::vector tasks = parseTasks(QStandardPaths::findExecutable("nimble"), projectDir.toString()); + std::vector tasks = parseTasks(nimble.toString(), projectDir.toString()); if (tasks != m_tasks) { m_tasks = std::move(tasks); emit tasksChanged(); diff --git a/src/plugins/nim/project/nimblerunconfiguration.cpp b/src/plugins/nim/project/nimblerunconfiguration.cpp index 6b01571c96c..1dcd9315ac2 100644 --- a/src/plugins/nim/project/nimblerunconfiguration.cpp +++ b/src/plugins/nim/project/nimblerunconfiguration.cpp @@ -25,12 +25,10 @@ #include "nimblerunconfiguration.h" -#include "nimbuildsystem.h" +#include "nimblebuildsystem.h" #include "nimconstants.h" #include "nimbleproject.h" -#include -#include #include #include #include @@ -91,14 +89,7 @@ public: NimbleTestConfiguration(ProjectExplorer::Target *target, Utils::Id id) : RunConfiguration(target, id) { - QString nimble; - auto bc = this->target()->activeBuildConfiguration(); - auto nimbleBuildStep = bc->buildSteps()->firstStepWithId(Constants::C_NIMBLEBUILDSTEP_ID); - if (nimbleBuildStep && nimbleBuildStep->buildSystem()) { - nimble = static_cast(nimbleBuildStep->buildSystem())->defaultNimble(); - } - - addAspect()->setExecutable(Utils::FilePath::fromString(nimble)); + addAspect()->setExecutable(Nim::nimblePathFromKit(target->kit())); addAspect()->setArguments("test"); addAspect()->setDefaultWorkingDirectory(project()->projectDirectory()); addAspect(); diff --git a/src/plugins/nim/project/nimbuildsystem.cpp b/src/plugins/nim/project/nimbuildsystem.cpp index 01e37d5d854..b1cf0f10b6c 100644 --- a/src/plugins/nim/project/nimbuildsystem.cpp +++ b/src/plugins/nim/project/nimbuildsystem.cpp @@ -196,20 +196,21 @@ void NimBuildSystem::triggerParsing() m_projectScanner.startScan(); } -FilePath NimBuildSystem::nimPathFromKit() const +FilePath nimPathFromKit(Kit *kit) { - auto tc = ToolChainKitAspect::toolChain(kit(), Constants::C_NIMLANGUAGE_ID); + auto tc = ToolChainKitAspect::toolChain(kit, Constants::C_NIMLANGUAGE_ID); QTC_ASSERT(tc, return {}); const FilePath command = tc->compilerCommand(); return command.isEmpty() ? FilePath() : command.absolutePath(); } -QString NimBuildSystem::defaultNimble() const +FilePath nimblePathFromKit(Kit *kit) { + // There's no extra setting for "nimble", derive it from the "nim" path. const QString nimbleFromPath = QStandardPaths::findExecutable("nimble"); - const FilePath nimPath = nimPathFromKit(); + const FilePath nimPath = nimPathFromKit(kit); const FilePath nimbleFromKit = nimPath.pathAppended(HostOsInfo::withExecutableSuffix("nimble")); - return nimbleFromKit.exists() ? nimbleFromKit.canonicalPath().toUserOutput() : nimbleFromPath; + return nimbleFromKit.exists() ? nimbleFromKit.canonicalPath() : FilePath::fromString(nimbleFromPath); } void NimBuildSystem::loadSettings() diff --git a/src/plugins/nim/project/nimbuildsystem.h b/src/plugins/nim/project/nimbuildsystem.h index 6922511853a..96c125b72b9 100644 --- a/src/plugins/nim/project/nimbuildsystem.h +++ b/src/plugins/nim/project/nimbuildsystem.h @@ -30,8 +30,13 @@ #include +namespace ProjectExplorer { class Kit; } + namespace Nim { +Utils::FilePath nimPathFromKit(ProjectExplorer::Kit *kit); +Utils::FilePath nimblePathFromKit(ProjectExplorer::Kit *kit); + class NimProjectScanner : public QObject { Q_OBJECT @@ -86,9 +91,6 @@ public: void triggerParsing() override; - Utils::FilePath nimPathFromKit() const; - QString defaultNimble() const; - protected: void loadSettings(); void saveSettings();