MCPcopy Create free account
hub / github.com/Kitware/CMake / RunProcess

Method RunProcess

Source/cmProcessTools.cxx:14–60  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12#include "cmUVStream.h"
13
14std::vector<cmUVProcessChain::Status> cmProcessTools::RunProcess(
15 cmUVProcessChainBuilder& builder, OutputParser* out, OutputParser* err,
16 Encoding encoding)
17{
18 cmProcessOutput processOutput(encoding);
19
20 builder.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT)
21 .SetBuiltinStream(cmUVProcessChainBuilder::Stream_ERROR);
22
23 auto chain = builder.Start();
24
25 std::string strdata;
26 auto outputHandle = cmUVStreamRead(
27 chain.OutputStream(),
28 [&out, &processOutput, &strdata](std::vector<char> data) {
29 if (out) {
30 processOutput.DecodeText(data.data(), data.size(), strdata, 1);
31 if (!out->Process(strdata.c_str(), static_cast<int>(strdata.size()))) {
32 out = nullptr;
33 }
34 }
35 },
36 [&out]() { out = nullptr; });
37 auto errorHandle = cmUVStreamRead(
38 chain.ErrorStream(),
39 [&err, &processOutput, &strdata](std::vector<char> data) {
40 if (err) {
41 processOutput.DecodeText(data.data(), data.size(), strdata, 2);
42 if (!err->Process(strdata.c_str(), static_cast<int>(strdata.size()))) {
43 err = nullptr;
44 }
45 }
46 },
47 [&err]() { err = nullptr; });
48 while (out || err || !chain.Finished()) {
49 uv_run(&chain.GetLoop(), UV_RUN_ONCE);
50 }
51
52 std::vector<cmUVProcessChain::Status> result;
53 auto status = chain.GetStatus();
54 std::transform(
55 status.begin(), status.end(), std::back_inserter(result),
56 [](cmUVProcessChain::Status const* s) -> cmUVProcessChain::Status {
57 return *s;
58 });
59 return result;
60}
61
62cmProcessTools::LineParser::LineParser(char sep, bool ignoreCR)
63 : Separator(sep)

Callers

nothing calls this directly

Calls 15

cmUVStreamReadFunction · 0.85
transformFunction · 0.85
OutputStreamMethod · 0.80
DecodeTextMethod · 0.80
c_strMethod · 0.80
ErrorStreamMethod · 0.80
GetLoopMethod · 0.80
GetStatusMethod · 0.80
uv_runFunction · 0.50
StartMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected