Compare commits

..

9 Commits

Author SHA1 Message Date
Alexey Rybalchenko
63820e5f2c Add cycle methods and verylow verbosity (msg only) 2018-05-09 15:30:01 +02:00
Alexey Rybalchenko
de02bd068f add string version of Logging() 2018-05-02 15:32:06 +02:00
Dennis Klein
24001470e5 Add nightly/profile build pipeline 2018-05-02 14:56:55 +02:00
Dennis Klein
5696fef902 Generate relative RPATH 2018-04-20 20:03:12 +02:00
Dennis Klein
80b5eb6fb1 Do not install lib in its own directory 2018-04-19 19:49:05 +02:00
Dennis Klein
c26d4ba013 Remove cmake version constraint from CMake package 2018-04-18 15:47:19 +02:00
Dennis Klein
661bd88d81 Export CXX standard config 2018-04-18 15:34:57 +02:00
Dennis Klein
65068fd959 Enable install RPATH 2018-04-18 15:34:40 +02:00
Dennis Klein
00e7468b25 Add library versioning 2018-04-18 15:34:22 +02:00
8 changed files with 227 additions and 20 deletions

View File

@@ -40,7 +40,11 @@ add_library(FairLogger SHARED
target_include_directories(FairLogger
PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/logger>
$<INSTALL_INTERFACE:include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set_target_properties(FairLogger PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
)
if(BUILD_TESTING)

View File

@@ -47,10 +47,6 @@ EndIf()
Ctest_Start($ENV{ctest_model})
If(NOT $ENV{ctest_model} MATCHES Experimental)
Ctest_Update(SOURCE "${CTEST_SOURCE_DIRECTORY}")
EndIf()
Ctest_Configure(BUILD "${CTEST_BINARY_DIRECTORY}"
OPTIONS "${configure_options}"
)

55
Jenkinsfile.nightly Normal file
View File

@@ -0,0 +1,55 @@
#!groovy
def specToLabel(Map spec) {
return "${spec.os}-${spec.arch}-${spec.compiler}-FairSoft_${spec.fairsoft}"
}
def buildMatrix(List specs, Closure callback) {
def nodes = [:]
for (spec in specs) {
def label = specToLabel(spec)
nodes[label] = {
node(label) {
try {
deleteDir()
checkout scm
callback.call(spec, label)
deleteDir()
} catch (e) {
deleteDir()
throw e
}
}
}
}
return nodes
}
pipeline{
agent none
triggers { cron('H 2 * * *') }
stages {
stage("Run Nightly Build/Test Matrix") {
steps{
script {
parallel(buildMatrix([
[os: 'Debian8', arch: 'x86_64', compiler: 'gcc4.9', fairsoft: 'apr18'],
[os: 'MacOS10.11', arch: 'x86_64', compiler: 'AppleLLVM8.0.0', fairsoft: 'apr18'],
[os: 'MacOS10.13', arch: 'x86_64', compiler: 'AppleLLVM9.0.0', fairsoft: 'apr18'],
]) { spec, label ->
sh '''\
echo "export BUILDDIR=$PWD/build" >> Dart.cfg
echo "export SOURCEDIR=$PWD" >> Dart.cfg
echo "export PATH=$SIMPATH/bin:$PATH" >> Dart.cfg
echo "export GIT_BRANCH=dev" >> Dart.cfg
'''
sh './Dart.sh Nightly Dart.cfg'
sh './Dart.sh Profile Dart.cfg'
})
}
}
}
}
}

View File

@@ -6,8 +6,6 @@
# copied verbatim in the file "LICENSE" #
################################################################################
cmake_minimum_required(VERSION 3.9.4 FATAL_ERROR)
@PACKAGE_INIT@
### General variables for project discovery/inspection
@@ -19,6 +17,10 @@ set_and_check(FairLogger_BINDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairLogger_INSTA
set_and_check(FairLogger_INCDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@)
set_and_check(FairLogger_LIBDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairLogger_INSTALL_LIBDIR@)
set(@PROJECT_NAME@_CXX_STANDARD_REQUIRED @CMAKE_CXX_STANDARD_REQUIRED@)
set(@PROJECT_NAME@_CXX_STANDARD @CMAKE_CXX_STANDARD@)
set(@PROJECT_NAME@_CXX_EXTENSIONS @CMAKE_CXX_EXTENSIONS@)
### Import targets
include(@PACKAGE_CMAKE_INSTALL_PREFIX@/@PACKAGE_INSTALL_DESTINATION@/FairLoggerTargets.cmake)

View File

@@ -35,7 +35,9 @@ endif()
macro(set_fairlogger_cmake_policies)
# Find more details to each policy with cmake --help-policy CMPXXXX
foreach(policy
CMP0025 # Compiler id for Apple Clang is now AppleClang.
CMP0028 # Double colon in target name means ALIAS or IMPORTED target.
CMP0042 # MACOSX_RPATH is enabled by default.
CMP0048 # The ``project()`` command manages VERSION variables.
CMP0054 # Only interpret ``if()`` arguments as variables or keywords when unquoted.
)
@@ -128,12 +130,30 @@ macro(set_fairlogger_defaults)
# Define install dirs
set(FairLogger_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
set(FairLogger_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME_LOWER})
set(FairLogger_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
set(FairLogger_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME_LOWER})
set(FairLogger_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME_LOWER})
# https://cmake.org/Wiki/CMake_RPATH_handling
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${FairLogger_INSTALL_LIBDIR}" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,--enable-new-dtags")
set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-Wl,--enable-new-dtags")
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${FairLogger_INSTALL_LIBDIR}")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(CMAKE_INSTALL_RPATH "@loader_path/../${FairLogger_INSTALL_LIBDIR}")
else()
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${FairLogger_INSTALL_LIBDIR}")
endif()
endif()
# Define export set, only one for now
set(FairLogger_EXPORT_SET ${PROJECT_NAME}Targets)
set(CMAKE_CXX_FLAGS_NIGHTLY "-O2 -g -Wshadow -Wall -Wextra")
set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs -Wshadow -Wall -Wextra -Wunused-variable")
endmacro()

View File

@@ -147,10 +147,12 @@ const unordered_map<string, Verbosity> Logger::fVerbosityMap =
{ "high", Verbosity::high },
{ "medium", Verbosity::medium },
{ "low", Verbosity::low },
{ "verylow", Verbosity::verylow },
{ "VERYHIGH", Verbosity::veryhigh },
{ "HIGH", Verbosity::high },
{ "MEDIUM", Verbosity::medium },
{ "LOW", Verbosity::low }
{ "LOW", Verbosity::low },
{ "VERYLOW", Verbosity::verylow }
};
const unordered_map<string, Severity> Logger::fSeverityMap =
@@ -161,16 +163,14 @@ const unordered_map<string, Severity> Logger::fSeverityMap =
{ "ERROR", Severity::error },
{ "warn", Severity::warn },
{ "WARN", Severity::warn },
{ "warning", Severity::warning },
{ "WARNING", Severity::warning },
{ "warning", Severity::warn },
{ "WARNING", Severity::warn },
{ "state", Severity::state },
{ "STATE", Severity::state },
{ "info", Severity::info },
{ "INFO", Severity::info },
{ "debug", Severity::debug },
{ "DEBUG", Severity::debug },
{ "trace", Severity::trace },
{ "TRACE", Severity::trace },
{ "debug1", Severity::debug1 },
{ "DEBUG1", Severity::debug1 },
{ "debug2", Severity::debug2 },
@@ -178,7 +178,9 @@ const unordered_map<string, Severity> Logger::fSeverityMap =
{ "debug3", Severity::debug3 },
{ "DEBUG3", Severity::debug3 },
{ "debug4", Severity::debug4 },
{ "DEBUG4", Severity::debug4 }
{ "DEBUG4", Severity::debug4 },
{ "trace", Severity::trace },
{ "TRACE", Severity::trace }
};
const array<string, 12> Logger::fSeverityNames =
@@ -199,9 +201,10 @@ const array<string, 12> Logger::fSeverityNames =
}
};
const array<string, 4> Logger::fVerbosityNames =
const array<string, 5> Logger::fVerbosityNames =
{
{
"verylow",
"low",
"medium",
"high",
@@ -253,6 +256,11 @@ void Logger::SetConsoleSeverity(const string& severityStr)
}
}
Severity Logger::GetConsoleSeverity()
{
return fConsoleSeverity;
}
void Logger::SetFileSeverity(const Severity severity)
{
fFileSeverity = severity;
@@ -291,6 +299,82 @@ void Logger::SetCustomSeverity(const string& key, const string& severityStr)
}
}
auto Logger::CycleConsoleSeverityUp() -> void
{
size_t current = static_cast<size_t>(fConsoleSeverity);
if (current == fSeverityNames.size() - 1) {
SetConsoleSeverity(static_cast<Severity>(0));
} else {
SetConsoleSeverity(static_cast<Severity>(current + 1));
}
size_t newCurrent = static_cast<size_t>(fConsoleSeverity);
stringstream ss;
for (int i = 0; i < fSeverityNames.size(); ++i) {
ss << (i == newCurrent ? ">" : " ") << fSeverityNames.at(i) << (i == newCurrent ? "<" : " ");
}
ss << "\n\n";
cout << ss.str() << flush;
}
auto Logger::CycleConsoleSeverityDown() -> void
{
size_t current = static_cast<size_t>(fConsoleSeverity);
if (current == 0) {
SetConsoleSeverity(static_cast<Severity>(fSeverityNames.size() - 1));
} else {
SetConsoleSeverity(static_cast<Severity>(current - 1));
}
size_t newCurrent = static_cast<size_t>(fConsoleSeverity);
stringstream ss;
for (int i = 0; i < fSeverityNames.size(); ++i) {
ss << (i == newCurrent ? ">" : " ") << fSeverityNames.at(i) << (i == newCurrent ? "<" : " ");
}
ss << "\n\n";
cout << ss.str() << flush;
}
auto Logger::CycleVerbosityUp() -> void
{
size_t current = static_cast<size_t>(fVerbosity);
if (current == fVerbosityNames.size() - 1) {
SetVerbosity(static_cast<Verbosity>(0));
} else {
SetVerbosity(static_cast<Verbosity>(current + 1));
}
size_t newCurrent = static_cast<size_t>(fVerbosity);
stringstream ss;
for (int i = 0; i < fVerbosityNames.size(); ++i) {
ss << (i == newCurrent ? ">" : " ") << fVerbosityNames.at(i) << (i == newCurrent ? "<" : " ");
}
ss << "\n\n";
cout << ss.str() << flush;
}
auto Logger::CycleVerbosityDown() -> void
{
size_t current = static_cast<size_t>(fVerbosity);
if (current == 0) {
SetVerbosity(static_cast<Verbosity>(fVerbosityNames.size() - 1));
} else {
SetVerbosity(static_cast<Verbosity>(current - 1));
}
size_t newCurrent = static_cast<size_t>(fVerbosity);
stringstream ss;
for (int i = 0; i < fVerbosityNames.size(); ++i) {
ss << (i == newCurrent ? ">" : " ") << fVerbosityNames.at(i) << (i == newCurrent ? "<" : " ");
}
ss << "\n\n";
cout << ss.str() << flush;
}
void Logger::UpdateMinSeverity()
{
fMinSeverity = (fConsoleSeverity <= fFileSeverity) ? fFileSeverity : fConsoleSeverity;
@@ -320,6 +404,19 @@ bool Logger::Logging(Severity severity)
}
}
bool Logger::Logging(const std::string& severityStr)
{
if (fSeverityMap.count(severityStr))
{
return Logging(fSeverityMap.at(severityStr));
}
else
{
LOG(error) << "Unknown severity setting: '" << severityStr;
return false;
}
}
void Logger::SetVerbosity(const Verbosity verbosity)
{
fVerbosity = verbosity;
@@ -338,6 +435,11 @@ void Logger::SetVerbosity(const string& verbosityStr)
}
}
Verbosity Logger::GetVerbosity()
{
return fVerbosity;
}
void Logger::SetConsoleColor(const bool colored)
{
fColored = colored;
@@ -490,14 +592,20 @@ Logger& Logger::Log()
fBWOut << "[" << tsstr << "]";
}
fBWOut << "[" << fMetaData.severity_name << "]";
if (fVerbosity > Verbosity::verylow)
{
fBWOut << "[" << fMetaData.severity_name << "]";
}
if (fVerbosity == Verbosity::veryhigh)
{
fBWOut << "[" << fMetaData.file << ":" << fMetaData.line << ":" << fMetaData.func << "]";
}
fBWOut << " ";
if (fVerbosity != Verbosity::verylow)
{
fBWOut << " ";
}
}
if (fColored && (LoggingToConsole()))
@@ -512,14 +620,20 @@ Logger& Logger::Log()
fColorOut << "[" << startColor(Color::fgCyan) << tsstr << endColor() << "]";
}
fColorOut << "[" << ColoredSeverityWriter(fMetaData.severity) << "]";
if (fVerbosity > Verbosity::verylow)
{
fColorOut << "[" << ColoredSeverityWriter(fMetaData.severity) << "]";
}
if (fVerbosity == Verbosity::veryhigh)
{
fColorOut << "[" << ColorOut(Color::fgBlue, fMetaData.file) << ":" << ColorOut(Color::fgYellow, fMetaData.line) << ":" << ColorOut(Color::fgBlue, fMetaData.func) << "]";
}
fColorOut << " ";
if (fVerbosity != Verbosity::verylow)
{
fColorOut << " ";
}
}
return *this;

