cmUVProcessChain: Add support for Environment

This commit is contained in:
Daniel Pfeifer
2026-03-05 23:14:45 +01:00
parent 8003a84178
commit 14edb7097f
2 changed files with 19 additions and 0 deletions

View File

@@ -159,6 +159,13 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetWorkingDirectory(
return *this;
}
cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetEnvironment(
std::vector<std::string> 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<char const*>{};
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<char**>(env.data());
}
std::array<uv_stdio_container_t, 3> stdio;
if (first) {
stdio[0] = this->InputStreamData.Stdio;

View File

@@ -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<std::string> env);
cmUVProcessChainBuilder& SetDetached();
uv_loop_t* GetLoop() const;
@@ -68,6 +69,7 @@ private:
std::array<StdioConfiguration, 3> Stdio;
std::vector<ProcessConfiguration> Processes;
std::string WorkingDirectory;
std::vector<std::string> Environment;
bool MergedBuiltinStreams = false;
bool Detached = false;
uv_loop_t* Loop = nullptr;