summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-01-27 15:18:08 -0500
committerBrad King <brad.king@kitware.com>2022-01-27 16:06:35 -0500
commit634587e322296580dc16b00d689268e1de5827cc (patch)
treec1e3a38a5a0a8f946b63ddf142698bb6e2cdf3c9
parentfc153c7ef87280d12ab0da0ea17eeb67f5cc6dfa (diff)
downloadcmake-634587e322296580dc16b00d689268e1de5827cc.tar.gz
message: Restore explicit flushing of messages on stderr
In the `cmake` command-line tool, the `message()` command with no message mode argument prints the message stderr using the C++ `cerr` stream. Since commit 0a0a0f8a74 (cmMessenger: Color messages to terminal by type, 2021-05-18, v3.21.0-rc1~146^2) and an update by commit c7a8c9c811 (cmMessenger: Revert to non-color messages on Windows, 2021-07-20, v3.21.1~15^2), we print the newline at the end of the message using just `\n`. We've now observed some cases of output on stdout and stderr getting jumbled when the two go to the same file descriptor. Previously the newline was printed with `endl`, which implicitly flushes. Flush explicitly to restore that behavior. Fixes: #23155
-rw-r--r--Source/cmakemain.cxx4
1 files changed, 2 insertions, 2 deletions
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index 64d93df7fc..95ad320484 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -161,11 +161,11 @@ void cmakemainMessageCallback(const std::string& m,
// cannot use it to print messages. Another implementation will
// be needed to print colored messages on Windows.
static_cast<void>(md);
- std::cerr << m << cmakemainGetStack(cm) << "\n";
+ std::cerr << m << cmakemainGetStack(cm) << '\n' << std::flush;
#else
cmsysTerminal_cfprintf(md.desiredColor, stderr, "%s", m.c_str());
fflush(stderr); // stderr is buffered in some cases.
- std::cerr << cmakemainGetStack(cm) << "\n";
+ std::cerr << cmakemainGetStack(cm) << '\n' << std::flush;
#endif
}