cmMessenger: Color messages to terminal by type

Fixes: #16183
This commit is contained in:
Marius Messerschmidt 2021-05-18 23:32:44 +02:00 committed by Brad King
parent bceb8e2ed2
commit 0a0a0f8a74
4 changed files with 32 additions and 4 deletions

View File

@ -0,0 +1,4 @@
message-color
-------------
* Messages printed to a terminal now may be colored by message type.

View File

@ -2,7 +2,10 @@
file Copyright.txt or https://cmake.org/licensing for details. */
#pragma once
#include "cmsys/Terminal.h"
struct cmMessageMetadata
{
const char* title = nullptr;
int desiredColor = cmsysTerminal_Color_Normal;
};

View File

@ -13,6 +13,8 @@
#include <sstream>
#include "cmsys/Terminal.h"
MessageType cmMessenger::ConvertMessageType(MessageType t) const
{
bool warningsAsErrors;
@ -85,6 +87,21 @@ static bool printMessagePreamble(MessageType t, std::ostream& msg)
return true;
}
static int getMessageColor(MessageType t)
{
switch (t) {
case MessageType::INTERNAL_ERROR:
case MessageType::FATAL_ERROR:
case MessageType::AUTHOR_ERROR:
return cmsysTerminal_Color_ForegroundRed;
case MessageType::AUTHOR_WARNING:
case MessageType::WARNING:
return cmsysTerminal_Color_ForegroundYellow;
default:
return cmsysTerminal_Color_Normal;
}
}
void printMessageText(std::ostream& msg, std::string const& text)
{
msg << ":\n";
@ -122,6 +139,7 @@ void displayMessage(MessageType t, std::ostringstream& msg)
// Output the message.
cmMessageMetadata md;
md.desiredColor = getMessageColor(t);
if (t == MessageType::FATAL_ERROR || t == MessageType::INTERNAL_ERROR ||
t == MessageType::DEPRECATION_ERROR || t == MessageType::AUTHOR_ERROR) {
cmSystemTools::SetErrorOccured();

View File

@ -6,6 +6,7 @@
#include <algorithm>
#include <cassert>
#include <climits>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <sstream>
@ -23,6 +24,7 @@
#include "cmDocumentationEntry.h" // IWYU pragma: keep
#include "cmGlobalGenerator.h"
#include "cmMakefile.h"
#include "cmMessageMetadata.h"
#include "cmProperty.h"
#include "cmState.h"
#include "cmStateTypes.h"
@ -37,8 +39,7 @@
#endif
#include "cmsys/Encoding.hxx"
struct cmMessageMetadata;
#include "cmsys/Terminal.h"
namespace {
#ifndef CMAKE_BOOTSTRAP
@ -150,9 +151,11 @@ std::string cmakemainGetStack(cmake* cm)
}
void cmakemainMessageCallback(const std::string& m,
const cmMessageMetadata& /* unused */, cmake* cm)
const cmMessageMetadata& md, cmake* cm)
{
std::cerr << m << cmakemainGetStack(cm) << std::endl;
cmsysTerminal_cfprintf(md.desiredColor, stderr, "%s", m.c_str());
fflush(stderr); // stderr is buffered in some cases.
std::cerr << cmakemainGetStack(cm) << "\n";
}
void cmakemainProgressCallback(const std::string& m, float prog, cmake* cm)