From 1cd9f577c08b8fa6567055a1193c5b9a948ba3d0 Mon Sep 17 00:00:00 2001 From: bergmann Date: Tue, 25 Jun 2019 01:05:46 +0200 Subject: [PATCH] * Update cmake project structure * Replaced cpputils with cppcore and cpplogging library --- .gitmodules | 3 + CMakeLists.txt | 67 +++++++++--- cmake/Findcpputils.cmake | 46 -------- cmake/Findrabbitmq.cmake | 33 ------ cmake/config.h.in | 16 +++ cmake/cppamqp-config.cmake | 10 ++ cmake/cppamqp-var.cmake | 31 ++++++ cmake/modules | 2 +- cmake/options.cmake | 6 -- include/cppamqp/config.h | 4 - include/cppamqp/enums.h | 10 +- include/cppamqp/exception.h | 6 +- include/cppamqp/exception.inl | 8 +- include/cppamqp/publish_options.h | 30 +++--- src/CMakeLists.txt | 167 ++++++++++++++++++++++++------ src/cppamqp/channel.cpp | 4 +- src/cppamqp/connection.cpp | 6 +- src/cppamqp/helper.cpp | 8 +- src/cppamqp/publish_options.cpp | 2 +- test/CMakeLists.txt | 65 +++++++----- test/{ => cppamqp}/amqp.cpp | 0 test/{ => cppamqp}/mock.cpp | 5 +- test/{ => cppamqp}/mock.h | 3 +- 23 files changed, 330 insertions(+), 202 deletions(-) delete mode 100644 cmake/Findcpputils.cmake delete mode 100644 cmake/Findrabbitmq.cmake create mode 100644 cmake/config.h.in create mode 100644 cmake/cppamqp-config.cmake create mode 100644 cmake/cppamqp-var.cmake delete mode 100644 cmake/options.cmake delete mode 100644 include/cppamqp/config.h rename test/{ => cppamqp}/amqp.cpp (100%) rename test/{ => cppamqp}/mock.cpp (94%) rename test/{ => cppamqp}/mock.h (94%) diff --git a/.gitmodules b/.gitmodules index a89889c..51e2759 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "cmake/modules"] path = cmake/modules url = b3rgmann@git.bergmann89.de:cpp/CmakeModules.git +[submodule "/home/bergmann/projects/TotoStarOnline/projects/worker/cppamqp/cmake/modules"] + path = /home/bergmann/projects/TotoStarOnline/projects/worker/cppamqp/cmake/modules + url = b3rgmann@git.bergmann89.de:cpp/CmakeModules.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 1de3577..d8030ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,56 @@ # Initialize CMake ################################################################################ -CMake_Minimum_Required ( VERSION 3.5.1 FATAL_ERROR ) -Include ( CTest ) -If ( NOT CMAKE_BUILD_TYPE ) - Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) -EndIf ( NOT CMAKE_BUILD_TYPE ) -Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/" ) - -# Projects ######################################################################################## - -Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) -Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) +CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) + +# Set CMAKE_BUILD_TYPE +If ( NOT CMAKE_BUILD_TYPE ) + Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) +EndIf ( NOT CMAKE_BUILD_TYPE ) +Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) + +# Set CMAKE_MODULE_PATH +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) +EndIf ( ) +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ) +EndIf ( ) + +# Project ######################################################################################### + +Include ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppamqp-var.cmake" ) +Project ( cppamqp + DESCRIPTION "A simple library" + VERSION "${CPPAMQP_VERSION}" ) +Include ( CTest ) +Include ( GNUInstallDirs ) + +# Subdirectories +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) + +# Install +Include ( CMakePackageConfigHelpers ) +Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppamqp-config-version.cmake" + VERSION ${CPPAMQP_VERSION} + COMPATIBILITY AnyNewerVersion ) +Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppamqp-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppamqp-config.cmake" + @ONLY ) + +Set ( ConfigPackageLocation "${CPPAMQP_INSTALL_DIR_SHARE}/cmake" ) +Install ( EXPORT + cppamqp + NAMESPACE + cppamqp:: + DESTINATION + ${ConfigPackageLocation} ) +Install ( FILES + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppamqp-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cppamqp-config-version.cmake" + DESTINATION + ${ConfigPackageLocation} + COMPONENT + Devel ) diff --git a/cmake/Findcpputils.cmake b/cmake/Findcpputils.cmake deleted file mode 100644 index 1fac201..0000000 --- a/cmake/Findcpputils.cmake +++ /dev/null @@ -1,46 +0,0 @@ -Include ( ExternalProject ) -Include ( FindPackageHandleStandardArgs ) - -Set ( CPPUTILS_PATH ${CMAKE_BINARY_DIR}/extern/cpputils ) - -If ( NOT TARGET cpputils_extern ) - ExternalProject_Add ( cpputils_extern - PREFIX ${CPPUTILS_PATH} - TMP_DIR ${CPPUTILS_PATH}/tmp - STAMP_DIR ${CPPUTILS_PATH}/stamp - SOURCE_DIR ${CPPUTILS_PATH}/src - BINARY_DIR ${CPPUTILS_PATH}/build - INSTALL_DIR ${CPPUTILS_PATH}/install - GIT_REPOSITORY "https://git.bergmann89.de/cpp/cpputils.git" - GIT_TAG "master" - TEST_COMMAND make test - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= - -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}) -EndIf ( ) - -Set ( CPPUTILS_LIBRARY ${CPPUTILS_PATH}/install/lib/libcpputils.so ) -Set ( CPPUTILS_INCLUDE_DIR ${CPPUTILS_PATH}/install/include ) -Set ( CPPUTILS_LIBRARIES ${CPPUTILS_LIBRARY} ) -Set ( CPPUTILS_INCLUDE_DIRS ${CPPUTILS_INCLUDE_DIR} ) - -File ( MAKE_DIRECTORY ${CPPUTILS_INCLUDE_DIR} ) - -Find_Package_Handle_Standard_Args ( cpputils DEFAULT_MSG - CPPUTILS_LIBRARY - CPPUTILS_INCLUDE_DIR ) - -If ( NOT TARGET cpputils ) - Add_Library ( cpputils SHARED IMPORTED ) - Add_Dependencies ( cpputils cpputils_extern ) - Set_Property ( TARGET cpputils - PROPERTY IMPORTED_LOCATION ${CPPUTILS_LIBRARY} ) - Set_Property ( TARGET cpputils - PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CPPUTILS_INCLUDE_DIRS} ) - Install ( FILES ${CPPUTILS_LIBRARY} DESTINATION lib ) - If ( CPPHIBERNATE_INSTALL_DEV_FILES ) - Install ( DIRECTORY ${CPPUTILS_INCLUDE_DIR}/ DESTINATION include ) - EndIf ( ) -EndIf ( ) \ No newline at end of file diff --git a/cmake/Findrabbitmq.cmake b/cmake/Findrabbitmq.cmake deleted file mode 100644 index 1fe2708..0000000 --- a/cmake/Findrabbitmq.cmake +++ /dev/null @@ -1,33 +0,0 @@ -Find_Library ( RABBITMQ_LIBRARY - NAMES rabbitmq - PATH_SUFFIXES rabbitmq ) - -Find_File ( RABBITMQ_INCLUDE_DIR - NAMES amqp.h ) - -Get_Filename_Component ( RABBITMQ_INCLUDE_DIR - ${RABBITMQ_INCLUDE_DIR} - DIRECTORY ) - -Include ( FindPackageHandleStandardArgs ) - -Find_Package_Handle_Standard_Args ( rabbitmq DEFAULT_MSG - RABBITMQ_LIBRARY - RABBITMQ_INCLUDE_DIR ) - -Mark_As_Advanced ( RABBITMQ_LIBRARY - RABBITMQ_LIBRARIES ) - -If ( RABBITMQ_FOUND ) - Set ( RABBITMQ_LIBRARIES ${RABBITMQ_LIBRARY} ) - Set ( RABBITMQ_INCLUDE_DIRS ${RABBITMQ_INCLUDE_DIR} ) - - If ( NOT TARGET rabbitmq ) - Add_Library ( rabbitmq UNKNOWN IMPORTED ) - Set_Property ( TARGET rabbitmq - PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${RABBITMQ_INCLUDE_DIRS}" ) - Set_Property ( TARGET rabbitmq - APPEND - PROPERTY IMPORTED_LOCATION "${RABBITMQ_LIBRARY}") - EndIf ( ) -EndIf ( ) diff --git a/cmake/config.h.in b/cmake/config.h.in new file mode 100644 index 0000000..c67d625 --- /dev/null +++ b/cmake/config.h.in @@ -0,0 +1,16 @@ +#pragma once + +#include +#include + +#cmakedefine CPPAMQP_HAS_CPPLOGGING + +#ifdef CPPAMQP_HAS_CPPLOGGING + #include + #define cppamqp_log(p_level) \ + cpplogging_global_log(p_level) +#else + #include + #define cppamqp_log(p_level) \ + ::std::cout << #p_level << ' ' << __FILE__ << ':' << __LINE__ << " - " +#endif diff --git a/cmake/cppamqp-config.cmake b/cmake/cppamqp-config.cmake new file mode 100644 index 0000000..86160cd --- /dev/null +++ b/cmake/cppamqp-config.cmake @@ -0,0 +1,10 @@ +# cppamqp-config.cmake - package configuration file + +Message ( WARNING "Please configure the dependencies of this package!" ) +# Include ( CMakeFindDependencyMacro ) +# Find_Dependency ( ) + +Include ( FindPackageHandleStandardArgs ) +Set ( ${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE} ) +Find_Package_Handle_Standard_Args ( cppamqp CONFIG_MODE ) +Include ( "${CMAKE_CURRENT_LIST_DIR}/cppamqp.cmake") diff --git a/cmake/cppamqp-var.cmake b/cmake/cppamqp-var.cmake new file mode 100644 index 0000000..5034e8d --- /dev/null +++ b/cmake/cppamqp-var.cmake @@ -0,0 +1,31 @@ +# Version +Set ( CPPAMQP_VERSION_MAJOR 1 ) +Set ( CPPAMQP_VERSION_MINOR 0 ) +Set ( CPPAMQP_VERSION_PATCH 0 ) +Set ( CPPAMQP_VERSION_BUILD 0 ) +Set ( CPPAMQP_VERSION_SHORT "${CPPAMQP_VERSION_MAJOR}.${CPPAMQP_VERSION_MINOR}" ) +Set ( CPPAMQP_VERSION "${CPPAMQP_VERSION_SHORT}.${CPPAMQP_VERSION_PATCH}.${CPPAMQP_VERSION_BUILD}" ) +Set ( CPPAMQP_NAME "cppamqp-${CPPAMQP_VERSION_SHORT}" ) +Set ( CPPAMQP_OUTPUTNAME "cppamqp" ) + +# Install directories +Set ( CPPAMQP_INSTALL_DIR_INCLUDE "include/${CPPAMQP_NAME}" ) +Set ( CPPAMQP_INSTALL_DIR_LIB "lib" ) +Set ( CPPAMQP_INSTALL_DIR_SHARE "share/${CPPAMQP_NAME}" ) + +# C Standard +Set ( CMAKE_C_STANDARD 11 ) +Set ( CMAKE_CXX_STANDARD 17 ) +Set ( CMAKE_C_STANDARD_REQUIRED ON ) +Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) + +# Git Version +Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) +If ( HAS_GIT_HELPER ) + GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. + CPPAMQP_VERSION_MAJOR + CPPAMQP_VERSION_MINOR + CPPAMQP_VERSION_PATCH + CPPAMQP_VERSION_BUILD + CPPAMQP_VERSION_HASH ) +EndIf ( ) diff --git a/cmake/modules b/cmake/modules index b125a1a..1a32531 160000 --- a/cmake/modules +++ b/cmake/modules @@ -1 +1 @@ -Subproject commit b125a1a176ae0aada1cd2ec90919061d202dcea9 +Subproject commit 1a32531aef2deeebd5637b1873bc4e976628801c diff --git a/cmake/options.cmake b/cmake/options.cmake deleted file mode 100644 index 9269cbf..0000000 --- a/cmake/options.cmake +++ /dev/null @@ -1,6 +0,0 @@ -Option ( CPPAMQP_BUILD_SHARED - "Build cppamqp shared library" - ON ) -Option ( CPPAMQP_INSTALL_DEV_FILES - "Install development files of cppamqp" - ON ) \ No newline at end of file diff --git a/include/cppamqp/config.h b/include/cppamqp/config.h deleted file mode 100644 index 04cc552..0000000 --- a/include/cppamqp/config.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -#include -#include \ No newline at end of file diff --git a/include/cppamqp/enums.h b/include/cppamqp/enums.h index 24f7a98..bafab29 100644 --- a/include/cppamqp/enums.h +++ b/include/cppamqp/enums.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include namespace cppamqp { @@ -28,14 +28,14 @@ namespace cppamqp exclusive, auto_delete, }; - using queue_flags = utl::shifted_flags; + using queue_flags = ::cppcore::shifted_flags; enum class publish_flag { mandatory, immediate, }; - using publish_flags = utl::shifted_flags; + using publish_flags = ::cppcore::shifted_flags; enum class consume_flag { @@ -43,6 +43,6 @@ namespace cppamqp no_ack, exclusive, }; - using consume_flags = utl::shifted_flags; + using consume_flags = ::cppcore::shifted_flags; -} \ No newline at end of file +} diff --git a/include/cppamqp/exception.h b/include/cppamqp/exception.h index 389e574..dedbf35 100644 --- a/include/cppamqp/exception.h +++ b/include/cppamqp/exception.h @@ -3,13 +3,13 @@ #include #include #include -#include +#include namespace cppamqp { struct exception - : public utl::exception + : public ::cppcore::exception { amqp_status_enum status { AMQP_STATUS_OK }; @@ -18,4 +18,4 @@ namespace cppamqp inline exception(const std::string& p_message, amqp_status_enum p_status); }; -} \ No newline at end of file +} diff --git a/include/cppamqp/exception.inl b/include/cppamqp/exception.inl index f440994..e8445d3 100644 --- a/include/cppamqp/exception.inl +++ b/include/cppamqp/exception.inl @@ -6,18 +6,18 @@ namespace cppamqp { exception::exception(const std::string& p_message) : - utl::exception (p_message) + ::cppcore::exception (p_message) { } exception::exception(amqp_status_enum p_status) : - utl::exception (amqp_error_string2(p_status)), + ::cppcore::exception (amqp_error_string2(p_status)), status (p_status) { } exception::exception(const std::string& p_message, amqp_status_enum p_status) : - utl::exception (p_message + " - " + amqp_error_string2(p_status) + + ::cppcore::exception (p_message + " - " + amqp_error_string2(p_status) + "(" + std::to_string(static_cast(p_status)) + ")"), status (p_status) { } -} \ No newline at end of file +} diff --git a/include/cppamqp/publish_options.h b/include/cppamqp/publish_options.h index c9cc750..79c0e1e 100644 --- a/include/cppamqp/publish_options.h +++ b/include/cppamqp/publish_options.h @@ -2,7 +2,7 @@ #include #include -#include +#include namespace cppamqp { @@ -15,19 +15,19 @@ namespace cppamqp mutable amqp_basic_properties_t _properties; public: - utl::nullable content_type; - utl::nullable content_encoding; - utl::nullable delivery_mode; - utl::nullable priority; - utl::nullable correlation_id; - utl::nullable reply_to; - utl::nullable expiration; - utl::nullable message_id; - utl::nullable timestamp; - utl::nullable type; - utl::nullable user_id; - utl::nullable app_id; - utl::nullable cluster_id; + ::cppcore::nullable content_type; + ::cppcore::nullable content_encoding; + ::cppcore::nullable delivery_mode; + ::cppcore::nullable priority; + ::cppcore::nullable correlation_id; + ::cppcore::nullable reply_to; + ::cppcore::nullable expiration; + ::cppcore::nullable message_id; + ::cppcore::nullable timestamp; + ::cppcore::nullable type; + ::cppcore::nullable user_id; + ::cppcore::nullable app_id; + ::cppcore::nullable cluster_id; inline publish_options(); inline publish_options(const amqp_basic_properties_t& prop); @@ -38,4 +38,4 @@ namespace cppamqp void reset (); }; -} \ No newline at end of file +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c0f1f9d..5f5594f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,48 +1,147 @@ # Initialize ###################################################################################### -Include ( cotire OPTIONAL ) -Include ( pedantic OPTIONAL ) -Include ( strip_symbols OPTIONAL ) +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/options.cmake ) +Option ( CPPAMQP_INSTALL_HEADER + "Install headers of cppamqp." + ON ) +Option ( CPPAMQP_INSTALL_STATIC + "Install static library of cppamqp." + ON ) +Option ( CPPAMQP_INSTALL_SHARED + "Install shared library of cppamqp." + ON ) +Option ( CPPAMQP_INSTALL_DEBUG + "Install the stripped debug informations of cppamqp." + OFF ) +Option ( CPPAMQP_NO_STRIP + "Do not strip debug symbols from binary." + OFF ) -Set ( BUILD_SHARED_LIBS ${CPPAMQP_BUILD_SHARED} ) -Set ( CMAKE_CXX_STANDARD 17 ) -Set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PEDANTIC_C_FLAGS}" ) -Set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PEDANTIC_CXX_FLAGS}" ) - -# Dependencies #################################################################################### - -Find_Package ( cpputils REQUIRED ) Find_Package ( rabbitmq REQUIRED ) +Find_Package ( cppcore REQUIRED ) +Find_Package ( cpplogging ) +If ( cpplogging_FOUND ) + Set ( CPPAMQP_HAS_CPPLOGGING true ) +EndIf ( ) -# Project: cppamqp ############################################################################### +# Object Library ################################################################################## -# Build -Project ( cppamqp VERSION 1.0.0.0 LANGUAGES CXX ) +Set ( CMAKE_POSITION_INDEPENDENT_CODE ON ) Set ( CPPAMQP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) -File ( GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) -Add_Library ( cppamqp ${SOURCE_FILES} ) -Target_Include_Directories ( cppamqp - PUBLIC ${CPPAMQP_INCLUDE_DIR} ) -Target_Link_Libraries ( cppamqp - cpputils - rabbitmq ) +Set ( CPPAMQP_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include ) +Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in + ${CPPAMQP_GENERATED_INCLUDE_DIR}/cppamqp/config.h ) +File ( GLOB_RECURSE CPPAMQP_HEADER_FILES ${CPPAMQP_INCLUDE_DIR}/*.h ) +File ( GLOB_RECURSE CPPAMQP_INLINE_FILES ${CPPAMQP_INCLUDE_DIR}/*.inl ) +File ( GLOB_RECURSE CPPAMQP_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) +Add_Library ( cppamqp-objects + OBJECT + ${CPPAMQP_HEADER_FILES} + ${CPPAMQP_INLINE_FILES} + ${CPPAMQP_SOURCE_FILES} ) +Target_Include_Directories ( cppamqp-objects + PUBLIC + $ + $ + $ ) +Target_Link_Libraries ( cppamqp-objects + PUBLIC + cppcore::cppcore ) +If ( CPPAMQP_HAS_CPPLOGGING ) + Target_Link_Libraries ( cppamqp-objects + PUBLIC + cpplogging::cpplogging-shared ) +EndIf ( ) + +# Static Library ################################################################################## + +Add_Library ( cppamqp-static STATIC $ ) +Set_Target_Properties ( cppamqp-static + PROPERTIES + OUTPUT_NAME "${CPPAMQP_OUTPUTNAME}" + VERSION ${CPPAMQP_VERSION} ) +Target_Include_Directories ( cppamqp-static + PUBLIC + $ + $ + $ ) +If ( CPPAMQP_HAS_CPPLOGGING ) + Target_Link_Libraries ( cppamqp-static + PUBLIC + rabbitmq::rabbitmq-static + cpplogging::cpplogging-static ) +EndIf ( ) + +# Shared Library ################################################################################## + +Add_Library ( cppamqp-shared SHARED $ ) +Set_Target_Properties ( cppamqp-shared + PROPERTIES + OUTPUT_NAME "${CPPAMQP_OUTPUTNAME}" + VERSION ${CPPAMQP_VERSION} + SOVERSION ${CPPAMQP_VERSION_SHORT} ) +Target_Include_Directories ( cppamqp-shared + PUBLIC + $ + $ + $ ) +If ( CPPAMQP_HAS_CPPLOGGING ) + Target_Link_Libraries ( cppamqp-shared + PUBLIC + rabbitmq::rabbitmq-shared + cpplogging::cpplogging-shared ) +EndIf ( ) + +# Optimization #################################################################################### + +# pedantic +If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( cppamqp-objects ALL ) + Pedantic_Apply_Flags_Target ( cppamqp-static ALL ) + Pedantic_Apply_Flags_Target ( cppamqp-shared ALL ) +EndIf ( ) + +# cotire +If ( HAS_COTIRE ) + Cotire ( cppamqp-objects ) + Cotire ( cppamqp-static ) + Cotire ( cppamqp-shared ) +EndIf ( ) + +# Install ######################################################################################### + +# Header +If ( CPPAMQP_INSTALL_HEADER ) + Install ( FILES ${CPPAMQP_INCLUDE_DIR}/cppamqp.h + DESTINATION ${CPPAMQP_INSTALL_DIR_INCLUDE} ) + Install ( DIRECTORY ${CPPAMQP_INCLUDE_DIR}/cppamqp + DESTINATION ${CPPAMQP_INSTALL_DIR_INCLUDE} ) + Install ( DIRECTORY ${CPPAMQP_GENERATED_INCLUDE_DIR}/cppamqp + DESTINATION ${CPPAMQP_INSTALL_DIR_INCLUDE} ) +EndIf ( ) -# Install -If ( BUILD_SHARED_LIBS OR CPPAMQP_INSTALL_DEV_FILES ) - Install ( TARGETS cppamqp DESTINATION lib ) +# Static +If ( CPPAMQP_INSTALL_STATIC ) + Install ( TARGETS cppamqp-static + EXPORT cppamqp + DESTINATION ${CPPAMQP_INSTALL_DIR_LIB} ) EndIf ( ) -If ( CPPAMQP_INSTALL_DEV_FILES ) - Install ( FILES ${CPPAMQP_INCLUDE_DIR}/cppamqp.h DESTINATION include ) - Install ( DIRECTORY ${CPPAMQP_INCLUDE_DIR}/cppamqp DESTINATION include ) +# Shared +If ( CPPAMQP_INSTALL_SHARED ) + Install ( TARGETS cppamqp-shared + EXPORT cppamqp + DESTINATION ${CPPAMQP_INSTALL_DIR_LIB} ) EndIf ( ) -# Optimize -If ( __COTIRE_INCLUDED ) - Cotire ( cppamqp ) +# Debug +If ( HAS_STRIP_SYMBOLS AND NOT CPPAMQP_NO_STRIP ) + Strip_Symbols ( cppamqp-shared CPPAMQP_DBG_FILE ) + If ( CPPAMQP_INSTALL_DEBUG ) + Install ( FILES ${CPPAMQP_DBG_FILE} + DESTINATION ${CPPAMQP_INSTALL_DIR_LIB} ) + EndIf ( ) EndIf ( ) -If ( __STRIP_SYMBOLS_INCLUDED AND BUILD_SHARED_LIBS ) - Strip_Symbols ( cppamqp DBG_FILE ) -EndIf () diff --git a/src/cppamqp/channel.cpp b/src/cppamqp/channel.cpp index e204b53..30bc0ed 100644 --- a/src/cppamqp/channel.cpp +++ b/src/cppamqp/channel.cpp @@ -11,7 +11,7 @@ channel::internal::internal(const cppamqp::connection& p_connection, channel_num , handle (p_handle) { if (handle <= 0) - throw utl::argument_exception("handle", "handle must be greater than 0"); + throw ::cppcore::argument_exception("handle", "handle must be greater than 0"); amqp_channel_open(connection.handle(), handle); __impl::check_and_raise( amqp_get_rpc_reply(connection.handle()), @@ -152,4 +152,4 @@ void channel::close(int status) false); _internal->handle = 0; _internal.reset(); -} \ No newline at end of file +} diff --git a/src/cppamqp/connection.cpp b/src/cppamqp/connection.cpp index 88578f2..2d813b4 100644 --- a/src/cppamqp/connection.cpp +++ b/src/cppamqp/connection.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -100,7 +100,7 @@ channel connection::open_channel(channel_number c) consume_result connection::consume_message(const std::chrono::milliseconds& timeout) { - ::timeval tv = utl::duration_cast<::timeval>(timeout); + ::timeval tv = ::cppcore::duration_cast<::timeval>(timeout); internal_envelope envelope; amqp_maybe_release_buffers(handle()); auto ret = amqp_consume_message( @@ -163,4 +163,4 @@ void connection::close(int status, bool force) _internal->auto_close = false; _internal->reply_code = status; _internal.reset(); -} \ No newline at end of file +} diff --git a/src/cppamqp/helper.cpp b/src/cppamqp/helper.cpp index 8af2999..aba6065 100644 --- a/src/cppamqp/helper.cpp +++ b/src/cppamqp/helper.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include void ::cppamqp::__impl::check_and_raise(int returnCode, std::string msg, bool logOnly) { @@ -11,7 +11,7 @@ void ::cppamqp::__impl::check_and_raise(int returnCode, std::string msg, bool lo if (!msg.empty()) msg += " - "; msg += amqp_error_string2(returnCode); - log_global_message(error, msg); + cppamqp_log(error) << msg; } else throw cppamqp::exception(msg, static_cast(returnCode)); @@ -30,7 +30,7 @@ void ::cppamqp::__impl::check_and_raise(const amqp_rpc_reply_t& reply, std::stri msg += " - "; msg += std::string("Server error: ID=") + std::to_string(reply.reply.id); if (logOnly) { - log_global_message(error, msg); + cppamqp_log(error) << msg; } else { throw cppamqp::exception(msg); } @@ -47,7 +47,7 @@ void ::cppamqp::__impl::check_and_raise(const amqp_rpc_reply_t& reply, std::stri msg += " - "; msg += "unknown reply"; if (logOnly) { - log_global_message(error, msg); + cppamqp_log(error) << msg; } else { throw cppamqp::exception(msg); } diff --git a/src/cppamqp/publish_options.cpp b/src/cppamqp/publish_options.cpp index 5cdd6de..0d926bb 100644 --- a/src/cppamqp/publish_options.cpp +++ b/src/cppamqp/publish_options.cpp @@ -12,7 +12,7 @@ inline amqp_bytes_t simpleConvert(const std::string& { return __impl::make_bytes(value); } template -inline void addProperty(amqp_basic_properties_t& properties, amqp_flags_t flag, T amqp_basic_properties_t::*member, const utl::nullable& value) +inline void addProperty(amqp_basic_properties_t& properties, amqp_flags_t flag, T amqp_basic_properties_t::*member, const ::cppcore::nullable& value) { if (value) { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3bcaf0b..902c23b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,30 +1,43 @@ # Initialize ###################################################################################### -Include ( cotire OPTIONAL ) -Include ( pedantic OPTIONAL ) -Include ( cmake_tests OPTIONAL ) - -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/options.cmake ) - -Set ( CMAKE_CXX_STANDARD 17 ) -Set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PEDANTIC_C_FLAGS}" ) -Set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PEDANTIC_CXX_FLAGS}" ) - -# Project: test_cppamqp ########################################################################## - -Project ( test_cppamqp ) -File ( GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) -Add_Executable ( test_cppamqp EXCLUDE_FROM_ALL ${SOURCE_FILES} ) -Target_Link_Libraries ( test_cppamqp - cppamqp - gmock_main - gmock - gtest - pthread ) -If ( __COTIRE_INCLUDED ) - Cotire ( test_cppamqp ) +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) + +# Test ############################################################################################ + +Find_Package ( GTest ) +If ( NOT "${GTest_FOUND}" ) + Return ( ) EndIf ( ) -If ( __CMAKE_TESTS_INCLUDED ) - Add_CMake_Test ( NAME cppamqp - TARGET test_cppamqp ) + +File ( GLOB_RECURSE CPPAMQP_TEST_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) +File ( GLOB_RECURSE CPPAMQP_TEST_INLINE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) +File ( GLOB_RECURSE CPPAMQP_TEST_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) + +Add_Executable ( cppamqp-test + EXCLUDE_FROM_ALL + ${CPPAMQP_TEST_HEADER_FILES} + ${CPPAMQP_TEST_INLINE_FILES} + ${CPPAMQP_TEST_SOURCE_FILES} ) +Target_Link_Libraries ( cppamqp-test + PUBLIC + cppamqp-objects + GMock::Main ) + +# pedantic +If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( cppamqp-test ALL ) +EndIf ( ) + +# optimization +If ( HAS_COTIRE ) + Cotire ( cppamqp-test ) +EndIf ( ) + +# test +If ( HAS_CMAKE_TESTS ) + Add_CMake_Test ( NAME cppamqp TARGET cppamqp-test ) +Else ( ) + Add_Test ( NAME cppamqp COMMAND cppamqp-test ) EndIf ( ) diff --git a/test/amqp.cpp b/test/cppamqp/amqp.cpp similarity index 100% rename from test/amqp.cpp rename to test/cppamqp/amqp.cpp diff --git a/test/mock.cpp b/test/cppamqp/mock.cpp similarity index 94% rename from test/mock.cpp rename to test/cppamqp/mock.cpp index d3368cc..f572ff9 100644 --- a/test/mock.cpp +++ b/test/cppamqp/mock.cpp @@ -117,4 +117,7 @@ int amqp_basic_publish(amqp_connection_state_t state, amqp_channel_t channel, am { return (amqp_mock_instance ? amqp_mock_instance->amqp_basic_publish(state, channel, exchange, routing_key, mandatory, immediate, properties, body) : 0); } amqp_basic_consume_ok_t* amqp_basic_consume(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments) - { return (amqp_mock_instance ? amqp_mock_instance->amqp_basic_consume(state, channel, queue, consumer_tag, no_local, no_ack, exclusive, arguments) : nullptr); } \ No newline at end of file + { return (amqp_mock_instance ? amqp_mock_instance->amqp_basic_consume(state, channel, queue, consumer_tag, no_local, no_ack, exclusive, arguments) : nullptr); } + +amqp_basic_qos_ok_t* amqp_basic_qos(amqp_connection_state_t state, amqp_channel_t channel, uint32_t prefetch_size, uint16_t prefetch_count, amqp_boolean_t global) + { return (amqp_mock_instance ? amqp_mock_instance->amqp_basic_qos(state, channel, prefetch_size, prefetch_count, global) : nullptr); } diff --git a/test/mock.h b/test/cppamqp/mock.h similarity index 94% rename from test/mock.h rename to test/cppamqp/mock.h index 091cb96..c4c4b99 100644 --- a/test/mock.h +++ b/test/cppamqp/mock.h @@ -34,6 +34,7 @@ public: MOCK_METHOD6(amqp_queue_bind, amqp_queue_bind_ok_t* (amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments)); MOCK_METHOD8(amqp_basic_publish, int (amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_boolean_t mandatory, amqp_boolean_t immediate, struct amqp_basic_properties_t_ const *properties, amqp_bytes_t body)); MOCK_METHOD8(amqp_basic_consume, amqp_basic_consume_ok_t* (amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments)); + MOCK_METHOD5(amqp_basic_qos, amqp_basic_qos_ok_t* (amqp_connection_state_t state, amqp_channel_t channel, uint32_t prefetch_size, uint16_t prefetch_count, amqp_boolean_t global)); static amqp_connection_state_t defaultConnectionState; static amqp_socket_t* defaultSocket; @@ -44,4 +45,4 @@ public: ~AmqpMock() { clearInstance(this); } -}; \ No newline at end of file +};