mirror of
https://github.com/FairRootGroup/FairLogger.git
synced 2025-10-16 10:01:44 +00:00
Compare commits
1 Commits
0ae9a697b4
...
rbx-patch-
Author | SHA1 | Date | |
---|---|---|---|
|
c6594934d4 |
@@ -1,5 +1,5 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Copyright (C) 2018-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
# Copyright (C) 2018-2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
||||||
# #
|
# #
|
||||||
# This software is distributed under the terms of the #
|
# This software is distributed under the terms of the #
|
||||||
# GNU Lesser General Public Licence (LGPL) version 3, #
|
# GNU Lesser General Public Licence (LGPL) version 3, #
|
||||||
@@ -7,12 +7,11 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.9.4 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.9.4 FATAL_ERROR)
|
||||||
cmake_policy(VERSION 3.9...3.19)
|
cmake_policy(VERSION 3.9...3.15)
|
||||||
|
|
||||||
# Project ######################################################################
|
# Project ######################################################################
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
||||||
include(FairLoggerLib)
|
include(FairLoggerLib)
|
||||||
include(FairFindPackage2)
|
|
||||||
|
|
||||||
get_git_version()
|
get_git_version()
|
||||||
|
|
||||||
@@ -54,24 +53,26 @@ add_library(FairLogger
|
|||||||
logger/Logger.cxx
|
logger/Logger.cxx
|
||||||
logger/Logger.h
|
logger/Logger.h
|
||||||
)
|
)
|
||||||
target_compile_features(FairLogger PUBLIC cxx_std_17)
|
|
||||||
|
|
||||||
if(USE_BOOST_PRETTY_FUNCTION)
|
if(USE_BOOST_PRETTY_FUNCTION)
|
||||||
target_link_libraries(FairLogger PUBLIC Boost::boost)
|
target_link_libraries(FairLogger PUBLIC Boost::boost)
|
||||||
target_compile_definitions(FairLogger PUBLIC FAIRLOGGER_USE_BOOST_PRETTY_FUNCTION)
|
target_compile_definitions(FairLogger PUBLIC FAIRLOGGER_USE_BOOST_PRETTY_FUNCTION)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# legacy paths
|
||||||
|
list(APPEND FAIRLOGGER_INSTALL_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
|
||||||
if(USE_EXTERNAL_FMT)
|
if(USE_EXTERNAL_FMT)
|
||||||
target_link_libraries(FairLogger PUBLIC fmt::fmt)
|
target_link_libraries(FairLogger PUBLIC fmt::fmt)
|
||||||
else()
|
else()
|
||||||
add_library(fmt INTERFACE)
|
add_library(fmt INTERFACE)
|
||||||
target_include_directories(fmt INTERFACE
|
target_include_directories(fmt INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/logger/bundled>
|
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/logger/bundled>
|
||||||
$<INSTALL_INTERFACE:${PROJECT_INSTALL_BUNDLEDINCDIR}>
|
$<INSTALL_INTERFACE:${PROJECT_INSTALL_INCDIR}/bundled>
|
||||||
)
|
)
|
||||||
target_compile_features(fmt INTERFACE cxx_std_11)
|
|
||||||
target_compile_definitions(fmt INTERFACE FMT_HEADER_ONLY)
|
target_compile_definitions(fmt INTERFACE FMT_HEADER_ONLY)
|
||||||
target_link_libraries(FairLogger PUBLIC fmt)
|
target_link_libraries(FairLogger PUBLIC fmt)
|
||||||
|
list(APPEND FAIRLOGGER_INSTALL_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_INCDIR}/bundled)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED FAIR_MIN_SEVERITY)
|
if(DEFINED FAIR_MIN_SEVERITY)
|
||||||
@@ -155,14 +156,6 @@ if(BUILD_TESTING)
|
|||||||
endif()
|
endif()
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# Utils ########################################################################
|
|
||||||
find_program(BASH bash HINTS "/bin")
|
|
||||||
find_program(SINGULARITY singularity)
|
|
||||||
if(BASH AND SINGULARITY)
|
|
||||||
add_subdirectory(test/ci)
|
|
||||||
endif()
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
# Summary ######################################################################
|
# Summary ######################################################################
|
||||||
message(STATUS " ")
|
message(STATUS " ")
|
||||||
message(STATUS " ${Cyan}CXX STANDARD${CR} ${BGreen}C++${CMAKE_CXX_STANDARD}${CR} (>= C++${PROJECT_MIN_CXX_STANDARD}, change with ${BMagenta}-DCMAKE_CXX_STANDARD=17${CR})")
|
message(STATUS " ${Cyan}CXX STANDARD${CR} ${BGreen}C++${CMAKE_CXX_STANDARD}${CR} (>= C++${PROJECT_MIN_CXX_STANDARD}, change with ${BMagenta}-DCMAKE_CXX_STANDARD=17${CR})")
|
||||||
|
133
Dart.sh
Executable file
133
Dart.sh
Executable file
@@ -0,0 +1,133 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
function print_example(){
|
||||||
|
echo "##################################################################"
|
||||||
|
echo "# To set the required parameters as source and the build #"
|
||||||
|
echo "# directory for ctest, the linux flavour and the SIMPATH #"
|
||||||
|
echo "# put the export commands below to a separate file which is read #"
|
||||||
|
echo "# during execution and which is defined on the command line. #"
|
||||||
|
echo "# Set all parameters according to your needs. #"
|
||||||
|
echo "# LINUX_FLAVOUR should be set to the distribution you are using #"
|
||||||
|
echo "# eg Debian, SuSe etc. #"
|
||||||
|
echo "# An additional varibale NCPU can overwrite the default number #"
|
||||||
|
echo "# of parallel processes used to compile the project. #"
|
||||||
|
echo "# This can be usefull if one can use a distributed build system #"
|
||||||
|
echo "# like icecream. #"
|
||||||
|
echo "# For example #"
|
||||||
|
echo "#!/bin/bash #"
|
||||||
|
echo "export LINUX_FLAVOUR=<your linux flavour> #"
|
||||||
|
echo "export FAIRSOFT_VERSION=<version of FairSoft> #"
|
||||||
|
echo "export SIMPATH=<path to your FairSoft version> #"
|
||||||
|
echo "export GIT_BRANCH=< master or dev> #"
|
||||||
|
echo "export BUILDDIR=<dir where the build files go> #"
|
||||||
|
echo "export SOURCEDIR=<location of the FairRoot sources> #"
|
||||||
|
echo "#export NCPU=100 #"
|
||||||
|
echo "##################################################################"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$#" -lt "2" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "-- Error -- Please start script with two parameters"
|
||||||
|
echo "-- Error -- The first parameter is the ctest model."
|
||||||
|
echo "-- Error -- Possible arguments are Nightly, Experimental, "
|
||||||
|
echo "-- Error -- Continuous or Profile."
|
||||||
|
echo "-- Error -- The second parameter is the file containg the"
|
||||||
|
echo "-- Error -- Information about the setup at the client"
|
||||||
|
echo "-- Error -- installation (see example below)."
|
||||||
|
echo ""
|
||||||
|
print_example
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# test if a valid ctest model is defined
|
||||||
|
if [ "$1" == "Experimental" -o "$1" == "Nightly" -o "$1" == "Continuous" -o "$1" == "Profile" -o "$1" == "alfa_ci" ]; then
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "-- Error -- This ctest model is not supported."
|
||||||
|
echo "-- Error -- Possible arguments are Nightly, Experimental, Continuous or Profile."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# test if the input file exists and execute it
|
||||||
|
if [ -e "$2" ];then
|
||||||
|
source $2
|
||||||
|
else
|
||||||
|
echo "-- Error -- Input file does not exist."
|
||||||
|
echo "-- Error -- Please choose existing input file."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# set the ctest model to command line parameter
|
||||||
|
if [ "$1" == "alfa_ci" ]; then
|
||||||
|
export ctest_model=Experimental
|
||||||
|
else
|
||||||
|
export ctest_model=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# test for architecture
|
||||||
|
arch=$(uname -s | tr '[A-Z]' '[a-z]')
|
||||||
|
chip=$(uname -m | tr '[A-Z]' '[a-z]')
|
||||||
|
|
||||||
|
# extract information about the system and the machine and set
|
||||||
|
# environment variables used by ctest
|
||||||
|
SYSTEM=$arch-$chip
|
||||||
|
if test -z $CXX ; then
|
||||||
|
if [ "$arch" == "darwin" ]; then
|
||||||
|
COMPILER=$(clang --version | head -n 1 | cut -d' ' -f1,2,4 | tr -d ' ')
|
||||||
|
else
|
||||||
|
COMPILER=gcc$(gcc -dumpversion)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
COMPILER=$CXX$($CXX -dumpversion)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" == "alfa_ci" ]; then
|
||||||
|
export LABEL1=alfa_ci-$COMPILER-FairLogger_$GIT_BRANCH
|
||||||
|
export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g')
|
||||||
|
else
|
||||||
|
export LABEL1=${LINUX_FLAVOUR}-$chip-$COMPILER-FairLogger_$GIT_BRANCH
|
||||||
|
export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# get the number of processors
|
||||||
|
# and information about the host
|
||||||
|
if [ "$arch" = "linux" ];
|
||||||
|
then
|
||||||
|
if [ "$NCPU" != "" ];
|
||||||
|
then
|
||||||
|
export number_of_processors=$NCPU
|
||||||
|
else
|
||||||
|
export number_of_processors=$(cat /proc/cpuinfo | grep processor | wc -l)
|
||||||
|
fi
|
||||||
|
if [ -z "$SITE" ]; then
|
||||||
|
export SITE=$(hostname -f)
|
||||||
|
if [ -z "$SITE" ]; then
|
||||||
|
export SITE=$(uname -n)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif [ "$arch" = "darwin" ];
|
||||||
|
then
|
||||||
|
if [ "$NCPU" != "" ];
|
||||||
|
then
|
||||||
|
export number_of_processors=$NCPU
|
||||||
|
else
|
||||||
|
export number_of_processors=$(sysctl -n hw.ncpu)
|
||||||
|
fi
|
||||||
|
if [ -z "$SITE" ]; then
|
||||||
|
export SITE=$(hostname -s)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "************************"
|
||||||
|
date
|
||||||
|
echo "LABEL: " $LABEL
|
||||||
|
echo "SITE: " $SITE
|
||||||
|
echo "Model: " ${ctest_model}
|
||||||
|
echo "Nr. of processes: " $number_of_processors
|
||||||
|
echo "************************"
|
||||||
|
|
||||||
|
cd $SOURCEDIR
|
||||||
|
|
||||||
|
ctest -S FairLoggerTest.cmake -V --VV
|
@@ -1,62 +1,69 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
# Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
||||||
# #
|
# #
|
||||||
# This software is distributed under the terms of the #
|
# This software is distributed under the terms of the #
|
||||||
# GNU Lesser General Public Licence (LGPL) version 3, #
|
# GNU Lesser General Public Licence (LGPL) version 3, #
|
||||||
# copied verbatim in the file "LICENSE" #
|
# copied verbatim in the file "LICENSE" #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
Set(CTEST_SOURCE_DIRECTORY $ENV{SOURCEDIR})
|
||||||
|
Set(CTEST_BINARY_DIRECTORY $ENV{BUILDDIR})
|
||||||
|
Set(CTEST_SITE $ENV{SITE})
|
||||||
|
Set(CTEST_BUILD_NAME $ENV{LABEL})
|
||||||
|
Set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
|
||||||
|
Set(CTEST_PROJECT_NAME "FairLogger")
|
||||||
|
|
||||||
cmake_host_system_information(RESULT fqdn QUERY FQDN)
|
Find_Program(CTEST_GIT_COMMAND NAMES git)
|
||||||
|
Set(CTEST_UPDATE_COMMAND "${CTEST_GIT_COMMAND}")
|
||||||
|
|
||||||
set(CTEST_SOURCE_DIRECTORY .)
|
Set(BUILD_COMMAND "make")
|
||||||
set(CTEST_BINARY_DIRECTORY build)
|
Set(CTEST_BUILD_COMMAND "${BUILD_COMMAND} -j$ENV{number_of_processors}")
|
||||||
set(CTEST_CMAKE_GENERATOR "Ninja")
|
|
||||||
set(CTEST_USE_LAUNCHERS ON)
|
|
||||||
set(CTEST_CONFIGURATION_TYPE "RelWithDebInfo")
|
|
||||||
|
|
||||||
if(NOT NCPUS)
|
String(TOUPPER $ENV{ctest_model} _Model)
|
||||||
if(ENV{SLURM_CPUS_PER_TASK})
|
Set(configure_options "-DCMAKE_BUILD_TYPE=${_Model}")
|
||||||
set(NCPUS $ENV{SLURM_CPUS_PER_TASK})
|
|
||||||
else()
|
|
||||||
include(ProcessorCount)
|
|
||||||
ProcessorCount(NCPUS)
|
|
||||||
if(NCPUS EQUAL 0)
|
|
||||||
set(NCPUS 1)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if ("$ENV{CTEST_SITE}" STREQUAL "")
|
Set(CTEST_USE_LAUNCHERS 1)
|
||||||
set(CTEST_SITE "${fqdn}")
|
Set(configure_options "${configure_options};-DCTEST_USE_LAUNCHERS=${CTEST_USE_LAUNCHERS}")
|
||||||
else()
|
|
||||||
set(CTEST_SITE $ENV{CTEST_SITE})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if ("$ENV{LABEL}" STREQUAL "")
|
Set(configure_options "${configure_options};-DDISABLE_COLOR=ON")
|
||||||
set(CTEST_BUILD_NAME "build")
|
|
||||||
else()
|
|
||||||
set(CTEST_BUILD_NAME $ENV{LABEL})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ctest_start(Continuous)
|
Set(EXTRA_FLAGS $ENV{EXTRA_FLAGS})
|
||||||
|
If(EXTRA_FLAGS)
|
||||||
|
Set(configure_options "${configure_options};${EXTRA_FLAGS}")
|
||||||
|
EndIf()
|
||||||
|
|
||||||
list(APPEND options
|
If($ENV{ctest_model} MATCHES Nightly OR $ENV{ctest_model} MATCHES Profile)
|
||||||
"-DDISABLE_COLOR=ON"
|
|
||||||
"-DUSE_EXTERNAL_FMT=ON"
|
Find_Program(GCOV_COMMAND gcov)
|
||||||
"-DUSE_BOOST_PRETTY_FUNCTION=ON"
|
If(GCOV_COMMAND)
|
||||||
|
Message("Found GCOV: ${GCOV_COMMAND}")
|
||||||
|
Set(CTEST_COVERAGE_COMMAND ${GCOV_COMMAND})
|
||||||
|
EndIf(GCOV_COMMAND)
|
||||||
|
|
||||||
|
Set(ENV{ctest_model} Nightly)
|
||||||
|
|
||||||
|
CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY})
|
||||||
|
|
||||||
|
EndIf()
|
||||||
|
|
||||||
|
Ctest_Start($ENV{ctest_model})
|
||||||
|
|
||||||
|
Ctest_Configure(BUILD "${CTEST_BINARY_DIRECTORY}"
|
||||||
|
OPTIONS "${configure_options}"
|
||||||
)
|
)
|
||||||
list(JOIN options ";" optionsstr)
|
|
||||||
ctest_configure(OPTIONS "${optionsstr}")
|
|
||||||
|
|
||||||
ctest_build(FLAGS "-j${NCPUS}")
|
Ctest_Build(BUILD "${CTEST_BINARY_DIRECTORY}")
|
||||||
|
|
||||||
ctest_test(BUILD "${CTEST_BINARY_DIRECTORY}"
|
Ctest_Test(BUILD "${CTEST_BINARY_DIRECTORY}"
|
||||||
PARALLEL_LEVEL 1
|
PARALLEL_LEVEL $ENV{number_of_processors}
|
||||||
SCHEDULE_RANDOM ON
|
RETURN_VALUE _ctest_test_ret_val
|
||||||
RETURN_VALUE _ctest_test_ret_val)
|
)
|
||||||
|
|
||||||
ctest_submit()
|
If(GCOV_COMMAND)
|
||||||
|
Ctest_Coverage(BUILD "${CTEST_BINARY_DIRECTORY}")
|
||||||
|
EndIf()
|
||||||
|
|
||||||
if(_ctest_test_ret_val)
|
Ctest_Submit()
|
||||||
|
|
||||||
|
if (_ctest_test_ret_val)
|
||||||
Message(FATAL_ERROR "Some tests failed.")
|
Message(FATAL_ERROR "Some tests failed.")
|
||||||
endif()
|
endif()
|
||||||
|
83
Jenkinsfile
vendored
83
Jenkinsfile
vendored
@@ -1,43 +1,50 @@
|
|||||||
#!groovy
|
#!groovy
|
||||||
|
|
||||||
def jobMatrix(String prefix, String type, List specs) {
|
def specToLabel(Map spec) {
|
||||||
|
return "${spec.os}-${spec.arch}-${spec.compiler}-FairSoft_${spec.fairsoft}"
|
||||||
|
}
|
||||||
|
|
||||||
|
def jobMatrix(String prefix, List specs, Closure callback) {
|
||||||
def nodes = [:]
|
def nodes = [:]
|
||||||
for (spec in specs) {
|
for (spec in specs) {
|
||||||
job = "${spec.os}-${spec.ver}-${spec.arch}-${spec.compiler}"
|
def label = specToLabel(spec)
|
||||||
def label = "${type}/${job}"
|
def fairsoft = spec.fairsoft
|
||||||
def selector = "${spec.os}-${spec.ver}-${spec.arch}"
|
|
||||||
def os = spec.os
|
def os = spec.os
|
||||||
def ver = spec.ver
|
def compiler = spec.compiler
|
||||||
def check = spec.check
|
nodes["${prefix}/${label}"] = {
|
||||||
|
node(label) {
|
||||||
nodes[label] = {
|
|
||||||
node(selector) {
|
|
||||||
githubNotify(context: "${prefix}/${label}", description: 'Building ...', status: 'PENDING')
|
githubNotify(context: "${prefix}/${label}", description: 'Building ...', status: 'PENDING')
|
||||||
try {
|
try {
|
||||||
deleteDir()
|
deleteDir()
|
||||||
checkout scm
|
checkout scm
|
||||||
|
|
||||||
def jobscript = 'job.sh'
|
|
||||||
def ctestcmd = "ctest -S FairLoggerTest.cmake -V --output-on-failure"
|
|
||||||
sh "echo \"set -e\" >> ${jobscript}"
|
|
||||||
sh "echo \"export LABEL=\\\"\${JOB_BASE_NAME} ${label}\\\"\" >> ${jobscript}"
|
|
||||||
if (selector =~ /^macos/) {
|
|
||||||
sh "echo \"${ctestcmd}\" >> ${jobscript}"
|
|
||||||
sh "cat ${jobscript}"
|
|
||||||
sh "bash ${jobscript}"
|
|
||||||
} else {
|
|
||||||
def containercmd = "singularity exec -B/shared ${env.SINGULARITY_CONTAINER_ROOT}/fairlogger/${os}.${ver}.sif bash -l -c \\\"${ctestcmd}\\\""
|
|
||||||
sh """\
|
sh """\
|
||||||
echo \"echo \\\"*** Job started at .......: \\\$(date -R)\\\"\" >> ${jobscript}
|
echo "export SIMPATH=\${SIMPATH_PREFIX}${fairsoft}" >> Dart.cfg
|
||||||
echo \"echo \\\"*** Job ID ...............: \\\${SLURM_JOB_ID}\\\"\" >> ${jobscript}
|
echo "export FAIRSOFT_VERSION=${fairsoft}" >> Dart.cfg
|
||||||
echo \"echo \\\"*** Compute node .........: \\\$(hostname -f)\\\"\" >> ${jobscript}
|
|
||||||
echo \"unset http_proxy\" >> ${jobscript}
|
|
||||||
echo \"unset HTTP_PROXY\" >> ${jobscript}
|
|
||||||
echo \"${containercmd}\" >> ${jobscript}
|
|
||||||
"""
|
"""
|
||||||
sh "cat ${jobscript}"
|
if (os =~ /Debian/ && compiler =~ /gcc9/) {
|
||||||
sh "test/ci/slurm-submit.sh \"FairLogger \${JOB_BASE_NAME} ${label}\" ${jobscript}"
|
sh '''\
|
||||||
|
echo "source /etc/profile.d/modules.sh" >> Dart.cfg
|
||||||
|
echo "module use /cvmfs/it.gsi.de/modulefiles" >> Dart.cfg
|
||||||
|
echo "module load compiler/gcc/9.1.0" >> Dart.cfg
|
||||||
|
'''
|
||||||
}
|
}
|
||||||
|
if (os =~ /MacOS/) {
|
||||||
|
sh "echo \"export EXTRA_FLAGS='-DCMAKE_CXX_COMPILER=clang++'\" >> Dart.cfg"
|
||||||
|
} else {
|
||||||
|
sh "echo \"export EXTRA_FLAGS='-DCMAKE_CXX_COMPILER=g++'\" >> Dart.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
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=$JOB_BASE_NAME" >> Dart.cfg
|
||||||
|
echo "echo \\\$PATH" >> Dart.cfg
|
||||||
|
'''
|
||||||
|
sh 'cat Dart.cfg'
|
||||||
|
|
||||||
|
callback.call(spec, label)
|
||||||
|
|
||||||
deleteDir()
|
deleteDir()
|
||||||
githubNotify(context: "${prefix}/${label}", description: 'Success', status: 'SUCCESS')
|
githubNotify(context: "${prefix}/${label}", description: 'Success', status: 'SUCCESS')
|
||||||
@@ -58,21 +65,13 @@ pipeline{
|
|||||||
stage("Run CI Matrix") {
|
stage("Run CI Matrix") {
|
||||||
steps{
|
steps{
|
||||||
script {
|
script {
|
||||||
def builds = jobMatrix('alfa-ci', 'build', [
|
parallel(jobMatrix('alfa-ci/build', [
|
||||||
[os: 'fedora', ver: '32', arch: 'x86_64', compiler: 'gcc-10'],
|
[os: 'Debian8', arch: 'x86_64', compiler: 'gcc9.1.0', fairsoft: 'fairmq_dev'],
|
||||||
[os: 'fedora', ver: '33', arch: 'x86_64', compiler: 'gcc-10'],
|
[os: 'MacOS10.13', arch: 'x86_64', compiler: 'AppleLLVM10.0.0', fairsoft: 'fairmq_dev'],
|
||||||
[os: 'fedora', ver: '34', arch: 'x86_64', compiler: 'gcc-11'],
|
[os: 'MacOS10.14', arch: 'x86_64', compiler: 'AppleLLVM10.0.0', fairsoft: 'fairmq_dev'],
|
||||||
[os: 'fedora', ver: '35', arch: 'x86_64', compiler: 'gcc-11'],
|
]) { spec, label ->
|
||||||
[os: 'fedora', ver: '36', arch: 'x86_64', compiler: 'gcc-12'],
|
sh './Dart.sh alfa_ci Dart.cfg'
|
||||||
[os: 'fedora', ver: '37', arch: 'x86_64', compiler: 'gcc-12'],
|
})
|
||||||
[os: 'fedora', ver: '38', arch: 'x86_64', compiler: 'gcc-13'],
|
|
||||||
[os: 'fedora', ver: '39', arch: 'x86_64', compiler: 'gcc-13'],
|
|
||||||
[os: 'macos', ver: '13', arch: 'x86_64', compiler: 'apple-clang-15'],
|
|
||||||
[os: 'macos', ver: '14', arch: 'x86_64', compiler: 'apple-clang-15'],
|
|
||||||
[os: 'macos', ver: '14', arch: 'arm64', compiler: 'apple-clang-15'],
|
|
||||||
])
|
|
||||||
|
|
||||||
parallel(builds)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
77
Jenkinsfile.nightly
Normal file
77
Jenkinsfile.nightly
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
#!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)
|
||||||
|
def fairsoft = spec.fairsoft
|
||||||
|
def os = spec.os
|
||||||
|
def compiler = spec.compiler
|
||||||
|
nodes[label] = {
|
||||||
|
node(label) {
|
||||||
|
try {
|
||||||
|
deleteDir()
|
||||||
|
checkout scm
|
||||||
|
|
||||||
|
sh """\
|
||||||
|
echo "export SIMPATH=\${SIMPATH_PREFIX}${fairsoft}" >> Dart.cfg
|
||||||
|
echo "export FAIRSOFT_VERSION=${fairsoft}" >> Dart.cfg
|
||||||
|
"""
|
||||||
|
if (os =~ /Debian/ && compiler =~ /gcc9/) {
|
||||||
|
sh '''\
|
||||||
|
echo "source /etc/profile.d/modules.sh" >> Dart.cfg
|
||||||
|
echo "module use /cvmfs/it.gsi.de/modulefiles" >> Dart.cfg
|
||||||
|
echo "module load compiler/gcc/9.1.0" >> Dart.cfg
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
if (os =~ /MacOS/) {
|
||||||
|
sh "echo \"export EXTRA_FLAGS='-DCMAKE_CXX_COMPILER=clang++'\" >> Dart.cfg"
|
||||||
|
} else {
|
||||||
|
sh "echo \"export EXTRA_FLAGS='-DCMAKE_CXX_COMPILER=g++'\" >> Dart.cfg"
|
||||||
|
}
|
||||||
|
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
|
||||||
|
echo "echo \\\$PATH" >> Dart.cfg
|
||||||
|
'''
|
||||||
|
sh 'cat Dart.cfg'
|
||||||
|
|
||||||
|
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: 'gcc9.1.0', fairsoft: 'fairmq_dev'],
|
||||||
|
[os: 'MacOS10.13', arch: 'x86_64', compiler: 'AppleLLVM10.0.0', fairsoft: 'fairmq_dev'],
|
||||||
|
[os: 'MacOS10.14', arch: 'x86_64', compiler: 'AppleLLVM10.0.0', fairsoft: 'fairmq_dev'],
|
||||||
|
]) { spec, label ->
|
||||||
|
sh './Dart.sh Nightly Dart.cfg'
|
||||||
|
sh './Dart.sh Profile Dart.cfg'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -93,12 +93,9 @@ where severity level is one of the following:
|
|||||||
"debug2",
|
"debug2",
|
||||||
"debug1",
|
"debug1",
|
||||||
"debug",
|
"debug",
|
||||||
"detail",
|
|
||||||
"info",
|
"info",
|
||||||
"state",
|
"state",
|
||||||
"warn",
|
"warn",
|
||||||
"important",
|
|
||||||
"alarm",
|
|
||||||
"error",
|
"error",
|
||||||
"fatal",
|
"fatal",
|
||||||
```
|
```
|
||||||
@@ -237,4 +234,4 @@ Define an option `FAIR_NO_LOG*` to prevent the above unprefixed macros to be def
|
|||||||
|
|
||||||
GNU Lesser General Public Licence (LGPL) version 3, see [LICENSE](LICENSE).
|
GNU Lesser General Public Licence (LGPL) version 3, see [LICENSE](LICENSE).
|
||||||
|
|
||||||
Copyright (C) 2017-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
|
Copyright (C) 2017-2020 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
|
||||||
|
@@ -1,102 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
# Copyright (C) 2018-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
|
||||||
# #
|
|
||||||
# This software is distributed under the terms of the #
|
|
||||||
# GNU Lesser General Public Licence (LGPL) version 3, #
|
|
||||||
# copied verbatim in the file "LICENSE" #
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
#
|
|
||||||
# find_package2(PRIVATE|PUBLIC|INTERFACE <pkgname>
|
|
||||||
# [VERSION <version>]
|
|
||||||
# [COMPONENTS <list of components>]
|
|
||||||
# [ADD_REQUIREMENTS_OF <list of dep_pgkname>]
|
|
||||||
# [any other option the native find_package supports]...)
|
|
||||||
#
|
|
||||||
# Wrapper around CMake's native find_package command to add some features and bookkeeping.
|
|
||||||
#
|
|
||||||
# The qualifier (PRIVATE|PUBLIC|INTERFACE) to the package to populate
|
|
||||||
# the variables PROJECT_[INTERFACE]_<pkgname>_([VERSION]|[COMPONENTS]|PACKAGE_DEPENDENCIES)
|
|
||||||
# accordingly. This bookkeeping information is used to print our dependency found summary
|
|
||||||
# table and to generate a part of our CMake package.
|
|
||||||
#
|
|
||||||
# When a dependending package is listed with ADD_REQUIREMENTS_OF the variables
|
|
||||||
# <dep_pkgname>_<pkgname>_VERSION|COMPONENTS are looked up to and added to the native
|
|
||||||
# VERSION (selected highest version) and COMPONENTS (deduplicated) args.
|
|
||||||
#
|
|
||||||
# COMPONENTS and VERSION args are then just passed to the native find_package.
|
|
||||||
#
|
|
||||||
macro(find_package2 qualifier pkgname)
|
|
||||||
cmake_parse_arguments(ARGS "" "VERSION" "COMPONENTS;ADD_REQUIREMENTS_OF" ${ARGN})
|
|
||||||
|
|
||||||
string(TOUPPER ${pkgname} pkgname_upper)
|
|
||||||
set(__old_cpp__ ${CMAKE_PREFIX_PATH})
|
|
||||||
set(CMAKE_PREFIX_PATH ${${pkgname_upper}_ROOT} $ENV{${pkgname_upper}_ROOT} ${CMAKE_PREFIX_PATH})
|
|
||||||
|
|
||||||
# build lists of required versions and components
|
|
||||||
unset(__required_versions__)
|
|
||||||
unset(__components__)
|
|
||||||
if(ARGS_VERSION)
|
|
||||||
list(APPEND __required_versions__ ${ARGS_VERSION})
|
|
||||||
endif()
|
|
||||||
if(ARGS_COMPONENTS)
|
|
||||||
list(APPEND __components__ ${ARGS_COMPONENTS})
|
|
||||||
endif()
|
|
||||||
if(ARGS_ADD_REQUIREMENTS_OF)
|
|
||||||
foreach(dep_pkgname IN LISTS ARGS_ADD_REQUIREMENTS_OF)
|
|
||||||
if(${dep_pkgname}_${pkgname}_VERSION)
|
|
||||||
list(APPEND __required_versions__ ${${dep_pkgname}_${pkgname}_VERSION})
|
|
||||||
endif()
|
|
||||||
if(${dep_pkgname}_${pkgname}_COMPONENTS)
|
|
||||||
list(APPEND __components__ ${${dep_pkgname}_${pkgname}_COMPONENTS})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# select highest required version
|
|
||||||
unset(__version__)
|
|
||||||
if(__required_versions__)
|
|
||||||
list(GET __required_versions__ 0 __version__)
|
|
||||||
foreach(v IN LISTS __required_versions__)
|
|
||||||
if(${v} VERSION_GREATER ${__version__})
|
|
||||||
set(__version__ ${v})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
# deduplicate required component list
|
|
||||||
if(__components__)
|
|
||||||
list(REMOVE_DUPLICATES ARGS_COMPONENTS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# call native find_package
|
|
||||||
if(__components__)
|
|
||||||
find_package(${pkgname} ${__version__} QUIET COMPONENTS ${__components__} ${ARGS_UNPARSED_ARGUMENTS})
|
|
||||||
else()
|
|
||||||
find_package(${pkgname} ${__version__} QUIET ${ARGS_UNPARSED_ARGUMENTS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${pkgname}_FOUND)
|
|
||||||
if(${qualifier} STREQUAL PRIVATE)
|
|
||||||
set(PROJECT_${pkgname}_VERSION ${__version__})
|
|
||||||
set(PROJECT_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
|
||||||
set(PROJECT_PACKAGE_DEPENDENCIES ${PROJECT_PACKAGE_DEPENDENCIES} ${pkgname})
|
|
||||||
elseif(${qualifier} STREQUAL PUBLIC)
|
|
||||||
set(PROJECT_${pkgname}_VERSION ${__version__})
|
|
||||||
set(PROJECT_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
|
||||||
set(PROJECT_PACKAGE_DEPENDENCIES ${PROJECT_PACKAGE_DEPENDENCIES} ${pkgname})
|
|
||||||
set(PROJECT_INTERFACE_${pkgname}_VERSION ${__version__})
|
|
||||||
set(PROJECT_INTERFACE_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
|
||||||
set(PROJECT_INTERFACE_PACKAGE_DEPENDENCIES ${PROJECT_INTERFACE_PACKAGE_DEPENDENCIES} ${pkgname})
|
|
||||||
elseif(${qualifier} STREQUAL INTERFACE)
|
|
||||||
set(PROJECT_INTERFACE_${pkgname}_VERSION ${__version__})
|
|
||||||
set(PROJECT_INTERFACE_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
|
||||||
set(PROJECT_INTERFACE_PACKAGE_DEPENDENCIES ${PROJECT_INTERFACE_PACKAGE_DEPENDENCIES} ${pkgname})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
unset(__version__)
|
|
||||||
unset(__components__)
|
|
||||||
unset(__required_versions__)
|
|
||||||
set(CMAKE_PREFIX_PATH ${__old_cpp__})
|
|
||||||
unset(__old_cpp__)
|
|
||||||
endmacro()
|
|
@@ -1,5 +1,5 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Copyright (C) 2018-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
# Copyright (C) 2018-2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
||||||
# #
|
# #
|
||||||
# This software is distributed under the terms of the #
|
# This software is distributed under the terms of the #
|
||||||
# GNU Lesser General Public Licence (LGPL) version 3, #
|
# GNU Lesser General Public Licence (LGPL) version 3, #
|
||||||
@@ -15,8 +15,8 @@ set(@PROJECT_NAME@_GIT_DATE @PROJECT_GIT_DATE@)
|
|||||||
|
|
||||||
set_and_check(@PROJECT_NAME@_PREFIX @PACKAGE_CMAKE_INSTALL_PREFIX@)
|
set_and_check(@PROJECT_NAME@_PREFIX @PACKAGE_CMAKE_INSTALL_PREFIX@)
|
||||||
set(@PROJECT_NAME@_BINDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_BINDIR@)
|
set(@PROJECT_NAME@_BINDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_BINDIR@)
|
||||||
set(@PROJECT_NAME@_INCDIR @PACKAGE_INSTALL_INCDIRS@)
|
set(@PROJECT_NAME@_INCDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FAIRLOGGER_INSTALL_INCLUDE_DIRS@)
|
||||||
set(@PROJECT_NAME@_INCDIRS @PACKAGE_INSTALL_INCDIRS@)
|
set(@PROJECT_NAME@_INCDIRS @PACKAGE_CMAKE_INSTALL_PREFIX@/@FAIRLOGGER_INSTALL_INCLUDE_DIRS@)
|
||||||
set_and_check(@PROJECT_NAME@_LIBDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_LIBDIR@)
|
set_and_check(@PROJECT_NAME@_LIBDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_LIBDIR@)
|
||||||
|
|
||||||
set(@PROJECT_NAME@_CXX_STANDARD_REQUIRED @CMAKE_CXX_STANDARD_REQUIRED@)
|
set(@PROJECT_NAME@_CXX_STANDARD_REQUIRED @CMAKE_CXX_STANDARD_REQUIRED@)
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Copyright (C) 2018-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
# Copyright (C) 2018-2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
||||||
# #
|
# #
|
||||||
# This software is distributed under the terms of the #
|
# This software is distributed under the terms of the #
|
||||||
# GNU Lesser General Public Licence (LGPL) version 3, #
|
# GNU Lesser General Public Licence (LGPL) version 3, #
|
||||||
@@ -94,22 +94,24 @@ macro(set_fairlogger_defaults)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Handle C++ standard level
|
# Handle C++ standard level
|
||||||
set(PROJECT_MIN_CXX_STANDARD 17)
|
set(PROJECT_MIN_CXX_STANDARD 11)
|
||||||
if(CMAKE_CXX_STANDARD LESS PROJECT_MIN_CXX_STANDARD)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
if(NOT CMAKE_CXX_STANDARD)
|
||||||
|
set(CMAKE_CXX_STANDARD ${PROJECT_MIN_CXX_STANDARD})
|
||||||
|
elseif(${CMAKE_CXX_STANDARD} LESS ${PROJECT_MIN_CXX_STANDARD})
|
||||||
message(FATAL_ERROR "A minimum CMAKE_CXX_STANDARD of ${PROJECT_MIN_CXX_STANDARD} is required.")
|
message(FATAL_ERROR "A minimum CMAKE_CXX_STANDARD of ${PROJECT_MIN_CXX_STANDARD} is required.")
|
||||||
endif()
|
endif()
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# Generate compile_commands.json file (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
# Generate compile_commands.json file (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||||
if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS)
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
set(BUILD_SHARED_LIBS ON CACHE BOOL "Whether to build shared libraries or static archives")
|
set(BUILD_SHARED_LIBS ON CACHE BOOL "Whether to build shared libraries or static archives")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Set -fPIC as default for all library types
|
# Set -fPIC as default for all library types
|
||||||
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
|
if(NOT CMAKE_POSITION_INDEPENDENT_CODE)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -120,7 +122,6 @@ macro(set_fairlogger_defaults)
|
|||||||
set(PROJECT_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
|
set(PROJECT_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
|
||||||
set(PROJECT_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
|
set(PROJECT_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
|
||||||
set(PROJECT_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME_LOWER})
|
set(PROJECT_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME_LOWER})
|
||||||
set(PROJECT_INSTALL_BUNDLEDINCDIR ${PROJECT_INSTALL_INCDIR}/bundled)
|
|
||||||
set(PROJECT_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME_LOWER})
|
set(PROJECT_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME_LOWER})
|
||||||
|
|
||||||
# https://cmake.org/Wiki/CMake_RPATH_handling
|
# https://cmake.org/Wiki/CMake_RPATH_handling
|
||||||
@@ -128,13 +129,13 @@ macro(set_fairlogger_defaults)
|
|||||||
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}" isSystemDir)
|
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}" isSystemDir)
|
||||||
if("${isSystemDir}" STREQUAL "-1")
|
if("${isSystemDir}" STREQUAL "-1")
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
string(APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,--enable-new-dtags")
|
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,--enable-new-dtags")
|
||||||
string(APPEND CMAKE_SHARED_LINKER_FLAGS " -Wl,--enable-new-dtags")
|
set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-Wl,--enable-new-dtags")
|
||||||
list(APPEND CMAKE_INSTALL_RPATH "$ORIGIN/../${PROJECT_INSTALL_LIBDIR}")
|
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${PROJECT_INSTALL_LIBDIR}")
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
list(APPEND CMAKE_INSTALL_RPATH "@loader_path/../${PROJECT_INSTALL_LIBDIR}")
|
set(CMAKE_INSTALL_RPATH "@loader_path/../${PROJECT_INSTALL_LIBDIR}")
|
||||||
else()
|
else()
|
||||||
list(APPEND CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}")
|
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -226,13 +227,6 @@ macro(install_cmake_package)
|
|||||||
VERSION ${PROJECT_VERSION}
|
VERSION ${PROJECT_VERSION}
|
||||||
COMPATIBILITY AnyNewerVersion
|
COMPATIBILITY AnyNewerVersion
|
||||||
)
|
)
|
||||||
unset(PACKAGE_INSTALL_INCDIRS)
|
|
||||||
list(APPEND PACKAGE_INSTALL_INCDIRS
|
|
||||||
\$\{PACKAGE_PREFIX_DIR\}/${CMAKE_INSTALL_INCLUDEDIR})
|
|
||||||
if(NOT USE_EXTERNAL_FMT)
|
|
||||||
list(APPEND PACKAGE_INSTALL_INCDIRS
|
|
||||||
\$\{PACKAGE_PREFIX_DIR\}/${PROJECT_INSTALL_BUNDLEDINCDIR})
|
|
||||||
endif()
|
|
||||||
generate_package_dependencies() # fills ${PACKAGE_DEPENDENCIES}
|
generate_package_dependencies() # fills ${PACKAGE_DEPENDENCIES}
|
||||||
string(TOUPPER ${CMAKE_BUILD_TYPE} PROJECT_BUILD_TYPE_UPPER)
|
string(TOUPPER ${CMAKE_BUILD_TYPE} PROJECT_BUILD_TYPE_UPPER)
|
||||||
set(PROJECT_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${PROJECT_BUILD_TYPE_UPPER}})
|
set(PROJECT_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${PROJECT_BUILD_TYPE_UPPER}})
|
||||||
@@ -248,3 +242,98 @@ macro(install_cmake_package)
|
|||||||
DESTINATION ${PACKAGE_INSTALL_DESTINATION}
|
DESTINATION ${PACKAGE_INSTALL_DESTINATION}
|
||||||
)
|
)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
#
|
||||||
|
# find_package2(PRIVATE|PUBLIC|INTERFACE <pkgname>
|
||||||
|
# [VERSION <version>]
|
||||||
|
# [COMPONENTS <list of components>]
|
||||||
|
# [ADD_REQUIREMENTS_OF <list of dep_pgkname>]
|
||||||
|
# [any other option the native find_package supports]...)
|
||||||
|
#
|
||||||
|
# Wrapper around CMake's native find_package command to add some features and bookkeeping.
|
||||||
|
#
|
||||||
|
# The qualifier (PRIVATE|PUBLIC|INTERFACE) to the package to populate
|
||||||
|
# the variables PROJECT_[INTERFACE]_<pkgname>_([VERSION]|[COMPONENTS]|PACKAGE_DEPENDENCIES)
|
||||||
|
# accordingly. This bookkeeping information is used to print our dependency found summary
|
||||||
|
# table and to generate a part of our CMake package.
|
||||||
|
#
|
||||||
|
# When a dependending package is listed with ADD_REQUIREMENTS_OF the variables
|
||||||
|
# <dep_pkgname>_<pkgname>_VERSION|COMPONENTS are looked up to and added to the native
|
||||||
|
# VERSION (selected highest version) and COMPONENTS (deduplicated) args.
|
||||||
|
#
|
||||||
|
# COMPONENTS and VERSION args are then just passed to the native find_package.
|
||||||
|
#
|
||||||
|
macro(find_package2 qualifier pkgname)
|
||||||
|
cmake_parse_arguments(ARGS "" "VERSION" "COMPONENTS;ADD_REQUIREMENTS_OF" ${ARGN})
|
||||||
|
|
||||||
|
string(TOUPPER ${pkgname} pkgname_upper)
|
||||||
|
set(__old_cpp__ ${CMAKE_PREFIX_PATH})
|
||||||
|
set(CMAKE_PREFIX_PATH ${${pkgname_upper}_ROOT} $ENV{${pkgname_upper}_ROOT} ${CMAKE_PREFIX_PATH})
|
||||||
|
|
||||||
|
# build lists of required versions and components
|
||||||
|
unset(__required_versions__)
|
||||||
|
unset(__components__)
|
||||||
|
if(ARGS_VERSION)
|
||||||
|
list(APPEND __required_versions__ ${ARGS_VERSION})
|
||||||
|
endif()
|
||||||
|
if(ARGS_COMPONENTS)
|
||||||
|
list(APPEND __components__ ${ARGS_COMPONENTS})
|
||||||
|
endif()
|
||||||
|
if(ARGS_ADD_REQUIREMENTS_OF)
|
||||||
|
foreach(dep_pkgname IN LISTS ARGS_ADD_REQUIREMENTS_OF)
|
||||||
|
if(${dep_pkgname}_${pkgname}_VERSION)
|
||||||
|
list(APPEND __required_versions__ ${${dep_pkgname}_${pkgname}_VERSION})
|
||||||
|
endif()
|
||||||
|
if(${dep_pkgname}_${pkgname}_COMPONENTS)
|
||||||
|
list(APPEND __components__ ${${dep_pkgname}_${pkgname}_COMPONENTS})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# select highest required version
|
||||||
|
unset(__version__)
|
||||||
|
if(__required_versions__)
|
||||||
|
list(GET __required_versions__ 0 __version__)
|
||||||
|
foreach(v IN LISTS __required_versions__)
|
||||||
|
if(${v} VERSION_GREATER ${__version__})
|
||||||
|
set(__version__ ${v})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
# deduplicate required component list
|
||||||
|
if(__components__)
|
||||||
|
list(REMOVE_DUPLICATES ARGS_COMPONENTS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# call native find_package
|
||||||
|
if(__components__)
|
||||||
|
find_package(${pkgname} ${__version__} QUIET COMPONENTS ${__components__} ${ARGS_UNPARSED_ARGUMENTS})
|
||||||
|
else()
|
||||||
|
find_package(${pkgname} ${__version__} QUIET ${ARGS_UNPARSED_ARGUMENTS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${pkgname}_FOUND)
|
||||||
|
if(${qualifier} STREQUAL PRIVATE)
|
||||||
|
set(PROJECT_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_PACKAGE_DEPENDENCIES ${PROJECT_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
elseif(${qualifier} STREQUAL PUBLIC)
|
||||||
|
set(PROJECT_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_PACKAGE_DEPENDENCIES ${PROJECT_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_INTERFACE_PACKAGE_DEPENDENCIES ${PROJECT_INTERFACE_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
elseif(${qualifier} STREQUAL INTERFACE)
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_INTERFACE_PACKAGE_DEPENDENCIES ${PROJECT_INTERFACE_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
unset(__version__)
|
||||||
|
unset(__components__)
|
||||||
|
unset(__required_versions__)
|
||||||
|
set(CMAKE_PREFIX_PATH ${__old_cpp__})
|
||||||
|
unset(__old_cpp__)
|
||||||
|
endmacro()
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
* copied verbatim in the file "LICENSE" *
|
* copied verbatim in the file "LICENSE" *
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
#include <string_view>
|
|
||||||
|
|
||||||
#if FMT_VERSION < 60000
|
#if FMT_VERSION < 60000
|
||||||
#include <fmt/time.h>
|
#include <fmt/time.h>
|
||||||
@@ -16,7 +15,6 @@
|
|||||||
|
|
||||||
#include <cstdio> // printf
|
#include <cstdio> // printf
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iterator> // std::back_inserter
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -45,58 +43,53 @@ const string Logger::fProcessName = program_invocation_short_name;
|
|||||||
const string Logger::fProcessName = "?";
|
const string Logger::fProcessName = "?";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const unordered_map<string_view, Verbosity> Logger::fVerbosityMap =
|
const unordered_map<string, Verbosity> Logger::fVerbosityMap =
|
||||||
{
|
{
|
||||||
{ {"veryhigh"}, Verbosity::veryhigh },
|
{ "veryhigh", Verbosity::veryhigh },
|
||||||
{ {"high"}, Verbosity::high },
|
{ "high", Verbosity::high },
|
||||||
{ {"medium"}, Verbosity::medium },
|
{ "medium", Verbosity::medium },
|
||||||
{ {"low"}, Verbosity::low },
|
{ "low", Verbosity::low },
|
||||||
{ {"verylow"}, Verbosity::verylow },
|
{ "verylow", Verbosity::verylow },
|
||||||
{ {"VERYHIGH"}, Verbosity::veryhigh },
|
{ "VERYHIGH", Verbosity::veryhigh },
|
||||||
{ {"HIGH"}, Verbosity::high },
|
{ "HIGH", Verbosity::high },
|
||||||
{ {"MEDIUM"}, Verbosity::medium },
|
{ "MEDIUM", Verbosity::medium },
|
||||||
{ {"LOW"}, Verbosity::low },
|
{ "LOW", Verbosity::low },
|
||||||
{ {"VERYLOW"}, Verbosity::verylow },
|
{ "VERYLOW", Verbosity::verylow },
|
||||||
{ {"user1"}, Verbosity::user1 },
|
{ "user1", Verbosity::user1 },
|
||||||
{ {"user2"}, Verbosity::user2 },
|
{ "user2", Verbosity::user2 },
|
||||||
{ {"user3"}, Verbosity::user3 },
|
{ "user3", Verbosity::user3 },
|
||||||
{ {"user4"}, Verbosity::user4 }
|
{ "user4", Verbosity::user4 }
|
||||||
};
|
};
|
||||||
|
|
||||||
const unordered_map<string_view, Severity> Logger::fSeverityMap =
|
const unordered_map<string, Severity> Logger::fSeverityMap =
|
||||||
{
|
{
|
||||||
{ {"nolog"}, Severity::nolog },
|
{ "nolog", Severity::nolog },
|
||||||
{ {"NOLOG"}, Severity::nolog },
|
{ "NOLOG", Severity::nolog },
|
||||||
{ {"fatal"}, Severity::fatal },
|
{ "error", Severity::error },
|
||||||
{ {"FATAL"}, Severity::fatal },
|
{ "ERROR", Severity::error },
|
||||||
{ {"error"}, Severity::error },
|
{ "warn", Severity::warn },
|
||||||
{ {"ERROR"}, Severity::error },
|
{ "WARN", Severity::warn },
|
||||||
{ {"alarm"}, Severity::alarm },
|
{ "warning", Severity::warn },
|
||||||
{ {"important"}, Severity::important },
|
{ "WARNING", Severity::warn },
|
||||||
{ {"warn"}, Severity::warn },
|
{ "state", Severity::state },
|
||||||
{ {"WARN"}, Severity::warn },
|
{ "STATE", Severity::state },
|
||||||
{ {"warning"}, Severity::warn },
|
{ "info", Severity::info },
|
||||||
{ {"WARNING"}, Severity::warn },
|
{ "INFO", Severity::info },
|
||||||
{ {"state"}, Severity::state },
|
{ "debug", Severity::debug },
|
||||||
{ {"STATE"}, Severity::state },
|
{ "DEBUG", Severity::debug },
|
||||||
{ {"info"}, Severity::info },
|
{ "debug1", Severity::debug1 },
|
||||||
{ {"INFO"}, Severity::info },
|
{ "DEBUG1", Severity::debug1 },
|
||||||
{ {"detail"}, Severity::detail },
|
{ "debug2", Severity::debug2 },
|
||||||
{ {"debug"}, Severity::debug },
|
{ "DEBUG2", Severity::debug2 },
|
||||||
{ {"DEBUG"}, Severity::debug },
|
{ "debug3", Severity::debug3 },
|
||||||
{ {"debug1"}, Severity::debug1 },
|
{ "DEBUG3", Severity::debug3 },
|
||||||
{ {"DEBUG1"}, Severity::debug1 },
|
{ "debug4", Severity::debug4 },
|
||||||
{ {"debug2"}, Severity::debug2 },
|
{ "DEBUG4", Severity::debug4 },
|
||||||
{ {"DEBUG2"}, Severity::debug2 },
|
{ "trace", Severity::trace },
|
||||||
{ {"debug3"}, Severity::debug3 },
|
{ "TRACE", Severity::trace }
|
||||||
{ {"DEBUG3"}, Severity::debug3 },
|
|
||||||
{ {"debug4"}, Severity::debug4 },
|
|
||||||
{ {"DEBUG4"}, Severity::debug4 },
|
|
||||||
{ {"trace"}, Severity::trace },
|
|
||||||
{ {"TRACE"}, Severity::trace }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const array<string_view, 15> Logger::fSeverityNames =
|
const array<string, 12> Logger::fSeverityNames =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
"NOLOG",
|
"NOLOG",
|
||||||
@@ -106,18 +99,15 @@ const array<string_view, 15> Logger::fSeverityNames =
|
|||||||
"DEBUG2",
|
"DEBUG2",
|
||||||
"DEBUG1",
|
"DEBUG1",
|
||||||
"DEBUG",
|
"DEBUG",
|
||||||
"DETAIL",
|
|
||||||
"INFO",
|
"INFO",
|
||||||
"STATE",
|
"STATE",
|
||||||
"WARN",
|
"WARN",
|
||||||
"IMPORTANT",
|
|
||||||
"ALARM",
|
|
||||||
"ERROR",
|
"ERROR",
|
||||||
"FATAL"
|
"FATAL"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const array<string_view, 9> Logger::fVerbosityNames =
|
const array<string, 9> Logger::fVerbosityNames =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
"verylow",
|
"verylow",
|
||||||
@@ -145,11 +135,12 @@ map<Verbosity, VSpec> Logger::fVerbosities =
|
|||||||
{ Verbosity::user4, VSpec::Make(VSpec::Info::severity) }
|
{ Verbosity::user4, VSpec::Make(VSpec::Info::severity) }
|
||||||
};
|
};
|
||||||
|
|
||||||
Logger::Logger(Severity severity, Verbosity verbosity, std::string_view file, std::string_view line, std::string_view func)
|
Logger::Logger(Severity severity, Verbosity verbosity, const string& file, const string& line, const string& func)
|
||||||
: fTimeCalculated(false)
|
: fTimeCalculated(false)
|
||||||
{
|
{
|
||||||
if (!fIsDestructed) {
|
if (!fIsDestructed) {
|
||||||
size_t pos = file.rfind("/");
|
size_t pos = file.rfind("/");
|
||||||
|
|
||||||
// fInfos.timestamp is filled conditionally
|
// fInfos.timestamp is filled conditionally
|
||||||
// fInfos.us is filled conditionally
|
// fInfos.us is filled conditionally
|
||||||
fInfos.process_name = fProcessName;
|
fInfos.process_name = fProcessName;
|
||||||
@@ -165,27 +156,27 @@ Logger::Logger(Severity severity, Verbosity verbosity, std::string_view file, st
|
|||||||
for (const auto info : spec.fInfos) {
|
for (const auto info : spec.fInfos) {
|
||||||
switch (info) {
|
switch (info) {
|
||||||
case VSpec::Info::process_name:
|
case VSpec::Info::process_name:
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), "[{}]", fInfos.process_name);
|
fmt::format_to(fBWPrefix, "[{}]", fInfos.process_name);
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::timestamp_us:
|
case VSpec::Info::timestamp_us:
|
||||||
FillTimeInfos();
|
FillTimeInfos();
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), "[{:%H:%M:%S}.{:06}]", fmt::localtime(fInfos.timestamp), fInfos.us.count());
|
fmt::format_to(fBWPrefix, "[{:%H:%M:%S}.{:06}]", fmt::localtime(fInfos.timestamp), fInfos.us.count());
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::timestamp_s:
|
case VSpec::Info::timestamp_s:
|
||||||
FillTimeInfos();
|
FillTimeInfos();
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), "[{:%H:%M:%S}]", fmt::localtime(fInfos.timestamp));
|
fmt::format_to(fBWPrefix, "[{:%H:%M:%S}]", fmt::localtime(fInfos.timestamp));
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::severity:
|
case VSpec::Info::severity:
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), "[{}]", fInfos.severity_name);
|
fmt::format_to(fBWPrefix, "[{}]", fInfos.severity_name);
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::file_line_function:
|
case VSpec::Info::file_line_function:
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), "[{}:{}:{}]", fInfos.file, fInfos.line, fInfos.func);
|
fmt::format_to(fBWPrefix, "[{}:{}:{}]", fInfos.file, fInfos.line, fInfos.func);
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::file_line:
|
case VSpec::Info::file_line:
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), "[{}:{}]", fInfos.file, fInfos.line);
|
fmt::format_to(fBWPrefix, "[{}:{}]", fInfos.file, fInfos.line);
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::file:
|
case VSpec::Info::file:
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), "[{}]", fInfos.file);
|
fmt::format_to(fBWPrefix, "[{}]", fInfos.file);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -193,7 +184,7 @@ Logger::Logger(Severity severity, Verbosity verbosity, std::string_view file, st
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (spec.fSize > 0) {
|
if (spec.fSize > 0) {
|
||||||
fmt::format_to(std::back_inserter(fBWPrefix), " ");
|
fmt::format_to(fBWPrefix, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,27 +192,27 @@ Logger::Logger(Severity severity, Verbosity verbosity, std::string_view file, st
|
|||||||
for (const auto info : spec.fInfos) {
|
for (const auto info : spec.fInfos) {
|
||||||
switch (info) {
|
switch (info) {
|
||||||
case VSpec::Info::process_name:
|
case VSpec::Info::process_name:
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), "[{}]", ColorOut(Color::fgBlue, fInfos.process_name));
|
fmt::format_to(fColorPrefix, "[{}]", ColorOut(Color::fgBlue, fInfos.process_name));
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::timestamp_us:
|
case VSpec::Info::timestamp_us:
|
||||||
FillTimeInfos();
|
FillTimeInfos();
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), "[{}{:%H:%M:%S}.{:06}{}]", startColor(Color::fgCyan), fmt::localtime(fInfos.timestamp), fInfos.us.count(), endColor());
|
fmt::format_to(fColorPrefix, "[{}{:%H:%M:%S}.{:06}{}]", startColor(Color::fgCyan), fmt::localtime(fInfos.timestamp), fInfos.us.count(), endColor());
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::timestamp_s:
|
case VSpec::Info::timestamp_s:
|
||||||
FillTimeInfos();
|
FillTimeInfos();
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), "[{}{:%H:%M:%S}{}]", startColor(Color::fgCyan), fmt::localtime(fInfos.timestamp), endColor());
|
fmt::format_to(fColorPrefix, "[{}{:%H:%M:%S}{}]", startColor(Color::fgCyan), fmt::localtime(fInfos.timestamp), endColor());
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::severity:
|
case VSpec::Info::severity:
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), "[{}]", GetColoredSeverityString(fInfos.severity));
|
fmt::format_to(fColorPrefix, "[{}]", GetColoredSeverityString(fInfos.severity));
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::file_line_function:
|
case VSpec::Info::file_line_function:
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), "[{}:{}:{}]", ColorOut(Color::fgBlue, fInfos.file), ColorOut(Color::fgYellow, fInfos.line), ColorOut(Color::fgBlue, fInfos.func));
|
fmt::format_to(fColorPrefix, "[{}:{}:{}]", ColorOut(Color::fgBlue, fInfos.file), ColorOut(Color::fgYellow, fInfos.line), ColorOut(Color::fgBlue, fInfos.func));
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::file_line:
|
case VSpec::Info::file_line:
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), "[{}:{}]", ColorOut(Color::fgBlue, fInfos.file), ColorOut(Color::fgYellow, fInfos.line));
|
fmt::format_to(fColorPrefix, "[{}:{}]", ColorOut(Color::fgBlue, fInfos.file), ColorOut(Color::fgYellow, fInfos.line));
|
||||||
break;
|
break;
|
||||||
case VSpec::Info::file:
|
case VSpec::Info::file:
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), "[{}]", ColorOut(Color::fgBlue, fInfos.file));
|
fmt::format_to(fColorPrefix, "[{}]", ColorOut(Color::fgBlue, fInfos.file));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -229,7 +220,7 @@ Logger::Logger(Severity severity, Verbosity verbosity, std::string_view file, st
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (spec.fSize > 0) {
|
if (spec.fSize > 0) {
|
||||||
fmt::format_to(std::back_inserter(fColorPrefix), " ");
|
fmt::format_to(fColorPrefix, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,12 +281,9 @@ string Logger::GetColoredSeverityString(Severity severity)
|
|||||||
case Severity::nolog: return "\033[01;39mNOLOG\033[0m"; break;
|
case Severity::nolog: return "\033[01;39mNOLOG\033[0m"; break;
|
||||||
case Severity::fatal: return "\033[01;31mFATAL\033[0m"; break;
|
case Severity::fatal: return "\033[01;31mFATAL\033[0m"; break;
|
||||||
case Severity::error: return "\033[01;31mERROR\033[0m"; break;
|
case Severity::error: return "\033[01;31mERROR\033[0m"; break;
|
||||||
case Severity::alarm: return "\033[01;33mALARM\033[0m"; break;
|
|
||||||
case Severity::important: return "\033[01;32mIMPORTANT\033[0m"; break;
|
|
||||||
case Severity::warn: return "\033[01;33mWARN\033[0m"; break;
|
case Severity::warn: return "\033[01;33mWARN\033[0m"; break;
|
||||||
case Severity::state: return "\033[01;35mSTATE\033[0m"; break;
|
case Severity::state: return "\033[01;35mSTATE\033[0m"; break;
|
||||||
case Severity::info: return "\033[01;32mINFO\033[0m"; break;
|
case Severity::info: return "\033[01;32mINFO\033[0m"; break;
|
||||||
case Severity::detail: return "\033[01;32mDETAIL\033[0m"; break;
|
|
||||||
case Severity::debug: return "\033[01;34mDEBUG\033[0m"; break;
|
case Severity::debug: return "\033[01;34mDEBUG\033[0m"; break;
|
||||||
case Severity::debug1: return "\033[01;34mDEBUG1\033[0m"; break;
|
case Severity::debug1: return "\033[01;34mDEBUG1\033[0m"; break;
|
||||||
case Severity::debug2: return "\033[01;34mDEBUG2\033[0m"; break;
|
case Severity::debug2: return "\033[01;34mDEBUG2\033[0m"; break;
|
||||||
|
@@ -26,7 +26,6 @@
|
|||||||
|
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
#include <fmt/printf.h>
|
#include <fmt/printf.h>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
@@ -45,7 +44,6 @@
|
|||||||
#include <time.h> // time_t
|
#include <time.h> // time_t
|
||||||
#include <type_traits> // is_same
|
#include <type_traits> // is_same
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <string_view>
|
|
||||||
#include <utility> // pair
|
#include <utility> // pair
|
||||||
|
|
||||||
namespace fair
|
namespace fair
|
||||||
@@ -60,30 +58,26 @@ enum class Severity : int
|
|||||||
debug2 = 4,
|
debug2 = 4,
|
||||||
debug1 = 5,
|
debug1 = 5,
|
||||||
debug = 6,
|
debug = 6,
|
||||||
detail = 7,
|
info = 7,
|
||||||
info = 8,
|
state = 8,
|
||||||
state = 9,
|
warn = 9,
|
||||||
warn = 10,
|
error = 10,
|
||||||
important = 11,
|
fatal = 11,
|
||||||
alarm = 12,
|
// backwards-compatibility:
|
||||||
error = 13,
|
NOLOG = nolog,
|
||||||
fatal = 14,
|
TRACE = trace,
|
||||||
// aliases
|
DEBUG4 = debug4,
|
||||||
|
DEBUG3 = debug3,
|
||||||
|
DEBUG2 = debug2,
|
||||||
|
DEBUG1 = debug1,
|
||||||
|
DEBUG = debug,
|
||||||
|
INFO = info,
|
||||||
|
STATE = state,
|
||||||
|
WARNING = warn,
|
||||||
warning = warn,
|
warning = warn,
|
||||||
// backwards-compatibility
|
WARN = warn,
|
||||||
NOLOG __attribute__((deprecated("Use LOG(nolog) instead (lowercase severity name)."))) = nolog,
|
ERROR = error,
|
||||||
FATAL __attribute__((deprecated("Use LOG(fatal) instead (lowercase severity name)."))) = fatal,
|
FATAL = fatal
|
||||||
ERROR __attribute__((deprecated("Use LOG(error) instead (lowercase severity name)."))) = error,
|
|
||||||
WARN __attribute__((deprecated("Use LOG(warn) instead (lowercase severity name)."))) = warn,
|
|
||||||
WARNING __attribute__((deprecated("Use LOG(warning) instead (lowercase severity name)."))) = warn,
|
|
||||||
STATE __attribute__((deprecated("Use LOG(state) instead (lowercase severity name)."))) = state,
|
|
||||||
INFO __attribute__((deprecated("Use LOG(info) instead (lowercase severity name)."))) = info,
|
|
||||||
DEBUG __attribute__((deprecated("Use LOG(debug) instead (lowercase severity name)."))) = debug,
|
|
||||||
DEBUG1 __attribute__((deprecated("Use LOG(debug1) instead (lowercase severity name)."))) = debug1,
|
|
||||||
DEBUG2 __attribute__((deprecated("Use LOG(debug2) instead (lowercase severity name)."))) = debug2,
|
|
||||||
DEBUG3 __attribute__((deprecated("Use LOG(debug3) instead (lowercase severity name)."))) = debug3,
|
|
||||||
DEBUG4 __attribute__((deprecated("Use LOG(debug4) instead (lowercase severity name)."))) = debug4,
|
|
||||||
TRACE __attribute__((deprecated("Use LOG(trace) instead (lowercase severity name)."))) = trace
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// verbosity levels:
|
// verbosity levels:
|
||||||
@@ -176,19 +170,19 @@ struct LogMetaData
|
|||||||
{
|
{
|
||||||
std::time_t timestamp;
|
std::time_t timestamp;
|
||||||
std::chrono::microseconds us;
|
std::chrono::microseconds us;
|
||||||
std::string_view process_name;
|
std::string process_name;
|
||||||
std::string_view file;
|
std::string file;
|
||||||
std::string_view line;
|
std::string line;
|
||||||
std::string_view func;
|
std::string func;
|
||||||
std::string_view severity_name;
|
std::string severity_name;
|
||||||
fair::Severity severity;
|
fair::Severity severity;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Logger
|
class Logger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Logger(Severity severity, Verbosity verbosity, std::string_view file, std::string_view line, std::string_view func);
|
Logger(Severity severity, Verbosity verbosity, const std::string& file, const std::string& line, const std::string& func);
|
||||||
Logger(Severity severity, std::string_view file, std::string_view line, std::string_view func)
|
Logger(Severity severity, const std::string& file, const std::string& line, const std::string& func)
|
||||||
: Logger(severity, fVerbosity, file, line, func)
|
: Logger(severity, fVerbosity, file, line, func)
|
||||||
{}
|
{}
|
||||||
virtual ~Logger() noexcept(false);
|
virtual ~Logger() noexcept(false);
|
||||||
@@ -245,7 +239,7 @@ class Logger
|
|||||||
|
|
||||||
static std::string startColor(Color color) { return fmt::format("\033[01;{}m", static_cast<int>(color)); }
|
static std::string startColor(Color color) { return fmt::format("\033[01;{}m", static_cast<int>(color)); }
|
||||||
static std::string endColor() { return "\033[0m"; }
|
static std::string endColor() { return "\033[0m"; }
|
||||||
static std::string ColorOut(Color c, std::string_view s) { return fmt::format("\033[01;{}m{}\033[0m", static_cast<int>(c), s); }
|
static std::string ColorOut(Color c, const std::string& s) { return fmt::format("\033[01;{}m{}\033[0m", static_cast<int>(c), s); }
|
||||||
static std::string GetColoredSeverityString(Severity severity);
|
static std::string GetColoredSeverityString(Severity severity);
|
||||||
|
|
||||||
static void SetConsoleSeverity(const Severity severity);
|
static void SetConsoleSeverity(const Severity severity);
|
||||||
@@ -286,8 +280,8 @@ class Logger
|
|||||||
|
|
||||||
static void RemoveFileSink();
|
static void RemoveFileSink();
|
||||||
|
|
||||||
static std::string_view SeverityName(Severity s) { return fSeverityNames.at(static_cast<size_t>(s)); }
|
static std::string SeverityName(Severity s) { return fSeverityNames.at(static_cast<size_t>(s)); }
|
||||||
static std::string_view VerbosityName(Verbosity v) { return fVerbosityNames.at(static_cast<size_t>(v)); }
|
static std::string VerbosityName(Verbosity v) { return fVerbosityNames.at(static_cast<size_t>(v)); }
|
||||||
|
|
||||||
static void OnFatal(std::function<void()> func);
|
static void OnFatal(std::function<void()> func);
|
||||||
|
|
||||||
@@ -323,10 +317,10 @@ class Logger
|
|||||||
Logger& operator<<(std::ios_base& (*manip) (std::ios_base&));
|
Logger& operator<<(std::ios_base& (*manip) (std::ios_base&));
|
||||||
Logger& operator<<(std::ostream& (*manip) (std::ostream&));
|
Logger& operator<<(std::ostream& (*manip) (std::ostream&));
|
||||||
|
|
||||||
static const std::unordered_map<std::string_view, Verbosity> fVerbosityMap;
|
static const std::unordered_map<std::string, Verbosity> fVerbosityMap;
|
||||||
static const std::unordered_map<std::string_view, Severity> fSeverityMap;
|
static const std::unordered_map<std::string, Severity> fSeverityMap;
|
||||||
static const std::array<std::string_view, 15> fSeverityNames;
|
static const std::array<std::string, 12> fSeverityNames;
|
||||||
static const std::array<std::string_view, 9> fVerbosityNames;
|
static const std::array<std::string, 9> fVerbosityNames;
|
||||||
|
|
||||||
// protection for use after static destruction took place
|
// protection for use after static destruction took place
|
||||||
static bool fIsDestructed;
|
static bool fIsDestructed;
|
||||||
|
@@ -1,41 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
# Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
|
||||||
# #
|
|
||||||
# This software is distributed under the terms of the #
|
|
||||||
# GNU Lesser General Public Licence (LGPL) version 3, #
|
|
||||||
# copied verbatim in the file "LICENSE" #
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
function(container)
|
|
||||||
cmake_parse_arguments(ARGS "" "OS;VERSION" "" ${ARGN})
|
|
||||||
|
|
||||||
set(container "${ARGS_OS}.${ARGS_VERSION}")
|
|
||||||
set(def "${container}.def")
|
|
||||||
set(log "${container}.log")
|
|
||||||
set(target "${container}.sif")
|
|
||||||
|
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/linux.def.in" ${def} @ONLY)
|
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${target}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E env ${BASH} -c
|
|
||||||
"${SINGULARITY} build -f -F ${target} ${def} > ${log} 2>&1"
|
|
||||||
VERBATIM
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
COMMENT "Building fairlogger test container ${target}, logging to ${CMAKE_CURRENT_BINARY_DIR}/${log}"
|
|
||||||
DEPENDS ${PACKAGE_SETUP_SCRIPT} ${bootstrap_cmake_script}
|
|
||||||
)
|
|
||||||
|
|
||||||
list(APPEND containers ${target})
|
|
||||||
set(containers ${containers} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
container(OS fedora VERSION 32)
|
|
||||||
container(OS fedora VERSION 33)
|
|
||||||
container(OS fedora VERSION 34)
|
|
||||||
container(OS fedora VERSION 35)
|
|
||||||
container(OS fedora VERSION 36)
|
|
||||||
container(OS fedora VERSION 37)
|
|
||||||
container(OS fedora VERSION 38)
|
|
||||||
container(OS fedora VERSION 39)
|
|
||||||
|
|
||||||
add_custom_target(all-containers DEPENDS ${containers})
|
|
@@ -1,8 +0,0 @@
|
|||||||
Bootstrap: docker
|
|
||||||
From: @ARGS_OS@:@ARGS_VERSION@
|
|
||||||
|
|
||||||
%files
|
|
||||||
@CMAKE_CURRENT_SOURCE_DIR@/setup-@ARGS_OS@.sh /setup.sh
|
|
||||||
|
|
||||||
%post
|
|
||||||
bash /setup.sh @ARGS_VERSION@
|
|
@@ -1,7 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
dnf -y update
|
|
||||||
dnf -y install https://alfa-ci.gsi.de/packages/rpm/fedora-$1-x86_64/fairsoft-release-dev.rpm
|
|
||||||
dnf -y install boost-devel ninja-build 'dnf-command(builddep)' libasan liblsan libtsan libubsan clang-tools-extra
|
|
||||||
dnf -y builddep fairlogger
|
|
||||||
dnf -y clean all
|
|
@@ -1,35 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
label="$1"
|
|
||||||
jobsh="$2"
|
|
||||||
|
|
||||||
ALFACI_SLURM_CPUS=4
|
|
||||||
if [ -z "$ALFACI_SLURM_EXTRA_OPTS" ]
|
|
||||||
then
|
|
||||||
ALFACI_SLURM_EXTRA_OPTS="--hint=compute_bound"
|
|
||||||
fi
|
|
||||||
ALFACI_SLURM_TIMEOUT=10
|
|
||||||
if [ -z "$ALFACI_SLURM_QUEUE" ]
|
|
||||||
then
|
|
||||||
ALFACI_SLURM_QUEUE=main
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "*** Slurm request options :"
|
|
||||||
echo "*** Working directory ..: $PWD"
|
|
||||||
echo "*** Queue ..............: $ALFACI_SLURM_QUEUE"
|
|
||||||
echo "*** CPUs ...............: $ALFACI_SLURM_CPUS"
|
|
||||||
echo "*** Wall Time ..........: $ALFACI_SLURM_TIMEOUT min"
|
|
||||||
echo "*** Job Name ...........: ${label}"
|
|
||||||
echo "*** Extra Options ......: ${ALFACI_SLURM_EXTRA_OPTS}"
|
|
||||||
echo "*** Submitting job at ....: $(date -R)"
|
|
||||||
(
|
|
||||||
set -x
|
|
||||||
srun -p $ALFACI_SLURM_QUEUE -c $ALFACI_SLURM_CPUS -n 1 \
|
|
||||||
-t $ALFACI_SLURM_TIMEOUT \
|
|
||||||
--job-name="${label}" \
|
|
||||||
${ALFACI_SLURM_EXTRA_OPTS} \
|
|
||||||
bash "${jobsh}"
|
|
||||||
)
|
|
||||||
retval=$?
|
|
||||||
echo "*** Exit Code ............: $retval"
|
|
||||||
exit "$retval"
|
|
@@ -1,5 +1,5 @@
|
|||||||
/********************************************************************************
|
/********************************************************************************
|
||||||
* Copyright (C) 2015-2020 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
|
* Copyright (C) 2014-2020 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
|
||||||
* *
|
* *
|
||||||
* This software is distributed under the terms of the *
|
* This software is distributed under the terms of the *
|
||||||
* GNU Lesser General Public Licence (LGPL) version 3, *
|
* GNU Lesser General Public Licence (LGPL) version 3, *
|
||||||
@@ -38,7 +38,7 @@ int main()
|
|||||||
Logger::SetConsoleSeverity(Severity::fatal);
|
Logger::SetConsoleSeverity(Severity::fatal);
|
||||||
cout << "initial severity >" << Logger::GetConsoleSeverity() << "<" << endl << endl;
|
cout << "initial severity >" << Logger::GetConsoleSeverity() << "<" << endl << endl;
|
||||||
|
|
||||||
array<Severity, 15> severitiesUp{{ Severity::nolog, Severity::trace, Severity::debug4, Severity::debug3, Severity::debug2, Severity::debug1, Severity::debug, Severity::detail, Severity::info, Severity::state, Severity::warn, Severity::important, Severity::alarm, Severity::error, Severity::fatal }};
|
array<Severity, 12> severitiesUp{{ Severity::nolog, Severity::trace, Severity::debug4, Severity::debug3, Severity::debug2, Severity::debug1, Severity::debug, Severity::info, Severity::state, Severity::warn, Severity::error, Severity::fatal }};
|
||||||
#ifdef FAIR_MIN_SEVERITY
|
#ifdef FAIR_MIN_SEVERITY
|
||||||
for (unsigned int i = static_cast<int>(Severity::FAIR_MIN_SEVERITY); i < severitiesUp.size(); ++i) {
|
for (unsigned int i = static_cast<int>(Severity::FAIR_MIN_SEVERITY); i < severitiesUp.size(); ++i) {
|
||||||
#else
|
#else
|
||||||
@@ -57,7 +57,7 @@ int main()
|
|||||||
Logger::SetConsoleSeverity(Severity::fatal);
|
Logger::SetConsoleSeverity(Severity::fatal);
|
||||||
cout << "initial severity >" << Logger::GetConsoleSeverity() << "<" << endl << endl;
|
cout << "initial severity >" << Logger::GetConsoleSeverity() << "<" << endl << endl;
|
||||||
|
|
||||||
array<Severity, 15> severitiesDown{{ Severity::error, Severity::alarm, Severity::important, Severity::warn, Severity::state, Severity::info, Severity::detail, Severity::debug, Severity::debug1, Severity::debug2, Severity::debug3, Severity::debug4, Severity::trace, Severity::nolog, Severity::fatal }};
|
array<Severity, 12> severitiesDown{{ Severity::error, Severity::warn, Severity::state, Severity::info, Severity::debug, Severity::debug1, Severity::debug2, Severity::debug3, Severity::debug4, Severity::trace, Severity::nolog, Severity::fatal }};
|
||||||
#ifdef FAIR_MIN_SEVERITY
|
#ifdef FAIR_MIN_SEVERITY
|
||||||
for (unsigned int i = 0; i < severitiesDown.size() - static_cast<int>(Severity::FAIR_MIN_SEVERITY) - 1; ++i) {
|
for (unsigned int i = 0; i < severitiesDown.size() - static_cast<int>(Severity::FAIR_MIN_SEVERITY) - 1; ++i) {
|
||||||
#else
|
#else
|
||||||
|
@@ -24,12 +24,9 @@ void printEverySeverity()
|
|||||||
LOG(debug2) << "debug2 message, counter: " << i++;
|
LOG(debug2) << "debug2 message, counter: " << i++;
|
||||||
LOG(debug1) << "debug1 message, counter: " << i++;
|
LOG(debug1) << "debug1 message, counter: " << i++;
|
||||||
LOG(debug) << "debug message, counter: " << i++;
|
LOG(debug) << "debug message, counter: " << i++;
|
||||||
LOG(detail) << "detail message, counter: " << i++;
|
|
||||||
LOG(info) << "info message, counter: " << i++;
|
LOG(info) << "info message, counter: " << i++;
|
||||||
LOG(state) << "state message, counter: " << i++;
|
LOG(state) << "state message, counter: " << i++;
|
||||||
LOG(warn) << "warning message, counter: " << i++;
|
LOG(warn) << "warning message, counter: " << i++;
|
||||||
LOG(important) << "important message, counter: " << i++;
|
|
||||||
LOG(alarm) << "alarm message, counter: " << i++;
|
|
||||||
LOG(error) << "error message, counter: " << i++;
|
LOG(error) << "error message, counter: " << i++;
|
||||||
LOG(fatal) << "fatal message, counter: " << i++;
|
LOG(fatal) << "fatal message, counter: " << i++;
|
||||||
}
|
}
|
||||||
|
@@ -13,20 +13,17 @@ using namespace fair;
|
|||||||
|
|
||||||
void printEverySeverity()
|
void printEverySeverity()
|
||||||
{
|
{
|
||||||
LOG(nolog) << "nolog message ";
|
LOG(nolog) << "nolog message, counter: ";
|
||||||
LOG(trace) << "trace message ";
|
LOG(trace) << "trace message, counter: ";
|
||||||
LOG(debug4) << "debug4 message ";
|
LOG(debug4) << "debug4 message, counter: ";
|
||||||
LOG(debug3) << "debug3 message ";
|
LOG(debug3) << "debug3 message, counter: ";
|
||||||
LOG(debug2) << "debug2 message ";
|
LOG(debug2) << "debug2 message, counter: ";
|
||||||
LOG(debug1) << "debug1 message ";
|
LOG(debug1) << "debug1 message, counter: ";
|
||||||
LOG(debug) << "debug message ";
|
LOG(debug) << "debug message, counter: ";
|
||||||
LOG(detail) << "detail message ";
|
LOG(info) << "info message, counter: " ;
|
||||||
LOG(info) << "info message ";
|
LOG(state) << "state message, counter: ";
|
||||||
LOG(state) << "state message ";
|
LOG(warn) << "warning message, counter: ";
|
||||||
LOG(warn) << "warning message ";
|
LOG(error) << "error message, counter: ";
|
||||||
LOG(important) << "important message ";
|
|
||||||
LOG(alarm) << "alarm message ";
|
|
||||||
LOG(error) << "error message ";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void silentlyPrintAllVerbositiesWithSeverity(Severity sev)
|
void silentlyPrintAllVerbositiesWithSeverity(Severity sev)
|
||||||
|
@@ -27,12 +27,9 @@ uint32_t printEverySeverity(uint32_t i)
|
|||||||
LOG(debug2) << "debug2 message, counter: " << i++;
|
LOG(debug2) << "debug2 message, counter: " << i++;
|
||||||
LOG(debug1) << "debug1 message, counter: " << i++;
|
LOG(debug1) << "debug1 message, counter: " << i++;
|
||||||
LOG(debug) << "debug message, counter: " << i++;
|
LOG(debug) << "debug message, counter: " << i++;
|
||||||
LOG(detail) << "detail message, counter: " << i++;
|
|
||||||
LOG(info) << "info message, counter: " << i++;
|
LOG(info) << "info message, counter: " << i++;
|
||||||
LOG(state) << "state message, counter: " << i++;
|
LOG(state) << "state message, counter: " << i++;
|
||||||
LOG(warn) << "warning message, counter: " << i++;
|
LOG(warn) << "warning message, counter: " << i++;
|
||||||
LOG(important) << "important message, counter: " << i++;
|
|
||||||
LOG(alarm) << "alarm message, counter: " << i++;
|
|
||||||
LOG(error) << "error message, counter: " << i++;
|
LOG(error) << "error message, counter: " << i++;
|
||||||
LOG(fatal) << "fatal message, counter: " << i++;
|
LOG(fatal) << "fatal message, counter: " << i++;
|
||||||
|
|
||||||
@@ -48,7 +45,7 @@ void CheckSeverity(Severity severity)
|
|||||||
|
|
||||||
for (uint32_t i = 0; i < Logger::fSeverityNames.size(); ++i) {
|
for (uint32_t i = 0; i < Logger::fSeverityNames.size(); ++i) {
|
||||||
if (sev == Severity::nolog) {
|
if (sev == Severity::nolog) {
|
||||||
if (i == static_cast<int>(fair::Severity::fatal)) {
|
if (i == 11) {
|
||||||
if (!Logger::Logging(static_cast<Severity>(i))) {
|
if (!Logger::Logging(static_cast<Severity>(i))) {
|
||||||
throw runtime_error(ToStr("expecting to be logging ", Logger::fSeverityNames.at(i), " during ", sev, ", but it is not."));
|
throw runtime_error(ToStr("expecting to be logging ", Logger::fSeverityNames.at(i), " during ", sev, ", but it is not."));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user