native_posix: Add control of traces color
For native_posix: Added command line options to control if traces should have or not colors. + Detect if we are connected to a tty or not, and if we are set the defaults for that option appropriately Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
This commit is contained in:
parent
70f046e396
commit
ba5476a2a0
4 changed files with 110 additions and 3 deletions
|
@ -13,6 +13,19 @@ extern "C" {
|
|||
void posix_print_error_and_exit(const char *format, ...);
|
||||
void posix_print_warning(const char *format, ...);
|
||||
void posix_print_trace(const char *format, ...);
|
||||
/**
|
||||
* Return 1 if traces to <output> will go to a tty.
|
||||
* When printing to a terminal we may use ASCII escapes for color or other
|
||||
* niceties.
|
||||
* But when redirecting to files, or piping to other commands, those should be
|
||||
* disabled by default.
|
||||
*
|
||||
* Where the <output> should be set to 0 to query about posix_print_trace output
|
||||
* (typically STDOUT)
|
||||
* and 1 to query about the warning and error output (posix_print_error/warning)
|
||||
* outputs (typically STDERR)
|
||||
*/
|
||||
int posix_trace_over_tty(int output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "cmdline.h"
|
||||
#include "toolchain.h"
|
||||
#include "posix_trace.h"
|
||||
#include "native_tracing.h"
|
||||
|
||||
static int s_argc, test_argc;
|
||||
static char **s_argv, **test_argv;
|
||||
|
@ -89,7 +90,6 @@ void native_add_testargs_option(void)
|
|||
(void *)NULL, NULL,
|
||||
"Any argument that follows will be ignored by the top level, "
|
||||
"and made available for possible tests"},
|
||||
|
||||
ARG_TABLE_ENDMARKER};
|
||||
|
||||
native_add_command_line_opts(testargs_options);
|
||||
|
@ -104,6 +104,7 @@ void native_handle_cmd_line(int argc, char *argv[])
|
|||
{
|
||||
int i;
|
||||
|
||||
native_add_tracing_options();
|
||||
native_add_testargs_option();
|
||||
|
||||
s_argv = argv;
|
||||
|
|
20
boards/posix/native_posix/native_tracing.h
Normal file
20
boards/posix/native_posix/native_tracing.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Oticon A/S
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_TRACING_H
|
||||
#define NATIVE_TRACING_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void native_add_tracing_options(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* NATIVE_TRACING_H */
|
|
@ -11,9 +11,10 @@
|
|||
#include <stdlib.h> /* for exit */
|
||||
#include <stdio.h> /* for printfs */
|
||||
#include <stdarg.h> /* for va args */
|
||||
|
||||
#include <unistd.h>
|
||||
#include "soc.h"
|
||||
#include "posix_board_if.h"
|
||||
|
||||
#include "cmdline.h"
|
||||
|
||||
void posix_print_error_and_exit(const char *format, ...)
|
||||
{
|
||||
|
@ -42,3 +43,75 @@ void posix_print_trace(const char *format, ...)
|
|||
vfprintf(stdout, format, variable_args);
|
||||
va_end(variable_args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Are stdout and stderr connectd to a tty
|
||||
* 0 = no
|
||||
* 1 = yes
|
||||
* -1 = we do not know yet
|
||||
* Indexed 0:stdout, 1:stderr
|
||||
*/
|
||||
static int is_a_tty[2] = {-1, -1};
|
||||
|
||||
void trace_disable_color(char *argv, int offset)
|
||||
{
|
||||
is_a_tty[0] = 0;
|
||||
is_a_tty[1] = 0;
|
||||
}
|
||||
|
||||
void trace_enable_color(char *argv, int offset)
|
||||
{
|
||||
is_a_tty[0] = -1;
|
||||
is_a_tty[1] = -1;
|
||||
|
||||
}
|
||||
|
||||
void trace_force_color(char *argv, int offset)
|
||||
{
|
||||
is_a_tty[0] = 1;
|
||||
is_a_tty[1] = 1;
|
||||
}
|
||||
|
||||
int posix_trace_over_tty(int file_number)
|
||||
{
|
||||
return is_a_tty[file_number];
|
||||
}
|
||||
|
||||
static void decide_about_color(void)
|
||||
{
|
||||
if (is_a_tty[0] == -1) {
|
||||
is_a_tty[0] = isatty(STDOUT_FILENO);
|
||||
}
|
||||
if (is_a_tty[1] == -1) {
|
||||
is_a_tty[1] = isatty(STDERR_FILENO);
|
||||
}
|
||||
}
|
||||
|
||||
NATIVE_TASK(decide_about_color, PRE_BOOT_2, 0);
|
||||
|
||||
void native_add_tracing_options(void)
|
||||
{
|
||||
static struct args_struct_t trace_options[] = {
|
||||
/*
|
||||
* Fields:
|
||||
* manual, mandatory, switch,
|
||||
* option_name, var_name ,type,
|
||||
* destination, callback,
|
||||
* description
|
||||
*/
|
||||
{ false, false, true,
|
||||
"color", "color", 'b',
|
||||
NULL, trace_enable_color,
|
||||
"(default) Enable color in traces if printing to console"},
|
||||
{ false, false, true,
|
||||
"no-color", "no-color", 'b',
|
||||
NULL, trace_disable_color,
|
||||
"Disable color in traces even if printing to console"},
|
||||
{ false, false, true,
|
||||
"force-color", "force-color", 'b',
|
||||
NULL, trace_force_color,
|
||||
"Enable color in traces even if printing to files/pipes"},
|
||||
ARG_TABLE_ENDMARKER};
|
||||
|
||||
native_add_command_line_opts(trace_options);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue