mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-05 15:20:24 +00:00
cmUVProcessChain: Add support for Environment
This commit is contained in:
@@ -159,6 +159,13 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetWorkingDirectory(
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetEnvironment(
|
||||||
|
std::vector<std::string> env)
|
||||||
|
{
|
||||||
|
this->Environment = std::move(env);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetDetached()
|
cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetDetached()
|
||||||
{
|
{
|
||||||
this->Detached = true;
|
this->Detached = true;
|
||||||
@@ -370,6 +377,16 @@ void cmUVProcessChain::InternalData::SpawnProcess(
|
|||||||
options.cwd = this->Builder->WorkingDirectory.c_str();
|
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;
|
std::array<uv_stdio_container_t, 3> stdio;
|
||||||
if (first) {
|
if (first) {
|
||||||
stdio[0] = this->InputStreamData.Stdio;
|
stdio[0] = this->InputStreamData.Stdio;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ public:
|
|||||||
cmUVProcessChainBuilder& SetExternalStream(Stream stdio, int fd);
|
cmUVProcessChainBuilder& SetExternalStream(Stream stdio, int fd);
|
||||||
cmUVProcessChainBuilder& SetExternalStream(Stream stdio, FILE* stream);
|
cmUVProcessChainBuilder& SetExternalStream(Stream stdio, FILE* stream);
|
||||||
cmUVProcessChainBuilder& SetWorkingDirectory(std::string dir);
|
cmUVProcessChainBuilder& SetWorkingDirectory(std::string dir);
|
||||||
|
cmUVProcessChainBuilder& SetEnvironment(std::vector<std::string> env);
|
||||||
cmUVProcessChainBuilder& SetDetached();
|
cmUVProcessChainBuilder& SetDetached();
|
||||||
|
|
||||||
uv_loop_t* GetLoop() const;
|
uv_loop_t* GetLoop() const;
|
||||||
@@ -68,6 +69,7 @@ private:
|
|||||||
std::array<StdioConfiguration, 3> Stdio;
|
std::array<StdioConfiguration, 3> Stdio;
|
||||||
std::vector<ProcessConfiguration> Processes;
|
std::vector<ProcessConfiguration> Processes;
|
||||||
std::string WorkingDirectory;
|
std::string WorkingDirectory;
|
||||||
|
std::vector<std::string> Environment;
|
||||||
bool MergedBuiltinStreams = false;
|
bool MergedBuiltinStreams = false;
|
||||||
bool Detached = false;
|
bool Detached = false;
|
||||||
uv_loop_t* Loop = nullptr;
|
uv_loop_t* Loop = nullptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user