diff options
| author | Brad King <brad.king@kitware.com> | 2024-01-25 15:52:01 (GMT) |
|---|---|---|
| committer | Brad King <brad.king@kitware.com> | 2024-01-25 15:53:04 (GMT) |
| commit | 151601c2e3419bd65bb276e77588c551487b4744 (patch) | |
| tree | 6fef8b57dd7aa10c9f15447b18dc74951de68dad /Source/cmProcessTools.cxx | |
| parent | 23747f705602cbc47672c6db6716afbe8b5b013e (diff) | |
| parent | bcbb212df704d36736731aa567b291fd97401804 (diff) | |
| download | CMake-151601c2e3419bd65bb276e77588c551487b4744.zip CMake-151601c2e3419bd65bb276e77588c551487b4744.tar.gz CMake-151601c2e3419bd65bb276e77588c551487b4744.tar.bz2 | |
Merge topic 'revert-replace-cmsysprocess-with-cmuvprocesschain' into release-3.28
bcbb212df7 Revert use of libuv for process execution for 3.28
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9176
Diffstat (limited to 'Source/cmProcessTools.cxx')
| -rw-r--r-- | Source/cmProcessTools.cxx | 82 |
1 files changed, 31 insertions, 51 deletions
diff --git a/Source/cmProcessTools.cxx b/Source/cmProcessTools.cxx index 1dd1dce..9e7854b 100644 --- a/Source/cmProcessTools.cxx +++ b/Source/cmProcessTools.cxx @@ -2,68 +2,48 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmProcessTools.h" -#include <algorithm> -#include <iterator> #include <ostream> -#include <cm3p/uv.h> +#include "cmsys/Process.h" #include "cmProcessOutput.h" -#include "cmUVHandlePtr.h" -#include "cmUVStream.h" -std::vector<cmUVProcessChain::Status> cmProcessTools::RunProcess( - cmUVProcessChainBuilder& builder, OutputParser* out, OutputParser* err, - Encoding encoding) +void cmProcessTools::RunProcess(struct cmsysProcess_s* cp, OutputParser* out, + OutputParser* err, Encoding encoding) { + cmsysProcess_Execute(cp); + char* data = nullptr; + int length = 0; + int p; cmProcessOutput processOutput(encoding); - - builder.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT) - .SetBuiltinStream(cmUVProcessChainBuilder::Stream_ERROR); - - auto chain = builder.Start(); - std::string strdata; - cm::uv_pipe_ptr outputPipe; - outputPipe.init(chain.GetLoop(), 0); - uv_pipe_open(outputPipe, chain.OutputStream()); - auto outputHandle = cmUVStreamRead( - outputPipe, - [&out, &processOutput, &strdata](std::vector<char> data) { - if (out) { - processOutput.DecodeText(data.data(), data.size(), strdata, 1); - if (!out->Process(strdata.c_str(), static_cast<int>(strdata.size()))) { - out = nullptr; - } + while ((out || err) && + (p = cmsysProcess_WaitForData(cp, &data, &length, nullptr))) { + if (out && p == cmsysProcess_Pipe_STDOUT) { + processOutput.DecodeText(data, length, strdata, 1); + if (!out->Process(strdata.c_str(), static_cast<int>(strdata.size()))) { + out = nullptr; } - }, - [&out]() { out = nullptr; }); - cm::uv_pipe_ptr errorPipe; - errorPipe.init(chain.GetLoop(), 0); - uv_pipe_open(errorPipe, chain.ErrorStream()); - auto errorHandle = cmUVStreamRead( - errorPipe, - [&err, &processOutput, &strdata](std::vector<char> data) { - if (err) { - processOutput.DecodeText(data.data(), data.size(), strdata, 2); - if (!err->Process(strdata.c_str(), static_cast<int>(strdata.size()))) { - err = nullptr; - } + } else if (err && p == cmsysProcess_Pipe_STDERR) { + processOutput.DecodeText(data, length, strdata, 2); + if (!err->Process(strdata.c_str(), static_cast<int>(strdata.size()))) { + err = nullptr; } - }, - [&err]() { err = nullptr; }); - while (out || err || !chain.Finished()) { - uv_run(&chain.GetLoop(), UV_RUN_ONCE); + } } - - std::vector<cmUVProcessChain::Status> result; - auto status = chain.GetStatus(); - std::transform( - status.begin(), status.end(), std::back_inserter(result), - [](const cmUVProcessChain::Status* s) -> cmUVProcessChain::Status { - return *s; - }); - return result; + if (out) { + processOutput.DecodeText(std::string(), strdata, 1); + if (!strdata.empty()) { + out->Process(strdata.c_str(), static_cast<int>(strdata.size())); + } + } + if (err) { + processOutput.DecodeText(std::string(), strdata, 2); + if (!strdata.empty()) { + err->Process(strdata.c_str(), static_cast<int>(strdata.size())); + } + } + cmsysProcess_WaitForExit(cp, nullptr); } cmProcessTools::LineParser::LineParser(char sep, bool ignoreCR) |
