Add option to use stdout/stderr of original terminal in cmake --build
Pass the original file handles to the native tool when using the --use-stderr option in the build command. This enables the usage of advanced terminal features like colored output.
This commit is contained in:
parent
fc1708ac99
commit
2b473d2eaa
@ -638,6 +638,12 @@ bool cmSystemTools::RunSingleCommand(std::vector<cmStdString>const& command,
|
|||||||
cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1);
|
cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (outputflag == OUTPUT_PASSTHROUGH)
|
||||||
|
{
|
||||||
|
cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDOUT, 1);
|
||||||
|
cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDERR, 1);
|
||||||
|
}
|
||||||
|
|
||||||
cmsysProcess_SetTimeout(cp, timeout);
|
cmsysProcess_SetTimeout(cp, timeout);
|
||||||
cmsysProcess_Execute(cp);
|
cmsysProcess_Execute(cp);
|
||||||
|
|
||||||
@ -645,7 +651,7 @@ bool cmSystemTools::RunSingleCommand(std::vector<cmStdString>const& command,
|
|||||||
char* data;
|
char* data;
|
||||||
int length;
|
int length;
|
||||||
int pipe;
|
int pipe;
|
||||||
if ( output || outputflag != OUTPUT_NONE )
|
if(outputflag != OUTPUT_PASSTHROUGH && (output || outputflag != OUTPUT_NONE))
|
||||||
{
|
{
|
||||||
while((pipe = cmsysProcess_WaitForData(cp, &data, &length, 0)) > 0)
|
while((pipe = cmsysProcess_WaitForData(cp, &data, &length, 0)) > 0)
|
||||||
{
|
{
|
||||||
|
@ -211,7 +211,7 @@ public:
|
|||||||
* user-viewable output from the program being run will be generated.
|
* user-viewable output from the program being run will be generated.
|
||||||
* OUTPUT_MERGE is the legacy behaviour where stdout and stderr are merged
|
* OUTPUT_MERGE is the legacy behaviour where stdout and stderr are merged
|
||||||
* into stdout. OUTPUT_NORMAL passes through the output to stdout/stderr as
|
* into stdout. OUTPUT_NORMAL passes through the output to stdout/stderr as
|
||||||
* it was received.
|
* it was received. OUTPUT_PASSTHROUGH passes through the original handles.
|
||||||
*
|
*
|
||||||
* If timeout is specified, the command will be terminated after
|
* If timeout is specified, the command will be terminated after
|
||||||
* timeout expires. Timeout is specified in seconds.
|
* timeout expires. Timeout is specified in seconds.
|
||||||
@ -230,7 +230,8 @@ public:
|
|||||||
{
|
{
|
||||||
OUTPUT_NONE = 0,
|
OUTPUT_NONE = 0,
|
||||||
OUTPUT_MERGE,
|
OUTPUT_MERGE,
|
||||||
OUTPUT_NORMAL
|
OUTPUT_NORMAL,
|
||||||
|
OUTPUT_PASSTHROUGH
|
||||||
};
|
};
|
||||||
static bool RunSingleCommand(const char* command, std::string* output = 0,
|
static bool RunSingleCommand(const char* command, std::string* output = 0,
|
||||||
int* retVal = 0, const char* dir = 0,
|
int* retVal = 0, const char* dir = 0,
|
||||||
|
@ -62,7 +62,10 @@ static const char * cmDocumentationDescription[][3] =
|
|||||||
" --config <cfg> = For multi-configuration tools, choose <cfg>.\n" \
|
" --config <cfg> = For multi-configuration tools, choose <cfg>.\n" \
|
||||||
" --clean-first = Build target 'clean' first, then build.\n" \
|
" --clean-first = Build target 'clean' first, then build.\n" \
|
||||||
" (To clean only, use --target 'clean'.)\n" \
|
" (To clean only, use --target 'clean'.)\n" \
|
||||||
" --use-stderr = Don't merge stdout/stderr.\n" \
|
" --use-stderr = Don't merge stdout/stderr output and pass the\n" \
|
||||||
|
" original stdout/stderr handles to the native\n" \
|
||||||
|
" tool so it can use the capabilities of the\n" \
|
||||||
|
" calling terminal (e.g. colored output).\n" \
|
||||||
" -- = Pass remaining options to the native tool.\n"
|
" -- = Pass remaining options to the native tool.\n"
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -604,7 +607,7 @@ static int do_build(int ac, char** av)
|
|||||||
}
|
}
|
||||||
else if(strcmp(av[i], "--use-stderr") == 0)
|
else if(strcmp(av[i], "--use-stderr") == 0)
|
||||||
{
|
{
|
||||||
outputflag = cmSystemTools::OUTPUT_NORMAL;
|
outputflag = cmSystemTools::OUTPUT_PASSTHROUGH;
|
||||||
}
|
}
|
||||||
else if(strcmp(av[i], "--") == 0)
|
else if(strcmp(av[i], "--") == 0)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user