View File

@@ -59,17 +59,20 @@ enum class Severity : int
};
// verbosity levels:
// verylow: message
// low: [severity] message
// medium: [HH:MM:SS][severity] message
// high: [process name][HH:MM:SS:µS][severity] message
// veryhigh: [process name][HH:MM:SS:µS][severity][file:line:function] message
enum class Verbosity : int
{
verylow,
low,
medium,
high,
veryhigh,
// backwards-compatibility:
VERYLOW = verylow,
LOW = low,
MEDIUM = medium,
HIGH = high,
@@ -116,6 +119,7 @@ class Logger
static void SetConsoleSeverity(const Severity severity);
static void SetConsoleSeverity(const std::string& severityStr);
static Severity GetConsoleSeverity();
static void SetFileSeverity(const Severity severity);
static void SetFileSeverity(const std::string& severityStr);
@@ -123,10 +127,17 @@ class Logger
static void SetCustomSeverity(const std::string& key, const Severity severity);
static void SetCustomSeverity(const std::string& key, const std::string& severityStr);
static void CycleConsoleSeverityUp();
static void CycleConsoleSeverityDown();
static void CycleVerbosityUp();
static void CycleVerbosityDown();
static bool Logging(const Severity severity);
static bool Logging(const std::string& severityStr);
static void SetVerbosity(const Verbosity verbosity);
static void SetVerbosity(const std::string& verbosityStr);
static Verbosity GetVerbosity();
static void SetConsoleColor(const bool colored = true);
@@ -177,7 +188,7 @@ class Logger
static const std::unordered_map<std::string, Verbosity> fVerbosityMap;
static const std::unordered_map<std::string, Severity> fSeverityMap;
static const std::array<std::string, 12> fSeverityNames;
static const std::array<std::string, 4> fVerbosityNames;
static const std::array<std::string, 5> fVerbosityNames;
virtual ~Logger() noexcept(false);

View File

@@ -39,6 +39,9 @@ void printAllVerbositiesWithSeverity(Severity sev)
{
Logger::SetConsoleSeverity(sev);
cout << endl << "cout: >>> testing severity '" << Logger::SeverityName(sev) << "' with 'verylow' verbosity..." << endl;
Logger::SetVerbosity(Verbosity::verylow);
printEverySeverity();
cout << endl << "cout: >>> testing severity '" << Logger::SeverityName(sev) << "' with 'low' verbosity..." << endl;
Logger::SetVerbosity(Verbosity::low);
printEverySeverity();
@@ -57,6 +60,8 @@ void silentlyPrintAllVerbositiesWithSeverity(Severity sev)
{
Logger::SetConsoleSeverity(sev);
Logger::SetVerbosity(Verbosity::verylow);
printEverySeverity();
Logger::SetVerbosity(Verbosity::low);
printEverySeverity();
Logger::SetVerbosity(Verbosity::medium);