diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/kernel/command.cc | 5 | ||||
| -rw-r--r-- | common/kernel/log.cc | 32 | ||||
| -rw-r--r-- | common/kernel/log.h | 1 | 
3 files changed, 29 insertions, 9 deletions
| diff --git a/common/kernel/command.cc b/common/kernel/command.cc index 842d8a71..2fb4ee53 100644 --- a/common/kernel/command.cc +++ b/common/kernel/command.cc @@ -105,6 +105,10 @@ bool CommandHandler::executeBeforeContext()          log_streams.push_back(std::make_pair(&std::cerr, LogLevel::LOG_MSG));      } +    if (vm.count("Werror")) { +        log_warn_as_error = true; +    } +      if (vm.count("log")) {          std::string logfilename = vm["log"].as<std::string>();          logfile.open(logfilename); @@ -121,6 +125,7 @@ po::options_description CommandHandler::getGeneralOptions()      general.add_options()("help,h", "show help");      general.add_options()("verbose,v", "verbose output");      general.add_options()("quiet,q", "quiet mode, only errors and warnings displayed"); +    general.add_options()("Werror", "Turn warnings into errors");      general.add_options()("log,l", po::value<std::string>(),                            "log file, all log messages are written to this file regardless of -q");      general.add_options()("debug", "debug output"); diff --git a/common/kernel/log.cc b/common/kernel/log.cc index 8b1ad43b..a0bdd64e 100644 --- a/common/kernel/log.cc +++ b/common/kernel/log.cc @@ -41,6 +41,7 @@ void (*log_error_atexit)() = NULL;  dict<LogLevel, int, loglevel_hash_ops> message_count_by_level;  static int log_newline_count = 0;  bool had_nonfatal_error = false; +bool log_warn_as_error = false;  std::string stringf(const char *fmt, ...)  { @@ -128,6 +129,22 @@ void logv_prefixed(const char *prefix, const char *format, va_list ap, LogLevel      log_flush();  } +void logv_nonfatal_error(const char *format, va_list ap) +{ +    logv_prefixed("ERROR: ", format, ap, LogLevel::ERROR_MSG); +    had_nonfatal_error = true; +} + +void logv_error(const char *format, va_list ap) +{ +    logv_prefixed("ERROR: ", format, ap, LogLevel::ERROR_MSG); + +    if (log_error_atexit) +        log_error_atexit(); + +    throw log_execution_error_exception(); +} +  void log_always(const char *format, ...)  {      va_list ap; @@ -156,7 +173,10 @@ void log_warning(const char *format, ...)  {      va_list ap;      va_start(ap, format); -    logv_prefixed("Warning: ", format, ap, LogLevel::WARNING_MSG); +    if (log_warn_as_error) +        logv_nonfatal_error(format, ap); +    else +        logv_prefixed("Warning: ", format, ap, LogLevel::WARNING_MSG);      va_end(ap);  } @@ -164,12 +184,7 @@ void log_error(const char *format, ...)  {      va_list ap;      va_start(ap, format); -    logv_prefixed("ERROR: ", format, ap, LogLevel::ERROR_MSG); - -    if (log_error_atexit) -        log_error_atexit(); - -    throw log_execution_error_exception(); +    logv_error(format, ap);  }  void log_break() @@ -184,9 +199,8 @@ void log_nonfatal_error(const char *format, ...)  {      va_list ap;      va_start(ap, format); -    logv_prefixed("ERROR: ", format, ap, LogLevel::ERROR_MSG); +    logv_nonfatal_error(format, ap);      va_end(ap); -    had_nonfatal_error = true;  }  void log_flush() diff --git a/common/kernel/log.h b/common/kernel/log.h index 0ac4edf5..cba539f4 100644 --- a/common/kernel/log.h +++ b/common/kernel/log.h @@ -63,6 +63,7 @@ extern log_write_type log_write_function;  extern std::string log_last_error;  extern void (*log_error_atexit)();  extern bool had_nonfatal_error; +extern bool log_warn_as_error;  extern dict<LogLevel, int, loglevel_hash_ops> message_count_by_level;  std::string stringf(const char *fmt, ...); | 
