mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-03 06:10:28 +00:00
cmUVProcessChain: Add support for Environment
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user