1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-18 17:31:57 +08:00

cmUVProcessChain: Simplify SetExternalStream usage

It is commonly called with the `fileno()` of a `FILE*` stream,
so accept the latter directly.
This commit is contained in:
Brad King
2024-01-24 10:07:54 -05:00
parent 116bb2b70f
commit b6e4e4babc
9 changed files with 27 additions and 44 deletions

View File

@@ -21,8 +21,6 @@
#include "cmsys/Glob.hxx" #include "cmsys/Glob.hxx"
#include "cmsys/RegularExpression.hxx" #include "cmsys/RegularExpression.hxx"
#include "cm_fileno.hxx"
#include "cmCTest.h" #include "cmCTest.h"
#include "cmDuration.h" #include "cmDuration.h"
#include "cmGeneratedFileStream.h" #include "cmGeneratedFileStream.h"
@@ -1887,9 +1885,9 @@ int cmCTestCoverageHandler::RunBullseyeCommand(
cmsys::SystemTools::Fopen(stderrFile, "w"), fclose); cmsys::SystemTools::Fopen(stderrFile, "w"), fclose);
builder.AddCommand(args) builder.AddCommand(args)
.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT,
cm_fileno(stdoutHandle.get())) stdoutHandle.get())
.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR,
cm_fileno(stderrHandle.get())); stderrHandle.get());
// since we set the output file names wait for it to end // since we set the output file names wait for it to end
auto chain = builder.Start(); auto chain = builder.Start();
chain.Wait(); chain.Wait();

View File

@@ -13,8 +13,6 @@
#include "cmsys/FStream.hxx" #include "cmsys/FStream.hxx"
#include "cmsys/RegularExpression.hxx" #include "cmsys/RegularExpression.hxx"
#include "cm_fileno.hxx"
#include "cmCTestLaunchReporter.h" #include "cmCTestLaunchReporter.h"
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmMakefile.h" #include "cmMakefile.h"
@@ -158,11 +156,8 @@ void cmCTestLaunch::RunChild()
cmsys::ofstream ferr; cmsys::ofstream ferr;
if (this->Reporter.Passthru) { if (this->Reporter.Passthru) {
// In passthru mode we just share the output pipes. // In passthru mode we just share the output pipes.
builder builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout)
.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr);
cm_fileno(stdout))
.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR,
cm_fileno(stderr));
} else { } else {
// In full mode we record the child output pipes to log files. // In full mode we record the child output pipes to log files.
builder.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT) builder.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT)

View File

