From 14edb7097f189ad8c400d1e8bfc36b3ffc67f67e Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Thu, 5 Mar 2026 23:14:45 +0100 Subject: [PATCH] cmUVProcessChain: Add support for Environment --- Source/cmUVProcessChain.cxx | 17 +++++++++++++++++ Source/cmUVProcessChain.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/Source/cmUVProcessChain.cxx b/Source/cmUVProcessChain.cxx index 05d93613e4..44fd85251e 100644 --- a/Source/cmUVProcessChain.cxx +++ b/Source/cmUVProcessChain.cxx @@ -159,6 +159,13 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetWorkingDirectory( return *this; } +cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetEnvironment( + std::vector env) +{ + this->Environment = std::move(env); + return *this; +} + cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetDetached() { this->Detached = true; @@ -370,6 +377,16 @@ void cmUVProcessChain::InternalData::SpawnProcess( options.cwd = this->Builder->WorkingDirectory.c_str(); } + auto env = std::vector{}; + if (!this->Builder->Environment.empty()) { + env.reserve(this->Builder->Environment.size() + 1); + for (auto const& var : this->Builder->Environment) { + env.push_back(var.c_str()); + } + env.push_back(nullptr); + options.env = const_cast(env.data()); + } + std::array stdio; if (first) { stdio[0] = this->InputStreamData.Stdio; diff --git a/Source/cmUVProcessChain.h b/Source/cmUVProcessChain.h index 2116eb2658..2b9671f7b3 100644 --- a/Source/cmUVProcessChain.h +++ b/Source/cmUVProcessChain.h @@ -38,6 +38,7 @@ public: cmUVProcessChainBuilder& SetExternalStream(Stream stdio, int fd); cmUVProcessChainBuilder& SetExternalStream(Stream stdio, FILE* stream); cmUVProcessChainBuilder& SetWorkingDirectory(std::string dir); + cmUVProcessChainBuilder& SetEnvironment(std::vector env); cmUVProcessChainBuilder& SetDetached(); uv_loop_t* GetLoop() const; @@ -68,6 +69,7 @@ private: std::array Stdio; std::vector Processes; std::string WorkingDirectory; + std::vector Environment; bool MergedBuiltinStreams = false; bool Detached = false; uv_loop_t* Loop = nullptr;