From 469d6cf871461eb60b312b5265d156da03f7f92c Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Fri, 5 Jun 2020 16:09:41 +0000 Subject: [PATCH 1/6] Add in a new rcl_logging_interface package. This has just the header files that the implementations need to provide, and that the callers can call. Signed-off-by: Chris Lalancette --- rcl_logging_interface/CMakeLists.txt | 38 +++++++ .../rcl_logging_interface.h | 98 +++++++++++++++++++ .../visibility_control.h | 58 +++++++++++ rcl_logging_interface/package.xml | 18 ++++ 4 files changed, 212 insertions(+) create mode 100644 rcl_logging_interface/CMakeLists.txt create mode 100644 rcl_logging_interface/include/rcl_logging_interface/rcl_logging_interface.h create mode 100644 rcl_logging_interface/include/rcl_logging_interface/visibility_control.h create mode 100644 rcl_logging_interface/package.xml diff --git a/rcl_logging_interface/CMakeLists.txt b/rcl_logging_interface/CMakeLists.txt new file mode 100644 index 0000000..1dd9204 --- /dev/null +++ b/rcl_logging_interface/CMakeLists.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 3.5) + +project(rcl_logging_interface) + +# Default to C11 +if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 11) +endif() +# Default to C++14 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + +if(NOT WIN32) + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +find_package(ament_cmake_ros REQUIRED) +find_package(rcutils REQUIRED) + +add_library(${PROJECT_NAME} INTERFACE) +target_include_directories(${PROJECT_NAME} INTERFACE + "$") +ament_target_dependencies(${PROJECT_NAME} INTERFACE rcutils) + +install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) + +install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION include/${PROJECT_NAME} +) + +ament_export_include_directories(include) +ament_export_targets(${PROJECT_NAME}) +ament_export_dependencies(rcutils) +ament_package() diff --git a/rcl_logging_interface/include/rcl_logging_interface/rcl_logging_interface.h b/rcl_logging_interface/include/rcl_logging_interface/rcl_logging_interface.h new file mode 100644 index 0000000..235942f --- /dev/null +++ b/rcl_logging_interface/include/rcl_logging_interface/rcl_logging_interface.h @@ -0,0 +1,98 @@ +// Copyright 2020 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef RCL_LOGGING_INTERFACE__RCL_LOGGING_INTERFACE_H_ +#define RCL_LOGGING_INTERFACE__RCL_LOGGING_INTERFACE_H_ + +#include "rcl_logging_interface/visibility_control.h" +#include "rcutils/allocator.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + RCL_LOGGING_RET_OK = 0, + RCL_LOGGING_RET_ERROR = 2, + RCL_LOGGING_RET_CONFIG_FILE_DOESNT_EXIST = 21, + RCL_LOGGING_RET_CONFIG_FILE_INVALID = 22, +} rcl_logging_ret_t; + +/// Initialize the external logging library. +/** + * \param[in] config_file The location of a config file that the external + * logging library should use to configure itself. + * If provided, it must be a null terminated C string. + * If set to NULL or the empty string, the logging library will use defaults. + * \param[in] allocator The allocator to use for memory allocation. This is + * an rcutils_allocator_t rather than an rcl_allocator_t to ensure that the + * rcl_logging_* packages don't have a circular dependency back to rcl. + * \return RCL_LOGGING_RET_OK if initialized successfully. + * \return RCL_LOGGING_RET_ERROR if an unspecified error occurs. + * \return RCL_LOGGING_RET_CONFIG_FILE_DOESNT_EXIST if a config_file is provided + * but the file doesn't exist. + * \return RCL_LOGGING_RET_CONFIG_FILE_INVALID if a config_file is provided but + * the logging backend doesn't understand it. + */ +RCL_LOGGING_INTERFACE_PUBLIC +RCUTILS_WARN_UNUSED +rcl_logging_ret_t +rcl_logging_external_initialize(const char * config_file, rcutils_allocator_t allocator); + +/// Free the resources allocated for the external logging system. +/** + * This puts the system into a state equivalent to being uninitialized. + * + * \return RCL_LOGGING_RET_OK if successfully shutdown, or + * \return RCL_LOGGING_RET_ERROR if an unspecified error occurs. + */ +RCL_LOGGING_INTERFACE_PUBLIC +RCUTILS_WARN_UNUSED +rcl_logging_ret_t +rcl_logging_external_shutdown(); + +/// Log a message. +/** + * \param[in] severity The severity level of the message being logged. + * \param[in] name The name of the logger, must either be a null terminated + * C string or NULL. + * If NULL or empty the root logger will be used. + * \param[in] msg The message to be logged. Must be a null terminated C string. + */ +RCL_LOGGING_INTERFACE_PUBLIC +void +rcl_logging_external_log(int severity, const char * name, const char * msg); + +/// Set the severity level for a logger. +/** + * This function sets the severity level for the specified logger. + * If the name provided is an empty string or NULL it will change the level of + * the root logger. + * + * \param[in] name The name of the logger. + * Must be a null terminated C string or NULL. + * \param[in] level The severity level to be used for the specified logger. + * \return RCL_LOGGING_RET_OK if set successfully, or + * \return RCL_LOGGING_RET_ERROR if an unspecified error occurs. + */ +RCL_LOGGING_INTERFACE_PUBLIC +RCUTILS_WARN_UNUSED +rcl_logging_ret_t rcl_logging_external_set_logger_level(const char * name, int level); + +#ifdef __cplusplus +} +#endif + +#endif // RCL_LOGGING_INTERFACE__RCL_LOGGING_INTERFACE_H_ diff --git a/rcl_logging_interface/include/rcl_logging_interface/visibility_control.h b/rcl_logging_interface/include/rcl_logging_interface/visibility_control.h new file mode 100644 index 0000000..955cd06 --- /dev/null +++ b/rcl_logging_interface/include/rcl_logging_interface/visibility_control.h @@ -0,0 +1,58 @@ +// Copyright 2020 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef RCL_LOGGING_INTERFACE__VISIBILITY_CONTROL_H_ +#define RCL_LOGGING_INTERFACE__VISIBILITY_CONTROL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define RCL_LOGGING_INTERFACE_EXPORT __attribute__ ((dllexport)) + #define RCL_LOGGING_INTERFACE_IMPORT __attribute__ ((dllimport)) + #else + #define RCL_LOGGING_INTERFACE_EXPORT __declspec(dllexport) + #define RCL_LOGGING_INTERFACE_IMPORT __declspec(dllimport) + #endif + #ifdef RCL_LOGGING_INTERFACE_BUILDING_DLL + #define RCL_LOGGING_INTERFACE_PUBLIC RCL_LOGGING_INTERFACE_EXPORT + #else + #define RCL_LOGGING_INTERFACE_PUBLIC RCL_LOGGING_INTERFACE_IMPORT + #endif + #define RCL_LOGGING_INTERFACE_PUBLIC_TYPE RCL_LOGGING_INTERFACE_PUBLIC + #define RCL_LOGGING_INTERFACE_LOCAL +#else + #define RCL_LOGGING_INTERFACE_EXPORT __attribute__ ((visibility("default"))) + #define RCL_LOGGING_INTERFACE_IMPORT + #if __GNUC__ >= 4 + #define RCL_LOGGING_INTERFACE_PUBLIC __attribute__ ((visibility("default"))) + #define RCL_LOGGING_INTERFACE_LOCAL __attribute__ ((visibility("hidden"))) + #else + #define RCL_LOGGING_INTERFACE_PUBLIC + #define RCL_LOGGING_INTERFACE_LOCAL + #endif + #define RCL_LOGGING_INTERFACE_PUBLIC_TYPE +#endif + +#ifdef __cplusplus +} +#endif + +#endif // RCL_LOGGING_INTERFACE__VISIBILITY_CONTROL_H_ diff --git a/rcl_logging_interface/package.xml b/rcl_logging_interface/package.xml new file mode 100644 index 0000000..8522a32 --- /dev/null +++ b/rcl_logging_interface/package.xml @@ -0,0 +1,18 @@ + + + + rcl_logging_interface + 1.0.0 + Interface that rcl_logging backends needs to implement. + Chris Lalancette + Apache License 2.0 + Chris Lalancette + + ament_cmake_ros + + rcutils + + + ament_cmake + + From 495a25e05850e74d7d50d811e6323fb259db0f52 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Fri, 5 Jun 2020 16:13:57 +0000 Subject: [PATCH 2/6] Use rcl_logging_interface for noop backend. Signed-off-by: Chris Lalancette --- rcl_logging_noop/CMakeLists.txt | 15 ++++++--------- rcl_logging_noop/package.xml | 1 + .../src/rcl_logging_noop/rcl_logging_noop.cpp | 8 +------- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/rcl_logging_noop/CMakeLists.txt b/rcl_logging_noop/CMakeLists.txt index 37ef1fe..c46bb44 100644 --- a/rcl_logging_noop/CMakeLists.txt +++ b/rcl_logging_noop/CMakeLists.txt @@ -12,6 +12,7 @@ if(NOT CMAKE_CXX_STANDARD) endif() find_package(ament_cmake_ros REQUIRED) +find_package(rcl_logging_interface REQUIRED) find_package(rcutils REQUIRED) if(NOT WIN32) @@ -22,19 +23,15 @@ set(${PROJECT_NAME}_sources src/rcl_logging_noop/rcl_logging_noop.cpp ) -if(NOT WIN32) - add_library(${PROJECT_NAME} ${${PROJECT_NAME}_sources}) -else() - # TODO(nburek): There is an issue with build on Windows where it is looking for a static lib - # and can't find it when trying to call find_package() for this package. This explicitly creates - # it. - add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_sources}) -endif() +add_library(${PROJECT_NAME} ${${PROJECT_NAME}_sources}) ament_target_dependencies(${PROJECT_NAME} + rcl_logging_interface rcutils ) +target_compile_definitions(${PROJECT_NAME} PRIVATE "RCL_LOGGING_INTERFACE_BUILDING_DLL") + if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() @@ -46,6 +43,6 @@ install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) -ament_export_dependencies(ament_cmake) +ament_export_dependencies(ament_cmake rcl_logging_interface rcutils) ament_export_libraries(${PROJECT_NAME}) ament_package() diff --git a/rcl_logging_noop/package.xml b/rcl_logging_noop/package.xml index 8d52447..fe7d72a 100644 --- a/rcl_logging_noop/package.xml +++ b/rcl_logging_noop/package.xml @@ -11,6 +11,7 @@ ament_cmake_ros python3-empy + rcl_logging_interface rcutils ament_cmake_gmock diff --git a/rcl_logging_noop/src/rcl_logging_noop/rcl_logging_noop.cpp b/rcl_logging_noop/src/rcl_logging_noop/rcl_logging_noop.cpp index 25a9086..0530e14 100644 --- a/rcl_logging_noop/src/rcl_logging_noop/rcl_logging_noop.cpp +++ b/rcl_logging_noop/src/rcl_logging_noop/rcl_logging_noop.cpp @@ -12,13 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include #include -extern "C" { - -typedef int rcl_logging_ret_t; -#define RCL_LOGGING_RET_OK (0) - rcl_logging_ret_t rcl_logging_external_initialize( const char * config_file, rcutils_allocator_t allocator) @@ -46,5 +42,3 @@ rcl_logging_ret_t rcl_logging_external_set_logger_level(const char * name, int l (void) level; return RCL_LOGGING_RET_OK; } - -} /* extern "C" */ From dc1a093ef7960d7ea4b69c9c0214dc1c232bbb30 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Fri, 5 Jun 2020 16:17:28 +0000 Subject: [PATCH 3/6] Switch log4cxx to use rcl_logging_interface. Signed-off-by: Chris Lalancette --- rcl_logging_log4cxx/CMakeLists.txt | 27 ++---- .../rcl_logging_log4cxx/logging_interface.h | 86 ------------------- .../rcl_logging_log4cxx/visibility_control.h | 54 ------------ rcl_logging_log4cxx/package.xml | 1 + .../rcl_logging_log4cxx.cpp | 17 +--- 5 files changed, 10 insertions(+), 175 deletions(-) delete mode 100644 rcl_logging_log4cxx/include/rcl_logging_log4cxx/logging_interface.h delete mode 100644 rcl_logging_log4cxx/include/rcl_logging_log4cxx/visibility_control.h diff --git a/rcl_logging_log4cxx/CMakeLists.txt b/rcl_logging_log4cxx/CMakeLists.txt index 0b903fd..afd1f83 100644 --- a/rcl_logging_log4cxx/CMakeLists.txt +++ b/rcl_logging_log4cxx/CMakeLists.txt @@ -14,11 +14,9 @@ endif() find_package(ament_cmake_ros REQUIRED) list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake") find_package(Log4cxx REQUIRED) +find_package(rcl_logging_interface REQUIRED) find_package(rcutils REQUIRED) -include_directories(include) - - if(NOT WIN32) add_compile_options(-Wall -Wextra -Wpedantic) else() @@ -29,22 +27,15 @@ else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4275 /wd4251") endif() -set(${PROJECT_NAME}_sources - src/rcl_logging_log4cxx/rcl_logging_log4cxx.cpp -) - -if(NOT WIN32) - add_library(${PROJECT_NAME} ${${PROJECT_NAME}_sources}) -else() - add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_sources}) -endif() +add_library(${PROJECT_NAME} src/rcl_logging_log4cxx/rcl_logging_log4cxx.cpp) ament_target_dependencies(${PROJECT_NAME} Log4cxx + rcl_logging_interface rcutils ) -target_compile_definitions(${PROJECT_NAME} PRIVATE "RCL_LOGGING_BUILDING_DLL") +target_compile_definitions(${PROJECT_NAME} PRIVATE "RCL_LOGGING_INTERFACE_BUILDING_DLL") if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) @@ -53,16 +44,12 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() endif() -install(TARGETS ${PROJECT_NAME} +install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) -install(DIRECTORY include/${PROJECT_NAME}/ - DESTINATION include/${PROJECT_NAME} -) - -ament_export_include_directories(include) -ament_export_dependencies(ament_cmake) +ament_export_dependencies(ament_cmake rcl_logging_interface rcutils) ament_export_libraries(${PROJECT_NAME} log4cxx) +ament_export_targets(${PROJECT_NAME}) ament_package() diff --git a/rcl_logging_log4cxx/include/rcl_logging_log4cxx/logging_interface.h b/rcl_logging_log4cxx/include/rcl_logging_log4cxx/logging_interface.h deleted file mode 100644 index e7f72ad..0000000 --- a/rcl_logging_log4cxx/include/rcl_logging_log4cxx/logging_interface.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2018 Open Source Robotics Foundation, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef RCL_LOGGING_LOG4CXX__LOGGING_INTERFACE_H_ -#define RCL_LOGGING_LOG4CXX__LOGGING_INTERFACE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "rcl_logging_log4cxx/visibility_control.h" - -typedef int rcl_logging_ret_t; - -/// Initialize log4cxx logging library. -/* - * \param[in] config_file The location of a config file that the external - * logging library should use to configure itself. - * If no config file is provided this will be set to an empty string. - * Must be a NULL terminated c string. - * \param[in] allocator The allocator to use for memory allocation. This is - * an rcutils_allocator_t rather than an rcl_allocator_t to ensure that the - * rcl_logging_* packages don't have a circular dependency back to rcl. - * \return RCL_LOGGING_RET_OK if initialized successfully, or - * \return RCL_LOGGING_RET_ERROR if an unspecified error occurs. - */ -RCL_LOGGING_PUBLIC -rcl_logging_ret_t rcl_logging_external_initialize( - const char * config_file, - rcutils_allocator_t allocator); - -/// Free the resources allocated for the log4cxx external logging system. -/** - * This puts the system into a state equivalent to being uninitialized. - * - * \return always RCL_LOGGING_RET_OK. - */ -RCL_LOGGING_PUBLIC -rcl_logging_ret_t rcl_logging_external_shutdown(); - -/// Log a message. -/** - * \param[in] severity The severity level of the message being logged. - * \param[in] name The name of the logger, must either be a null terminated - * c string or NULL. - * If NULL or empty the root logger will be used. - * \param[in] msg The message to be logged. Must be a null terminated c string. - */ -RCL_LOGGING_PUBLIC -void rcl_logging_external_log(int severity, const char * name, const char * msg); - -/// Set the severity level for a logger. -/** - * This function sets the severity level for the specified logger. - * If the name provided is an empty string or NULL it will change the level of - * the root logger. - * - * \param[in] name The name of the logger. - * Must be a NULL terminated c string or NULL. - * \param[in] level The severity level to be used for the specified logger. Values: - * RCUTILS_LOG_SEVERITY_DEBUG, RCUTILS_LOG_SEVERITY_UNSET, RCUTILS_LOG_SEVERITY_DEBUG, - * RCUTILS_LOG_SEVERITY_INFO, RCUTILS_LOG_SEVERITY_WARN, RCUTILS_LOG_SEVERITY_ERROR, - * RCUTILS_LOG_SEVERITY_FATAL - * \return always RCL_LOGGING_RET_OK. - */ -RCL_LOGGING_PUBLIC -RCUTILS_WARN_UNUSED -rcl_logging_ret_t rcl_logging_external_set_logger_level(const char * name, int level); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // RCL_LOGGING_LOG4CXX__LOGGING_INTERFACE_H_ diff --git a/rcl_logging_log4cxx/include/rcl_logging_log4cxx/visibility_control.h b/rcl_logging_log4cxx/include/rcl_logging_log4cxx/visibility_control.h deleted file mode 100644 index 2816f24..0000000 --- a/rcl_logging_log4cxx/include/rcl_logging_log4cxx/visibility_control.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018 Open Source Robotics Foundation, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef RCL_LOGGING_LOG4CXX__VISIBILITY_CONTROL_H_ -#define RCL_LOGGING_LOG4CXX__VISIBILITY_CONTROL_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined _WIN32 || defined __CYGWIN__ - #ifdef __GNUC__ - #define RCL_LOGGING_EXPORT __attribute__ ((dllexport)) - #define RCL_LOGGING_IMPORT __attribute__ ((dllimport)) - #else - #define RCL_LOGGING_EXPORT __declspec(dllexport) - #define RCL_LOGGING_IMPORT __declspec(dllimport) - #endif - #ifdef RCL_LOGGING_BUILDING_DLL - #define RCL_LOGGING_PUBLIC RCL_LOGGING_EXPORT - #else - #define RCL_LOGGING_PUBLIC RCL_LOGGING_IMPORT - #endif - #define RCL_LOGGING_PUBLIC_TYPE RCL_LOGGING_PUBLIC - #define RCL_LOGGING_LOCAL -#else - #define RCL_LOGGING_EXPORT __attribute__ ((visibility("default"))) - #define RCL_LOGGING_IMPORT - #if __GNUC__ >= 4 - #define RCL_LOGGING_PUBLIC __attribute__ ((visibility("default"))) - #define RCL_LOGGING_LOCAL __attribute__ ((visibility("hidden"))) - #else - #define RCL_LOGGING_PUBLIC - #define RCL_LOGGING_LOCAL - #endif - #define RCL_LOGGING_PUBLIC_TYPE -#endif - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // RCL_LOGGING_LOG4CXX__VISIBILITY_CONTROL_H_ diff --git a/rcl_logging_log4cxx/package.xml b/rcl_logging_log4cxx/package.xml index 2279e19..668d4a4 100644 --- a/rcl_logging_log4cxx/package.xml +++ b/rcl_logging_log4cxx/package.xml @@ -12,6 +12,7 @@ python3-empy log4cxx + rcl_logging_interface rcutils ament_cmake_gmock diff --git a/rcl_logging_log4cxx/src/rcl_logging_log4cxx/rcl_logging_log4cxx.cpp b/rcl_logging_log4cxx/src/rcl_logging_log4cxx/rcl_logging_log4cxx.cpp index ba69f52..3adf80c 100644 --- a/rcl_logging_log4cxx/src/rcl_logging_log4cxx/rcl_logging_log4cxx.cpp +++ b/rcl_logging_log4cxx/src/rcl_logging_log4cxx/rcl_logging_log4cxx.cpp @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include + #include #include #include @@ -62,17 +64,6 @@ static const log4cxx::LevelPtr map_external_log_level_to_library_level(int exter return level; } -#ifdef __cplusplus -extern "C" { -#endif - -#include "rcl_logging_log4cxx/logging_interface.h" - -#define RCL_LOGGING_RET_OK (0) -#define RCL_LOGGING_RET_ERROR (2) -#define RCL_LOGGING_RET_CONFIG_FILE_DOESNT_EXIST (21) -#define RCL_LOGGING_RET_CONFIG_FILE_INVALID (22) - rcl_logging_ret_t rcl_logging_external_initialize( const char * config_file, rcutils_allocator_t allocator) @@ -177,7 +168,3 @@ rcl_logging_ret_t rcl_logging_external_set_logger_level(const char * name, int l logger->setLevel(map_external_log_level_to_library_level(level)); return RCL_LOGGING_RET_OK; } - -#ifdef __cplusplus -} /* extern "C" */ -#endif From 1a271c9711520c3b2009a2abde5b7d256a4c0889 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Mon, 8 Jun 2020 13:00:31 +0000 Subject: [PATCH 4/6] Switch spdlog backend to use rcl_logging_interface. Signed-off-by: Chris Lalancette --- rcl_logging_spdlog/CMakeLists.txt | 16 ++-- .../rcl_logging_spdlog/logging_interface.h | 83 ------------------- .../rcl_logging_spdlog/visibility_control.h | 54 ------------ rcl_logging_spdlog/package.xml | 1 + rcl_logging_spdlog/src/rcl_logging_spdlog.cpp | 13 +-- .../test/test_logging_interface.cpp | 22 ++--- 6 files changed, 18 insertions(+), 171 deletions(-) delete mode 100644 rcl_logging_spdlog/include/rcl_logging_spdlog/logging_interface.h delete mode 100644 rcl_logging_spdlog/include/rcl_logging_spdlog/visibility_control.h diff --git a/rcl_logging_spdlog/CMakeLists.txt b/rcl_logging_spdlog/CMakeLists.txt index 31855ea..375fb89 100644 --- a/rcl_logging_spdlog/CMakeLists.txt +++ b/rcl_logging_spdlog/CMakeLists.txt @@ -12,8 +12,9 @@ if(NOT CMAKE_CXX_STANDARD) endif() find_package(ament_cmake_ros REQUIRED) +find_package(rcl_logging_interface REQUIRED) find_package(rcutils REQUIRED) -find_package(spdlog_vendor REQUIRED) # Provides spdlog 1.3.1 on platforms without it. +find_package(spdlog_vendor REQUIRED) # Provides spdlog on platforms without it. find_package(spdlog REQUIRED) if(NOT WIN32) @@ -21,27 +22,21 @@ if(NOT WIN32) endif() add_library(${PROJECT_NAME} src/rcl_logging_spdlog.cpp) -target_include_directories(${PROJECT_NAME} PUBLIC - "$" - "$") target_link_libraries(${PROJECT_NAME} spdlog::spdlog) ament_target_dependencies(${PROJECT_NAME} + rcl_logging_interface rcutils spdlog ) -target_compile_definitions(${PROJECT_NAME} PRIVATE "RCL_LOGGING_BUILDING_DLL") +target_compile_definitions(${PROJECT_NAME} PRIVATE "RCL_LOGGING_INTERFACE_BUILDING_DLL") install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) -install(DIRECTORY include/${PROJECT_NAME}/ - DESTINATION include/${PROJECT_NAME} -) - if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() @@ -55,8 +50,7 @@ if(BUILD_TESTING) endif() endif() -ament_export_include_directories(include) -ament_export_dependencies(ament_cmake rcutils spdlog_vendor spdlog) +ament_export_dependencies(ament_cmake rcl_logging_interface rcutils spdlog_vendor spdlog) ament_export_libraries(${PROJECT_NAME}) ament_export_targets(${PROJECT_NAME}) ament_package() diff --git a/rcl_logging_spdlog/include/rcl_logging_spdlog/logging_interface.h b/rcl_logging_spdlog/include/rcl_logging_spdlog/logging_interface.h deleted file mode 100644 index 3ee2902..0000000 --- a/rcl_logging_spdlog/include/rcl_logging_spdlog/logging_interface.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2019 Open Source Robotics Foundation, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef RCL_LOGGING_SPDLOG__LOGGING_INTERFACE_H_ -#define RCL_LOGGING_SPDLOG__LOGGING_INTERFACE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "rcl_logging_spdlog/visibility_control.h" - -typedef int rcl_logging_ret_t; - -/// Initialize spdlog logging library. -/* - * \param[in] config_file The location of a config file that the external - * logging library should use to configure itself. - * If no config file is provided this will be set to an empty string. - * Must be a NULL terminated c string. - * \param[in] allocator The allocator to use for memory allocation. This is - * an rcutils_allocator_t rather than an rcl_allocator_t to ensure that the - * rcl_logging_* packages don't have a circular dependency back to rcl. - * \return RCL_LOGGING_RET_OK if initialized successfully, or - * \return RCL_LOGGING_RET_ERROR if an unspecified error occurs. - */ -RCL_LOGGING_PUBLIC -rcl_logging_ret_t rcl_logging_external_initialize( - const char * config_file, - rcutils_allocator_t allocator); - -/// Free the resources allocated for the spdlog external logging system. -/** - * This puts the system into a state equivalent to being uninitialized. - * - * \return always RCL_LOGGING_RET_OK. - */ -RCL_LOGGING_PUBLIC -rcl_logging_ret_t rcl_logging_external_shutdown(); - -/// Log a message. -/** - * \param[in] severity The severity level of the message being logged. - * \param[in] name The name of the logger (unused). - * \param[in] msg The message to be logged. Must be a null terminated c string. - */ -RCL_LOGGING_PUBLIC -void rcl_logging_external_log(int severity, const char * name, const char * msg); - -/// Set the severity level for a logger. -/** - * This function sets the severity level for the specified logger. - * If the name provided is an empty string or NULL it will change the level of - * the root logger. - * - * \param[in] name The name of the logger (unused). - * \param[in] level The severity level to be used for the specified logger. Values: - * RCUTILS_LOG_SEVERITY_DEBUG, RCUTILS_LOG_SEVERITY_UNSET, RCUTILS_LOG_SEVERITY_DEBUG, - * RCUTILS_LOG_SEVERITY_INFO, RCUTILS_LOG_SEVERITY_WARN, RCUTILS_LOG_SEVERITY_ERROR, - * RCUTILS_LOG_SEVERITY_FATAL - * \return always RCL_LOGGING_RET_OK. - */ -RCL_LOGGING_PUBLIC -RCUTILS_WARN_UNUSED -rcl_logging_ret_t rcl_logging_external_set_logger_level(const char * name, int level); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // RCL_LOGGING_SPDLOG__LOGGING_INTERFACE_H_ diff --git a/rcl_logging_spdlog/include/rcl_logging_spdlog/visibility_control.h b/rcl_logging_spdlog/include/rcl_logging_spdlog/visibility_control.h deleted file mode 100644 index 2095ba8..0000000 --- a/rcl_logging_spdlog/include/rcl_logging_spdlog/visibility_control.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2019 Open Source Robotics Foundation, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef RCL_LOGGING_SPDLOG__VISIBILITY_CONTROL_H_ -#define RCL_LOGGING_SPDLOG__VISIBILITY_CONTROL_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined _WIN32 || defined __CYGWIN__ - #ifdef __GNUC__ - #define RCL_LOGGING_EXPORT __attribute__ ((dllexport)) - #define RCL_LOGGING_IMPORT __attribute__ ((dllimport)) - #else - #define RCL_LOGGING_EXPORT __declspec(dllexport) - #define RCL_LOGGING_IMPORT __declspec(dllimport) - #endif - #ifdef RCL_LOGGING_BUILDING_DLL - #define RCL_LOGGING_PUBLIC RCL_LOGGING_EXPORT - #else - #define RCL_LOGGING_PUBLIC RCL_LOGGING_IMPORT - #endif - #define RCL_LOGGING_PUBLIC_TYPE RCL_LOGGING_PUBLIC - #define RCL_LOGGING_LOCAL -#else - #define RCL_LOGGING_EXPORT __attribute__ ((visibility("default"))) - #define RCL_LOGGING_IMPORT - #if __GNUC__ >= 4 - #define RCL_LOGGING_PUBLIC __attribute__ ((visibility("default"))) - #define RCL_LOGGING_LOCAL __attribute__ ((visibility("hidden"))) - #else - #define RCL_LOGGING_PUBLIC - #define RCL_LOGGING_LOCAL - #endif - #define RCL_LOGGING_PUBLIC_TYPE -#endif - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // RCL_LOGGING_SPDLOG__VISIBILITY_CONTROL_H_ diff --git a/rcl_logging_spdlog/package.xml b/rcl_logging_spdlog/package.xml index 2f85677..9d2194e 100644 --- a/rcl_logging_spdlog/package.xml +++ b/rcl_logging_spdlog/package.xml @@ -13,6 +13,7 @@ spdlog_vendor spdlog + rcl_logging_interface rcutils spdlog_vendor diff --git a/rcl_logging_spdlog/src/rcl_logging_spdlog.cpp b/rcl_logging_spdlog/src/rcl_logging_spdlog.cpp index 86089e9..daa4cc3 100644 --- a/rcl_logging_spdlog/src/rcl_logging_spdlog.cpp +++ b/rcl_logging_spdlog/src/rcl_logging_spdlog.cpp @@ -29,14 +29,7 @@ #include "spdlog/spdlog.h" #include "spdlog/sinks/basic_file_sink.h" -#include "rcl_logging_spdlog/logging_interface.h" - -#define RCL_LOGGING_RET_OK (0) -#define RCL_LOGGING_RET_ERROR (2) - -#ifdef __cplusplus -extern "C" { -#endif +#include "rcl_logging_interface/rcl_logging_interface.h" static std::mutex g_logger_mutex; static std::unique_ptr g_root_logger = nullptr; @@ -174,7 +167,3 @@ rcl_logging_ret_t rcl_logging_external_set_logger_level(const char * name, int l return RCL_LOGGING_RET_OK; } - -#ifdef __cplusplus -} /* extern "C" */ -#endif diff --git a/rcl_logging_spdlog/test/test_logging_interface.cpp b/rcl_logging_spdlog/test/test_logging_interface.cpp index e1e9b83..477f652 100644 --- a/rcl_logging_spdlog/test/test_logging_interface.cpp +++ b/rcl_logging_spdlog/test/test_logging_interface.cpp @@ -25,7 +25,7 @@ #include "fixtures.hpp" #include "gtest/gtest.h" -#include "rcl_logging_spdlog/logging_interface.h" +#include "rcl_logging_interface/rcl_logging_interface.h" namespace fs = rcpputils::fs; @@ -86,11 +86,11 @@ static fs::path current_path() TEST_F(LoggingTest, init_invalid) { // Config files are not supported by spdlog - EXPECT_EQ(2, rcl_logging_external_initialize("anything", allocator)); + EXPECT_EQ(RCL_LOGGING_RET_ERROR, rcl_logging_external_initialize("anything", allocator)); rcutils_reset_error(); - EXPECT_EQ(2, rcl_logging_external_initialize(nullptr, bad_allocator)); + EXPECT_EQ(RCL_LOGGING_RET_ERROR, rcl_logging_external_initialize(nullptr, bad_allocator)); rcutils_reset_error(); - EXPECT_EQ(2, rcl_logging_external_initialize(nullptr, invalid_allocator)); + EXPECT_EQ(RCL_LOGGING_RET_ERROR, rcl_logging_external_initialize(nullptr, invalid_allocator)); rcutils_reset_error(); } @@ -102,7 +102,7 @@ TEST_F(LoggingTest, init_failure) // No home directory to write log to ASSERT_EQ(true, rcutils_set_env("HOME", nullptr)); ASSERT_EQ(true, rcutils_set_env("USERPROFILE", nullptr)); - EXPECT_EQ(2, rcl_logging_external_initialize(nullptr, allocator)); + EXPECT_EQ(RCL_LOGGING_RET_ERROR, rcl_logging_external_initialize(nullptr, allocator)); rcutils_reset_error(); // Force failure to create directories @@ -113,14 +113,14 @@ TEST_F(LoggingTest, init_failure) // ...fail to create .ros dir fs::path ros_dir = fake_home / ".ros"; std::fstream(ros_dir.string(), std::ios_base::out).close(); - EXPECT_EQ(2, rcl_logging_external_initialize(nullptr, allocator)); + EXPECT_EQ(RCL_LOGGING_RET_ERROR, rcl_logging_external_initialize(nullptr, allocator)); ASSERT_TRUE(fs::remove(ros_dir)); // ...fail to create .ros/log dir ASSERT_TRUE(fs::create_directories(ros_dir)); fs::path ros_log_dir = ros_dir / "log"; std::fstream(ros_log_dir.string(), std::ios_base::out).close(); - EXPECT_EQ(2, rcl_logging_external_initialize(nullptr, allocator)); + EXPECT_EQ(RCL_LOGGING_RET_ERROR, rcl_logging_external_initialize(nullptr, allocator)); ASSERT_TRUE(fs::remove(ros_log_dir)); ASSERT_TRUE(fs::remove(ros_dir)); @@ -129,14 +129,14 @@ TEST_F(LoggingTest, init_failure) TEST_F(LoggingTest, full_cycle) { - ASSERT_EQ(0, rcl_logging_external_initialize(nullptr, allocator)); + ASSERT_EQ(RCL_LOGGING_RET_OK, rcl_logging_external_initialize(nullptr, allocator)); // Make sure we can call initialize more than once - ASSERT_EQ(0, rcl_logging_external_initialize(nullptr, allocator)); + ASSERT_EQ(RCL_LOGGING_RET_OK, rcl_logging_external_initialize(nullptr, allocator)); std::stringstream expected_log; for (int level : logger_levels) { - EXPECT_EQ(0, rcl_logging_external_set_logger_level(nullptr, level)); + EXPECT_EQ(RCL_LOGGING_RET_OK, rcl_logging_external_set_logger_level(nullptr, level)); for (int severity : logger_levels) { std::stringstream ss; @@ -152,7 +152,7 @@ TEST_F(LoggingTest, full_cycle) } } - EXPECT_EQ(0, rcl_logging_external_shutdown()); + EXPECT_EQ(RCL_LOGGING_RET_OK, rcl_logging_external_shutdown()); std::string log_file_path = find_single_log().string(); std::ifstream log_file(log_file_path); From 04ebe64bc75d3f3dc049e9e9e4b86b3f4f58c5bf Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Mon, 8 Jun 2020 20:00:36 +0000 Subject: [PATCH 5/6] Feedback from review. Signed-off-by: Chris Lalancette --- .../include/rcl_logging_interface/visibility_control.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rcl_logging_interface/include/rcl_logging_interface/visibility_control.h b/rcl_logging_interface/include/rcl_logging_interface/visibility_control.h index 955cd06..ddb436c 100644 --- a/rcl_logging_interface/include/rcl_logging_interface/visibility_control.h +++ b/rcl_logging_interface/include/rcl_logging_interface/visibility_control.h @@ -16,8 +16,7 @@ #define RCL_LOGGING_INTERFACE__VISIBILITY_CONTROL_H_ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif // This logic was borrowed (then namespaced) from the examples on the gcc wiki: From 655ee72c778b6341e9a6c981b2138e6b23049cfa Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Mon, 8 Jun 2020 20:11:26 +0000 Subject: [PATCH 6/6] More fixes from review. Signed-off-by: Chris Lalancette --- rcl_logging_interface/QUALITY_DECLARATION.md | 185 +++++++++++++++++++ rcl_logging_noop/CMakeLists.txt | 3 +- 2 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 rcl_logging_interface/QUALITY_DECLARATION.md diff --git a/rcl_logging_interface/QUALITY_DECLARATION.md b/rcl_logging_interface/QUALITY_DECLARATION.md new file mode 100644 index 0000000..9b7ff36 --- /dev/null +++ b/rcl_logging_interface/QUALITY_DECLARATION.md @@ -0,0 +1,185 @@ +This document is a declaration of software quality for the `rcl_logging_interface` package, based on the guidelines in [REP-2004](https://github.com/ros-infrastructure/rep/blob/rep-2004/rep-2004.rst). + +# `rcl_logging_interface` Quality Declaration + +The package `rcl_logging_interface` claims to be in the **Quality Level 4** category. + +Below are the rationales, notes, and caveats for this claim, organized by each requirement listed in the [Package Quality Categories in REP-2004](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#package-quality-categories) of the ROS2 developer guide. + +## Version Policy [1] + +### Version Scheme [1.i] + +`rcl_logging_interface` uses `semver` according to the recommendation for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#versioning). + +### Version Stability [1.ii] + +Currently this package is at or above a stable version, i.e. `>= 1.0.0`. + +### Public API Declaration [1.iii] + +All symbols in the installed headers are considered part of the public API. + +All installed headers are in the [include](./include/rcl_logging_interface) directory of the package. + +### API Stability Policy [1.iv] + +`rcl_logging_interface` will not break public API within a released ROS distribution, i.e. no major releases once the ROS distribution is released. + +### ABI Stability Policy [1.v] + +`rcl_logging_interface` contains only header files, and thus ABI Stability does not apply to it. + +### ABI and ABI Stability Within a Released ROS Distribution [1.vi] + +`rcl_logging_interface` will not break API nor ABI within a released ROS distribution, i.e. no major releases once the ROS distribution is released. + +## Change Control Process [2] + +`rcl_logging_interface` follows the recommended guidelines for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#change-control-process). + +### Change Requests [2.i] + +All changes will occur through a pull request, check [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#change-control-process) for additional information. + +### Contributor Origin [2.ii] + +This package uses DCO as its confirmation of contributor origin policy. More information can be found in [CONTRIBUTING](../CONTRIBUTING.md) + +### Peer Review Policy [2.iii] + +Following the recommended guidelines in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#change-control-process) all pull requests must have at least 1 peer review. + +### Continuous Integration [2.iv] + +All pull requests must pass CI on all [tier 1 platforms](https://www.ros.org/reps/rep-2000.html#support-tiers) + +Currently nightly results can be seen here: +* [linux-aarch64_release](https://ci.ros2.org/view/nightly/job/nightly_linux-aarch64_release/lastBuild/testReport/rcl_logging_interface/) +* [linux_release](https://ci.ros2.org/view/nightly/job/nightly_linux_release/lastBuild/testReport/rcl_logging_interface`/) +* [mac_osx_release](https://ci.ros2.org/view/nightly/job/nightly_osx_release/lastBuild/testReport/rcl_logging_interface/) +* [windows_release](https://ci.ros2.org/view/nightly/job/nightly_win_rel/lastBuild/testReport/rcl_logging_interface/) + +### Documentation Policy [2.v] + +All pull requests must resolve related documentation changes before merging. + +## Documentation [3] + +### Feature Documentation [3.i] + +`rcl_logging_interface` does not have feature documentation. + +### Public API Documentation [3.ii] + +`rcl_logging_interface` does not have public API documentation. + +### License [3.iii] + +The license for `rcl_logging_interface` is Apache 2.0, and a summary is in each source file, the type is declared in the [`package.xml`](./package.xml) manifest file, and a full copy of the license is in the [`LICENSE`](../LICENSE) file. + +There is an automated test which runs a linter that ensures each file has a license statement. [Here](https://ci.ros2.org/view/nightly/job/nightly_linux_release/lastBuild/testReport/rcl_logging_interface/) can be found a list with the latest results of the various linters being run on the package. + +### Copyright Statements [3.iv] + +The copyright holders each provide a statement of copyright in each source code file in `rcl_logging_interface`. + +There is an automated test which runs a linter that ensures each file has at least one copyright statement. Latest linter result report can be seen [here](https://ci.ros2.org/view/nightly/job/nightly_linux_release/lastBuild/testReport/rcl_logging_interface/copyright/). + +## Testing [4] + +### Feature Testing [4.i] + +`rcl_logging_interface` does not include feature testing. + +### Public API Testing [4.ii] + +`rcl_logging_interface` does not include Public API testing. + +### Coverage [4.iii] + +`rcl_logging_interface` does not include tests, so coverage is not provided. + +### Performance [4.iv] + +`rcl_logging_interface` does not conduct performance tests. + +### Linters and Static Analysis [4.v] + +`rcl_logging_interface` uses and passes all the standard linters and static analysis tools for a C package as described in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#linters-and-static-analysis). Passing implies there are no linter/static errors when testing against CI of supported platforms. + +Currently nightly results can be seen here: +* [linux-aarch64_release](https://ci.ros2.org/view/nightly/job/nightly_linux-aarch64_release/lastBuild/testReport/rcl_logging_interface/) +* [linux_release](https://ci.ros2.org/view/nightly/job/nightly_linux_release/lastBuild/testReport/rcl_logging_interface/) +* [mac_osx_release](https://ci.ros2.org/view/nightly/job/nightly_osx_release/lastBuild/testReport/rcl_logging_interface/) +* [windows_release](https://ci.ros2.org/view/nightly/job/nightly_win_rel/lastBuild/testReport/rcl_logging_interface/) + +## Dependencies [5] + +Below are evaluations of each of `rcl_logging_interface`'s run-time and build-time dependencies that have been determined to influence the quality. + +`rcl_logging_interface` depends on the ROS package `rcutils`. + +`rcutils` was declared to be Quality Level 4 [here](https://github.com/ros2/rcutils/blob/master/QUALITY_DECLARATION.md). + +### Optional Direct Runtime ROS Dependencies [5.ii] + +`rcl_logging_interface` has no optional Direct Runtime ROS dependencies that need to be considered for this declaration. + +### Direct Runtime non-ROS Dependency [5.iii] + +`rcl_logging_spdlog` has no Direct Runtime non-ROS dependencies that need to be considered for this declaration. + +## Platform Support [6] + +`rcl_logging_interface` supports all of the tier 1 platforms as described in [REP-2000](https://www.ros.org/reps/rep-2000.html#support-tiers), and tests each change against all of them. + +## Security [7] + +### Vulnerability Disclosure Policy [7.i] + +This package conforms to the Vulnerability Disclosure Policy in [REP-2006](https://www.ros.org/reps/rep-2006.html). + +# Current status Summary + +The chart below compares the requirements in the REP-2004 with the current state of the `rcl` package. + +|Number| Requirement| Current state | +|--|--|--| +|1| **Version policy** |---| +|1.i|Version Policy available | ✓ | +|1.ii|Stable version | ☓ | +|1.iii|Declared public API | ✓ | +|1.iv|API stability policy | ✓ | +|1.v|ABI stability policy | ✓ | +|1.vi_|API/ABI stable within ros distribution | ✓ | +|2| **Change control process** |---| +|2.i| All changes occur on change request | ✓ | +|2.ii| Contributor origin (DCO, CLA, etc) | ✓ | +|2.iii| Peer review policy | ✓ | +|2.iv| CI policy for change requests | ✓ | +|2.v| Documentation policy for change requests | ✓ | +|3| **Documentation** | --- | +|3.i| Per feature documentation | ☓ | +|3.ii| Per public API item documentation | ☓ | +|3.iii| Declared License(s) | ✓ | +|3.iv| Copyright in source files| ✓ | +|3.v.a| Quality declaration linked to README | ✓ | +|3.v.b| Centralized declaration available for peer review | ✓ | +|4| Testing | --- | +|4.i| Feature items tests | ☓ | +|4.ii| Public API tests | ☓ | +|4.iii.a| Using coverage | ☓ | +|4.iii.a| Coverage policy | ☓ | +|4.iv.a| Performance tests (if applicable) | ☓ | +|4.iv.b| Performance tests policy| ✓ | +|4.v.a| Code style enforcement (linters)| ✓ | +|4.v.b| Use of static analysis tools | ✓ | +|5| Dependencies | --- | +|5.i| Must not have ROS lower level dependencies | ✓ | +|5.ii| Optional ROS lower level dependencies | ✓ | +|5.iii| Justifies quality use of non-ROS dependencies | ✓ | +|6| Platform support | --- | +|6.i| Support targets Tier1 ROS platforms | ✓ | +|7| Security | --- | +|7.i| Vulnerability Disclosure Policy | ✓ | diff --git a/rcl_logging_noop/CMakeLists.txt b/rcl_logging_noop/CMakeLists.txt index c46bb44..71c184b 100644 --- a/rcl_logging_noop/CMakeLists.txt +++ b/rcl_logging_noop/CMakeLists.txt @@ -37,7 +37,7 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() endif() -install(TARGETS ${PROJECT_NAME} +install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) @@ -45,4 +45,5 @@ install(TARGETS ${PROJECT_NAME} ament_export_dependencies(ament_cmake rcl_logging_interface rcutils) ament_export_libraries(${PROJECT_NAME}) +ament_export_targets(${PROJECT_NAME}) ament_package()