@@ -18,8 +18,6 @@
#include <cm3p/uv.h> #include <cm3p/uv.h>
#include "cm_fileno.hxx"
#include "cmArgumentParser.h" #include "cmArgumentParser.h"
#include "cmExecutionStatus.h" #include "cmExecutionStatus.h"
#include "cmList.h" #include "cmList.h"
@@ -184,11 +182,10 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args,
inputFile.reset(cmsys::SystemTools::Fopen(inputFilename, "rb")); inputFile.reset(cmsys::SystemTools::Fopen(inputFilename, "rb"));
if (inputFile) { if (inputFile) {
builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT,
cm_fileno(inputFile.get())); inputFile.get());
} }
} else { } else {
builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, stdin);
cm_fileno(stdin));
} }
std::unique_ptr<FILE, int (*)(FILE*)> outputFile(nullptr, fclose); std::unique_ptr<FILE, int (*)(FILE*)> outputFile(nullptr, fclose);
@@ -196,7 +193,7 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args,
outputFile.reset(cmsys::SystemTools::Fopen(outputFilename, "wb")); outputFile.reset(cmsys::SystemTools::Fopen(outputFilename, "wb"));
if (outputFile) { if (outputFile) {
builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT,
cm_fileno(outputFile.get())); outputFile.get());
} }
} else { } else {
if (arguments.OutputVariable == arguments.ErrorVariable && if (arguments.OutputVariable == arguments.ErrorVariable &&
@@ -212,13 +209,13 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args,
if (errorFilename == outputFilename) { if (errorFilename == outputFilename) {
if (outputFile) { if (outputFile) {
builder.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, builder.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR,
cm_fileno(outputFile.get())); outputFile.get());
} }
} else { } else {
errorFile.reset(cmsys::SystemTools::Fopen(errorFilename, "wb")); errorFile.reset(cmsys::SystemTools::Fopen(errorFilename, "wb"));
if (errorFile) { if (errorFile) {
builder.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, builder.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR,
cm_fileno(errorFile.get())); errorFile.get());
} }
} }
} else if (arguments.ErrorVariable.empty() || } else if (arguments.ErrorVariable.empty() ||

View File

@@ -25,8 +25,6 @@
#include <cm3p/uv.h> #include <cm3p/uv.h>
#include "cm_fileno.hxx"
#include "cmDuration.h" #include "cmDuration.h"
#include "cmELF.h" #include "cmELF.h"
#include "cmMessageMetadata.h" #include "cmMessageMetadata.h"
@@ -576,8 +574,7 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string> const& command,
cmDuration timeout, Encoding encoding) cmDuration timeout, Encoding encoding)
{ {
cmUVProcessChainBuilder builder; cmUVProcessChainBuilder builder;
builder builder.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, stdin)
.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, cm_fileno(stdin))
.AddCommand(command); .AddCommand(command);
if (dir) { if (dir) {
builder.SetWorkingDirectory(dir); builder.SetWorkingDirectory(dir);
@@ -586,11 +583,8 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string> const& command,
if (outputflag == OUTPUT_PASSTHROUGH) { if (outputflag == OUTPUT_PASSTHROUGH) {
captureStdOut = nullptr; captureStdOut = nullptr;
captureStdErr = nullptr; captureStdErr = nullptr;
builder builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout)
.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr);
cm_fileno(stdout))
.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR,
cm_fileno(stderr));
} else if (outputflag == OUTPUT_MERGE || } else if (outputflag == OUTPUT_MERGE ||
(captureStdErr && captureStdErr == captureStdOut)) { (captureStdErr && captureStdErr == captureStdOut)) {
builder.SetMergedBuiltinStreams(); builder.SetMergedBuiltinStreams();

View File

@@ -12,6 +12,8 @@
#include <cm3p/uv.h> #include <cm3p/uv.h>
#include "cm_fileno.hxx"
#include "cmGetPipes.h" #include "cmGetPipes.h"
#include "cmUVHandlePtr.h" #include "cmUVHandlePtr.h"
@@ -117,6 +119,12 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetExternalStream(
return *this; return *this;
} }
cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetExternalStream(
Stream stdio, FILE* stream)
{
return this->SetExternalStream(stdio, cm_fileno(stream));
}
cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetMergedBuiltinStreams() cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetMergedBuiltinStreams()
{ {
this->MergedBuiltinStreams = true; this->MergedBuiltinStreams = true;

View File

@@ -7,6 +7,7 @@
#include <array> #include <array>
#include <cstddef> // IWYU pragma: keep #include <cstddef> // IWYU pragma: keep
#include <cstdint> #include <cstdint>
#include <cstdio>
#include <memory> #include <memory>
#include <string> #include <string>
#include <utility> #include <utility>
@@ -34,6 +35,7 @@ public:
cmUVProcessChainBuilder& SetBuiltinStream(Stream stdio); cmUVProcessChainBuilder& SetBuiltinStream(Stream stdio);
cmUVProcessChainBuilder& SetMergedBuiltinStreams(); cmUVProcessChainBuilder& SetMergedBuiltinStreams();
cmUVProcessChainBuilder& SetExternalStream(Stream stdio, int fd); cmUVProcessChainBuilder& SetExternalStream(Stream stdio, int fd);
cmUVProcessChainBuilder& SetExternalStream(Stream stdio, FILE* stream);
cmUVProcessChainBuilder& SetWorkingDirectory(std::string dir); cmUVProcessChainBuilder& SetWorkingDirectory(std::string dir);
cmUVProcessChain Start() const; cmUVProcessChain Start() const;

View File

@@ -27,7 +27,6 @@
#include "cmsys/Glob.hxx" #include "cmsys/Glob.hxx"
#include "cmsys/RegularExpression.hxx" #include "cmsys/RegularExpression.hxx"
#include "cm_fileno.hxx"
#include "cm_sys_stat.h" #include "cm_sys_stat.h"
#include "cmBuildOptions.h" #include "cmBuildOptions.h"
@@ -3916,10 +3915,8 @@ std::function<int()> cmake::BuildWorkflowStep(
{ {
cmUVProcessChainBuilder builder; cmUVProcessChainBuilder builder;
builder.AddCommand(args) builder.AddCommand(args)
.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, .SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout)
cm_fileno(stdout)) .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr);
.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR,
cm_fileno(stderr));
return [builder]() -> int { return [builder]() -> int {
auto chain = builder.Start(); auto chain = builder.Start();
chain.Wait(); chain.Wait();

View File

@@ -11,8 +11,6 @@
#include <cm3p/uv.h> #include <cm3p/uv.h>
#include <fcntl.h> #include <fcntl.h>
#include "cm_fileno.hxx"
#include "cmCommandLineArgument.h" #include "cmCommandLineArgument.h"
#include "cmConsoleBuf.h" #include "cmConsoleBuf.h"
#include "cmCryptoHash.h" #include "cmCryptoHash.h"
@@ -1903,11 +1901,8 @@ int cmcmd::ExecuteLinkScript(std::vector<std::string> const& args)
cmUVProcessChainBuilder builder; cmUVProcessChainBuilder builder;
// Children should share stdout and stderr with this process. // Children should share stdout and stderr with this process.
builder builder.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, stdout)
.SetExternalStream(cmUVProcessChainBuilder::Stream_OUTPUT, .SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR, stderr);
cm_fileno(stdout))
.SetExternalStream(cmUVProcessChainBuilder::Stream_ERROR,
cm_fileno(stderr));
// Setup this command line. // Setup this command line.
std::vector<std::string> args2; std::vector<std::string> args2;

View File

@@ -12,8 +12,6 @@
#include <cm3p/uv.h> #include <cm3p/uv.h>
#include "cm_fileno.hxx"
#include "cmGetPipes.h" #include "cmGetPipes.h"
#include "cmStringAlgorithms.h" #include "cmStringAlgorithms.h"
#include "cmUVHandlePtr.h" #include "cmUVHandlePtr.h"
@@ -632,8 +630,7 @@ bool testUVProcessChainInputFile(const char* helperCommand)
cmUVProcessChainBuilder builder; cmUVProcessChainBuilder builder;
builder.AddCommand({ helperCommand, "dedup" }) builder.AddCommand({ helperCommand, "dedup" })
.SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, .SetExternalStream(cmUVProcessChainBuilder::Stream_INPUT, f.get())
cm_fileno(f.get()))
.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT); .SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT);
auto chain = builder.Start(); auto chain = builder.Start();