From 4cab24a7ca96bd042617a2936b52c9799f395030 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 17 Aug 2021 11:57:24 +0200 Subject: Fix initial build directory used in build step In the BuildStep constructor the build configuration is not fully set up, leading to an empty build directory in there. It is not needed that we update the command directly on changes though (it is not visible in the projects mode UI anywhere), so just initialize the build step in its init() method. Change-Id: Iab168d15f1224c2e1ca66017244a80ed1059f417 Reviewed-by: Christian Stenger --- plugins/haskell/stackbuildstep.cpp | 36 ++++++++++++------------------------ plugins/haskell/stackbuildstep.h | 3 +++ 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/plugins/haskell/stackbuildstep.cpp b/plugins/haskell/stackbuildstep.cpp index 26c3006..52ed64f 100644 --- a/plugins/haskell/stackbuildstep.cpp +++ b/plugins/haskell/stackbuildstep.cpp @@ -42,30 +42,6 @@ StackBuildStep::StackBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id : AbstractProcessStep(bsl, id) { setDefaultDisplayName(trDisplayName()); - - const auto updateCommandLine = [this] { - const auto projectDir = QDir(project()->projectDirectory().toString()); - processParameters()->setCommandLine( - {HaskellManager::stackExecutable(), - {"build", - "--work-dir", - projectDir.relativeFilePath(buildConfiguration()->buildDirectory().toString())}}); - }; - const auto updateEnvironment = [this] { - processParameters()->setEnvironment(buildConfiguration()->environment()); - }; - updateCommandLine(); - processParameters()->setWorkingDirectory(project()->projectDirectory()); - updateEnvironment(); - connect(HaskellManager::instance(), - &HaskellManager::stackExecutableChanged, - this, - updateCommandLine); - connect(buildConfiguration(), - &BuildConfiguration::buildDirectoryChanged, - this, - updateCommandLine); - connect(buildConfiguration(), &BuildConfiguration::environmentChanged, this, updateEnvironment); } QWidget *StackBuildStep::createConfigWidget() @@ -78,6 +54,18 @@ QString StackBuildStep::trDisplayName() return tr("Stack Build"); } +bool StackBuildStep::init() +{ + if (AbstractProcessStep::init()) { + const auto projectDir = QDir(project()->projectDirectory().toString()); + processParameters()->setCommandLine( + {HaskellManager::stackExecutable(), + {"build", "--work-dir", projectDir.relativeFilePath(buildDirectory().toString())}}); + processParameters()->setEnvironment(buildEnvironment()); + } + return true; +} + StackBuildStepFactory::StackBuildStepFactory() { registerStep(Constants::C_STACK_BUILD_STEP_ID); diff --git a/plugins/haskell/stackbuildstep.h b/plugins/haskell/stackbuildstep.h index 98938f5..d74d155 100644 --- a/plugins/haskell/stackbuildstep.h +++ b/plugins/haskell/stackbuildstep.h @@ -40,6 +40,9 @@ public: QWidget *createConfigWidget() override; static QString trDisplayName(); + +protected: + bool init() override; }; class StackBuildStepFactory : public ProjectExplorer::BuildStepFactory -- cgit v1.2.3